|
|
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.2 root 66: ID_MOUSEMODE,
1.1.1.8 root 67: ID_RESET_BUTTON,
1.1 root 68: };
69:
1.1.1.9 ! root 70: class WXMainFrame : public wxFrame
1.1 root 71: {
1.1.1.9 ! root 72: using inherited = wxFrame;
1.1 root 73: public:
74: WXMainFrame(wxWindow *);
1.1.1.7 root 75: virtual ~WXMainFrame() override;
1.1 root 76:
77: // ウィンドウをリストから削除する。
78: // ウィンドウをクローズする際に呼び出すこと。
1.1.1.9 ! root 79: void DeleteWindow(wxWindow *);
1.1 root 80:
81: // VM からの電源オフコールバック
82: void PowerOffCallback();
83:
1.1.1.4 root 84: // VM からのダブルバスフォールト・コールバック
85: void HaltCallback();
86:
1.1.1.9 ! root 87: // 起動時にオープンするサブウィンドウの一覧
! 88: static std::array<bool, ID_SUBWIN_MAX> subwindow_start;
1.1 root 89:
1.1.1.5 root 90: // モニタウィンドウの更新頻度取得
91: int GetMonitorRate() const { return monitor_rate; }
92:
1.1 root 93: private:
1.1.1.9 ! root 94: void OnPaint(wxPaintEvent& event);
1.1.1.3 root 95: void OnClose(wxCloseEvent& event);
1.1.1.4 root 96: void OnActivate(wxActivateEvent& event);
1.1 root 97:
98: void OnFullSpeed(wxCommandEvent& event);
99: void OnFullSpeedUI(wxUpdateUIEvent& event);
1.1.1.8 root 100: void OnRestartVM(wxCommandEvent& event);
1.1 root 101:
102: void OnExit(wxCommandEvent&);
103:
104: void OnMenuScale(wxCommandEvent& event);
105: void OnMenuScaleUI(wxUpdateUIEvent& event);
106: void OnMenuFontSize(wxCommandEvent& event);
107: void OnMenuFontSizeUI(wxUpdateUIEvent& event);
1.1.1.5 root 108: void OnMenuMonRate(wxCommandEvent& event);
109: void OnMenuMonRateUI(wxUpdateUIEvent& event);
1.1.1.8 root 110: void OnShowStatusPanel(wxCommandEvent& event);
111: void OnShowStatusPanelUI(wxUpdateUIEvent& event);
1.1 root 112:
1.1.1.2 root 113: void OnMouseMode(wxCommandEvent& event);
114: void OnMouseModeUI(wxUpdateUIEvent& event);
1.1.1.8 root 115: void OnResetButton(wxCommandEvent& event);
1.1.1.2 root 116:
1.1 root 117: void OnWindow(wxCommandEvent&);
118: void DoWindow(int id, bool enable);
119: void OnWindowUI(wxUpdateUIEvent&);
120:
1.1.1.4 root 121: void OnAbout(wxCommandEvent&);
122:
1.1 root 123: // ウィンドウをリストに追加する。
124: void AddWindow(int id, wxWindow *);
125:
126: // 指定 ID のサブウィンドウがリストにあれば true を返す
127: bool IsExistWindow(int id);
128:
129: // サブウィンドウリスト
1.1.1.9 ! root 130: std::unique_ptr<wxWindow> windows[ID_SUBWIN_MAX] {};
1.1.1.4 root 131:
1.1.1.5 root 132: // モニタの更新頻度(これが実行中の一次情報)
1.1.1.6 root 133: int monitor_rate {};
1.1.1.5 root 134: // モニタ更新頻度 ID -> 数値変換
135: static const int IDtoMonRate[];
136:
1.1.1.4 root 137: // ダブルバスフォールト・イベント
138: void OnHaltNotify(wxCommandEvent& event);
1.1 root 139:
140: wxDECLARE_EVENT_TABLE();
141: };
142:
143: extern WXMainFrame *gMainFrame;
1.1.1.8 root 144:
145: // コールバック関数
146: extern void wxmainframe_poweroff_callback();
147: 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.