--- nono/wx/wxdumpmonitor.cpp 2026/04/29 17:04:59 1.1.1.10 +++ nono/wx/wxdumpmonitor.cpp 2026/04/29 17:05:09 1.1.1.11 @@ -4,21 +4,23 @@ // Licensed under nono-license.txt // +// +// メモリダンプウィンドウ +// + #include "wxdumpmonitor.h" #include "wxtextscreen.h" #include "bus.h" #include "debugger.h" -#include - -// -// メモリダンプウィンドウ -// enum { - ID_TEXT, + ID_TEXT = IDGROUP_MEMDUMP, ID_PREV, ID_NEXT, + + ID_local_end, // 最後に置く (チェック用) }; +static_assert(ID_local_end <= (int)IDGROUP_MEMDUMP_END, "ID exceeded"); // イベントテーブル wxBEGIN_EVENT_TABLE(WXMemdumpWindow, inherited) @@ -34,30 +36,17 @@ WXMemdumpWindow::WXMemdumpWindow(wxWindo { idx = idx_; - // → - // +--+----------------------------+--+ - // | |↓+-----------------------+ | | - // | | | 上枠 (アドレス入力欄) | | | - // | | +-----------------------+ | | - // |左| | 上余白 (padding1) | |右| - // |余| +-----------------------+ |余| - // |白| | TextScreen | |白| - // | | +-----------------------+ | | - // | | | 下余白 (padding2) | | | - // | | +-----------------------+ | | - // +--+----------------------------+--+ - - wxBoxSizer *topsizer = new wxBoxSizer(wxHORIZONTAL); - // 左余白 - topsizer->Add(new WXPaddingPanel(this), 0, wxEXPAND); - - // 中列用の縦 sizer - auto *vbox = new wxBoxSizer(wxVERTICAL); - topsizer->Add(vbox, 0, wxEXPAND); + // ↓+-------------------------+ + // | 上枠 (アドレス、△、▽) | + // +-------------------------+ + // | TextScreen | + // +-------------------------+ + + auto *topsizer = new wxBoxSizer(wxVERTICAL); // 上枠用の下敷きパネル - WXPaddingPanel *ctrlpanel = new WXPaddingPanel(this); - vbox->Add(ctrlpanel, 0, wxEXPAND); + auto *ctrlpanel = new WXBitmapPanel(this); + topsizer->Add(ctrlpanel, 0, wxEXPAND); // 上枠用の横 sizer ctrlbox = new wxBoxSizer(wxHORIZONTAL); @@ -80,30 +69,18 @@ WXMemdumpWindow::WXMemdumpWindow(wxWindo ctrlpanel->SetSizer(ctrlbox); ctrlbox->SetSizeHints(ctrlpanel); - // パディングパネル(上下) - // ウィンドウを1行ずつ伸縮させるためには、クライアント領域がフォント高さの - // 整数倍になるようにしないといけない。このウィンドウには大きさ不詳の - // コントロール枠があるので、フォントサイズが確定しないとパディングの - // 高さも確定しない。先にサイズ不定のパネルだけ置いといて、フォントサイズ - // 確定後に大きさを確定させる。DoSize() 参照。 - padding1 = new WXPaddingPanel(this); - padding2 = new WXPaddingPanel(this); screen = new WXTextScreen(this, debugger_memdump_monitor(idx)); - vbox->Add(padding1, 0, wxEXPAND); - vbox->Add(screen, 1, wxEXPAND); - vbox->Add(padding2, 0, wxEXPAND); - - // 右余白 - topsizer->Add(new WXPaddingPanel(this), 0, wxEXPAND); + topsizer->Add(screen, 1, wxEXPAND); SetSizer(topsizer); + // ウィンドウサイズを確定させる + fixed_height = ctrlbox->GetSize().y; + DoSize(); + // 表示を初期化する screen->SetUserData(sticky_addr[idx]); UpdateAddr(); - - // ウィンドウサイズを確定させる - DoSize(); } // デストラクタ @@ -111,15 +88,6 @@ WXMemdumpWindow::~WXMemdumpWindow() { } -// フォントサイズが確定したら、それによってウィンドウサイズを再計算する。 -void -WXMemdumpWindow::DoSize() -{ - // コントロールパネルの大きさ - wxSize csize = ctrlbox->ComputeFittingWindowSize(this); - CalcVSize(csize.y); -} - // テキスト入力イベント void WXMemdumpWindow::OnTextEnter(wxCommandEvent& event)