--- nono/wx/wxmainframe.h 2026/04/29 17:04:56 1.1.1.9 +++ nono/wx/wxmainframe.h 2026/04/29 17:05:04 1.1.1.11 @@ -43,8 +43,14 @@ enum { ID_SUBWIN_END_DUMMY = ID_SUBWIN_END, // ここから (ウィンドウでない)メニュー ID - ID_FULL_SPEED, ID_RESTART_VM, + ID_FULL_SPEED, + + ID_INPUT_START, + ID_INPUT_CHAR, + ID_INPUT_JP, + ID_INPUT_END, + ID_SCALE_START, ID_SCALE_1_00, ID_SCALE_0_75, @@ -63,9 +69,39 @@ enum { ID_MONRATE_END, ID_SHOW_STATPANEL, + + // CD/MO (リムーバブルデバイス) + ID_CD_INSERT_0, + ID_CD_INSERT_1, + ID_CD_INSERT_2, + ID_CD_INSERT_3, + ID_CD_INSERT_4, + ID_CD_INSERT_5, + ID_CD_INSERT_6, + ID_CD_INSERT_7, + ID_CD_EJECT_0, + ID_CD_EJECT_1, + ID_CD_EJECT_2, + ID_CD_EJECT_3, + ID_CD_EJECT_4, + ID_CD_EJECT_5, + ID_CD_EJECT_6, + ID_CD_EJECT_7, + ID_CD_FORCE_0, + ID_CD_FORCE_1, + ID_CD_FORCE_2, + ID_CD_FORCE_3, + ID_CD_FORCE_4, + ID_CD_FORCE_5, + ID_CD_FORCE_6, + ID_CD_FORCE_7, + ID_MOUSEMODE, ID_RESET_BUTTON, }; +#define ID_CD_INSERT(id) (ID_CD_INSERT_0 + (id)) +#define ID_CD_EJECT(id) (ID_CD_EJECT_0 + (id)) +#define ID_CD_FORCE(id) (ID_CD_FORCE_0 + (id)) class WXMainFrame : public wxFrame { @@ -74,33 +110,40 @@ class WXMainFrame : public wxFrame WXMainFrame(wxWindow *); virtual ~WXMainFrame() override; + // (設定反映などの) 初期化 + bool Init(); + // ウィンドウをリストから削除する。 // ウィンドウをクローズする際に呼び出すこと。 void DeleteWindow(wxWindow *); - // VM からの電源オフコールバック - void PowerOffCallback(); - - // VM からのダブルバスフォールト・コールバック - void HaltCallback(); - // 起動時にオープンするサブウィンドウの一覧 static std::array subwindow_start; // モニタウィンドウの更新頻度取得 int GetMonitorRate() const { return monitor_rate; } + // SCSI リムーバブルデバイス用のメニューを作成して返す + wxMenu *CreateSCSIRemovableMenu(uint id) const; + + // CD を挿入する + void InsertCD(int id, const std::string& path); + // CD をイジェクトする + void EjectCD(int id, bool force); + private: - void OnPaint(wxPaintEvent& event); + void OnIdle(wxIdleEvent& event); void OnClose(wxCloseEvent& event); void OnActivate(wxActivateEvent& event); - void OnFullSpeed(wxCommandEvent& event); - void OnFullSpeedUI(wxUpdateUIEvent& event); void OnRestartVM(wxCommandEvent& event); - void OnExit(wxCommandEvent&); + void OnFullSpeed(wxCommandEvent& event); + void OnFullSpeedUI(wxUpdateUIEvent& event); + void OnMenuInput(wxCommandEvent& event); + void OnMenuInputUI(wxUpdateUIEvent& event); + void OnMenuScale(wxCommandEvent& event); void OnMenuScaleUI(wxUpdateUIEvent& event); void OnMenuFontSize(wxCommandEvent& event); @@ -110,6 +153,12 @@ class WXMainFrame : public wxFrame void OnShowStatusPanel(wxCommandEvent& event); void OnShowStatusPanelUI(wxUpdateUIEvent& event); + void OnCDInsert(wxCommandEvent& event); + void OnCDInsertUI(wxUpdateUIEvent& event); + void OnCDEject(wxCommandEvent& event); + void OnCDEjectUI(wxUpdateUIEvent& event); + void OnCDForce(wxCommandEvent& event); + void OnCDForceUI(wxUpdateUIEvent& event); void OnMouseMode(wxCommandEvent& event); void OnMouseModeUI(wxUpdateUIEvent& event); void OnResetButton(wxCommandEvent& event); @@ -120,6 +169,9 @@ class WXMainFrame : public wxFrame void OnAbout(wxCommandEvent&); + // リムーバブルデバイス用のメニューを作成して追加する + void CreateRemovableMenu(wxMenu *); + // ウィンドウをリストに追加する。 void AddWindow(int id, wxWindow *); @@ -134,14 +186,19 @@ class WXMainFrame : public wxFrame // モニタ更新頻度 ID -> 数値変換 static const int IDtoMonRate[]; + // メニュー操作用の SCSI デバイス + // (ホストアダプタが増えた時のことは考えていない) + std::array scsidev {}; + + // ファイルダイアログを表示する際のカレントディレクトリ + std::string current_dir {}; + // ダブルバスフォールト・イベント void OnHaltNotify(wxCommandEvent& event); + // メディア挿入失敗通知 + void OnInsertCDFailed(wxCommandEvent& event); wxDECLARE_EVENT_TABLE(); }; extern WXMainFrame *gMainFrame; - -// コールバック関数 -extern void wxmainframe_poweroff_callback(); -extern void wxmainframe_halt_callback(void *);