--- nono/wx/wxmainframe.cpp 2026/04/29 17:05:44 1.1.1.22 +++ nono/wx/wxmainframe.cpp 2026/04/29 17:05:48 1.1.1.23 @@ -13,6 +13,7 @@ #include "wxaccstatmonitor.h" #include "wxdipswwindow.h" #include "wxdumpmonitor.h" +#include "wxgvrammonitor.h" #include "wxlcdwindow.h" #include "wxlogmonitor.h" #include "wxlogsetting.h" @@ -20,10 +21,10 @@ #include "wxmonitor.h" #include "wxmpumonitor.h" #include "wxpalettemonitor.h" -#include "wxplanemonitor.h" #include "wxromwindow.h" #include "wxsoftkey.h" #include "wxstatuspanel.h" +#include "wxtvrammonitor.h" #include "wxuimessage.h" #include "wxversion.h" #include "config.h" @@ -41,10 +42,10 @@ #include "syncer.h" #include -// ID は 0 から (wxID_LOWEST = 5000 未満まで) 使えるっぽい。 +// ID は 1 から (wxID_LOWEST = 5000 未満まで) 使えるっぽい +// (wxGTK は 0 から使用可能だが wxOSX は 0 が不可)。 // メニュー ID のうちウィンドウのオープン状態を維持する必要があるものは -// (ID が 0 から使えるのなら) 0 から割り当てて配列で管理してしまうのが -// 手っ取り早い。 +// 0 (付近) から割り当てて 0 から始まる配列で管理してしまうのが手っ取り早い。 // ウィンドウに割り当てるウィンドウ ID とメニューイベントで飛んでくる // メニュー ID は互いに干渉しないはずなので、同じ値を使うことでメニューと // ウィンドウの紐付けをする。 @@ -517,14 +518,14 @@ WXMainFrame::WXMainFrame(wxWindow *paren AppendIf(menuDev, ID_MONITOR_VIRTIO_NET, _("VirtIO Network")); AppendIf(menuDev, ID_MONITOR_VIRTIO_SCSI, "VirtIO SCSI"); AppendIf(menuDev, ID_MONITOR_VIRTIO_ENTROPY,_("VirtIO Entropy")); - AppendIf(menuDev, ID_MONITOR_CRTC, "CRTC"); + AppendIf(menuDev, ID_MONITOR_CRTC, _("CRTC and Video Controller")); AppendIf(menuDev, ID_MONITOR_LUNAVC, _("Video Control")); AppendIf(menuDev, ID_MONITOR_BT45x, "Bt454/458"); AppendIf(menuDev, ID_SUBWIN_PALETTE, _("Palette Colormap")); - AppendIf(menuDev, ID_SUBWIN_TEXTPAL, _("Text Palette Colormap")); AppendIf(menuDev, ID_MONITOR_RENDERER, _("Renderer")); AppendIf(menuDev, ID_SUBWIN_LUNAFB, _("Bitmap Plane")); - AppendIf(menuDev, ID_SUBWIN_TVRAM, _("Text VRAM")); + AppendIf(menuDev, ID_SUBWIN_TVRAM, _("Text Screen")); + AppendIf(menuDev, ID_SUBWIN_GVRAM, _("Graphic Screen")); AppendIf(menuDev, ID_MONITOR_SSG, "SSG"); AppendIf(menuDev, ID_MONITOR_ROMCONS, _("ROM Console (provisional)")); AppendIf(menuDev, ID_SUBWIN_ROM, "ROM"); @@ -554,7 +555,7 @@ WXMainFrame::WXMainFrame(wxWindow *paren menuMonitor->AppendSubMenu(menuHost, _("&Host")); wxMenu *menuDebug = new wxMenu(); - AppendIf(menuDebug, ID_SUBWIN_LOG, _("&Log")); + AppendIf(menuDebug, ID_MONITOR_LOG, _("&Log")); AppendIf(menuDebug, ID_MONITOR_BREAKPOINT, _("&Breakpoints")); menuDebug->AppendSeparator(); AppendIf(menuDebug, ID_SUBWIN_LOGSETTING, _("Log Level &Setting")); @@ -859,6 +860,8 @@ WXMainFrame::Init() return false; } + statuspanel->Init(); + return true; } @@ -928,7 +931,7 @@ WXMainFrame::OnIdle(wxIdleEvent& ev) { // UIMessage の処理を開始する。 // 少なくとも WXMainFrame のコンストラクタが完了した後のほうがいいはず。 - UIMessage::Attach(&WXUIMessage::Process); + gMainApp.GetUIMessage()->StartUIMessage(&WXUIMessage::Process); // ウィンドウを表示 for (int i = 0; i < subwindow_start.size(); i++) { @@ -948,6 +951,8 @@ WXMainFrame::OnIdle(wxIdleEvent& ev) void WXMainFrame::OnClose(wxCloseEvent& event) { + // UIMessage を停止 + gMainApp.GetUIMessage()->StopUIMessage(); // ステータスパネルの更新を停止 statuspanel->Close(); // メインビューの描画を停止 @@ -1411,7 +1416,7 @@ WXMainFrame::OnMenuMonRate(wxCommandEven int idx = event.GetId() - ID_MONRATE_START; monitor_rate = monrates[idx]; - // アクティブなサブウィンドウのテキストパネル全員に通知 + // アクティブなサブウィンドウのモニタパネル全員に通知。 for (int i = 0; i < ID_SUBWIN_MAX; i++) { if ((bool)windows[i]) { auto *subwin = dynamic_cast(windows[i].get()); @@ -1767,7 +1772,7 @@ WXMainFrame::DoWindow(int id, bool enabl } case ID_MONITOR_CRTC: - SetMonitor(id, "CRTC"); + SetMonitor(id, _("CRTC and Video Controller")); break; case ID_MONITOR_DMAC: @@ -1822,6 +1827,12 @@ WXMainFrame::DoWindow(int id, bool enabl } catch (...) { } break; + case ID_MONITOR_LOG: + try { + windows[id].reset(new WXLogMonitor(this)); + } catch (...) { } + break; + case ID_MONITOR_LUNAVC: SetMonitor(id, _("Video Control")); break; @@ -2037,15 +2048,15 @@ WXMainFrame::DoWindow(int id, bool enabl } catch (...) { } break; - case ID_SUBWIN_LCDPANEL: + case ID_SUBWIN_GVRAM: try { - windows[id].reset(new WXLCDWindow(this)); + windows[id].reset(new WXGVRAMWindow(this, _("Graphic Screen"))); } catch (...) { } break; - case ID_SUBWIN_LOG: + case ID_SUBWIN_LCDPANEL: try { - windows[id].reset(new WXLogMonitor(this)); + windows[id].reset(new WXLCDWindow(this)); } catch (...) { } break; @@ -2063,10 +2074,10 @@ WXMainFrame::DoWindow(int id, bool enabl if (id == ID_SUBWIN_LUNAFB) { name = _("Bitmap Plane"); } else { - name = _("Text VRAM"); + name = _("Text Screen"); } try { - windows[id].reset(new WXPlaneVRAMWindow(this, name)); + windows[id].reset(new WXTVRAMWindow(this, name)); } catch (...) { } break; } @@ -2080,20 +2091,11 @@ WXMainFrame::DoWindow(int id, bool enabl break; case ID_SUBWIN_PALETTE: - case ID_SUBWIN_TEXTPAL: - { - // 呼び方が違うので名前と ID が違う - wxString name; - if (id == ID_SUBWIN_TEXTPAL) { - name = _("Text Palette Colormap"); - } else { - name = _("Palette Colormap"); - } try { - windows[id].reset(new WXPaletteWindow(this, name)); + windows[id].reset(new WXPaletteWindow(this, + _("Palette Colormap"))); } catch (...) { } break; - } case ID_SUBWIN_ROM: try {