--- nono/wx/wxdumpmonitor.h 2026/04/29 17:04:28 1.1 +++ nono/wx/wxdumpmonitor.h 2026/04/29 17:04:56 1.1.1.5 @@ -1,23 +1,33 @@ // // nono -// Copyright (C) 2019 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once #include "wxsubwindow.h" +#include "monitor.h" // // メモリダンプウィンドウ // -class WXMemdumpWindow : public WXSubWindow +class WXMemdumpWindow : public WXVResizeSubWindow { - typedef WXSubWindow inherited; + using inherited = WXVResizeSubWindow; public: - WXMemdumpWindow(wxWindow *parent, wxWindowID id); - ~WXMemdumpWindow(); + WXMemdumpWindow(wxWindow *parent, int idx_); + virtual ~WXMemdumpWindow() 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; + // テキスト入力イベント void OnTextEnter(wxCommandEvent& event); @@ -25,40 +35,29 @@ class WXMemdumpWindow : public WXSubWind void OnPrev(wxCommandEvent& event); void OnNext(wxCommandEvent& event); - // タイマーイベント - void OnTimer(wxTimerEvent& event); - - // フォントサイズ変更 - virtual void SetFontSize(fontsize_t fontsize); + // アドレス欄を更新 + void UpdateAddr(); - // 更新 - void Update(); - - // テキストスクリーンの桁数、行数 - int col = 0; - int row = 0; - - // アドレス - wxTextCtrl *addrctrl = NULL; - // 入力された開始アドレス - uint32 input_addr = 0; - // 前回表示時の開始アドレス - uint32 last_addr = 0; - - wxButton *prev_btn = NULL; - wxButton *next_btn = NULL; - - // 論理アドレス表示か - bool is_logical = false; - - // テキストスクリーン - TextScreen monitor; - // テキストスクリーンコントロール - WXTextScreen *screen = NULL; - - // タイマー - wxTimer timer; + // コントロール + wxTextCtrl *addrctrl {}; + wxButton *prev_btn {}; + wxButton *next_btn {}; + + // コントロールパネルを格納する sizer + wxBoxSizer *ctrlbox {}; + + // 識別子、または sticky_addr[] の添字。 + // メモリダンプウィンドウは複数枚あるので自分がそのうちの何番目か。 + int idx {}; // イベントテーブル wxDECLARE_EVENT_TABLE(); + + // 開始番地の二次記憶域。 + // サブウィンドウは今のところ開いてる時だけオブジェクトが存在している + // タイプだが、メモリダンプウィンドウを閉じてまた開くとさっきのアドレスが + // 見えていてほしいので、ここでその状況を真似する。 + // こっちはあくまで補助用の領域で、現在表示中のアドレスの一次情報は + // screen.userdata のほう。 + static std::array sticky_addr; };