- Suchfunktion hat jetzt weiter und zurück - Tags mit Bindestrich werden erkannt
67 lines
2.3 KiB
C++
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;
|
|
};
|