|
|
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.4 root 9: #include "wxheader.h"
1.1.1.8 ! root 10: #include "wxfitframe.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 内で一意という制約があるだけ。
17: // メニュー ID のうちウィンドウのオープン状態を維持する必要がある
18: // ものはリスト(なり配列なり)で管理したいが、ID が 0 から使えるのなら
19: // 0 から割り当てて配列で管理してしまうのが手っ取り早い。
20: // ウィンドウに割り当てるウィンドウ ID とメニューイベントで飛んでくる
21: // メニュー ID は互いに干渉しないはずなので、同じ値を使ってメニューと
22: // ウィンドウの紐付けをする。
23:
24: // ウィンドウ ID (メニュー ID としても使う)
1.1.1.4 root 25: // wxmainframe.cpp 末尾の monitor_info[] と一致させること
1.1 root 26: WinID_Start = 0,
27: WinID_MONITOR_LOG = WinID_Start,
28: WinID_MONITOR_SCHEDULER,
29: WinID_MONITOR_MPUREG,
30: WinID_MONITOR_MPUATC,
1.1.1.5 root 31: WinID_MONITOR_BPOINT,
1.1.1.4 root 32: WinID_MONITOR_BRHIST68K,
33: WinID_MONITOR_BRHIST88K,
1.1.1.5 root 34: WinID_MONITOR_EXHIST68K,
35: WinID_MONITOR_EXHIST88K,
1.1.1.4 root 36: WinID_MONITOR_CMMU7,
37: WinID_MONITOR_CMMU6,
38: WinID_MONITOR_ATC7,
39: WinID_MONITOR_ATC6,
40: WinID_MONITOR_CACHE7,
41: WinID_MONITOR_CACHE6,
1.1 root 42: WinID_MONITOR_MEMDUMP,
1.1.1.7 root 43: WinID_MONITOR_INTERRUPT,
1.1 root 44: WinID_MONITOR_SPC,
45: WinID_MONITOR_RTC,
1.1.1.3 root 46: WinID_MONITOR_DMAC,
47: WinID_MONITOR_MFP,
48: WinID_MONITOR_SCC,
1.1 root 49: WinID_MONITOR_SIO,
1.1.1.4 root 50: WinID_MONITOR_PIO0,
1.1.1.2 root 51: WinID_MONITOR_LUNAKEYBOARD,
1.1 root 52: WinID_MONITOR_LCD,
53: WinID_MONITOR_LANCE,
54: WinID_MONITOR_BITMAP,
55: WinID_MONITOR_BITMAP0,
1.1.1.5 root 56: WinID_MONITOR_HOSTINFO,
1.1 root 57: WinID_MONITOR_NETDRIVER,
58: WinID_SOFTKEY,
1.1.1.5 root 59: WinID_LCD,
1.1 root 60:
61: // ウィンドウ ID ここまで。
62: WinID_MAX,
63:
64: // ここからそれ以外の ID
65: ID_FULL_SPEED = WinID_MAX,
1.1.1.8 ! root 66: ID_RESTART_VM,
1.1 root 67: ID_SCALE_START,
68: ID_SCALE_1_00,
69: ID_SCALE_0_75,
70: ID_SCALE_0_50,
71: ID_SCALE_END,
72:
73: ID_FONTSIZE_START, // START 以降は fontsize_t と同じ順に並べること
74: ID_FONTSIZE_12,
75: ID_FONTSIZE_16,
76: ID_FONTSIZE_END,
1.1.1.2 root 77:
1.1.1.5 root 78: ID_MONRATE_START,
79: ID_MONRATE_20,
80: ID_MONRATE_5,
81: ID_MONRATE_1,
82: ID_MONRATE_END,
83:
1.1.1.8 ! root 84: ID_SHOW_STATPANEL,
1.1.1.2 root 85: ID_MOUSEMODE,
1.1.1.8 ! root 86: ID_RESET_BUTTON,
1.1 root 87: };
88:
89: class WXMainFrame
1.1.1.8 ! root 90: : public WXFitFrame
1.1 root 91: {
1.1.1.8 ! root 92: using inherited = WXFitFrame;
1.1.1.4 root 93:
94: public:
95: // モニタウィンドウ識別名情報
96: struct monitor_info {
97: const char * const name; // モニタ名
98: vmf_t feature; // 機種
99: };
100:
1.1 root 101: public:
102: WXMainFrame(wxWindow *);
1.1.1.7 root 103: virtual ~WXMainFrame() override;
1.1 root 104:
105: // ウィンドウをリストから削除する。
106: // ウィンドウをクローズする際に呼び出すこと。
107: void DeleteWindow(wxWindowID id);
108:
109: // VM からの電源オフコールバック
110: void PowerOffCallback();
111:
1.1.1.4 root 112: // VM からのダブルバスフォールト・コールバック
113: void HaltCallback();
114:
1.1 root 115: // モニタウィンドウ識別名一覧
116: // (引数 -M で指定されるやつ)
1.1.1.4 root 117: static struct monitor_info monitor_info[WinID_MAX];
1.1 root 118:
119: // 起動時にオープンするモニタウィンドウの一覧
120: static std::array<bool, WinID_MAX> monitor_start;
121:
1.1.1.5 root 122: // モニタウィンドウの更新頻度取得
123: int GetMonitorRate() const { return monitor_rate; }
124:
1.1 root 125: private:
126: void OnCreate(wxCommandEvent& 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.2 root 145: void OnMouseMode(wxCommandEvent& event);
146: void OnMouseModeUI(wxUpdateUIEvent& event);
1.1.1.8 ! root 147: void OnResetButton(wxCommandEvent& event);
1.1.1.2 root 148:
1.1 root 149: void OnWindow(wxCommandEvent&);
150: void DoWindow(int id, bool enable);
151: void OnWindowUI(wxUpdateUIEvent&);
152:
1.1.1.4 root 153: void OnAbout(wxCommandEvent&);
154:
1.1 root 155: // ウィンドウをリストに追加する。
156: void AddWindow(int id, wxWindow *);
157:
158: // 指定 ID のサブウィンドウがリストにあれば true を返す
159: bool IsExistWindow(int id);
160:
161: // サブウィンドウリスト
1.1.1.4 root 162: std::unique_ptr<wxWindow> windows[WinID_MAX] {};
163:
1.1.1.5 root 164: // モニタの更新頻度(これが実行中の一次情報)
1.1.1.6 root 165: int monitor_rate {};
1.1.1.5 root 166: // モニタ更新頻度 ID -> 数値変換
167: static const int IDtoMonRate[];
168:
1.1.1.4 root 169: // ダブルバスフォールト・イベント
170: void OnHaltNotify(wxCommandEvent& event);
1.1 root 171:
172: wxDECLARE_EVENT_TABLE();
173: };
174:
175: extern WXMainFrame *gMainFrame;
1.1.1.8 ! root 176:
! 177: // コールバック関数
! 178: extern void wxmainframe_poweroff_callback();
! 179: extern void wxmainframe_halt_callback(void *);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.