|
|
1.1 root 1: //
2: // nono
1.1.1.2 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #pragma once
8:
9: #include "wxsubwindow.h"
10: #include "wxtextscreen.h"
11:
1.1.1.3 ! root 12: class WXLogMonitor : public WXVResizeSubWindow, public IMonitor
1.1 root 13: {
1.1.1.3 ! root 14: using inherited = WXVResizeSubWindow;
1.1 root 15:
16: public:
17: WXLogMonitor(wxWindow *, wxWindowID);
1.1.1.3 ! root 18: virtual ~WXLogMonitor() override;
1.1 root 19:
1.1.1.3 ! root 20: nnSize GetMonitorSize() override;
! 21: void MonitorUpdate(TextScreen& ts) override;
1.1 root 22:
23: private:
1.1.1.3 ! root 24: // サイズ変更イベント
! 25: void OnSize(wxSizeEvent&);
1.1 root 26:
1.1.1.3 ! root 27: // マウスホイールイベント
! 28: void OnMouseWheel(wxMouseEvent&);
! 29:
! 30: // スクロールイベント
! 31: void OnScroll(wxScrollEvent&);
! 32:
! 33: // スクロールバー再設定
! 34: void SetScroll();
! 35:
! 36: // スクロール処理
! 37: void DoScroll(int pos);
! 38:
! 39: // ウィンドウサイズ再計算
! 40: void DoSize() override;
! 41:
! 42: // バックログに追加
1.1 root 43: void Append(const char *);
44:
1.1.1.3 ! root 45: // 1行追加された時の下請け処理
! 46: void IncLines();
1.1 root 47:
1.1.1.3 ! root 48: // スクロールバー
! 49: wxScrollBar *vscroll = NULL;
1.1 root 50:
51: int col = 0;
52: int row = 0;
53:
1.1.1.3 ! root 54: // 表示開始位置
! 55: // パネル最下行に表示する行を、最新行からのオフセットで表す。
! 56: // 0 ならパネル最下行は最新行、1 なら一つ手前の行…となる。
! 57: int vpos = 0;
! 58:
! 59: // 現在のログ行数
! 60: int lines = 0;
! 61:
! 62: // ログ全体の行数(上限)
! 63: const int backlog = 10000;
! 64:
1.1 root 65: // ログバッファ
66: // ここは属性フィールドを持たないテキストによる循環バッファ
1.1.1.3 ! root 67: std::vector<uint8> logbuf {};
1.1 root 68:
1.1.1.3 ! root 69: // 今から書き込む行の先頭 (logbuf からのオフセット)
! 70: int cursor {};
1.1 root 71:
72: // UTF-8 -> CP932 変換
73: wxCSConv conv { "CP932" };
74:
75: // イベントテーブル
76: wxDECLARE_EVENT_TABLE();
77: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.