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