|
|
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:
28: WXPlaneVRAMBitmapPanel(wxWindow *parent);
29: virtual ~WXPlaneVRAMBitmapPanel() override;
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: // ビットマップパネルとスクロールバーを持つ
71: class WXPlaneVRAMPanel : public wxPanel
72: {
73: using inherited = wxPanel;
74: public:
75: WXPlaneVRAMPanel(wxWindow *parent);
76: virtual ~WXPlaneVRAMPanel() override;
77:
78: bool Layout() override;
79:
80: void EnablePlane(int plane, bool value);
81: void EnablePalette(bool value);
82: void SetScale(int scale_);
83:
1.1.1.2 ! root 84: const wxPoint& GetCursor() const { return viewctl->GetCursor(); }
! 85:
1.1 root 86: private:
87: void OnSize(wxSizeEvent& event);
88:
89: void DoSize(wxSize);
90:
91: WXPlaneVRAMBitmapPanel *viewctl {};
92: WXScrollBar *vscroll {};
93: WXScrollBar *hscroll {};
94: WXBitmapPanel *corner {}; // 右下の空き地
95:
96: // イベントテーブル
97: wxDECLARE_EVENT_TABLE();
98: };
99:
100: // プレーン VRAM ウィンドウ
101: class WXPlaneVRAMWindow : public WXSubWindow
102: {
103: using inherited = WXSubWindow;
104:
105: public:
1.1.1.2 ! root 106: static const int MAX_PLANES = 8;
1.1 root 107:
108: public:
109: WXPlaneVRAMWindow(wxWindow *parent, const wxString& name);
110: virtual ~WXPlaneVRAMWindow() override;
111:
112: void FontChanged() override;
113:
1.1.1.2 ! root 114: // ステータスパネル
! 115: WXTextScreen *statuspanel {};
! 116:
1.1 root 117: private:
118: void OnPlane(wxCommandEvent& event);
119: void DoPlane(int plane, bool value);
120: void OnApplyPalette(wxCommandEvent& event);
121: void DoApplyPalette(bool value);
122: void OnScale(wxCommandEvent& event);
123: void DoScale(int value);
124:
1.1.1.2 ! root 125: void OnTimer(wxTimerEvent& event);
! 126:
1.1 root 127: // コントロールパネル
1.1.1.2 ! root 128: wxPanel *ctrlpanel {};
! 129: std::vector<wxCheckBox*> planesw {};
1.1 root 130: wxCheckBox *applysw {};
131: wxChoice *scalesw {};
132:
133: // グラフィックパネル
134: WXPlaneVRAMPanel *viewpanel {};
135:
1.1.1.2 ! root 136: // タイマー
! 137: wxTimer timer {};
! 138:
! 139: PlaneVRAMDevice *planevram {};
! 140:
1.1 root 141: // イベントテーブル
142: wxDECLARE_EVENT_TABLE();
143:
144: // 状態の二次記憶域。
145: // サブウィンドウは今のところ開いてる時だけオブジェクトが存在している
146: // タイプだが、このウィンドウを閉じてまた開くとさっきの状態が継続して
147: // いてほしいので、ここでその状況を真似する。
148: // ただしこっちはあくまで補助用で、コントロールの値のほうが一次情報。
1.1.1.2 ! root 149: static std::array<bool, MAX_PLANES> sticky_plane;
1.1 root 150: static bool sticky_apply;
151: static int sticky_scale;
152:
153: // sticky_used が false ならまだ一度も使われていない (次のコンストラクタ
154: // で初期化する)、true なら前回の値が入っている。
155: static bool sticky_used;
156: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.