|
|
1.1 root 1: //
2: // nono
1.1.1.4 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
1.1.1.12 root 7: //
8: // メインウィンドウ
9: //
10:
1.1 root 11: #pragma once
12:
1.1.1.9 root 13: #include "wxnono.h"
14: #include "monitor.h"
1.1 root 15: #include <array>
16:
1.1.1.13 root 17: class FDDDevice;
1.1.1.14 root 18: class Keyboard;
1.1.1.18! root 19: class HostCOMDevice;
! 20: class HostNetDevice;
1.1.1.14 root 21: class PowerDevice;
1.1.1.15 root 22: class SCSITarget;
1.1.1.14 root 23: class Syncer;
1.1.1.18! root 24: class WXBitmapPanel;
1.1.1.14 root 25: class WXMainView;
26: class WXStatusPanel;
1.1.1.13 root 27:
1.1.1.9 root 28: class WXMainFrame : public wxFrame
1.1 root 29: {
1.1.1.9 root 30: using inherited = wxFrame;
1.1 root 31: public:
1.1.1.16 root 32: explicit WXMainFrame(wxWindow *);
1.1.1.7 root 33: virtual ~WXMainFrame() override;
1.1 root 34:
1.1.1.11 root 35: // (設定反映などの) 初期化
36: bool Init();
37:
1.1.1.18! root 38: void Fit() override;
1.1.1.12 root 39: bool Layout() override;
40:
1.1 root 41: // ウィンドウをリストから削除する。
42: // ウィンドウをクローズする際に呼び出すこと。
1.1.1.9 root 43: void DeleteWindow(wxWindow *);
1.1 root 44:
1.1.1.9 root 45: // 起動時にオープンするサブウィンドウの一覧
46: static std::array<bool, ID_SUBWIN_MAX> subwindow_start;
1.1 root 47:
1.1.1.14 root 48: // モニタウィンドウの更新頻度取得・設定
49: static int GetMonitorRate() { return monitor_rate; }
50: static void SetMonitorRate(int val) { monitor_rate = val; }
51:
52: // メンバの取得
53: WXMainView *GetMainView() { return mainview; }
1.1.1.5 root 54:
1.1.1.18! root 55: // ホストドライバ用のメニューを作成して返す
! 56: void CreateHostNetMenu(wxMenu *, uint unit);
! 57: void CreateHostComMenu(wxMenu *, int n);
! 58:
1.1.1.13 root 59: // SCSI リムーバブルデバイス、FD 用のメニューを作成して返す
1.1.1.10 root 60: wxMenu *CreateSCSIRemovableMenu(uint id) const;
1.1.1.13 root 61: wxMenu *CreateFDMenu(int unit) const;
62:
63: // FD を挿入する
64: void InsertFD(int unit, const std::string& path);
65: // FD をイジェクトする
66: void EjectFD(int unit, bool force);
1.1.1.10 root 67:
68: // CD を挿入する
69: void InsertCD(int id, const std::string& path);
70: // CD をイジェクトする
71: void EjectCD(int id, bool force);
72:
1.1.1.18! root 73: // ウィンドウタイトルを設定。
! 74: void SetMyTitle(bool mousemode);
! 75:
1.1 root 76: private:
1.1.1.10 root 77: void OnIdle(wxIdleEvent& event);
1.1.1.3 root 78: void OnClose(wxCloseEvent& event);
1.1.1.4 root 79: void OnActivate(wxActivateEvent& event);
1.1 root 80:
1.1.1.15 root 81: void OnPowerButton(wxCommandEvent& event);
82: void OnPowerButtonUI(wxUpdateUIEvent& event);
83: void OnSoftReset(wxCommandEvent& event);
84: void OnResetButton(wxCommandEvent& event);
85: void OnNMIButton(wxCommandEvent& event);
1.1.1.8 root 86: void OnRestartVM(wxCommandEvent& event);
1.1 root 87: void OnExit(wxCommandEvent&);
88:
1.1.1.11 root 89: void OnFullSpeed(wxCommandEvent& event);
90: void OnFullSpeedUI(wxUpdateUIEvent& event);
91: void OnMenuInput(wxCommandEvent& event);
92: void OnMenuInputUI(wxUpdateUIEvent& event);
1.1.1.18! root 93: void OnMenuHostNet(wxCommandEvent& event);
! 94: void OnMenuHostNetUI(wxUpdateUIEvent& event);
! 95: void OnMenuHostCom(wxCommandEvent& event);
! 96: void OnMenuHostComUI(wxUpdateUIEvent& event);
! 97: void OnHostNetFailed(wxCommandEvent& event);
! 98: void OnHostComFailed(wxCommandEvent& event);
! 99: void HostDriverFailed(const wxString& hostdev, const wxString& errmsg);
1.1.1.11 root 100:
1.1 root 101: void OnMenuScale(wxCommandEvent& event);
102: void OnMenuScaleUI(wxUpdateUIEvent& event);
103: void OnMenuFontSize(wxCommandEvent& event);
104: void OnMenuFontSizeUI(wxUpdateUIEvent& event);
1.1.1.5 root 105: void OnMenuMonRate(wxCommandEvent& event);
106: void OnMenuMonRateUI(wxUpdateUIEvent& event);
1.1.1.8 root 107: void OnShowStatusPanel(wxCommandEvent& event);
108: void OnShowStatusPanelUI(wxUpdateUIEvent& event);
1.1 root 109:
1.1.1.13 root 110: void OnFDInsert(wxCommandEvent& event);
111: void OnFDInsertUI(wxUpdateUIEvent& event);
112: void OnFDEject(wxCommandEvent& event);
113: void OnFDEjectUI(wxUpdateUIEvent& event);
114: void OnFDForce(wxCommandEvent& event);
115: void OnFDForceUI(wxUpdateUIEvent& event);
1.1.1.10 root 116: void OnCDInsert(wxCommandEvent& event);
117: void OnCDInsertUI(wxUpdateUIEvent& event);
118: void OnCDEject(wxCommandEvent& event);
119: void OnCDEjectUI(wxUpdateUIEvent& event);
120: void OnCDForce(wxCommandEvent& event);
121: void OnCDForceUI(wxUpdateUIEvent& event);
1.1.1.2 root 122: void OnMouseMode(wxCommandEvent& event);
123: void OnMouseModeUI(wxUpdateUIEvent& event);
1.1.1.12 root 124: void OnKeyboardConnect(wxCommandEvent& event);
125: void OnKeyboardConnectUI(wxUpdateUIEvent& event);
1.1.1.2 root 126:
1.1 root 127: void OnWindow(wxCommandEvent&);
128: void DoWindow(int id, bool enable);
129: void OnWindowUI(wxUpdateUIEvent&);
130:
1.1.1.4 root 131: void OnAbout(wxCommandEvent&);
132:
1.1.1.15 root 133: // 指定のモニタ/サブウィンドウがあればメニューに追加する
134: void AppendIf(wxMenu *, int id, const wxString& label);
135:
1.1.1.14 root 136: int CreateMainviewScaleTable();
1.1.1.17 root 137: void CreateMonRateTable();
1.1.1.14 root 138:
1.1.1.10 root 139: // リムーバブルデバイス用のメニューを作成して追加する
140: void CreateRemovableMenu(wxMenu *);
141:
1.1 root 142: // ウィンドウをリストに追加する。
143: void AddWindow(int id, wxWindow *);
144:
145: // 指定 ID のサブウィンドウがリストにあれば true を返す
146: bool IsExistWindow(int id);
147:
1.1.1.18! root 148: // UI 表示用テキストを返す。
! 149: wxString GetHostNetLabel(uint n) const;
! 150: wxString GetHostComLabel(uint n) const;
! 151:
1.1.1.16 root 152: // メイン MPU 名を返す
153: wxString MPUName() const { return mpuname; }
1.1.1.14 root 154:
1.1 root 155: // サブウィンドウリスト
1.1.1.9 root 156: std::unique_ptr<wxWindow> windows[ID_SUBWIN_MAX] {};
1.1.1.4 root 157:
1.1.1.10 root 158: // メニュー操作用の SCSI デバイス
159: // (ホストアダプタが増えた時のことは考えていない)
160: std::array<SCSITarget *, 8> scsidev {};
161:
1.1.1.13 root 162: // メニュー操作用の FDD デバイス
163: // (6台構成のことは考えていない)
164: std::array<FDDDevice *, 4> fdd_array {};
165:
1.1.1.16 root 166: // ウィンドウタイトル
167: wxString frame_title {};
168:
1.1.1.10 root 169: // ファイルダイアログを表示する際のカレントディレクトリ
170: std::string current_dir {};
171:
1.1.1.16 root 172: // MPU 名
173: std::string mpuname {};
174:
1.1.1.4 root 175: // ダブルバスフォールト・イベント
176: void OnHaltNotify(wxCommandEvent& event);
1.1.1.10 root 177: // メディア挿入失敗通知
1.1.1.13 root 178: void OnInsertFailed(wxCommandEvent& event);
1.1 root 179:
1.1.1.14 root 180: WXMainView *mainview {};
181: WXStatusPanel *statuspanel {};
1.1.1.18! root 182: WXBitmapPanel *spaceL {};
! 183: WXBitmapPanel *spaceR {};
1.1.1.14 root 184:
185: Keyboard *keyboard {};
1.1.1.18! root 186: std::array<HostNetDevice *, 2> hostnet {};
! 187: std::array<HostCOMDevice *, 3> hostcom {};
! 188: HostCOMDevice *hostcom_dbg {};
1.1.1.14 root 189: PowerDevice *power {};
190: Syncer *syncer {};
191:
192: // 表示スケールの選択肢
193: static std::vector<double> view_scales;
194:
195: // モニタの更新頻度(これが実行中の一次情報)
196: static int monitor_rate;
197: // モニタ更新頻度の選択肢
198: static std::vector<int> monrates;
199:
1.1 root 200: wxDECLARE_EVENT_TABLE();
201: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.