--- nono/wx/wxmainframe.h 2026/04/29 17:04:53 1.1.1.8 +++ nono/wx/wxmainframe.h 2026/04/29 17:04:56 1.1.1.9 @@ -6,63 +6,44 @@ #pragma once -#include "wxheader.h" -#include "wxfitframe.h" +#include "wxnono.h" +#include "monitor.h" #include "vm.h" #include enum { // ID は 0 から (wxID_LOWEST = 5000 未満まで) 使えるっぽい。 // メニュー ID はメニュー ID 内で一意という制約があるだけ。 - // メニュー ID のうちウィンドウのオープン状態を維持する必要がある - // ものはリスト(なり配列なり)で管理したいが、ID が 0 から使えるのなら - // 0 から割り当てて配列で管理してしまうのが手っ取り早い。 + // メニュー ID のうちウィンドウのオープン状態を維持する必要があるものは + // (ID が 0 から使えるのなら) 0 から割り当てて配列で管理してしまうのが + // 手っ取り早い。 // ウィンドウに割り当てるウィンドウ ID とメニューイベントで飛んでくる - // メニュー ID は互いに干渉しないはずなので、同じ値を使ってメニューと + // メニュー ID は互いに干渉しないはずなので、同じ値を使うことでメニューと // ウィンドウの紐付けをする。 + // + // ウィンドウ(サブウィンドウ)は細かくは以下のように4つに分類できるが、 + // 処理上区別が必要なのは A. (デバッガの show コマンドとも共用できる + // サブウィンドウ) とそれ以外のサブウィンドウだけ。 + // + // -----------+------------+---- + // モニター | テキスト | A. 単純なテキストモニタウィンドウ + // ウィンドウ | モニター | (SPC, MFP などのデバイスのモニター) + // | ウィンドウ +---- + // | | B. それ以外のテキストモニターウィンドウ + // | | (ログ、メモリのように表示位置があるもの、 + // | | CMMU のように構造があるもの) + // +------------+---- + // | それ以外の | C. ビデオモニターウィンドウなど + // | モニター | (ビットマッププレーン、TVRAM など) + // | ウィンドウ | + // -----------+------------+---- + // それ以外のウィンドウ | D. ソフトウェアキーボードウィンドウなど + // ------------------------+---- - // ウィンドウ ID (メニュー ID としても使う) - // wxmainframe.cpp 末尾の monitor_info[] と一致させること - WinID_Start = 0, - WinID_MONITOR_LOG = WinID_Start, - WinID_MONITOR_SCHEDULER, - WinID_MONITOR_MPUREG, - WinID_MONITOR_MPUATC, - WinID_MONITOR_BPOINT, - WinID_MONITOR_BRHIST68K, - WinID_MONITOR_BRHIST88K, - WinID_MONITOR_EXHIST68K, - WinID_MONITOR_EXHIST88K, - WinID_MONITOR_CMMU7, - WinID_MONITOR_CMMU6, - WinID_MONITOR_ATC7, - WinID_MONITOR_ATC6, - WinID_MONITOR_CACHE7, - WinID_MONITOR_CACHE6, - WinID_MONITOR_MEMDUMP, - WinID_MONITOR_INTERRUPT, - WinID_MONITOR_SPC, - WinID_MONITOR_RTC, - WinID_MONITOR_DMAC, - WinID_MONITOR_MFP, - WinID_MONITOR_SCC, - WinID_MONITOR_SIO, - WinID_MONITOR_PIO0, - WinID_MONITOR_LUNAKEYBOARD, - WinID_MONITOR_LCD, - WinID_MONITOR_LANCE, - WinID_MONITOR_BITMAP, - WinID_MONITOR_BITMAP0, - WinID_MONITOR_HOSTINFO, - WinID_MONITOR_NETDRIVER, - WinID_SOFTKEY, - WinID_LCD, + ID_SUBWIN_END_DUMMY = ID_SUBWIN_END, - // ウィンドウ ID ここまで。 - WinID_MAX, - - // ここからそれ以外の ID - ID_FULL_SPEED = WinID_MAX, + // ここから (ウィンドウでない)メニュー ID + ID_FULL_SPEED, ID_RESTART_VM, ID_SCALE_START, ID_SCALE_1_00, @@ -86,25 +67,16 @@ enum { ID_RESET_BUTTON, }; -class WXMainFrame - : public WXFitFrame +class WXMainFrame : public wxFrame { - using inherited = WXFitFrame; - - public: - // モニタウィンドウ識別名情報 - struct monitor_info { - const char * const name; // モニタ名 - vmf_t feature; // 機種 - }; - + using inherited = wxFrame; public: WXMainFrame(wxWindow *); virtual ~WXMainFrame() override; // ウィンドウをリストから削除する。 // ウィンドウをクローズする際に呼び出すこと。 - void DeleteWindow(wxWindowID id); + void DeleteWindow(wxWindow *); // VM からの電源オフコールバック void PowerOffCallback(); @@ -112,18 +84,14 @@ class WXMainFrame // VM からのダブルバスフォールト・コールバック void HaltCallback(); - // モニタウィンドウ識別名一覧 - // (引数 -M で指定されるやつ) - static struct monitor_info monitor_info[WinID_MAX]; - - // 起動時にオープンするモニタウィンドウの一覧 - static std::array monitor_start; + // 起動時にオープンするサブウィンドウの一覧 + static std::array subwindow_start; // モニタウィンドウの更新頻度取得 int GetMonitorRate() const { return monitor_rate; } private: - void OnCreate(wxCommandEvent& event); + void OnPaint(wxPaintEvent& event); void OnClose(wxCloseEvent& event); void OnActivate(wxActivateEvent& event); @@ -159,7 +127,7 @@ class WXMainFrame bool IsExistWindow(int id); // サブウィンドウリスト - std::unique_ptr windows[WinID_MAX] {}; + std::unique_ptr windows[ID_SUBWIN_MAX] {}; // モニタの更新頻度(これが実行中の一次情報) int monitor_rate {};