Files
uartscope/include/tagpanel.h
Dany Thinnes a942f8385b - Tags haben jetzt einen Verlauf
- Suchfunktion hat jetzt weiter und zurück
- Tags mit Bindestrich werden erkannt
2026-08-18 00:24:43 +02:00

67 lines
2.3 KiB
C++

#pragma once
#include <QGroupBox>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QTableWidget>
#include <QPlainTextEdit>
#include <QTabWidget>
#include <QStringList>
#include <QMap>
// TagPanel displays the data received for a single tag (e.g. [WDG]) in two
// tabs:
// - "Aktuell": the most recent value(s), updating in-place (a table for
// key=value pairs, or a plain label for raw/free-form content). If a
// value contains ';', it is treated as a LIST: the key is shown once
// and each list element gets its own row below it (key cell left empty
// for the continuation rows, like a merged-cell look).
// Example: Devs=trackdisk.device;input.device
// Devs trackdisk.device
// input.device
// - "Verlauf": every value ever received for this tag, timestamped, in
// receive order - so you can see the full runtime history rather than
// just the latest snapshot.
class TagPanel : public QGroupBox
{
Q_OBJECT
public:
explicit TagPanel(const QString &tag, QWidget *parent = nullptr);
const QString &tag() const { return m_tag; }
public slots:
void update(const QString &value);
private slots:
void copyToClipboard();
void clearHistory();
private:
void parseKeyValue(const QString &value);
void showRaw(const QString &value);
// Replaces all rows belonging to `key` with one row per value in `values`.
void setKeyValues(const QString &key, const QStringList &values);
// Appends a timestamped entry for `value` to the "Verlauf" tab.
void appendHistory(const QString &value);
QString m_tag;
QTabWidget *m_tabs = nullptr;
QTableWidget *m_table = nullptr;
QLabel *m_rawLabel = nullptr;
QPlainTextEdit *m_historyEdit = nullptr;
int m_historyCount = 0;
// Cap history growth for very chatty/long-running tags so memory use
// stays bounded; oldest entries are dropped first (FIFO).
static constexpr int kMaxHistoryEntries = 5000;
// Track which table rows belong to which key, so repeated updates can
// replace the previous rows instead of appending duplicates.
// Maps key -> (first row index, row count)
struct KeyRange { int firstRow; int count; };
QMap<QString, KeyRange> m_keyRanges;
};