Added logs and check with trad RM we are working ok
This commit is contained in:
112
LogPanel.cpp
Normal file
112
LogPanel.cpp
Normal file
@@ -0,0 +1,112 @@
|
||||
#include "LogPanel.h"
|
||||
#include "WebSocketController.h"
|
||||
|
||||
#include <QCheckBox>
|
||||
#include <QGridLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QPushButton>
|
||||
#include <QScrollArea>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
static const QStringList k_logNames = {
|
||||
"Wireless", "DataBase", "GenericControllers", "ControlPanelRxBusy",
|
||||
"ErrorChecker", "Main", "PowerControl", "Radar", "LogSerial",
|
||||
"GameEventHandler", "GameScript", "userList", "SecondarySystems",
|
||||
"Sounds", "Games", "SecureSocketComms", "CurrentLimit",
|
||||
"TimerDisplay", "Wall:Controlmessages", "PowerOffTimer", "LogMaster",
|
||||
"Wall:Sensingsystem", "Globals", "GameTimer", "Nfc", "ControlPanelTx",
|
||||
"Targetsystem", "GameBase", "LogSyncMessages", "MasterController",
|
||||
"Wall:Buttons", "ControlPanelRx", "PowerStateChange", "SecureSocket",
|
||||
"Authentication", "UplinkComms", "Resources", "GameCounter",
|
||||
"StripInterface", "Uplink", "Wall:Datarequests", "Wirelesswall",
|
||||
"BeamBreakers", "WebSocketServer", "Wall:Targetdrawing",
|
||||
"LoopTestMessages", "Gps", "LoopMessages", "NfcRemote",
|
||||
"LogLoopErrors"
|
||||
};
|
||||
|
||||
LogPanel::LogPanel(WebSocketController *ctrl, QWidget *parent)
|
||||
: QWidget(parent), m_ctrl(ctrl)
|
||||
{
|
||||
auto *outer = new QVBoxLayout(this);
|
||||
outer->setContentsMargins(6, 6, 6, 6);
|
||||
outer->setSpacing(6);
|
||||
|
||||
auto *toolbar = new QHBoxLayout();
|
||||
auto *refreshBtn = new QPushButton("Refresh", this);
|
||||
auto *allOnBtn = new QPushButton("All On", this);
|
||||
auto *allOffBtn = new QPushButton("All Off", this);
|
||||
toolbar->addWidget(refreshBtn);
|
||||
toolbar->addWidget(allOnBtn);
|
||||
toolbar->addWidget(allOffBtn);
|
||||
toolbar->addStretch(1);
|
||||
outer->addLayout(toolbar);
|
||||
|
||||
auto *scroll = new QScrollArea(this);
|
||||
scroll->setWidgetResizable(true);
|
||||
auto *inner = new QWidget(scroll);
|
||||
auto *grid = new QGridLayout(inner);
|
||||
grid->setSpacing(4);
|
||||
grid->setContentsMargins(4, 4, 4, 4);
|
||||
|
||||
const int cols = 4;
|
||||
for (int i = 0; i < k_logNames.size(); ++i) {
|
||||
const QString &name = k_logNames[i];
|
||||
auto *cb = new QCheckBox(name, inner);
|
||||
m_checkboxes[name] = cb;
|
||||
grid->addWidget(cb, i / cols, i % cols);
|
||||
|
||||
connect(cb, &QCheckBox::toggled, this, [this, name](bool checked) {
|
||||
onCheckboxToggled(name, checked);
|
||||
});
|
||||
}
|
||||
|
||||
scroll->setWidget(inner);
|
||||
outer->addWidget(scroll, 1);
|
||||
|
||||
connect(refreshBtn, &QPushButton::clicked, this, &LogPanel::requestRefresh);
|
||||
connect(allOnBtn, &QPushButton::clicked, this, [this]() {
|
||||
for (auto *cb : m_checkboxes)
|
||||
cb->setChecked(true);
|
||||
});
|
||||
connect(allOffBtn, &QPushButton::clicked, this, [this]() {
|
||||
for (auto *cb : m_checkboxes)
|
||||
cb->setChecked(false);
|
||||
});
|
||||
}
|
||||
|
||||
void LogPanel::requestRefresh()
|
||||
{
|
||||
if (m_ctrl)
|
||||
m_ctrl->sendCommand(QStringLiteral("LOG"));
|
||||
}
|
||||
|
||||
void LogPanel::onCheckboxToggled(const QString &name, bool checked)
|
||||
{
|
||||
if (!m_ctrl)
|
||||
return;
|
||||
|
||||
const QString state = checked ? "on" : "off";
|
||||
m_ctrl->sendCommand(QString("LOG %1=%2").arg(name, state));
|
||||
m_ctrl->sendCommand(QStringLiteral("LOG"));
|
||||
}
|
||||
|
||||
void LogPanel::applyLogResponse(const QString &msg)
|
||||
{
|
||||
for (auto *cb : m_checkboxes)
|
||||
cb->blockSignals(true);
|
||||
|
||||
for (auto *cb : m_checkboxes)
|
||||
cb->setChecked(false);
|
||||
|
||||
const QStringList tokens = msg.split(' ', Qt::SkipEmptyParts);
|
||||
for (int i = 1; i < tokens.size(); ++i) {
|
||||
const QString &tok = tokens[i];
|
||||
const bool isOn = tok.endsWith('*');
|
||||
const QString name = isOn ? tok.chopped(1) : tok;
|
||||
if (m_checkboxes.contains(name))
|
||||
m_checkboxes[name]->setChecked(isOn);
|
||||
}
|
||||
|
||||
for (auto *cb : m_checkboxes)
|
||||
cb->blockSignals(false);
|
||||
}
|
||||
Reference in New Issue
Block a user