Skip to content
Snippets Groups Projects
Commit 2110e7af authored by Alberto Nidasio's avatar Alberto Nidasio Committed by Emilio Corigliano
Browse files

[OutgoingMessagesViewer] Automatically update the rows count

parent cd35c586
Branches
No related tags found
2 merge requests!33Draft: [Topics] Added support for multiple concurrent target systems,!16[OutgoingMessagesViewer] Updated widget graphics and functionalities
...@@ -24,73 +24,41 @@ ...@@ -24,73 +24,41 @@
#include <QDebug> #include <QDebug>
#include <QTableWidgetItem> #include <QTableWidgetItem>
OutgoingMessagesViewerModule::OutgoingMessagesViewerModule() OutgoingMessagesViewerModule::OutgoingMessagesViewerModule(QWidget* parent)
: Module(ModuleId::OUTGOING_MESSAGES_VIEWER) : DefaultModule(parent)
{ {
setupUi(); setupUi();
customContextMenuActionSetup(); defaultContextMenuSetup();
// Subscribe to commands, ACKs and NACKs // Subscribe to commands, ACKs and NACKs
MessageBroker::getInstance().subscribe( getCore()->getMessageBroker()->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); });
MessageBroker::getInstance().subscribe( getCore()->getMessageBroker()->subscribe(
Filter::fromString(SkywardHubStrings::mavlink_received_msg_ACK_topic), Filter::fromString(SkywardHubStrings::mavlink_received_msg_ACK_topic),
this, this, [this](const Message& message, const Filter& filter)
[this](const Message& message, const Filter& filter)
{ handleAck(message); }); { handleAck(message); });
MessageBroker::getInstance().subscribe( MessageBroker::getInstance().subscribe(
Filter::fromString(SkywardHubStrings::mavlink_received_msg_NACK_topic), Filter::fromString(SkywardHubStrings::mavlink_received_msg_NACK_topic),
this, this, [this](const Message& message, const Filter& filter)
[this](const Message& message, const Filter& filter)
{ handleNack(message); }); { handleNack(message); });
MessageBroker::getInstance().subscribe( MessageBroker::getInstance().subscribe(
Filter::fromString(SkywardHubStrings::mavlink_received_msg_WACK_topic), Filter::fromString(SkywardHubStrings::mavlink_received_msg_WACK_topic),
this, this, [this](const Message& message, const Filter& filter)
[this](const Message& message, const Filter& filter)
{ handleWack(message); }); { handleWack(message); });
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this,
&OutgoingMessagesViewerModule::updateElapsedTime);
} }
OutgoingMessagesViewerModule::~OutgoingMessagesViewerModule() QWidget* OutgoingMessagesViewerModule::toWidget() { return this; }
{
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);
}
XmlObject OutgoingMessagesViewerModule::toXmlObject() XmlObject OutgoingMessagesViewerModule::toXmlObject()
{ {
XmlObject obj = Module::toXmlObject(); return XmlObject(getName(ModuleId::OUTCOMINGMESSAGEVIEWER));
obj.addAttribute("timestamp", timestamp->isChecked());
obj.addAttribute("elapsed_time", elapsedTime->isChecked());
return obj;
} }
void OutgoingMessagesViewerModule::fromXmlObject(const XmlObject& obj) void OutgoingMessagesViewerModule::fromXmlObject(const XmlObject& xmlObject)
{
int timestampAtt;
if (obj.getAttribute("timestamp", timestampAtt))
{ {
timestamp->setChecked(timestampAtt != 0); Q_UNUSED(xmlObject);
}
int elapsedTimeAtt;
if (obj.getAttribute("elapsed_time", elapsedTimeAtt))
{
elapsedTime->setChecked(elapsedTimeAtt != 0);
}
} }
void OutgoingMessagesViewerModule::setupUi() void OutgoingMessagesViewerModule::setupUi()
...@@ -100,67 +68,18 @@ void OutgoingMessagesViewerModule::setupUi() ...@@ -100,67 +68,18 @@ void OutgoingMessagesViewerModule::setupUi()
table = new QTableWidget; table = new QTableWidget;
outerLayout->addWidget(table); outerLayout->addWidget(table);
table->setColumnCount(3); table->setColumnCount(2);
// 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( table->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
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);
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) void OutgoingMessagesViewerModule::resizeEvent(QResizeEvent* event)
{ {
if (table->rowCount() == 0) if (table->rowCount() == 0)
...@@ -274,48 +193,15 @@ void OutgoingMessagesViewerModule::addMessageToTable( ...@@ -274,48 +193,15 @@ 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 timestampTxt = new QTableWidgetItem(msg.first.toString("hh.mm.ss")); auto dateTxt = 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)));
// Disable editing msgName->setForeground(QBrush(QColor(0, 0, 0)));
timestampTxt->setFlags(Qt::ItemIsEnabled);
elapsedTimeTxt->setFlags(Qt::ItemIsEnabled);
msgName->setFlags(Qt::ItemIsEnabled);
// Add a new row // Add a new row
table->insertRow(row); table->insertRow(row);
// Fill the row with data // Fill the row with data
table->setItem(row, 0, timestampTxt); table->setItem(row, 0, dateTxt);
table->setItem(row, 1, elapsedTimeTxt); table->setItem(row, 1, msgName);
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);
}
} }
...@@ -24,23 +24,22 @@ ...@@ -24,23 +24,22 @@
#include <QDateTime> #include <QDateTime>
#include <QList> #include <QList>
#include <QPair> #include <QPair>
#include <QTimer>
#include <QWidget> #include <QWidget>
class OutgoingMessagesViewerModule : public Module class OutgoingMessagesViewerModule : public DefaultModule
{ {
Q_OBJECT Q_OBJECT
public: public:
OutgoingMessagesViewerModule(); 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,17 +49,9 @@ private: ...@@ -50,17 +49,9 @@ private:
void handleWack(const Message& wack); void handleWack(const Message& wack);
void addMessageToTable(const QPair<QDateTime, Message>& msg, int row = 0); void addMessageToTable(const QPair<QDateTime, Message>& msg, int row = 0);
void clearTable();
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.
Please register or to comment