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