Added lazy loading

This commit is contained in:
Jon ESA
2026-04-01 19:40:20 +01:00
parent e10e7127b7
commit f6c6d4e9dc
3 changed files with 111 additions and 42 deletions

View File

@@ -14,6 +14,14 @@
#include "VersionsPanel.h"
#include "WebSocketController.h"
// Must match tabs->addTab order below
static constexpr int TAB_GAMES = 0;
static constexpr int TAB_VERSIONS = 1;
static constexpr int TAB_MANUAL = 2;
static constexpr int TAB_SETTINGS = 3;
static constexpr int TAB_POWER = 4;
static constexpr int TAB_PANELS = 5;
static QWidget *makeGamesTab(WebSocketController *ctrl, QWidget *parent)
{
auto *panel = new GamesPanel(parent);
@@ -35,7 +43,7 @@ static QWidget *makeSettingsTab(WebSocketController *ctrl, QWidget *parent)
layout->setContentsMargins(2, 2, 2, 2);
auto *tree = new SettingsTree(page);
auto *ph = new QTreeWidgetItem(tree);
ph->setText(0, "Connect to load settings...");
ph->setText(0, "Click the settings tab to load...");
layout->addWidget(tree, 1);
ctrl->setSettingsTree(tree);
return page;
@@ -99,15 +107,14 @@ int main(int argc, char *argv[])
mainLayout->setContentsMargins(6, 6, 6, 6);
mainLayout->setSpacing(4);
// --- Header bar ---
auto *headerRow = new QHBoxLayout();
auto *urlEdit = new QLineEdit(&window);
auto *headerRow = new QHBoxLayout();
auto *urlEdit = new QLineEdit(&window);
urlEdit->setPlaceholderText("ws://127.0.0.1:3491/");
urlEdit->setText("ws://127.0.0.1:3491/");
auto *connectBtn = new QPushButton("Connect", &window);
auto *disconnectBtn= new QPushButton("Disconnect", &window);
auto *connectBtn = new QPushButton("Connect", &window);
auto *disconnectBtn = new QPushButton("Disconnect", &window);
disconnectBtn->setEnabled(false);
auto *statusLabel = new QLabel("Disconnected", &window);
auto *statusLabel = new QLabel("Disconnected", &window);
headerRow->addWidget(new QLabel("WebSocket URL:", &window));
headerRow->addWidget(urlEdit, 1);
@@ -116,33 +123,43 @@ int main(int argc, char *argv[])
headerRow->addWidget(statusLabel);
mainLayout->addLayout(headerRow);
// --- Controller ---
auto *ctrl = new WebSocketController(urlEdit, statusLabel, &window);
// --- Tabs ---
auto *tabs = new QTabWidget(&window);
tabs->addTab(makeGamesTab (ctrl, &window), "games");
tabs->addTab(makeVersionsTab(ctrl, &window), "versions");
tabs->addTab(makeManualTab (ctrl, &window), "manual");
tabs->addTab(makeSettingsTab(ctrl, &window), "settings");
tabs->addTab(makePlaceholder("Power", &window), "power");
tabs->addTab(makePanelsTab (ctrl, &window), "panels");
tabs->addTab(makeGamesTab (ctrl, &window), "games"); // 0
tabs->addTab(makeVersionsTab(ctrl, &window), "versions"); // 1
tabs->addTab(makeManualTab (ctrl, &window), "manual"); // 2
tabs->addTab(makeSettingsTab(ctrl, &window), "settings"); // 3
tabs->addTab(makePlaceholder("Power content here", &window), "power"); // 4
tabs->addTab(makePanelsTab (ctrl, &window), "panels"); // 5
mainLayout->addWidget(tabs, 1);
// --- Wire up buttons ---
// Lazy load: each tab fires its own data request on FIRST click only
QObject::connect(tabs, &QTabWidget::currentChanged, &window,
[ctrl](int index) {
switch (index) {
case TAB_GAMES: ctrl->requestGamesData(); break;
case TAB_VERSIONS: ctrl->requestVersionsData(); break;
case TAB_SETTINGS: ctrl->requestSettingsData(); break;
default: break;
}
});
QObject::connect(connectBtn, &QPushButton::clicked, ctrl, &WebSocketController::startConnection);
QObject::connect(disconnectBtn, &QPushButton::clicked, ctrl, &WebSocketController::closeConnection);
QObject::connect(ctrl->socket(), &QWebSocket::connected, ctrl, &WebSocketController::onConnected);
QObject::connect(ctrl->socket(), &QWebSocket::disconnected, ctrl, &WebSocketController::onDisconnected);
QObject::connect(ctrl->socket(), &QWebSocket::textMessageReceived, ctrl, &WebSocketController::onTextMessageReceived);
QObject::connect(ctrl->socket(), &QWebSocket::errorOccurred, ctrl, &WebSocketController::onErrorOccurred);
QObject::connect(ctrl->socket(), &QWebSocket::connected, ctrl, &WebSocketController::onConnected);
QObject::connect(ctrl->socket(), &QWebSocket::disconnected, ctrl, &WebSocketController::onDisconnected);
QObject::connect(ctrl->socket(), &QWebSocket::textMessageReceived, ctrl, &WebSocketController::onTextMessageReceived);
QObject::connect(ctrl->socket(), &QWebSocket::errorOccurred, ctrl, &WebSocketController::onErrorOccurred);
QObject::connect(ctrl->socket(), &QWebSocket::connected, &window, [connectBtn, disconnectBtn]() {
connectBtn->setEnabled(false); disconnectBtn->setEnabled(true);
QObject::connect(ctrl->socket(), &QWebSocket::connected, &window, [connectBtn, disconnectBtn]() {
connectBtn->setEnabled(false);
disconnectBtn->setEnabled(true);
});
QObject::connect(ctrl->socket(), &QWebSocket::disconnected, &window, [connectBtn, disconnectBtn]() {
connectBtn->setEnabled(true); disconnectBtn->setEnabled(false);
connectBtn->setEnabled(true);
disconnectBtn->setEnabled(false);
});
window.resize(1050, 620);