--- nono/wx/wxlogmonitor.h 2026/04/29 17:04:39 1.1.1.3 +++ nono/wx/wxlogmonitor.h 2026/04/29 17:04:56 1.1.1.6 @@ -9,17 +9,54 @@ #include "wxsubwindow.h" #include "wxtextscreen.h" -class WXLogMonitor : public WXVResizeSubWindow, public IMonitor +class WXLogMonitor; + +// モニター部分 +class LogMonitor : public Object +{ + using inherited = Object; + public: + LogMonitor(); + ~LogMonitor() override; + + void Init(WXLogMonitor *parent_); + + DECLARE_MONITOR_CALLBACK(MonitorUpdate); + + // バックログに追加 + void Append(const char *); + + // 1行追加された時の下請け処理 + void IncLines(); + + private: + WXLogMonitor *parent {}; + + // ログ全体の行数(上限) + const int backlog = 10000; + + // ログバッファ + TextScreen logbuf {}; + + // 今から書き込む行の logbuf でのY座標 + int cursor {}; + + // UTF-8 -> CP932 変換 + wxCSConv conv { "CP932" }; +}; + +// +// ログウィンドウ +// +class WXLogMonitor : public WXVResizeSubWindow { using inherited = WXVResizeSubWindow; + friend class LogMonitor; public: - WXLogMonitor(wxWindow *, wxWindowID); + WXLogMonitor(wxWindow *); virtual ~WXLogMonitor() override; - nnSize GetMonitorSize() override; - void MonitorUpdate(TextScreen& ts) override; - private: // サイズ変更イベント void OnSize(wxSizeEvent&); @@ -39,38 +76,23 @@ class WXLogMonitor : public WXVResizeSub // ウィンドウサイズ再計算 void DoSize() override; - // バックログに追加 - void Append(const char *); - - // 1行追加された時の下請け処理 - void IncLines(); - // スクロールバー - wxScrollBar *vscroll = NULL; + wxScrollBar *vscroll {}; - int col = 0; - int row = 0; + int col {}; + int row {}; // 表示開始位置 // パネル最下行に表示する行を、最新行からのオフセットで表す。 // 0 ならパネル最下行は最新行、1 なら一つ手前の行…となる。 - int vpos = 0; + int vpos {}; // 現在のログ行数 - int lines = 0; - - // ログ全体の行数(上限) - const int backlog = 10000; - - // ログバッファ - // ここは属性フィールドを持たないテキストによる循環バッファ - std::vector logbuf {}; - - // 今から書き込む行の先頭 (logbuf からのオフセット) - int cursor {}; + int lines {}; - // UTF-8 -> CP932 変換 - wxCSConv conv { "CP932" }; + // モニター + Monitor monitor {}; + LogMonitor log {}; // イベントテーブル wxDECLARE_EVENT_TABLE();