Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
@@ -0,0 +1,235 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* ExerciseChooser Widget for ADLER WebsocketSimulator
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Patric Karwat, ESZS, 2025-03-03
|
||||
*/
|
||||
|
||||
#include "awss_exercise_chooser.h"
|
||||
#include "ui_awss_exercise_chooser.h"
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonObject>
|
||||
#include <QPushButton>
|
||||
|
||||
namespace AdlerWebSocketSimulator {
|
||||
|
||||
ExerciseChooser::ExerciseChooser(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_ui(new Ui::ExerciseChooser)
|
||||
, m_logger(getLogger("ExerciseChooser"))
|
||||
{
|
||||
m_ui->setupUi(this);
|
||||
m_ui->stackedWidget->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
ExerciseChooser::~ExerciseChooser()
|
||||
{
|
||||
delete m_ui;
|
||||
}
|
||||
|
||||
void ExerciseChooser::setExercises(const QString &message)
|
||||
{
|
||||
ERROR_LOG(m_logger) << message;
|
||||
if (!m_ui->vlExercises->isEmpty())
|
||||
{
|
||||
for (auto ptr : m_ui->Exercise->findChildren<QPushButton*>())
|
||||
{
|
||||
m_ui->vlExercises->removeWidget(ptr);
|
||||
ptr->deleteLater();
|
||||
}
|
||||
//remove all
|
||||
}
|
||||
QJsonDocument doc = QJsonDocument::fromJson(message.toUtf8());// = QJsonDocument::fromJson(message);
|
||||
if (!doc.object().contains(QStringLiteral("data")))
|
||||
return;
|
||||
|
||||
QJsonValue val = doc.object().value(QStringLiteral("data"));
|
||||
if (!val.isArray())
|
||||
return;
|
||||
|
||||
for (const auto &ex: val.toArray())
|
||||
{
|
||||
// ERROR_LOG(m_logger) << ex;
|
||||
int ppmPort = 0;
|
||||
QJsonObject ob = ex.toObject();
|
||||
if (!ob.contains(QStringLiteral("exerciseId")))
|
||||
return;
|
||||
//get current Exercise ID
|
||||
int id = ob.value(QStringLiteral("exerciseId")).toInt();
|
||||
|
||||
// now querry services for PPM Port
|
||||
if (ob.contains(QStringLiteral("services")))
|
||||
{
|
||||
QJsonValue services = ob.value(QStringLiteral("services"));
|
||||
if (!services.isArray())
|
||||
return;
|
||||
for (const auto &serv :services.toArray())
|
||||
{
|
||||
if (!serv.toObject().isEmpty()
|
||||
&& serv.toObject().contains(QStringLiteral("nameAbbrevation")))
|
||||
{
|
||||
bool isTab = serv.toObject().value(QStringLiteral("nameAbbrevation")).toString().toLower() == QStringLiteral("tab");
|
||||
bool isPpm = serv.toObject().value(QStringLiteral("nameAbbrevation")).toString().toLower() == QStringLiteral("ppm");
|
||||
bool isExm = serv.toObject().value(QStringLiteral("nameAbbrevation")).toString().toLower() == QStringLiteral("exm");
|
||||
if (!isTab && !isPpm && !isExm)
|
||||
continue;
|
||||
|
||||
QJsonValue ports = serv.toObject().value(QStringLiteral("ports"));
|
||||
if (!ports.isArray())
|
||||
return;
|
||||
|
||||
for (const auto &port: ports.toArray())
|
||||
{
|
||||
if (!port.toObject().contains(QStringLiteral("typeId")) || !port.toObject().contains(QStringLiteral("number")) )
|
||||
return;
|
||||
if (isExm && port.toObject().value(QStringLiteral("typeId")).toInt() == 1)
|
||||
{
|
||||
m_exmPort = port.toObject().value(QStringLiteral("number")).toInt() ;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isPpm && port.toObject().value(QStringLiteral("typeId")).toInt() == 1)
|
||||
{
|
||||
ppmPort = port.toObject().value(QStringLiteral("number")).toInt() ;
|
||||
}
|
||||
if (isTab && port.toObject().value(QStringLiteral("typeId")).toInt() == 3)
|
||||
{
|
||||
int tabPort = port.toObject().value(QStringLiteral("number")).toInt() ;
|
||||
m_execerciseToProxyPort.insert(id, tabPort );
|
||||
continue;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if (ppmPort <= 0 || id <= 0)
|
||||
continue;
|
||||
QPushButton *btn = new QPushButton(tr("Exercise: ")+ QString::number(id));
|
||||
btn->setProperty("port", ppmPort);
|
||||
btn->setProperty("excerciseId", id);
|
||||
btn->setDisabled(true);
|
||||
btn->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding);
|
||||
connect( btn, &QPushButton::clicked, this, &ExerciseChooser::onExerciseClicked);
|
||||
m_ui->vlExercises->addWidget(btn);
|
||||
}
|
||||
|
||||
if (m_exmPort > 0)
|
||||
{
|
||||
emit requestExerciseInformation(m_exmPort);
|
||||
}
|
||||
|
||||
//parse exercises
|
||||
}
|
||||
|
||||
void ExerciseChooser::setExeciseInfo(const QString &message)
|
||||
{
|
||||
ERROR_LOG(m_logger) << message;
|
||||
if (m_ui->vlExercises->isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
QJsonDocument doc = QJsonDocument::fromJson(message.toUtf8());// = QJsonDocument::fromJson(message);
|
||||
if (!doc.object().contains(QStringLiteral("data")))
|
||||
return;
|
||||
|
||||
QJsonValue val = doc.object().value(QStringLiteral("data"));
|
||||
if (!val.isArray())
|
||||
return;
|
||||
|
||||
for (const auto &ex: val.toArray())
|
||||
{
|
||||
if (ex.toObject().isEmpty())
|
||||
return;
|
||||
const QJsonObject &exOb = ex.toObject();
|
||||
if (!exOb.contains(QStringLiteral("status")) || !exOb.contains(QStringLiteral("id")))
|
||||
return;
|
||||
int id = exOb.value(QStringLiteral("id")).toInt();
|
||||
int status = exOb.value(QStringLiteral("status")).toInt();
|
||||
for (auto ptr : m_ui->Exercise->findChildren<QPushButton *>(QString()))
|
||||
{
|
||||
if (ptr->property("excerciseId").toInt() == id)
|
||||
{
|
||||
if (status > 1 && status < 6)
|
||||
ptr->setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void ExerciseChooser::setPartyData(const QString &message)
|
||||
{
|
||||
if (!m_ui->vlParty->isEmpty())
|
||||
{
|
||||
for (auto ptr : m_ui->Party->findChildren<QPushButton*>())
|
||||
{
|
||||
m_ui->vlParty->removeWidget(ptr);
|
||||
ptr->deleteLater();
|
||||
}
|
||||
//remove all
|
||||
}
|
||||
QJsonDocument doc = QJsonDocument::fromJson(message.toUtf8());// = QJsonDocument::fromJson(message);
|
||||
if (!doc.object().contains(QStringLiteral("data")))
|
||||
return;
|
||||
|
||||
QJsonValue val = doc.object().value(QStringLiteral("data"));
|
||||
if (!val.isArray())
|
||||
return;
|
||||
|
||||
for (const auto &partyData: val.toArray())
|
||||
{
|
||||
// ERROR_LOG(m_logger) << ex;
|
||||
|
||||
QJsonObject ob = partyData.toObject();
|
||||
|
||||
int id = ob.value(QStringLiteral("id")).toInt();
|
||||
if (id <= 1) // 0 ist pool 1 is OC
|
||||
continue;
|
||||
QString name;
|
||||
QColor color;
|
||||
// now querry services for PPM Port
|
||||
if (!ob.contains(QStringLiteral("name")))
|
||||
return;
|
||||
|
||||
name = ob.value(QStringLiteral("name")).toString();
|
||||
|
||||
if (!ob.contains(QStringLiteral("color")))
|
||||
return;
|
||||
|
||||
color = QColor::fromRgb(QRgb(ob.value(QStringLiteral("color")).toInt()));
|
||||
|
||||
QPushButton *btn = new QPushButton(tr("Name: ") + name);
|
||||
btn->setStyleSheet(QStringLiteral("background-color: %1").arg(color.name()));
|
||||
btn->setProperty("id", id);
|
||||
btn->setProperty("name", name);
|
||||
btn->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding);
|
||||
connect( btn, &QPushButton::clicked, this, &ExerciseChooser::onPartyClicked);
|
||||
m_ui->vlParty->addWidget(btn);
|
||||
}
|
||||
|
||||
m_ui->stackedWidget->setCurrentIndex(1);
|
||||
|
||||
}
|
||||
|
||||
void ExerciseChooser::onExerciseClicked()
|
||||
{
|
||||
int port = sender()->property("port").toInt();
|
||||
int excerciseId = sender()->property("excerciseId").toInt();
|
||||
m_currentExercise = excerciseId;
|
||||
emit connectToExercise(port);
|
||||
}
|
||||
|
||||
void ExerciseChooser::onPartyClicked()
|
||||
{
|
||||
int partyId = sender()->property("id").toInt();
|
||||
QString partyName = sender()->property("name").toString();
|
||||
emit connectToProxy(m_execerciseToProxyPort.value(m_currentExercise), partyId, partyName);
|
||||
}
|
||||
|
||||
} //namespace AdlerWebSocketSimulator
|
||||
Reference in new issue
Block a user