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

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

unix.superglobalmegacorp.com

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