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

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.10! root       66: 
        !            67:        // CD/MO (リムーバブルデバイス)
        !            68:        ID_CD_INSERT_0,
        !            69:        ID_CD_INSERT_1,
        !            70:        ID_CD_INSERT_2,
        !            71:        ID_CD_INSERT_3,
        !            72:        ID_CD_INSERT_4,
        !            73:        ID_CD_INSERT_5,
        !            74:        ID_CD_INSERT_6,
        !            75:        ID_CD_INSERT_7,
        !            76:        ID_CD_EJECT_0,
        !            77:        ID_CD_EJECT_1,
        !            78:        ID_CD_EJECT_2,
        !            79:        ID_CD_EJECT_3,
        !            80:        ID_CD_EJECT_4,
        !            81:        ID_CD_EJECT_5,
        !            82:        ID_CD_EJECT_6,
        !            83:        ID_CD_EJECT_7,
        !            84:        ID_CD_FORCE_0,
        !            85:        ID_CD_FORCE_1,
        !            86:        ID_CD_FORCE_2,
        !            87:        ID_CD_FORCE_3,
        !            88:        ID_CD_FORCE_4,
        !            89:        ID_CD_FORCE_5,
        !            90:        ID_CD_FORCE_6,
        !            91:        ID_CD_FORCE_7,
        !            92: 
1.1.1.2   root       93:        ID_MOUSEMODE,
1.1.1.8   root       94:        ID_RESET_BUTTON,
1.1       root       95: };
1.1.1.10! root       96: #define ID_CD_INSERT(id)       (ID_CD_INSERT_0 + (id))
        !            97: #define ID_CD_EJECT(id)        (ID_CD_EJECT_0 + (id))
        !            98: #define ID_CD_FORCE(id)                (ID_CD_FORCE_0 + (id))
1.1       root       99: 
1.1.1.9   root      100: class WXMainFrame : public wxFrame
1.1       root      101: {
1.1.1.9   root      102:        using inherited = wxFrame;
1.1       root      103:  public:
                    104:        WXMainFrame(wxWindow *);
1.1.1.7   root      105:        virtual ~WXMainFrame() override;
1.1       root      106: 
                    107:        // ウィンドウをリストから削除する。
                    108:        // ウィンドウをクローズする際に呼び出すこと。
1.1.1.9   root      109:        void DeleteWindow(wxWindow *);
1.1       root      110: 
1.1.1.9   root      111:        // 起動時にオープンするサブウィンドウの一覧
                    112:        static std::array<bool, ID_SUBWIN_MAX> subwindow_start;
1.1       root      113: 
1.1.1.5   root      114:        // モニタウィンドウの更新頻度取得
                    115:        int GetMonitorRate() const { return monitor_rate; }
                    116: 
1.1.1.10! root      117:        // SCSI リムーバブルデバイス用のメニューを作成して返す
        !           118:        wxMenu *CreateSCSIRemovableMenu(uint id) const;
        !           119: 
        !           120:        // CD を挿入する
        !           121:        void InsertCD(int id, const std::string& path);
        !           122:        // CD をイジェクトする
        !           123:        void EjectCD(int id, bool force);
        !           124: 
1.1       root      125:  private:
1.1.1.10! root      126:        void OnIdle(wxIdleEvent& 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.10! root      145:        void OnCDInsert(wxCommandEvent& event);
        !           146:        void OnCDInsertUI(wxUpdateUIEvent& event);
        !           147:        void OnCDEject(wxCommandEvent& event);
        !           148:        void OnCDEjectUI(wxUpdateUIEvent& event);
        !           149:        void OnCDForce(wxCommandEvent& event);
        !           150:        void OnCDForceUI(wxUpdateUIEvent& event);
1.1.1.2   root      151:        void OnMouseMode(wxCommandEvent& event);
                    152:        void OnMouseModeUI(wxUpdateUIEvent& event);
1.1.1.8   root      153:        void OnResetButton(wxCommandEvent& event);
1.1.1.2   root      154: 
1.1       root      155:        void OnWindow(wxCommandEvent&);
                    156:        void DoWindow(int id, bool enable);
                    157:        void OnWindowUI(wxUpdateUIEvent&);
                    158: 
1.1.1.4   root      159:        void OnAbout(wxCommandEvent&);
                    160: 
1.1.1.10! root      161:        // リムーバブルデバイス用のメニューを作成して追加する
        !           162:        void CreateRemovableMenu(wxMenu *);
        !           163: 
1.1       root      164:        // ウィンドウをリストに追加する。
                    165:        void AddWindow(int id, wxWindow *);
                    166: 
                    167:        // 指定 ID のサブウィンドウがリストにあれば true を返す
                    168:        bool IsExistWindow(int id);
                    169: 
                    170:        // サブウィンドウリスト
1.1.1.9   root      171:        std::unique_ptr<wxWindow> windows[ID_SUBWIN_MAX] {};
1.1.1.4   root      172: 
1.1.1.5   root      173:        // モニタの更新頻度(これが実行中の一次情報)
1.1.1.6   root      174:        int monitor_rate {};
1.1.1.5   root      175:        // モニタ更新頻度 ID -> 数値変換
                    176:        static const int IDtoMonRate[];
                    177: 
1.1.1.10! root      178:        // メニュー操作用の SCSI デバイス
        !           179:        // (ホストアダプタが増えた時のことは考えていない)
        !           180:        std::array<SCSITarget *, 8> scsidev {};
        !           181: 
        !           182:        // ファイルダイアログを表示する際のカレントディレクトリ
        !           183:        std::string current_dir {};
        !           184: 
1.1.1.4   root      185:        // ダブルバスフォールト・イベント
                    186:        void OnHaltNotify(wxCommandEvent& event);
1.1.1.10! root      187:        // メディア挿入失敗通知
        !           188:        void OnInsertCDFailed(wxCommandEvent& event);
1.1       root      189: 
                    190:        wxDECLARE_EVENT_TABLE();
                    191: };
                    192: 
                    193: extern WXMainFrame *gMainFrame;

unix.superglobalmegacorp.com

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