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

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
1.1.1.8   root       46:        ID_RESTART_VM,
1.1.1.11! root       47:        ID_FULL_SPEED,
        !            48: 
        !            49:        ID_INPUT_START,
        !            50:        ID_INPUT_CHAR,
        !            51:        ID_INPUT_JP,
        !            52:        ID_INPUT_END,
        !            53: 
1.1       root       54:        ID_SCALE_START,
                     55:        ID_SCALE_1_00,
                     56:        ID_SCALE_0_75,
                     57:        ID_SCALE_0_50,
                     58:        ID_SCALE_END,
                     59: 
                     60:        ID_FONTSIZE_START, // START 以降は fontsize_t と同じ順に並べること
                     61:        ID_FONTSIZE_12,
                     62:        ID_FONTSIZE_16,
                     63:        ID_FONTSIZE_END,
1.1.1.2   root       64: 
1.1.1.5   root       65:        ID_MONRATE_START,
                     66:        ID_MONRATE_20,
                     67:        ID_MONRATE_5,
                     68:        ID_MONRATE_1,
                     69:        ID_MONRATE_END,
                     70: 
1.1.1.8   root       71:        ID_SHOW_STATPANEL,
1.1.1.10  root       72: 
                     73:        // CD/MO (リムーバブルデバイス)
                     74:        ID_CD_INSERT_0,
                     75:        ID_CD_INSERT_1,
                     76:        ID_CD_INSERT_2,
                     77:        ID_CD_INSERT_3,
                     78:        ID_CD_INSERT_4,
                     79:        ID_CD_INSERT_5,
                     80:        ID_CD_INSERT_6,
                     81:        ID_CD_INSERT_7,
                     82:        ID_CD_EJECT_0,
                     83:        ID_CD_EJECT_1,
                     84:        ID_CD_EJECT_2,
                     85:        ID_CD_EJECT_3,
                     86:        ID_CD_EJECT_4,
                     87:        ID_CD_EJECT_5,
                     88:        ID_CD_EJECT_6,
                     89:        ID_CD_EJECT_7,
                     90:        ID_CD_FORCE_0,
                     91:        ID_CD_FORCE_1,
                     92:        ID_CD_FORCE_2,
                     93:        ID_CD_FORCE_3,
                     94:        ID_CD_FORCE_4,
                     95:        ID_CD_FORCE_5,
                     96:        ID_CD_FORCE_6,
                     97:        ID_CD_FORCE_7,
                     98: 
1.1.1.2   root       99:        ID_MOUSEMODE,
1.1.1.8   root      100:        ID_RESET_BUTTON,
1.1       root      101: };
1.1.1.10  root      102: #define ID_CD_INSERT(id)       (ID_CD_INSERT_0 + (id))
                    103: #define ID_CD_EJECT(id)        (ID_CD_EJECT_0 + (id))
                    104: #define ID_CD_FORCE(id)                (ID_CD_FORCE_0 + (id))
1.1       root      105: 
1.1.1.9   root      106: class WXMainFrame : public wxFrame
1.1       root      107: {
1.1.1.9   root      108:        using inherited = wxFrame;
1.1       root      109:  public:
                    110:        WXMainFrame(wxWindow *);
1.1.1.7   root      111:        virtual ~WXMainFrame() override;
1.1       root      112: 
1.1.1.11! root      113:        // (設定反映などの) 初期化
        !           114:        bool Init();
        !           115: 
1.1       root      116:        // ウィンドウをリストから削除する。
                    117:        // ウィンドウをクローズする際に呼び出すこと。
1.1.1.9   root      118:        void DeleteWindow(wxWindow *);
1.1       root      119: 
1.1.1.9   root      120:        // 起動時にオープンするサブウィンドウの一覧
                    121:        static std::array<bool, ID_SUBWIN_MAX> subwindow_start;
1.1       root      122: 
1.1.1.5   root      123:        // モニタウィンドウの更新頻度取得
                    124:        int GetMonitorRate() const { return monitor_rate; }
                    125: 
1.1.1.10  root      126:        // SCSI リムーバブルデバイス用のメニューを作成して返す
                    127:        wxMenu *CreateSCSIRemovableMenu(uint id) const;
                    128: 
                    129:        // CD を挿入する
                    130:        void InsertCD(int id, const std::string& path);
                    131:        // CD をイジェクトする
                    132:        void EjectCD(int id, bool force);
                    133: 
1.1       root      134:  private:
1.1.1.10  root      135:        void OnIdle(wxIdleEvent& event);
1.1.1.3   root      136:        void OnClose(wxCloseEvent& event);
1.1.1.4   root      137:        void OnActivate(wxActivateEvent& event);
1.1       root      138: 
1.1.1.8   root      139:        void OnRestartVM(wxCommandEvent& event);
1.1       root      140:        void OnExit(wxCommandEvent&);
                    141: 
1.1.1.11! root      142:        void OnFullSpeed(wxCommandEvent& event);
        !           143:        void OnFullSpeedUI(wxUpdateUIEvent& event);
        !           144:        void OnMenuInput(wxCommandEvent& event);
        !           145:        void OnMenuInputUI(wxUpdateUIEvent& event);
        !           146: 
1.1       root      147:        void OnMenuScale(wxCommandEvent& event);
                    148:        void OnMenuScaleUI(wxUpdateUIEvent& event);
                    149:        void OnMenuFontSize(wxCommandEvent& event);
                    150:        void OnMenuFontSizeUI(wxUpdateUIEvent& event);
1.1.1.5   root      151:        void OnMenuMonRate(wxCommandEvent& event);
                    152:        void OnMenuMonRateUI(wxUpdateUIEvent& event);
1.1.1.8   root      153:        void OnShowStatusPanel(wxCommandEvent& event);
                    154:        void OnShowStatusPanelUI(wxUpdateUIEvent& event);
1.1       root      155: 
1.1.1.10  root      156:        void OnCDInsert(wxCommandEvent& event);
                    157:        void OnCDInsertUI(wxUpdateUIEvent& event);
                    158:        void OnCDEject(wxCommandEvent& event);
                    159:        void OnCDEjectUI(wxUpdateUIEvent& event);
                    160:        void OnCDForce(wxCommandEvent& event);
                    161:        void OnCDForceUI(wxUpdateUIEvent& event);
1.1.1.2   root      162:        void OnMouseMode(wxCommandEvent& event);
                    163:        void OnMouseModeUI(wxUpdateUIEvent& event);
1.1.1.8   root      164:        void OnResetButton(wxCommandEvent& event);
1.1.1.2   root      165: 
1.1       root      166:        void OnWindow(wxCommandEvent&);
                    167:        void DoWindow(int id, bool enable);
                    168:        void OnWindowUI(wxUpdateUIEvent&);
                    169: 
1.1.1.4   root      170:        void OnAbout(wxCommandEvent&);
                    171: 
1.1.1.10  root      172:        // リムーバブルデバイス用のメニューを作成して追加する
                    173:        void CreateRemovableMenu(wxMenu *);
                    174: 
1.1       root      175:        // ウィンドウをリストに追加する。
                    176:        void AddWindow(int id, wxWindow *);
                    177: 
                    178:        // 指定 ID のサブウィンドウがリストにあれば true を返す
                    179:        bool IsExistWindow(int id);
                    180: 
                    181:        // サブウィンドウリスト
1.1.1.9   root      182:        std::unique_ptr<wxWindow> windows[ID_SUBWIN_MAX] {};
1.1.1.4   root      183: 
1.1.1.5   root      184:        // モニタの更新頻度(これが実行中の一次情報)
1.1.1.6   root      185:        int monitor_rate {};
1.1.1.5   root      186:        // モニタ更新頻度 ID -> 数値変換
                    187:        static const int IDtoMonRate[];
                    188: 
1.1.1.10  root      189:        // メニュー操作用の SCSI デバイス
                    190:        // (ホストアダプタが増えた時のことは考えていない)
                    191:        std::array<SCSITarget *, 8> scsidev {};
                    192: 
                    193:        // ファイルダイアログを表示する際のカレントディレクトリ
                    194:        std::string current_dir {};
                    195: 
1.1.1.4   root      196:        // ダブルバスフォールト・イベント
                    197:        void OnHaltNotify(wxCommandEvent& event);
1.1.1.10  root      198:        // メディア挿入失敗通知
                    199:        void OnInsertCDFailed(wxCommandEvent& event);
1.1       root      200: 
                    201:        wxDECLARE_EVENT_TABLE();
                    202: };
                    203: 
                    204: 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.