From af8c7f28bc833cbf31731cfdc12c6a571fb6ba06 Mon Sep 17 00:00:00 2001 From: Alberto Nidasio <alberto.nidasio@skywarder.eu> Date: Fri, 2 Aug 2024 17:58:59 +0200 Subject: [PATCH] [OutgoingMessagesViewer] Automatically update the rows count --- .../OutgoingMessagesViewerModule.cpp | 152 +++--------------- .../OutgoingMessagesViewerModule.h | 19 +-- 2 files changed, 24 insertions(+), 147 deletions(-) diff --git a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp index af367fb3..6c2f80af 100644 --- a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp +++ b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp @@ -24,73 +24,41 @@ #include <QDebug> #include <QTableWidgetItem> -OutgoingMessagesViewerModule::OutgoingMessagesViewerModule() - : Module(ModuleId::OUTGOING_MESSAGES_VIEWER) +OutgoingMessagesViewerModule::OutgoingMessagesViewerModule(QWidget* parent) + : DefaultModule(parent) { setupUi(); - customContextMenuActionSetup(); + defaultContextMenuSetup(); // Subscribe to commands, ACKs and NACKs - MessageBroker::getInstance().subscribe( + getCore()->getMessageBroker()->subscribe( Filter::fromString(SkywardHubStrings::logCommandsTopic), this, [this](const Message& message, const Filter& filter) { handleMsg(message); }); - MessageBroker::getInstance().subscribe( + getCore()->getMessageBroker()->subscribe( Filter::fromString(SkywardHubStrings::mavlink_received_msg_ACK_topic), - this, - [this](const Message& message, const Filter& filter) + this, [this](const Message& message, const Filter& filter) { handleAck(message); }); MessageBroker::getInstance().subscribe( Filter::fromString(SkywardHubStrings::mavlink_received_msg_NACK_topic), - this, - [this](const Message& message, const Filter& filter) + this, [this](const Message& message, const Filter& filter) { handleNack(message); }); MessageBroker::getInstance().subscribe( Filter::fromString(SkywardHubStrings::mavlink_received_msg_WACK_topic), - this, - [this](const Message& message, const Filter& filter) + this, [this](const Message& message, const Filter& filter) { handleWack(message); }); - - timer = new QTimer(this); - connect(timer, &QTimer::timeout, this, - &OutgoingMessagesViewerModule::updateElapsedTime); } -OutgoingMessagesViewerModule::~OutgoingMessagesViewerModule() -{ - MessageBroker::getInstance().unsubscribe( - Filter::fromString(SkywardHubStrings::logCommandsTopic), this); - MessageBroker::getInstance().unsubscribe( - Filter::fromString(SkywardHubStrings::mavlink_received_msg_ACK_topic), - this); - MessageBroker::getInstance().unsubscribe( - Filter::fromString(SkywardHubStrings::mavlink_received_msg_NACK_topic), - this); -} +QWidget* OutgoingMessagesViewerModule::toWidget() { return this; } XmlObject OutgoingMessagesViewerModule::toXmlObject() { - XmlObject obj = Module::toXmlObject(); - - obj.addAttribute("timestamp", timestamp->isChecked()); - obj.addAttribute("elapsed_time", elapsedTime->isChecked()); - - return obj; + return XmlObject(getName(ModuleId::OUTCOMINGMESSAGEVIEWER)); } -void OutgoingMessagesViewerModule::fromXmlObject(const XmlObject& obj) +void OutgoingMessagesViewerModule::fromXmlObject(const XmlObject& xmlObject) { - int timestampAtt; - if (obj.getAttribute("timestamp", timestampAtt)) - { - timestamp->setChecked(timestampAtt != 0); - } - - int elapsedTimeAtt; - if (obj.getAttribute("elapsed_time", elapsedTimeAtt)) - { - elapsedTime->setChecked(elapsedTimeAtt != 0); - } + Q_UNUSED(xmlObject); } void OutgoingMessagesViewerModule::setupUi() @@ -100,67 +68,18 @@ void OutgoingMessagesViewerModule::setupUi() table = new QTableWidget; outerLayout->addWidget(table); - table->setColumnCount(3); - - // Hide elapsed time column - table->setColumnHidden(1, true); - - // Hide headers + table->setColumnCount(2); table->verticalHeader()->setVisible(false); table->horizontalHeader()->setVisible(false); - - // Timestamp and elapse time columns resize to fit content while message - // takes all the remaining space table->horizontalHeader()->setSectionResizeMode( 0, QHeaderView::ResizeToContents); - table->horizontalHeader()->setSectionResizeMode( - 1, QHeaderView::ResizeToContents); - table->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch); - - // Hide vertical scrollbar + table->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); table->verticalScrollBar()->setVisible(false); - - // Disable items selection table->setSelectionMode(QAbstractItemView::NoSelection); setLayout(outerLayout); } -void OutgoingMessagesViewerModule::customContextMenuActionSetup() -{ - timestamp = new QAction("Timestamp"); - timestamp->setCheckable(true); - timestamp->setChecked(true); - connect(timestamp, &QAction::toggled, this, - [this]() { table->setColumnHidden(0, !timestamp->isChecked()); }); - customContextMenuActions.append(timestamp); - - elapsedTime = new QAction("Elapsed time"); - elapsedTime->setCheckable(true); - connect(elapsedTime, &QAction::toggled, this, - [this]() - { - table->setColumnHidden(1, !elapsedTime->isChecked()); - - if (elapsedTime->isChecked() && !timer->isActive()) - { - timer->start(timerPeriod); - } - else - { - timer->stop(); - } - }); - customContextMenuActions.append(elapsedTime); - - auto clear = new QAction("Clear"); - connect(clear, &QAction::triggered, this, - &OutgoingMessagesViewerModule::clearTable); - customContextMenuActions.append(clear); - - qDebug() << "Set context menu for outgoing messages viewer"; -} - void OutgoingMessagesViewerModule::resizeEvent(QResizeEvent* event) { if (table->rowCount() == 0) @@ -274,48 +193,15 @@ void OutgoingMessagesViewerModule::addMessageToTable( const QPair<QDateTime, Message>& msg, int row) { // Prepare the row items - auto timestampTxt = new QTableWidgetItem(msg.first.toString("hh.mm.ss")); - auto elapsedTimeTxt = new QTableWidgetItem("00.00.00"); + auto dateTxt = new QTableWidgetItem(msg.first.toString("hh.mm.ss")); auto msgName = new QTableWidgetItem(msg.second.getField("name").toString()); - - // Disable editing - timestampTxt->setFlags(Qt::ItemIsEnabled); - elapsedTimeTxt->setFlags(Qt::ItemIsEnabled); - msgName->setFlags(Qt::ItemIsEnabled); + msgName->setBackground(QBrush(QColor(80, 80, 80))); + msgName->setForeground(QBrush(QColor(0, 0, 0))); // Add a new row table->insertRow(row); // Fill the row with data - table->setItem(row, 0, timestampTxt); - table->setItem(row, 1, elapsedTimeTxt); - table->setItem(row, 2, msgName); -} - -void OutgoingMessagesViewerModule::clearTable() -{ - table->clearContents(); - table->setRowCount(0); - messages.clear(); -} - -void OutgoingMessagesViewerModule::updateElapsedTime() -{ - auto currentTime = QDateTime::currentDateTime(); - - for (int i = 0; i < std::min(table->rowCount(), messages.count()); i++) - { - auto date = messages[i].first; - - auto elapsedSeconds = date.secsTo(currentTime) % 60; - auto elapsedMinutes = (date.secsTo(currentTime) / 60) % 60; - auto elapsedHours = date.secsTo(currentTime) / 3600; - - auto elapsedTimeTxt = QString("%1:%2:%3") - .arg(elapsedHours, 2, 'f', 0, '0') - .arg(elapsedMinutes, 2, 'f', 0, '0') - .arg(elapsedSeconds, 2, 'f', 0, '0'); - - table->item(i, 1)->setText(elapsedTimeTxt); - } + table->setItem(row, 0, dateTxt); + table->setItem(row, 1, msgName); } diff --git a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h index 7235f109..d8c58160 100644 --- a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h +++ b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h @@ -24,23 +24,22 @@ #include <QDateTime> #include <QList> #include <QPair> -#include <QTimer> #include <QWidget> -class OutgoingMessagesViewerModule : public Module +class OutgoingMessagesViewerModule : public DefaultModule { Q_OBJECT public: - OutgoingMessagesViewerModule(); - ~OutgoingMessagesViewerModule(); + explicit OutgoingMessagesViewerModule(QWidget* parent = nullptr); + + QWidget* toWidget() override; XmlObject toXmlObject() override; void fromXmlObject(const XmlObject& xmlObject) override; private: void setupUi(); - void customContextMenuActionSetup(); void resizeEvent(QResizeEvent* event = nullptr) override; @@ -50,17 +49,9 @@ private: void handleWack(const Message& wack); void addMessageToTable(const QPair<QDateTime, Message>& msg, int row = 0); - void clearTable(); - - void updateElapsedTime(); QTableWidget* table; - QTimer* timer; - QAction* timestamp; - QAction* elapsedTime; QList<QPair<QDateTime, Message>> messages; - - int maxListSize = 20; - int timerPeriod = 1000; // [ms] + size_t maxListSize = 20; }; -- GitLab