--- nono/wx/wxlogmonitor.h 2026/04/29 17:04:42 1.1.1.4 +++ nono/wx/wxlogmonitor.h 2026/04/29 17:05:12 1.1.1.8 @@ -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); + WXLogMonitor(wxWindow *); virtual ~WXLogMonitor() override; - nnSize GetMonitorSize() override; - void MonitorUpdate(TextScreen& ts) override; + bool Layout() override; private: // サイズ変更イベント @@ -36,17 +81,10 @@ class WXLogMonitor : public WXVResizeSub // スクロール処理 void DoScroll(int pos); - // ウィンドウサイズ再計算 - void DoSize() override; - - // バックログに追加 - void Append(const char *); - - // 1行追加された時の下請け処理 - void IncLines(); + WXMonitorPanel *screen {}; // スクロールバー - wxScrollBar *vscroll {}; + WXScrollBar *vscroll {}; int col {}; int row {}; @@ -59,18 +97,9 @@ class WXLogMonitor : public WXVResizeSub // 現在のログ行数 int lines {}; - // ログ全体の行数(上限) - const int backlog = 10000; - - // ログバッファ - // ここは属性フィールドを持たないテキストによる循環バッファ - std::vector logbuf {}; - - // 今から書き込む行の先頭 (logbuf からのオフセット) - int cursor {}; - - // UTF-8 -> CP932 変換 - wxCSConv conv { "CP932" }; + // モニター + Monitor monitor {}; + LogMonitor log {}; // イベントテーブル wxDECLARE_EVENT_TABLE();