#pragma once #include #include #include #include #include #include #include #include #include #include #include // RawView shows the raw UART output with timestamps, search (with next/ // previous navigation and wrap-around), tag suppression, unlimited history, // H+V scrolling and a copy-to-clipboard button. // Auto-scroll is ON by default. class RawView : public QWidget { Q_OBJECT public: explicit RawView(QWidget *parent = nullptr); public slots: void appendLine(const QString &line, const QSet &suppressedTags = {}); void clear(); private slots: void onSearch(const QString &text); void onScrollValueChanged(int value); void onAutoScrollToggled(bool enabled); void copyToClipboard(); void findNext(); void findPrevious(); private: void setupUi(); void applyColorScheme(); // Searches for `text` starting at the current cursor, honouring `flags` // (e.g. QTextDocument::FindBackward). If nothing is found and // `wrapAllowed` is true, retries once from the start/end of the // document so search wraps around instead of dead-ending. bool searchAndSelect(const QString &text, QTextDocument::FindFlags flags, bool wrapAllowed); QPlainTextEdit *m_textEdit = nullptr; QLineEdit *m_searchEdit = nullptr; QPushButton *m_findPrevBtn = nullptr; QPushButton *m_findNextBtn = nullptr; QPushButton *m_clearBtn = nullptr; QPushButton *m_copyBtn = nullptr; QCheckBox *m_autoScrollCb = nullptr; QLabel *m_lineCountLbl = nullptr; bool m_autoScroll = true; // ON by default int m_lineCount = 0; static const QRegularExpression s_tagRe; };