|
|
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
46: ID_FULL_SPEED,
1.1.1.8 root 47: ID_RESTART_VM,
1.1 root 48: ID_SCALE_START,
49: ID_SCALE_1_00,
50: ID_SCALE_0_75,
51: ID_SCALE_0_50,
52: ID_SCALE_END,
53:
54: ID_FONTSIZE_START, // START 以降は fontsize_t と同じ順に並べること
55: ID_FONTSIZE_12,
56: ID_FONTSIZE_16,
57: ID_FONTSIZE_END,
1.1.1.2 root 58:
1.1.1.5 root 59: ID_MONRATE_START,
60: ID_MONRATE_20,
61: ID_MONRATE_5,
62: ID_MONRATE_1,
63: ID_MONRATE_END,
64:
1.1.1.8 root 65: ID_SHOW_STATPANEL,
1.1.1.10! root 66:
! 67: // CD/MO (リムーバブルデバイス)
! 68: ID_CD_INSERT_0,
! 69: ID_CD_INSERT_1,
! 70: ID_CD_INSERT_2,
! 71: ID_CD_INSERT_3,
! 72: ID_CD_INSERT_4,
! 73: ID_CD_INSERT_5,
! 74: ID_CD_INSERT_6,
! 75: ID_CD_INSERT_7,
! 76: ID_CD_EJECT_0,
! 77: ID_CD_EJECT_1,
! 78: ID_CD_EJECT_2,
! 79: ID_CD_EJECT_3,
! 80: ID_CD_EJECT_4,
! 81: ID_CD_EJECT_5,
! 82: ID_CD_EJECT_6,
! 83: ID_CD_EJECT_7,
! 84: ID_CD_FORCE_0,
! 85: ID_CD_FORCE_1,
! 86: ID_CD_FORCE_2,
! 87: ID_CD_FORCE_3,
! 88: ID_CD_FORCE_4,
! 89: ID_CD_FORCE_5,
! 90: ID_CD_FORCE_6,
! 91: ID_CD_FORCE_7,
! 92:
1.1.1.2 root 93: ID_MOUSEMODE,
1.1.1.8 root 94: ID_RESET_BUTTON,
1.1 root 95: };
1.1.1.10! root 96: #define ID_CD_INSERT(id) (ID_CD_INSERT_0 + (id))
! 97: #define ID_CD_EJECT(id) (ID_CD_EJECT_0 + (id))
! 98: #define ID_CD_FORCE(id) (ID_CD_FORCE_0 + (id))
1.1 root 99:
1.1.1.9 root 100: class WXMainFrame : public wxFrame
1.1 root 101: {
1.1.1.9 root 102: using inherited = wxFrame;
1.1 root 103: public:
104: WXMainFrame(wxWindow *);
1.1.1.7 root 105: virtual ~WXMainFrame() override;
1.1 root 106:
107: // ウィンドウをリストから削除する。
108: // ウィンドウをクローズする際に呼び出すこと。
1.1.1.9 root 109: void DeleteWindow(wxWindow *);
1.1 root 110:
1.1.1.9 root 111: // 起動時にオープンするサブウィンドウの一覧
112: static std::array<bool, ID_SUBWIN_MAX> subwindow_start;
1.1 root 113:
1.1.1.5 root 114: // モニタウィンドウの更新頻度取得
115: int GetMonitorRate() const { return monitor_rate; }
116:
1.1.1.10! root 117: // SCSI リムーバブルデバイス用のメニューを作成して返す
! 118: wxMenu *CreateSCSIRemovableMenu(uint id) const;
! 119:
! 120: // CD を挿入する
! 121: void InsertCD(int id, const std::string& path);
! 122: // CD をイジェクトする
! 123: void EjectCD(int id, bool force);
! 124:
1.1 root 125: private:
1.1.1.10! root 126: void OnIdle(wxIdleEvent& event);
1.1.1.3 root 127: void OnClose(wxCloseEvent& event);
1.1.1.4 root 128: void OnActivate(wxActivateEvent& event);
1.1 root 129:
130: void OnFullSpeed(wxCommandEvent& event);
131: void OnFullSpeedUI(wxUpdateUIEvent& event);
1.1.1.8 root 132: void OnRestartVM(wxCommandEvent& event);
1.1 root 133:
134: void OnExit(wxCommandEvent&);
135:
136: void OnMenuScale(wxCommandEvent& event);
137: void OnMenuScaleUI(wxUpdateUIEvent& event);
138: void OnMenuFontSize(wxCommandEvent& event);
139: void OnMenuFontSizeUI(wxUpdateUIEvent& event);
1.1.1.5 root 140: void OnMenuMonRate(wxCommandEvent& event);
141: void OnMenuMonRateUI(wxUpdateUIEvent& event);
1.1.1.8 root 142: void OnShowStatusPanel(wxCommandEvent& event);
143: void OnShowStatusPanelUI(wxUpdateUIEvent& event);
1.1 root 144:
1.1.1.10! root 145: void OnCDInsert(wxCommandEvent& event);
! 146: void OnCDInsertUI(wxUpdateUIEvent& event);
! 147: void OnCDEject(wxCommandEvent& event);
! 148: void OnCDEjectUI(wxUpdateUIEvent& event);
! 149: void OnCDForce(wxCommandEvent& event);
! 150: void OnCDForceUI(wxUpdateUIEvent& event);
1.1.1.2 root 151: void OnMouseMode(wxCommandEvent& event);
152: void OnMouseModeUI(wxUpdateUIEvent& event);
1.1.1.8 root 153: void OnResetButton(wxCommandEvent& event);
1.1.1.2 root 154:
1.1 root 155: void OnWindow(wxCommandEvent&);
156: void DoWindow(int id, bool enable);
157: void OnWindowUI(wxUpdateUIEvent&);
158:
1.1.1.4 root 159: void OnAbout(wxCommandEvent&);
160:
1.1.1.10! root 161: // リムーバブルデバイス用のメニューを作成して追加する
! 162: void CreateRemovableMenu(wxMenu *);
! 163:
1.1 root 164: // ウィンドウをリストに追加する。
165: void AddWindow(int id, wxWindow *);
166:
167: // 指定 ID のサブウィンドウがリストにあれば true を返す
168: bool IsExistWindow(int id);
169:
170: // サブウィンドウリスト
1.1.1.9 root 171: std::unique_ptr<wxWindow> windows[ID_SUBWIN_MAX] {};
1.1.1.4 root 172:
1.1.1.5 root 173: // モニタの更新頻度(これが実行中の一次情報)
1.1.1.6 root 174: int monitor_rate {};
1.1.1.5 root 175: // モニタ更新頻度 ID -> 数値変換
176: static const int IDtoMonRate[];
177:
1.1.1.10! root 178: // メニュー操作用の SCSI デバイス
! 179: // (ホストアダプタが増えた時のことは考えていない)
! 180: std::array<SCSITarget *, 8> scsidev {};
! 181:
! 182: // ファイルダイアログを表示する際のカレントディレクトリ
! 183: std::string current_dir {};
! 184:
1.1.1.4 root 185: // ダブルバスフォールト・イベント
186: void OnHaltNotify(wxCommandEvent& event);
1.1.1.10! root 187: // メディア挿入失敗通知
! 188: void OnInsertCDFailed(wxCommandEvent& event);
1.1 root 189:
190: wxDECLARE_EVENT_TABLE();
191: };
192:
193: extern WXMainFrame *gMainFrame;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.