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