|
|
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:
7: #pragma once
8:
1.1.1.9 root 9: #include "wxnono.h"
10: #include "monitor.h"
1.1.1.4 root 11: #include "vm.h"
1.1 root 12: #include <array>
13:
14: enum {
15: // ID は 0 から (wxID_LOWEST = 5000 未満まで) 使えるっぽい。
16: // メニュー ID はメニュー ID 内で一意という制約があるだけ。
1.1.1.9 root 17: // メニュー ID のうちウィンドウのオープン状態を維持する必要があるものは
18: // (ID が 0 から使えるのなら) 0 から割り当てて配列で管理してしまうのが
19: // 手っ取り早い。
1.1 root 20: // ウィンドウに割り当てるウィンドウ ID とメニューイベントで飛んでくる
1.1.1.9 root 21: // メニュー ID は互いに干渉しないはずなので、同じ値を使うことでメニューと
1.1 root 22: // ウィンドウの紐付けをする。
1.1.1.9 root 23: //
24: // ウィンドウ(サブウィンドウ)は細かくは以下のように4つに分類できるが、
25: // 処理上区別が必要なのは A. (デバッガの show コマンドとも共用できる
26: // サブウィンドウ) とそれ以外のサブウィンドウだけ。
27: //
28: // -----------+------------+----
29: // モニター | テキスト | A. 単純なテキストモニタウィンドウ
30: // ウィンドウ | モニター | (SPC, MFP などのデバイスのモニター)
31: // | ウィンドウ +----
32: // | | B. それ以外のテキストモニターウィンドウ
33: // | | (ログ、メモリのように表示位置があるもの、
34: // | | CMMU のように構造があるもの)
35: // +------------+----
36: // | それ以外の | C. ビデオモニターウィンドウなど
37: // | モニター | (ビットマッププレーン、TVRAM など)
38: // | ウィンドウ |
39: // -----------+------------+----
40: // それ以外のウィンドウ | D. ソフトウェアキーボードウィンドウなど
41: // ------------------------+----
1.1 root 42:
1.1.1.9 root 43: ID_SUBWIN_END_DUMMY = ID_SUBWIN_END,
1.1 root 44:
1.1.1.9 root 45: // ここから (ウィンドウでない)メニュー ID
1.1.1.8 root 46: ID_RESTART_VM,
1.1.1.11! root 47: ID_FULL_SPEED,
! 48:
! 49: ID_INPUT_START,
! 50: ID_INPUT_CHAR,
! 51: ID_INPUT_JP,
! 52: ID_INPUT_END,
! 53:
1.1 root 54: ID_SCALE_START,
55: ID_SCALE_1_00,
56: ID_SCALE_0_75,
57: ID_SCALE_0_50,
58: ID_SCALE_END,
59:
60: ID_FONTSIZE_START, // START 以降は fontsize_t と同じ順に並べること
61: ID_FONTSIZE_12,
62: ID_FONTSIZE_16,
63: ID_FONTSIZE_END,
1.1.1.2 root 64:
1.1.1.5 root 65: ID_MONRATE_START,
66: ID_MONRATE_20,
67: ID_MONRATE_5,
68: ID_MONRATE_1,
69: ID_MONRATE_END,
70:
1.1.1.8 root 71: ID_SHOW_STATPANEL,
1.1.1.10 root 72:
73: // CD/MO (リムーバブルデバイス)
74: ID_CD_INSERT_0,
75: ID_CD_INSERT_1,
76: ID_CD_INSERT_2,
77: ID_CD_INSERT_3,
78: ID_CD_INSERT_4,
79: ID_CD_INSERT_5,
80: ID_CD_INSERT_6,
81: ID_CD_INSERT_7,
82: ID_CD_EJECT_0,
83: ID_CD_EJECT_1,
84: ID_CD_EJECT_2,
85: ID_CD_EJECT_3,
86: ID_CD_EJECT_4,
87: ID_CD_EJECT_5,
88: ID_CD_EJECT_6,
89: ID_CD_EJECT_7,
90: ID_CD_FORCE_0,
91: ID_CD_FORCE_1,
92: ID_CD_FORCE_2,
93: ID_CD_FORCE_3,
94: ID_CD_FORCE_4,
95: ID_CD_FORCE_5,
96: ID_CD_FORCE_6,
97: ID_CD_FORCE_7,
98:
1.1.1.2 root 99: ID_MOUSEMODE,
1.1.1.8 root 100: ID_RESET_BUTTON,
1.1 root 101: };
1.1.1.10 root 102: #define ID_CD_INSERT(id) (ID_CD_INSERT_0 + (id))
103: #define ID_CD_EJECT(id) (ID_CD_EJECT_0 + (id))
104: #define ID_CD_FORCE(id) (ID_CD_FORCE_0 + (id))
1.1 root 105:
1.1.1.9 root 106: class WXMainFrame : public wxFrame
1.1 root 107: {
1.1.1.9 root 108: using inherited = wxFrame;
1.1 root 109: public:
110: WXMainFrame(wxWindow *);
1.1.1.7 root 111: virtual ~WXMainFrame() override;
1.1 root 112:
1.1.1.11! root 113: // (設定反映などの) 初期化
! 114: bool Init();
! 115:
1.1 root 116: // ウィンドウをリストから削除する。
117: // ウィンドウをクローズする際に呼び出すこと。
1.1.1.9 root 118: void DeleteWindow(wxWindow *);
1.1 root 119:
1.1.1.9 root 120: // 起動時にオープンするサブウィンドウの一覧
121: static std::array<bool, ID_SUBWIN_MAX> subwindow_start;
1.1 root 122:
1.1.1.5 root 123: // モニタウィンドウの更新頻度取得
124: int GetMonitorRate() const { return monitor_rate; }
125:
1.1.1.10 root 126: // SCSI リムーバブルデバイス用のメニューを作成して返す
127: wxMenu *CreateSCSIRemovableMenu(uint id) const;
128:
129: // CD を挿入する
130: void InsertCD(int id, const std::string& path);
131: // CD をイジェクトする
132: void EjectCD(int id, bool force);
133:
1.1 root 134: private:
1.1.1.10 root 135: void OnIdle(wxIdleEvent& event);
1.1.1.3 root 136: void OnClose(wxCloseEvent& event);
1.1.1.4 root 137: void OnActivate(wxActivateEvent& event);
1.1 root 138:
1.1.1.8 root 139: void OnRestartVM(wxCommandEvent& event);
1.1 root 140: void OnExit(wxCommandEvent&);
141:
1.1.1.11! root 142: void OnFullSpeed(wxCommandEvent& event);
! 143: void OnFullSpeedUI(wxUpdateUIEvent& event);
! 144: void OnMenuInput(wxCommandEvent& event);
! 145: void OnMenuInputUI(wxUpdateUIEvent& event);
! 146:
1.1 root 147: void OnMenuScale(wxCommandEvent& event);
148: void OnMenuScaleUI(wxUpdateUIEvent& event);
149: void OnMenuFontSize(wxCommandEvent& event);
150: void OnMenuFontSizeUI(wxUpdateUIEvent& event);
1.1.1.5 root 151: void OnMenuMonRate(wxCommandEvent& event);
152: void OnMenuMonRateUI(wxUpdateUIEvent& event);
1.1.1.8 root 153: void OnShowStatusPanel(wxCommandEvent& event);
154: void OnShowStatusPanelUI(wxUpdateUIEvent& event);
1.1 root 155:
1.1.1.10 root 156: void OnCDInsert(wxCommandEvent& event);
157: void OnCDInsertUI(wxUpdateUIEvent& event);
158: void OnCDEject(wxCommandEvent& event);
159: void OnCDEjectUI(wxUpdateUIEvent& event);
160: void OnCDForce(wxCommandEvent& event);
161: void OnCDForceUI(wxUpdateUIEvent& event);
1.1.1.2 root 162: void OnMouseMode(wxCommandEvent& event);
163: void OnMouseModeUI(wxUpdateUIEvent& event);
1.1.1.8 root 164: void OnResetButton(wxCommandEvent& event);
1.1.1.2 root 165:
1.1 root 166: void OnWindow(wxCommandEvent&);
167: void DoWindow(int id, bool enable);
168: void OnWindowUI(wxUpdateUIEvent&);
169:
1.1.1.4 root 170: void OnAbout(wxCommandEvent&);
171:
1.1.1.10 root 172: // リムーバブルデバイス用のメニューを作成して追加する
173: void CreateRemovableMenu(wxMenu *);
174:
1.1 root 175: // ウィンドウをリストに追加する。
176: void AddWindow(int id, wxWindow *);
177:
178: // 指定 ID のサブウィンドウがリストにあれば true を返す
179: bool IsExistWindow(int id);
180:
181: // サブウィンドウリスト
1.1.1.9 root 182: std::unique_ptr<wxWindow> windows[ID_SUBWIN_MAX] {};
1.1.1.4 root 183:
1.1.1.5 root 184: // モニタの更新頻度(これが実行中の一次情報)
1.1.1.6 root 185: int monitor_rate {};
1.1.1.5 root 186: // モニタ更新頻度 ID -> 数値変換
187: static const int IDtoMonRate[];
188:
1.1.1.10 root 189: // メニュー操作用の SCSI デバイス
190: // (ホストアダプタが増えた時のことは考えていない)
191: std::array<SCSITarget *, 8> scsidev {};
192:
193: // ファイルダイアログを表示する際のカレントディレクトリ
194: std::string current_dir {};
195:
1.1.1.4 root 196: // ダブルバスフォールト・イベント
197: void OnHaltNotify(wxCommandEvent& event);
1.1.1.10 root 198: // メディア挿入失敗通知
199: void OnInsertCDFailed(wxCommandEvent& event);
1.1 root 200:
201: wxDECLARE_EVENT_TABLE();
202: };
203:
204: extern WXMainFrame *gMainFrame;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.