|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // プレーン VRAM モニターウィンドウ
9: //
10:
11: #pragma once
12:
13: #include "wxsubwindow.h"
14: #include "wxscrollbar.h"
1.1.1.2 root 15: #include "wxtextscreen.h"
1.1 root 16: #include <array>
17:
1.1.1.2 root 18: class BT45xDevice;
19: class PlaneVRAMDevice;
20: class VideoCtlrDevice;
21:
1.1 root 22: // プレーン VRAM ビットマップパネル
23: class WXPlaneVRAMBitmapPanel : public WXBitmapPanel
24: {
25: using inherited = WXBitmapPanel;
26:
27: public:
1.1.1.5 ! root 28: explicit WXPlaneVRAMBitmapPanel(wxWindow *parent);
! 29: ~WXPlaneVRAMBitmapPanel() override;
1.1 root 30:
31: void EnablePlane(int plane, bool value);
32: void EnablePalette(bool value);
33: void SetScale(int scale_);
34:
1.1.1.2 root 35: const wxPoint& GetCursor() const { return cursor; }
36:
1.1 root 37: void OnScroll(wxScrollEvent& event);
38:
39: Rect view {}; // 表示矩形
40: int virtual_width {}; // 拡大後のビットマップ幅 [pixel]
41: int virtual_height {}; // 拡大後のビットマップ高さ [pixel]
42:
43: private:
44: void OnPaletteChanged(wxCommandEvent& event);
45: void GenPalette();
1.1.1.2 root 46: void Draw() override;
47: void OnMouse(wxMouseEvent& event);
1.1 root 48:
49: std::array<Color, 256> pal {};
50: uint32 planemask {};
51: bool apply_palette {};
52: int scale {};
53:
54: int plane_width {}; // 拡大前のビットマップ幅 [pixel]
55: int plane_height {}; // 拡大前のビットマップ高さ [pixel]
1.1.1.2 root 56:
57: // マウスカーソルがこのパネル上にあれば、(拡大前の)仮想画面での座標。
58: // マウスカーソルがパネル外なら wxDefaultPosition = (-1, -1)。
59: // ステータス表示用。
60: wxPoint cursor {};
61:
62: BT45xDevice *bt45x {};
63: PlaneVRAMDevice *planevram {};
64: VideoCtlrDevice *videoctlr {};
65:
66: // イベントテーブル
67: wxDECLARE_EVENT_TABLE();
1.1 root 68: };
69:
70: // ビットマップパネルとスクロールバーを持つ
1.1.1.3 root 71: class WXPlaneVRAMPanel : public WXTextPanel
1.1 root 72: {
1.1.1.3 root 73: using inherited = WXTextPanel;
1.1 root 74: public:
1.1.1.5 ! root 75: explicit WXPlaneVRAMPanel(wxWindow *parent);
! 76: ~WXPlaneVRAMPanel() override;
1.1 root 77:
78: bool Layout() override;
79:
1.1.1.3 root 80: // スクロールバーの FontChanged() を呼ぶため(だけ)に
81: // これ自身も wxTextPanel を継承している。
1.1.1.4 root 82: void FontChanged() override;
1.1.1.3 root 83:
1.1 root 84: void EnablePlane(int plane, bool value);
85: void EnablePalette(bool value);
86: void SetScale(int scale_);
87:
1.1.1.2 root 88: const wxPoint& GetCursor() const { return viewctl->GetCursor(); }
89:
1.1 root 90: private:
91: void OnSize(wxSizeEvent& event);
92:
93: void DoSize(wxSize);
94:
95: WXPlaneVRAMBitmapPanel *viewctl {};
96: WXScrollBar *vscroll {};
97: WXScrollBar *hscroll {};
98: WXBitmapPanel *corner {}; // 右下の空き地
99:
100: // イベントテーブル
101: wxDECLARE_EVENT_TABLE();
102: };
103:
104: // プレーン VRAM ウィンドウ
105: class WXPlaneVRAMWindow : public WXSubWindow
106: {
107: using inherited = WXSubWindow;
108:
109: public:
1.1.1.2 root 110: static const int MAX_PLANES = 8;
1.1 root 111:
112: public:
113: WXPlaneVRAMWindow(wxWindow *parent, const wxString& name);
1.1.1.5 ! root 114: ~WXPlaneVRAMWindow() override;
1.1 root 115:
116: void FontChanged() override;
117:
1.1.1.2 root 118: // ステータスパネル
119: WXTextScreen *statuspanel {};
120:
1.1 root 121: private:
122: void OnPlane(wxCommandEvent& event);
123: void DoPlane(int plane, bool value);
124: void OnApplyPalette(wxCommandEvent& event);
125: void DoApplyPalette(bool value);
126: void OnScale(wxCommandEvent& event);
127: void DoScale(int value);
128:
1.1.1.2 root 129: void OnTimer(wxTimerEvent& event);
130:
1.1 root 131: // コントロールパネル
1.1.1.2 root 132: wxPanel *ctrlpanel {};
133: std::vector<wxCheckBox*> planesw {};
1.1 root 134: wxCheckBox *applysw {};
135: wxChoice *scalesw {};
136:
137: // グラフィックパネル
138: WXPlaneVRAMPanel *viewpanel {};
139:
1.1.1.2 root 140: // タイマー
141: wxTimer timer {};
142:
143: PlaneVRAMDevice *planevram {};
144:
1.1 root 145: // イベントテーブル
146: wxDECLARE_EVENT_TABLE();
147:
148: // 状態の二次記憶域。
149: // サブウィンドウは今のところ開いてる時だけオブジェクトが存在している
150: // タイプだが、このウィンドウを閉じてまた開くとさっきの状態が継続して
151: // いてほしいので、ここでその状況を真似する。
152: // ただしこっちはあくまで補助用で、コントロールの値のほうが一次情報。
1.1.1.2 root 153: static std::array<bool, MAX_PLANES> sticky_plane;
1.1 root 154: static bool sticky_apply;
155: static int sticky_scale;
156:
157: // sticky_used が false ならまだ一度も使われていない (次のコンストラクタ
158: // で初期化する)、true なら前回の値が入っている。
159: static bool sticky_used;
160: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.