diff --git a/.vscode/settings.json b/.vscode/settings.json index 0dc8485d70a8b9adafe9b3c138a299d38e639e26..74d9bae1b0355fa2feef595e842cfb7ee44eaaf3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,19 @@ { "files.associations": { "ratio": "cpp", - "sstream": "cpp" + "sstream": "cpp", + "filesystem": "cpp", + "string": "cpp", + "chrono": "cpp", + "variant": "cpp", + "map": "cpp", + "set": "cpp", + "string_view": "cpp", + "unordered_map": "cpp", + "locale": "cpp" }, - "editor.defaultFormatter": "chiehyu.vscode-astyle" + "editor.defaultFormatter": "chiehyu.vscode-astyle", + "[xml]": { + "editor.defaultFormatter": "redhat.vscode-xml" + } } \ No newline at end of file diff --git a/Modules/StateViewer/stateviewermodule.cpp b/Modules/StateViewer/stateviewermodule.cpp index d0fe2dc96d698d04c845d53d98da0ede45a44bd9..0164c7817aa4b28f4b8e4320c4d0563f0a75a7af 100644 --- a/Modules/StateViewer/stateviewermodule.cpp +++ b/Modules/StateViewer/stateviewermodule.cpp @@ -1,26 +1,29 @@ #include "stateviewermodule.h" -#include "ui_stateviewermodule.h" #include <QInputDialog> #include <QLineEdit> -#include "Core/modulemessagesbroker.h" + #include "Components/TopicAndFieldSelector/topicandfieldselector.h" +#include "Core/modulemessagesbroker.h" +#include "ui_stateviewermodule.h" -enum states {INIT = 1, - INIT_DONE = 2, - INIT_ERROR = 3, - TEST_MODE = 8, - SENSORS_CALIBRATION = 4, - ALGOS_CALIBRATION = 5, - DISARMED = 6, - ARMED = 7, - ASCENDING = 10, - DROGUE_DESCENT = 11, - TERMINAL_DESCENT = 12, - LANDED = 13 - }; - -StateViewerModule::StateViewerModule(QWidget* parent) : DefaultModule(parent), ui(new Ui::StateViewerModule) { +enum states { + INVALID = 0, + INIT, + INIT_ERROR, + SENSORS_CALIBRATION, + ALGOS_CALIBRATION, + DISARMED, + TEST_MODE, + ARMED, + ASCENDING, + DROGUE_DESCENT, + TERMINAL_DESCENT, + LANDED +}; + +StateViewerModule::StateViewerModule(QWidget* parent) + : DefaultModule(parent), ui(new Ui::StateViewerModule) { ui->setupUi(this); defaultContextMenuSetup(); @@ -34,22 +37,19 @@ StateViewerModule::StateViewerModule(QWidget* parent) : DefaultModule(parent), u labels.append(ui->label_8_TERMINAL); labels.append(ui->label_9_END); - - QMap<int, int>indexes{ + labelsIndexes = { {INIT, 0}, {INIT_ERROR, 0}, - {INIT_DONE, 0}, {TEST_MODE, 1}, {SENSORS_CALIBRATION, 2}, {ALGOS_CALIBRATION, 2}, - {DISARMED, 3 }, + {DISARMED, 3}, {ARMED, 4}, {ASCENDING, 5}, {DROGUE_DESCENT, 6}, {TERMINAL_DESCENT, 7}, {LANDED, 8}, }; - labelsIndexes = indexes; } StateViewerModule::~StateViewerModule() { @@ -57,9 +57,7 @@ StateViewerModule::~StateViewerModule() { delete ui; } -QWidget* StateViewerModule::toWidget() { - return this; -} +QWidget* StateViewerModule::toWidget() { return this; } XmlObject StateViewerModule::toXmlObject() { XmlObject obj(getName(ModuleId::STATEVIEWER)); @@ -70,47 +68,45 @@ XmlObject StateViewerModule::toXmlObject() { } void StateViewerModule::fromXmlObject(const XmlObject& xmlObject) { - if(xmlObject.getObjectName() == getName(ModuleId::STATEVIEWER)) { - auto f = TopicAndFieldFilter::fromStringUnsafe(xmlObject.getAttribute("filter")); - setFilter(f); + if (xmlObject.getObjectName() == getName(ModuleId::STATEVIEWER)) { + auto filter = TopicAndFieldFilter::fromStringUnsafe( + xmlObject.getAttribute("filter")); + setFilter(filter); } } void StateViewerModule::addCustomActionsToMenu() { QAction* config = new QAction("Choose input topic and field"); - connect(config, &QAction::triggered, this, &StateViewerModule::onConfigureClicked); + connect(config, &QAction::triggered, this, + &StateViewerModule::onConfigureClicked); addActionToMenu(config); } void StateViewerModule::onConfigureClicked() { - TopicAndFieldSelector::selectTopicAndField([this](const TopicAndFieldFilter & filter) { - setFilter(filter); - }); + TopicAndFieldSelector::selectTopicAndField( + [this](const TopicAndFieldFilter& filter) { setFilter(filter); }); } void StateViewerModule::setFilter(const TopicAndFieldFilter& newFilter) { getCore()->getModuleMessagesBroker()->unsubscribe(filter.getTopic(), this); - getCore()->getModuleMessagesBroker()->subscribe(newFilter.getTopic(), this, [this](const ModuleMessage & msg) { - onMsgReceived(msg); - }); + getCore()->getModuleMessagesBroker()->subscribe( + newFilter.getTopic(), this, + [this](const ModuleMessage& msg) { onMsgReceived(msg); }); filter = newFilter; } void StateViewerModule::onMsgReceived(const ModuleMessage& msg) { MessageField field; - if(!filter.matchMessage(msg, field)) { - return; - } - int value = (int) field.getInteger(-1); - if(value != -1) { - setState(value); - } + if (!filter.matchMessage(msg, field)) return; + + int value = (int)field.getUInteger(-1); + if (value != -1) setState(value); } void StateViewerModule::setState(int state) { - if(state != currentState) { + if (state != currentState) { currentState = state; updateView(state); } @@ -121,37 +117,26 @@ void StateViewerModule::updateView(int state) { QString completedStyle = "background-color:green;"; QString errorStyle = "background-color:red;"; - if(state == INIT) { + if (state == INIT) { ui->label_1_INIT->setStyleSheet(currentStateStyle); - } else if(state == INIT_DONE) { - ui->label_1_INIT->setStyleSheet(completedStyle); - } else if(state == INIT_ERROR) { + } else if (state == INIT_ERROR) { ui->label_1_INIT->setStyleSheet(errorStyle); - } else if(state > INIT_ERROR && labelsIndexes.contains(state)) { + } else if (state > INIT_ERROR && labelsIndexes.contains(state)) { int index = labelsIndexes[state]; - if(index < labels.count()) { + + if (index < labels.count()) labels[index]->setStyleSheet(currentStateStyle); - } } - if(labelsIndexes.contains(state)) { - setStyleAfter(labelsIndexes[state] + 1, ""); - setStyleBefore(labelsIndexes[state] - 1, completedStyle); - } -} + if (labelsIndexes.contains(state)) { + int index = labelsIndexes[state]; -void StateViewerModule::setStyleAfter(int threshold, const QString& style) { - for (int i = threshold; i < labels.count(); i++ ) { - labels[i]->setStyleSheet(style); - } -} + // Set as completed every state before the current + for (int i = index - 1; i >= 0; i--) + labels[i]->setStyleSheet(completedStyle); -void StateViewerModule::setStyleBefore(int threshold, const QString& style) { - for (int i = threshold; i >= 0 && i < labels.count(); i-- ) { - labels[i]->setStyleSheet(style); + // Reset every state after the current + for (int i = index + 1; i < labels.count(); i++) + labels[i]->setStyleSheet(""); } } - - - - diff --git a/Modules/StateViewer/stateviewermodule.h b/Modules/StateViewer/stateviewermodule.h index 1297e46d105b9e49375d29b66c336204d7722613..2b62b6349c9aaef70f39be903f2c23a9550067f8 100644 --- a/Modules/StateViewer/stateviewermodule.h +++ b/Modules/StateViewer/stateviewermodule.h @@ -1,12 +1,12 @@ #ifndef STATEVIEWERMODULE_H #define STATEVIEWERMODULE_H -#include <QWidget> #include <QLabel> +#include <QWidget> -#include "Modules/DefaultModule/defaultmodule.h" #include "Core/Message/modulemessage.h" #include "Core/Message/topicandfieldfilter.h" +#include "Modules/DefaultModule/defaultmodule.h" namespace Ui { class StateViewerModule; @@ -15,7 +15,7 @@ class StateViewerModule; class StateViewerModule : public DefaultModule { Q_OBJECT - public: + public: explicit StateViewerModule(QWidget* parent = nullptr); ~StateViewerModule(); @@ -24,18 +24,15 @@ class StateViewerModule : public DefaultModule { XmlObject toXmlObject() override; void fromXmlObject(const XmlObject& xmlObject) override; - - protected: + protected: void addCustomActionsToMenu() override; void onConfigureClicked(); void setFilter(const TopicAndFieldFilter& filter); void onMsgReceived(const ModuleMessage& msg); void setState(int state); void updateView(int state); - void setStyleAfter(int threshold, const QString& style); - void setStyleBefore(int threshold, const QString& style); - private: + private: Ui::StateViewerModule* ui; TopicAndFieldFilter filter; @@ -45,4 +42,4 @@ class StateViewerModule : public DefaultModule { QMap<int, int> labelsIndexes; }; -#endif // STATEVIEWERMODULE_H +#endif // STATEVIEWERMODULE_H diff --git a/Modules/StateViewer/stateviewermodule.ui b/Modules/StateViewer/stateviewermodule.ui index 58c7abd166bdea2fb2d00cb78df33ad46c35ea5e..d489155124219990a9c97f3deae393b750035cdd 100644 --- a/Modules/StateViewer/stateviewermodule.ui +++ b/Modules/StateViewer/stateviewermodule.ui @@ -1,142 +1,140 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> - <class>StateViewerModule</class> - <widget class="QWidget" name="StateViewerModule"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>975</width> - <height>225</height> - </rect> - </property> - <property name="windowTitle"> - <string>Form</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QScrollArea" name="scrollArea"> - <property name="widgetResizable"> - <bool>true</bool> - </property> - <widget class="QWidget" name="scrollAreaWidgetContents"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>953</width> - <height>203</height> - </rect> - </property> - <property name="styleSheet"> - <string notr="true">border: 1px solid grey; -color: white;</string> - </property> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="4"> - <widget class="QLabel" name="label_5_ARMED"> - <property name="text"> - <string>ARMED</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="label_2_TEST"> - <property name="text"> - <string>TEST + <class>StateViewerModule</class> + <widget class="QWidget" name="StateViewerModule"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>975</width> + <height>225</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QScrollArea" name="scrollArea"> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="scrollAreaWidgetContents"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>953</width> + <height>203</height> + </rect> + </property> + <property name="styleSheet"> + <string notr="true">border: 1px solid grey; color: white;</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="4"> + <widget class="QLabel" name="label_5_ARMED"> + <property name="text"> + <string>ARMED</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="label_2_TEST"> + <property name="text"> + <string>TEST MODE</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="label_3_CALIBRATION"> - <property name="text"> - <string>CALIBRATION</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item row="0" column="7"> - <widget class="QLabel" name="label_8_TERMINAL"> - <property name="text"> - <string>TERMINAL + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QLabel" name="label_3_CALIBRATION"> + <property name="text"> + <string>CALIBRATION</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="0" column="7"> + <widget class="QLabel" name="label_8_TERMINAL"> + <property name="text"> + <string>TERMINAL DESCENT</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item row="0" column="5"> - <widget class="QLabel" name="label_6_ASCENDING"> - <property name="text"> - <string>ASCENDING</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item row="0" column="3"> - <widget class="QLabel" name="label_4_DISARMED"> - <property name="styleSheet"> - <string notr="true">border: 1px solid grey; -color: white;</string> - </property> - <property name="text"> - <string>DISARMED</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item row="0" column="6"> - <widget class="QLabel" name="label_7_DROGUE"> - <property name="text"> - <string>DROGUE + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="0" column="5"> + <widget class="QLabel" name="label_6_ASCENDING"> + <property name="text"> + <string>ASCENDING</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QLabel" name="label_4_DISARMED"> + <property name="styleSheet"> + <string notr="true">border: 1px solid grey; color: white;</string> + </property> + <property name="text"> + <string>DISARMED</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="0" column="6"> + <widget class="QLabel" name="label_7_DROGUE"> + <property name="text"> + <string>DROGUE DESCENT</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_1_INIT"> - <property name="text"> - <string>INIT</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item row="0" column="8"> - <widget class="QLabel" name="label_9_END"> - <property name="text"> - <string>END + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_1_INIT"> + <property name="text"> + <string>INIT</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="0" column="8"> + <widget class="QLabel" name="label_9_END"> + <property name="text"> + <string>END MISSION</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - </layout> - </widget> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + </layout> </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> + <resources /> + <connections /> +</ui> \ No newline at end of file