--- nono/wx/wxdumpmonitor.h 2026/04/29 17:04:28 1.1.1.1 +++ nono/wx/wxdumpmonitor.h 2026/04/29 17:05:48 1.1.1.10 @@ -1,63 +1,106 @@ // // nono -// Copyright (C) 2019 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt +// + +// +// メモリダンプウィンドウ // #pragma once #include "wxsubwindow.h" +#include "wxbutton.h" +#include "wxmonitor.h" +#include "memdump.h" +#include -// -// メモリダンプウィンドウ -// class WXMemdumpWindow : public WXSubWindow { - typedef WXSubWindow inherited; + using inherited = WXSubWindow; public: - WXMemdumpWindow(wxWindow *parent, wxWindowID id); - ~WXMemdumpWindow(); + WXMemdumpWindow(wxWindow *parent, int monid); + ~WXMemdumpWindow() override; + + void FontChanged() override; + bool Layout() override; private: + bool GetMySizeHints(wxSize *, wxSize *, wxSize *, wxSize *) override; + // テキスト入力イベント void OnTextEnter(wxCommandEvent& event); - // ページアップダウンイベント - void OnPrev(wxCommandEvent& event); - void OnNext(wxCommandEvent& event); - - // タイマーイベント - void OnTimer(wxTimerEvent& event); - - // フォントサイズ変更 - virtual void SetFontSize(fontsize_t fontsize); - - // 更新 - 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; + // ボタンイベント + void OnPrevLine(wxCommandEvent& event); + void OnPrevPage(wxCommandEvent& event); + void OnNextLine(wxCommandEvent& event); + void OnNextPage(wxCommandEvent& event); + + // 表示フォーマット変更イベント + void OnFormat(wxCommandEvent& event); + void DoFormat(Memdump::Format fmt_); + + // マウスイベント + void OnMouseWheel(wxMouseEvent& event); + void OnDClick(wxMouseEvent& event); + + uint64 GetAddrAtHexdump(int x, int y, int len); + uint64 GetAddrAtPageShort(int x, int y); + uint64 GetAddrAtDisasm(int x, int y, int instlen); + + // アドレス欄を更新 + void UpdateAddr(); + + // フォーマット番号とセレクション番号の相互変換 + Memdump::Format Selection2Format(int idx); + int Format2Selection(Memdump::Format fmt_); + wxString Format2String(Memdump::Format fmt_); + + // コントロール + wxTextCtrl *addrctrl {}; + std::array buttons {}; + wxChoice *fmtctrl {}; + + // 表示フォーマットの選択肢 + std::vector> fmts {}; + + // コントロールパネルを格納する sizer + wxBoxSizer *ctrlbox {}; + + WXMonitorPanel *screen {}; + + // モニタ ID + int monid {}; + + // メモリダンプウィンドウは複数枚あるので自分がそのうちの何番目か。 + int myidx {}; + + // メモリダンプ + MemdumpMonitor *memdump {}; + + // イベントテーブル + wxDECLARE_EVENT_TABLE(); +}; + +// 編集ダイアログ +class MemEditDialog : public wxDialog +{ + using inherited = wxDialog; + public: + MemEditDialog(wxWindow *parent, uint32 addr, uint32 data, int len, + const std::string& sizestr); + ~MemEditDialog() override; + + // テキストコントロールの値を返す + uint64 GetData() const; + + private: + void OnTextEnter(wxCommandEvent& event); - // タイマー - wxTimer timer; + // 値入力欄 + wxTextCtrl *datactrl {}; // イベントテーブル wxDECLARE_EVENT_TABLE();