Annotation of nono/wx/wxmainframe.h, revision 1.1.1.8

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 *);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.