--- nono/wx/wxmainframe.h 2026/04/29 17:05:12 1.1.1.13 +++ nono/wx/wxmainframe.h 2026/04/29 17:05:53 1.1.1.20 @@ -12,21 +12,31 @@ #include "wxnono.h" #include "monitor.h" -#include "vm.h" #include class FDDDevice; +class Keyboard; +class HostCOMDevice; +class HostNetDevice; +class HostSoundDevice; +class PowerDevice; +class SCSITarget; +class Syncer; +class WXBitmapPanel; +class WXMainView; +class WXStatusPanel; class WXMainFrame : public wxFrame { using inherited = wxFrame; public: - WXMainFrame(wxWindow *); - virtual ~WXMainFrame() override; + explicit WXMainFrame(wxWindow *); + ~WXMainFrame() override; // (設定反映などの) 初期化 bool Init(); + void Fit() override; bool Layout() override; // ウィンドウをリストから削除する。 @@ -36,8 +46,17 @@ class WXMainFrame : public wxFrame // 起動時にオープンするサブウィンドウの一覧 static std::array subwindow_start; - // モニタウィンドウの更新頻度取得 - int GetMonitorRate() const { return monitor_rate; } + // モニタウィンドウの更新頻度取得・設定 + static int GetMonitorRate() { return monitor_rate; } + static void SetMonitorRate(int val) { monitor_rate = val; } + + // メンバの取得 + WXMainView *GetMainView() { return mainview; } + + // ホストドライバ用のメニューを作成して返す + void CreateHostNetMenu(wxMenu *, uint unit); + void CreateHostComMenu(wxMenu *, int n); + void CreateHostSoundMenu(wxMenu *); // SCSI リムーバブルデバイス、FD 用のメニューを作成して返す wxMenu *CreateSCSIRemovableMenu(uint id) const; @@ -53,11 +72,19 @@ class WXMainFrame : public wxFrame // CD をイジェクトする void EjectCD(int id, bool force); + // ウィンドウタイトルを設定。 + void SetMyTitle(bool mousemode); + private: void OnIdle(wxIdleEvent& event); void OnClose(wxCloseEvent& event); void OnActivate(wxActivateEvent& event); + void OnPowerButton(wxCommandEvent& event); + void OnPowerButtonUI(wxUpdateUIEvent& event); + void OnSoftReset(wxCommandEvent& event); + void OnResetButton(wxCommandEvent& event); + void OnNMIButton(wxCommandEvent& event); void OnRestartVM(wxCommandEvent& event); void OnExit(wxCommandEvent&); @@ -65,6 +92,16 @@ class WXMainFrame : public wxFrame void OnFullSpeedUI(wxUpdateUIEvent& event); void OnMenuInput(wxCommandEvent& event); void OnMenuInputUI(wxUpdateUIEvent& event); + void OnMenuHostNet(wxCommandEvent& event); + void OnMenuHostNetUI(wxUpdateUIEvent& event); + void OnMenuHostCom(wxCommandEvent& event); + void OnMenuHostComUI(wxUpdateUIEvent& event); + void OnMenuHostSound(wxCommandEvent& event); + void OnMenuHostSoundUI(wxUpdateUIEvent& event); + void OnHostNetFailed(wxCommandEvent& event); + void OnHostComFailed(wxCommandEvent& event); + void OnHostSoundFailed(wxCommandEvent& event); + void HostDriverFailed(const wxString& hostdev, const wxString& errmsg); void OnMenuScale(wxCommandEvent& event); void OnMenuScaleUI(wxUpdateUIEvent& event); @@ -89,10 +126,6 @@ class WXMainFrame : public wxFrame void OnCDForceUI(wxUpdateUIEvent& event); void OnMouseMode(wxCommandEvent& event); void OnMouseModeUI(wxUpdateUIEvent& event); - void OnPowerButton(wxCommandEvent& event); - void OnPowerButtonUI(wxUpdateUIEvent& event); - void OnResetButton(wxCommandEvent& event); - void OnNMIButton(wxCommandEvent& event); void OnKeyboardConnect(wxCommandEvent& event); void OnKeyboardConnectUI(wxUpdateUIEvent& event); @@ -102,6 +135,12 @@ class WXMainFrame : public wxFrame void OnAbout(wxCommandEvent&); + // 指定のモニタ/サブウィンドウがあればメニューに追加する + void AppendIf(wxMenu *, int id, const wxString& label); + + int CreateMainviewScaleTable(); + void CreateMonRateTable(); + // リムーバブルデバイス用のメニューを作成して追加する void CreateRemovableMenu(wxMenu *); @@ -111,14 +150,16 @@ class WXMainFrame : public wxFrame // 指定 ID のサブウィンドウがリストにあれば true を返す bool IsExistWindow(int id); + // UI 表示用テキストを返す。 + wxString GetHostNetLabel(uint n) const; + wxString GetHostComLabel(uint n) const; + + // メイン MPU 名を返す + wxString MPUName() const { return mpuname; } + // サブウィンドウリスト std::unique_ptr windows[ID_SUBWIN_MAX] {}; - // モニタの更新頻度(これが実行中の一次情報) - int monitor_rate {}; - // モニタ更新頻度 ID -> 数値変換 - static const int IDtoMonRate[]; - // メニュー操作用の SCSI デバイス // (ホストアダプタが増えた時のことは考えていない) std::array scsidev {}; @@ -127,15 +168,40 @@ class WXMainFrame : public wxFrame // (6台構成のことは考えていない) std::array fdd_array {}; + // ウィンドウタイトル + wxString frame_title {}; + // ファイルダイアログを表示する際のカレントディレクトリ std::string current_dir {}; + // MPU 名 + std::string mpuname {}; + // ダブルバスフォールト・イベント void OnHaltNotify(wxCommandEvent& event); // メディア挿入失敗通知 void OnInsertFailed(wxCommandEvent& event); + WXMainView *mainview {}; + WXStatusPanel *statuspanel {}; + WXBitmapPanel *spaceL {}; + WXBitmapPanel *spaceR {}; + + Keyboard *keyboard {}; + std::array hostnet {}; + std::array hostcom {}; + HostCOMDevice *hostcom_dbg {}; + HostSoundDevice *hostsound {}; + PowerDevice *power {}; + Syncer *syncer {}; + + // 表示スケールの選択肢 + static std::vector view_scales; + + // モニタの更新頻度(これが実行中の一次情報) + static int monitor_rate; + // モニタ更新頻度の選択肢 + static std::vector monrates; + wxDECLARE_EVENT_TABLE(); }; - -extern WXMainFrame *gMainFrame;