Files
utun2/tools/chatgui/src/nodespage.h
T

34 lines
2.4 KiB
C++

/* GUI-страница известных узлов SQLite: таблица и подробности собираются из одного LEFT JOIN nodes/node_addresses.
* refreshNodes синхронно читает полный результат во временные Qt-значения; виджеты заполняются после успешного finalize.
* Ошибка чтения/данных очищает таблицу и показывает Query error, отсутствие БД — Database not connected; повторный Refresh допустим. */
#pragma once
#include <QWidget>
#include <QTableWidget>
#include <QPlainTextEdit>
#include <QPushButton>
class DbManager;
class NodesPage : public QWidget {
Q_OBJECT
public:
/* db заимствован до уничтожения страницы, nullptr допустим. Создание не читает список узлов. */
explicit NodesPage(DbManager* db, QWidget* parent = nullptr);
/* GUI: заменить таблицу/подробности полным результатом либо явным состоянием ошибки; этапы/причины логируются в CONFIG. */
void refreshNodes();
private slots:
void onRefreshClicked(); // Ручное обновление; также refreshNodes вызывает диалог при выборе категории.
private:
static QString shortenKey(const QByteArray& key); // HEX uppercase: первые/последние 4 байта, при длине <8 целиком.
static QString addrStr(const void* addr, int family); // Проверенный сетевой адрес: family=4/6, обязательные 4/16 байт до возврата.
static QString protoStr(int protocol); // UDP/TCP/REALITY из битмаски; неизвестный обычный protocol — число.
DbManager* m_db; // Заимствованный читатель/handle, живёт до уничтожения страницы.
QTableWidget* m_table; // Дочерняя read-only таблица: ID, имя, X25519, Ed25519, число адресов.
QPlainTextEdit* m_dumpText; // Дочерние подробности того же результата либо сообщение об ошибке.
QPushButton* m_refreshBtn; // Дочерняя кнопка повторного чтения.
};