Skip to content
Snippets Groups Projects
Commit 49ed2aad authored by Alberto Nidasio's avatar Alberto Nidasio Committed by Alberto Nidasio
Browse files

[OutgoingMessageViewer] Added optional elapsed time column

parent af8c7f28
No related branches found
No related tags found
No related merge requests found
...@@ -24,18 +24,18 @@ ...@@ -24,18 +24,18 @@
#include <QDebug> #include <QDebug>
#include <QTableWidgetItem> #include <QTableWidgetItem>
OutgoingMessagesViewerModule::OutgoingMessagesViewerModule(QWidget* parent) OutgoingMessagesViewerModule::OutgoingMessagesViewerModule()
: DefaultModule(parent) : Module(ModuleId::OUTGOING_MESSAGES_VIEWER)
{ {
setupUi(); setupUi();
defaultContextMenuSetup(); customContextMenuActionSetup();
// Subscribe to commands, ACKs and NACKs // Subscribe to commands, ACKs and NACKs
getCore()->getMessageBroker()->subscribe( MessageBroker::getInstance().subscribe(
Filter::fromString(SkywardHubStrings::logCommandsTopic), this, Filter::fromString(SkywardHubStrings::logCommandsTopic), this,
[this](const Message& message, const Filter& filter) [this](const Message& message, const Filter& filter)
{ handleMsg(message); }); { handleMsg(message); });
getCore()->getMessageBroker()->subscribe( MessageBroker::getInstance().subscribe(
Filter::fromString(SkywardHubStrings::mavlink_received_msg_ACK_topic), 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); }); { handleAck(message); });
...@@ -47,18 +47,35 @@ OutgoingMessagesViewerModule::OutgoingMessagesViewerModule(QWidget* parent) ...@@ -47,18 +47,35 @@ OutgoingMessagesViewerModule::OutgoingMessagesViewerModule(QWidget* parent)
Filter::fromString(SkywardHubStrings::mavlink_received_msg_WACK_topic), 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); }); { handleWack(message); });
}
QWidget* OutgoingMessagesViewerModule::toWidget() { return this; } timer = new QTimer(this);
connect(timer, &QTimer::timeout, this,
&OutgoingMessagesViewerModule::updateElapsedTime);
}
XmlObject OutgoingMessagesViewerModule::toXmlObject() XmlObject OutgoingMessagesViewerModule::toXmlObject()
{ {
return XmlObject(getName(ModuleId::OUTCOMINGMESSAGEVIEWER)); XmlObject obj = Module::toXmlObject();
obj.addAttribute("timestamp", timestamp->isChecked());
obj.addAttribute("elapsed_time", elapsedTime->isChecked());
return obj;
} }
void OutgoingMessagesViewerModule::fromXmlObject(const XmlObject& xmlObject) void OutgoingMessagesViewerModule::fromXmlObject(const XmlObject& obj)
{ {
Q_UNUSED(xmlObject); int timestampAtt;
if (obj.getAttribute("timestamp", timestampAtt))
{
timestamp->setChecked(timestampAtt != 0);
}
int elapsedTimeAtt;
if (obj.getAttribute("elapsed_time", elapsedTimeAtt))
{
elapsedTime->setChecked(elapsedTimeAtt != 0);
}
} }
void OutgoingMessagesViewerModule::setupUi() void OutgoingMessagesViewerModule::setupUi()
...@@ -68,18 +85,62 @@ void OutgoingMessagesViewerModule::setupUi() ...@@ -68,18 +85,62 @@ void OutgoingMessagesViewerModule::setupUi()
table = new QTableWidget; table = new QTableWidget;
outerLayout->addWidget(table); outerLayout->addWidget(table);
table->setColumnCount(2); table->setColumnCount(3);
// Hide elapsed time column
table->setColumnHidden(1, true);
// Hide headers
table->verticalHeader()->setVisible(false); table->verticalHeader()->setVisible(false);
table->horizontalHeader()->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( table->horizontalHeader()->setSectionResizeMode(
0, QHeaderView::ResizeToContents); 0, QHeaderView::ResizeToContents);
table->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); table->horizontalHeader()->setSectionResizeMode(
1, QHeaderView::ResizeToContents);
table->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);
// Hide vertical scrollbar
table->verticalScrollBar()->setVisible(false); table->verticalScrollBar()->setVisible(false);
// Disable items selection
table->setSelectionMode(QAbstractItemView::NoSelection); table->setSelectionMode(QAbstractItemView::NoSelection);
setLayout(outerLayout); 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);
qDebug() << "Set context menu for outgoing messages viewer";
}
void OutgoingMessagesViewerModule::resizeEvent(QResizeEvent* event) void OutgoingMessagesViewerModule::resizeEvent(QResizeEvent* event)
{ {
if (table->rowCount() == 0) if (table->rowCount() == 0)
...@@ -193,7 +254,8 @@ void OutgoingMessagesViewerModule::addMessageToTable( ...@@ -193,7 +254,8 @@ void OutgoingMessagesViewerModule::addMessageToTable(
const QPair<QDateTime, Message>& msg, int row) const QPair<QDateTime, Message>& msg, int row)
{ {
// Prepare the row items // Prepare the row items
auto dateTxt = new QTableWidgetItem(msg.first.toString("hh.mm.ss")); auto timestampTxt = new QTableWidgetItem(msg.first.toString("hh.mm.ss"));
auto elapsedTimeTxt = new QTableWidgetItem("-00.00.00");
auto msgName = new QTableWidgetItem(msg.second.getField("name").toString()); auto msgName = new QTableWidgetItem(msg.second.getField("name").toString());
msgName->setBackground(QBrush(QColor(80, 80, 80))); msgName->setBackground(QBrush(QColor(80, 80, 80)));
msgName->setForeground(QBrush(QColor(0, 0, 0))); msgName->setForeground(QBrush(QColor(0, 0, 0)));
...@@ -202,6 +264,28 @@ void OutgoingMessagesViewerModule::addMessageToTable( ...@@ -202,6 +264,28 @@ void OutgoingMessagesViewerModule::addMessageToTable(
table->insertRow(row); table->insertRow(row);
// Fill the row with data // Fill the row with data
table->setItem(row, 0, dateTxt); table->setItem(row, 0, timestampTxt);
table->setItem(row, 1, msgName); table->setItem(row, 1, elapsedTimeTxt);
table->setItem(row, 2, msgName);
}
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);
}
} }
...@@ -24,22 +24,22 @@ ...@@ -24,22 +24,22 @@
#include <QDateTime> #include <QDateTime>
#include <QList> #include <QList>
#include <QPair> #include <QPair>
#include <QTimer>
#include <QWidget> #include <QWidget>
class OutgoingMessagesViewerModule : public DefaultModule class OutgoingMessagesViewerModule : public Module
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit OutgoingMessagesViewerModule(QWidget* parent = nullptr); OutgoingMessagesViewerModule();
QWidget* toWidget() override;
XmlObject toXmlObject() override; XmlObject toXmlObject() override;
void fromXmlObject(const XmlObject& xmlObject) override; void fromXmlObject(const XmlObject& xmlObject) override;
private: private:
void setupUi(); void setupUi();
void customContextMenuActionSetup();
void resizeEvent(QResizeEvent* event = nullptr) override; void resizeEvent(QResizeEvent* event = nullptr) override;
...@@ -50,8 +50,15 @@ private: ...@@ -50,8 +50,15 @@ private:
void addMessageToTable(const QPair<QDateTime, Message>& msg, int row = 0); void addMessageToTable(const QPair<QDateTime, Message>& msg, int row = 0);
void updateElapsedTime();
QTableWidget* table; QTableWidget* table;
QTimer* timer;
QAction* timestamp;
QAction* elapsedTime;
QList<QPair<QDateTime, Message>> messages; QList<QPair<QDateTime, Message>> messages;
size_t maxListSize = 20;
int maxListSize = 20;
int timerPeriod = 1000; // [ms]
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment