|
|
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 root 81:
1.1.1.15 root 82: void OnPowerButton(wxCommandEvent& event);
83: void OnPowerButtonUI(wxUpdateUIEvent& event);
84: void OnSoftReset(wxCommandEvent& event);
85: void OnResetButton(wxCommandEvent& event);
86: void OnNMIButton(wxCommandEvent& event);
1.1.1.8 root 87: void OnRestartVM(wxCommandEvent& event);
1.1 root 88: void OnExit(wxCommandEvent&);
89:
1.1.1.11 root 90: void OnFullSpeed(wxCommandEvent& event);
91: void OnFullSpeedUI(wxUpdateUIEvent& event);
92: void OnMenuInput(wxCommandEvent& event);
93: void OnMenuInputUI(wxUpdateUIEvent& event);
1.1.1.18 root 94: void OnMenuHostNet(wxCommandEvent& event);
95: void OnMenuHostNetUI(wxUpdateUIEvent& event);
96: void OnMenuHostCom(wxCommandEvent& event);
97: void OnMenuHostComUI(wxUpdateUIEvent& event);
1.1.1.20 root 98: void OnMenuHostSound(wxCommandEvent& event);
99: void OnMenuHostSoundUI(wxUpdateUIEvent& event);
1.1.1.18 root 100: void OnHostNetFailed(wxCommandEvent& event);
101: void OnHostComFailed(wxCommandEvent& event);
1.1.1.20 root 102: void OnHostSoundFailed(wxCommandEvent& event);
1.1.1.18 root 103: void HostDriverFailed(const wxString& hostdev, const wxString& errmsg);
1.1.1.11 root 104:
1.1 root 105: void OnMenuScale(wxCommandEvent& event);
106: void OnMenuScaleUI(wxUpdateUIEvent& event);
107: void OnMenuFontSize(wxCommandEvent& event);
108: void OnMenuFontSizeUI(wxUpdateUIEvent& event);
1.1.1.5 root 109: void OnMenuMonRate(wxCommandEvent& event);
110: void OnMenuMonRateUI(wxUpdateUIEvent& event);
1.1.1.8 root 111: void OnShowStatusPanel(wxCommandEvent& event);
112: void OnShowStatusPanelUI(wxUpdateUIEvent& event);
1.1 root 113:
1.1.1.13 root 114: void OnFDInsert(wxCommandEvent& event);
115: void OnFDInsertUI(wxUpdateUIEvent& event);
116: void OnFDEject(wxCommandEvent& event);
117: void OnFDEjectUI(wxUpdateUIEvent& event);
118: void OnFDForce(wxCommandEvent& event);
119: void OnFDForceUI(wxUpdateUIEvent& event);
1.1.1.10 root 120: void OnCDInsert(wxCommandEvent& event);
121: void OnCDInsertUI(wxUpdateUIEvent& event);
122: void OnCDEject(wxCommandEvent& event);
123: void OnCDEjectUI(wxUpdateUIEvent& event);
124: void OnCDForce(wxCommandEvent& event);
125: void OnCDForceUI(wxUpdateUIEvent& event);
1.1.1.2 root 126: void OnMouseMode(wxCommandEvent& event);
127: void OnMouseModeUI(wxUpdateUIEvent& event);
1.1.1.12 root 128: void OnKeyboardConnect(wxCommandEvent& event);
129: void OnKeyboardConnectUI(wxUpdateUIEvent& event);
1.1.1.2 root 130:
1.1 root 131: void OnWindow(wxCommandEvent&);
132: void DoWindow(int id, bool enable);
133: void OnWindowUI(wxUpdateUIEvent&);
134:
1.1.1.4 root 135: void OnAbout(wxCommandEvent&);
136:
1.1.1.15 root 137: // 指定のモニタ/サブウィンドウがあればメニューに追加する
138: void AppendIf(wxMenu *, int id, const wxString& label);
139:
1.1.1.14 root 140: int CreateMainviewScaleTable();
1.1.1.17 root 141: void CreateMonRateTable();
1.1.1.14 root 142:
1.1.1.10 root 143: // リムーバブルデバイス用のメニューを作成して追加する
144: void CreateRemovableMenu(wxMenu *);
145:
1.1 root 146: // ウィンドウをリストに追加する。
147: void AddWindow(int id, wxWindow *);
148:
149: // 指定 ID のサブウィンドウがリストにあれば true を返す
150: bool IsExistWindow(int id);
151:
1.1.1.18 root 152: // UI 表示用テキストを返す。
153: wxString GetHostNetLabel(uint n) const;
154: wxString GetHostComLabel(uint n) const;
155:
1.1.1.16 root 156: // メイン MPU 名を返す
157: wxString MPUName() const { return mpuname; }
1.1.1.14 root 158:
1.1 root 159: // サブウィンドウリスト
1.1.1.9 root 160: std::unique_ptr<wxWindow> windows[ID_SUBWIN_MAX] {};
1.1.1.4 root 161:
1.1.1.10 root 162: // メニュー操作用の SCSI デバイス
163: // (ホストアダプタが増えた時のことは考えていない)
164: std::array<SCSITarget *, 8> scsidev {};
165:
1.1.1.13 root 166: // メニュー操作用の FDD デバイス
167: // (6台構成のことは考えていない)
168: std::array<FDDDevice *, 4> fdd_array {};
169:
1.1.1.16 root 170: // ウィンドウタイトル
171: wxString frame_title {};
172:
1.1.1.10 root 173: // ファイルダイアログを表示する際のカレントディレクトリ
174: std::string current_dir {};
175:
1.1.1.16 root 176: // MPU 名
177: std::string mpuname {};
178:
1.1.1.4 root 179: // ダブルバスフォールト・イベント
180: void OnHaltNotify(wxCommandEvent& event);
1.1.1.10 root 181: // メディア挿入失敗通知
1.1.1.13 root 182: void OnInsertFailed(wxCommandEvent& event);
1.1 root 183:
1.1.1.14 root 184: WXMainView *mainview {};
185: WXStatusPanel *statuspanel {};
1.1.1.18 root 186: WXBitmapPanel *spaceL {};
187: WXBitmapPanel *spaceR {};
1.1.1.14 root 188:
189: Keyboard *keyboard {};
1.1.1.18 root 190: std::array<HostNetDevice *, 2> hostnet {};
191: std::array<HostCOMDevice *, 3> hostcom {};
192: HostCOMDevice *hostcom_dbg {};
1.1.1.20 root 193: HostSoundDevice *hostsound {};
1.1.1.14 root 194: PowerDevice *power {};
195: Syncer *syncer {};
196:
197: // 表示スケールの選択肢
198: static std::vector<double> view_scales;
199:
200: // モニタの更新頻度(これが実行中の一次情報)
201: static int monitor_rate;
202: // モニタ更新頻度の選択肢
203: static std::vector<int> monrates;
204:
1.1 root 205: wxDECLARE_EVENT_TABLE();
206: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.