--- nono/wx/wxlogmonitor.h 2026/04/29 17:04:39 1.1.1.3 +++ nono/wx/wxlogmonitor.h 2026/04/29 17:05:31 1.1.1.10 @@ -4,21 +4,66 @@ // Licensed under nono-license.txt // +// +// ログモニター +// + #pragma once #include "wxsubwindow.h" -#include "wxtextscreen.h" +#include "wxscrollbar.h" +#include "wxmonitor.h" -class WXLogMonitor : public WXVResizeSubWindow, public IMonitor +class Logger; +class WXLogMonitor; + +// モニター部分 +class LogMonitor : public Object { - using inherited = WXVResizeSubWindow; + 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 {}; + + Logger *logger {}; + + // ログ全体の行数(上限) + const int backlog = 10000; + + // ログバッファ + TextScreen logbuf {}; + + // 今から書き込む行の logbuf でのY座標 + int cursor {}; + + // UTF-8 -> CP932 変換 + wxCSConv conv { "CP932" }; +}; + +// ログウィンドウ +class WXLogMonitor : public WXSubWindow +{ + using inherited = WXSubWindow; + friend class LogMonitor; public: - WXLogMonitor(wxWindow *, wxWindowID); - virtual ~WXLogMonitor() override; + explicit WXLogMonitor(wxWindow *); + ~WXLogMonitor() override; - nnSize GetMonitorSize() override; - void MonitorUpdate(TextScreen& ts) override; + bool Layout() override; private: // サイズ変更イベント @@ -36,41 +81,25 @@ class WXLogMonitor : public WXVResizeSub // スクロール処理 void DoScroll(int pos); - // ウィンドウサイズ再計算 - void DoSize() override; - - // バックログに追加 - void Append(const char *); - - // 1行追加された時の下請け処理 - void IncLines(); + WXMonitorPanel *screen {}; // スクロールバー - 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" }; + // モニター + std::unique_ptr monitor /*{}*/; + LogMonitor log {}; // イベントテーブル wxDECLARE_EVENT_TABLE();