--- nono/wx/wxdumpmonitor.h 2026/04/29 17:04:42 1.1.1.4 +++ nono/wx/wxdumpmonitor.h 2026/04/29 17:05:12 1.1.1.7 @@ -4,27 +4,31 @@ // Licensed under nono-license.txt // +// +// メモリダンプウィンドウ +// + #pragma once #include "wxsubwindow.h" +#include "wxmonitor.h" +#include -// -// メモリダンプウィンドウ -// -class WXMemdumpWindow : public WXVResizeSubWindow, public IMonitor +class WXMemdumpWindow : public WXSubWindow { - using inherited = WXVResizeSubWindow; + using inherited = WXSubWindow; public: - WXMemdumpWindow(wxWindow *parent, wxWindowID id); + WXMemdumpWindow(wxWindow *parent, int idx_); virtual ~WXMemdumpWindow() override; - nnSize GetMonitorSize() override; - void MonitorUpdate(TextScreen& ts) override; + // ウィンドウID(モニタID) に対応する sticky address を取得する + static uint32 GetStickyAddr(int id); + // ウィンドウID(モニタID) に対応する sitcky address を設定する + static void SetStickyAddr(int id, uint32 addr); - private: - // ウィンドウサイズ再計算 - void DoSize() override; + bool Layout() override; + private: // テキスト入力イベント void OnTextEnter(wxCommandEvent& event); @@ -32,22 +36,34 @@ class WXMemdumpWindow : public WXVResize void OnPrev(wxCommandEvent& event); void OnNext(wxCommandEvent& event); - // アドレス - wxTextCtrl *addrctrl {}; - // 入力された開始アドレス - uint32 input_addr {}; - // 前回表示時の開始アドレス - uint32 last_addr {}; + // アドレス欄を更新 + void UpdateAddr(); + // コントロール + wxTextCtrl *addrctrl {}; wxButton *prev_btn {}; wxButton *next_btn {}; // コントロールパネルを格納する sizer wxBoxSizer *ctrlbox {}; - // 論理アドレス表示か - bool is_logical {}; + // コントロールパネル部分の長さ + int fixed_height {}; + + WXMonitorPanel *screen {}; + + // 識別子、または sticky_addr[] の添字。 + // メモリダンプウィンドウは複数枚あるので自分がそのうちの何番目か。 + int idx {}; // イベントテーブル wxDECLARE_EVENT_TABLE(); + + // 開始番地の二次記憶域。 + // サブウィンドウは今のところ開いてる時だけオブジェクトが存在している + // タイプだが、メモリダンプウィンドウを閉じてまた開くとさっきのアドレスが + // 見えていてほしいので、ここでその状況を真似する。 + // こっちはあくまで補助用の領域で、現在表示中のアドレスの一次情報は + // screen.userdata のほう。 + static std::array sticky_addr; };