--- nono/lib/monitor.cpp 2026/04/29 17:04:54 1.1 +++ nono/lib/monitor.cpp 2026/04/29 17:05:26 1.1.1.5 @@ -4,11 +4,13 @@ // Licensed under nono-license.txt // +// +// モニタ管理 +// + #include "monitor.h" #include -MonitorManager gMonitorManager; - // // モニター // @@ -32,21 +34,40 @@ Monitor::~Monitor() // このモニタを登録する void -Monitor::Regist(int id_) +Monitor::Regist(uint id_) { assert(obj); - assert(func); - assert(0 <= id_ && id_ < ID_SUBWIN_MAX); + assert(id_ < ID_SUBWIN_MAX); + + // ポカ避けのため assert を入れたいが Bt45x は後から関数を決める方式 + //assert(func); id = id_; - gMonitorManager.Regist(this); + assert(gMonitorManager); + gMonitorManager->Regist(this); } // このモニタが登録されていれば削除する void Monitor::Unregist() { - gMonitorManager.Unregist(this); + assert(gMonitorManager); + gMonitorManager->Unregist(this); +} + +// ID を表示用文字列にして返す +/*static*/ const char * +Monitor::GetIdText(uint target_id) +{ + for (const auto& p : idtext) { + uint id = p.first; + const char *text = p.second; + + if (id == target_id) { + return text; + } + } + return "unknownID?"; } @@ -54,15 +75,28 @@ Monitor::Unregist() // モニターマネージャ // +// グローバル参照用 +MonitorManager *gMonitorManager; + +// コンストラクタ +MonitorManager::MonitorManager() +{ +} + +// デストラクタ +MonitorManager::~MonitorManager() +{ + gMonitorManager = NULL; +} + // 登録 void MonitorManager::Regist(Monitor *mon) { assert(fixed == false); - int id = mon->GetId(); // 二重登録防止 - assert(Find(id) == NULL); + assert(Find(mon->GetId()) == NULL); // 登録 list.emplace_back(mon); @@ -106,19 +140,29 @@ MonitorManager::Fix() assert(fixed == false); fixed = true; + + // デバッグ用。 + if (0) { + uint i = 0; + for (const auto& m : list) { + auto sz = m->GetSize(); + printf("[%2u] %s\t%d,%d\n", i++, m->GetIdText(), + sz.width, sz.height); + } + } } // id リストから一覧表示用の文字列を生成して返す /*static*/ std::string -MonitorManager::MakeListString(std::vector list) +MonitorManager::MakeListString(std::vector list) { std::string str; // id をモニター情報内の1つ目の名前順にソートする std::sort(list.begin(), list.end(), [](const auto& a_id, const auto& b_id) { - const auto& a_alias = gMonitorManager.GetAliases(a_id); - const auto& b_alias = gMonitorManager.GetAliases(b_id); + const auto& a_alias = gMonitorManager->GetAliases(a_id); + const auto& b_alias = gMonitorManager->GetAliases(b_id); const std::string a_name = a_alias[0]; const std::string b_name = b_alias[0]; @@ -127,7 +171,7 @@ MonitorManager::MakeListString(std::vect ); for (const auto id : list) { - const auto& aliases = gMonitorManager.GetAliases(id); + const auto& aliases = gMonitorManager->GetAliases(id); assert(aliases.empty() == false); str += ' ';