--- nono/lib/monitor.cpp 2026/04/29 17:05:52 1.1.1.7 +++ nono/lib/monitor.cpp 2026/04/29 17:05:56 1.1.1.8 @@ -66,11 +66,27 @@ MonitorManager::~MonitorManager() gMonitorManager = NULL; } -// 登録(というか初期化というか確保というか)。 +// モニタを登録。 +Monitor * +MonitorManager::Regist(uint id_, Object *parent_) +{ + return RegistCommon(id_, parent_, NULL); +} + +// 呼び出し側で作成したモニタを登録。 +Monitor * +MonitorManager::Regist(Monitor *monitor_) +{ + return RegistCommon(monitor_->GetId(), monitor_->obj, monitor_); +} + +// id_, parent_ のモニタを登録。 +// monitor_ は通常 NULL を指定しておけばこちらで標準モニタを作成する。 +// 呼び出し元で派生クラスなどを生成していればそれを指定。 // 成功すればモニターを返す。通常失敗しない。 // 失敗すればいずれのケースも assert で終了する。 Monitor * -MonitorManager::Regist(uint id_, Object *parent_) +MonitorManager::RegistCommon(uint id_, Object *parent_, Monitor *monitor_) { assert(id_ < ID_SUBWIN_MAX); @@ -81,9 +97,13 @@ MonitorManager::Regist(uint id_, Object assertmsg((bool)monitors[id_] == false, "%s already registered", Monitor::GetIdText(id_)); - // 生成。 - monitors[id_].reset(new Monitor(id_, parent_)); - assertmsg((bool)monitors[id_], "cannot create new monitor"); + // 登録、もしくはここで生成。 + if (monitor_) { + monitors[id_].reset(monitor_); + } else { + monitors[id_].reset(new Monitor(id_, parent_)); + assertmsg((bool)monitors[id_], "cannot create new monitor"); + } // 名前が衝突していないことを確認。 // どのケースの衝突も検出できるよう、追加後に全部列挙して..