Skip to content

Commit

Permalink
[mon_gui] Change font for new and deleted/disconnected topics in mon_…
Browse files Browse the repository at this point in the history
…gui (#1955)


---------

Co-authored-by: Peguen <[email protected]>
  • Loading branch information
albrechtdennis and Peguen authored Jan 30, 2025
1 parent e3639ad commit 428e952
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,6 @@ void TopicWidget::autoSizeColumns()
ui_.tree_view->resizeColumnToContents(column);
}


topic_tree_model_->removeItem(example_topic_item);
topic_tree_model_->removeItem(example_group_item);

Expand Down
4 changes: 2 additions & 2 deletions app/mon/mon_gui/src/widgets/models/group_tree_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ void GroupTreeModel::insertItemIntoGroups(QAbstractTreeItem* item)
QVariant current_group_name = item->data(mapColumnToItem(group_by_columns_[0], item->type()), Qt::ItemDataRole::DisplayRole);
QVariant current_group_filter_role = item->data(mapColumnToItem(group_by_columns_[0], item->type()), (Qt::ItemDataRole)ItemDataRoles::FilterRole); //-V1016
QVariant current_group_sort_role = item->data(mapColumnToItem(group_by_columns_[0], item->type()), (Qt::ItemDataRole)ItemDataRoles::SortRole); //-V1016
QVariant current_group_font_role = item->data(mapColumnToItem(group_by_columns_[0], item->type()), Qt::ItemDataRole::FontRole);
QVariant current_group_font_role = standardFont;
QVariant current_group_identifier = item->data(mapColumnToItem(group_by_columns_[0], item->type()), (Qt::ItemDataRole)ItemDataRoles::GroupRole); //-V1016


Expand Down Expand Up @@ -175,7 +175,7 @@ void GroupTreeModel::insertItemIntoGroups(QAbstractTreeItem* item)
current_group_name = item->data(remaining_sub_groups.front(), Qt::ItemDataRole::DisplayRole);
current_group_filter_role = item->data(remaining_sub_groups.front(), (Qt::ItemDataRole)ItemDataRoles::FilterRole); //-V1016
current_group_sort_role = item->data(remaining_sub_groups.front(), (Qt::ItemDataRole)ItemDataRoles::SortRole); //-V1016
current_group_font_role = item->data(remaining_sub_groups.front(), Qt::ItemDataRole::FontRole);
current_group_font_role = standardFont;
current_group_identifier = item->data(remaining_sub_groups.front(), (Qt::ItemDataRole)ItemDataRoles::GroupRole); //-V1016

auto subgroup_list = group_item->findChildren(
Expand Down
3 changes: 3 additions & 0 deletions app/mon/mon_gui/src/widgets/models/group_tree_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <list>
#include <QVector>
#include <QPair>
#include <QFont>

class GroupTreeModel : public QAbstractTreeModel
{
Expand Down Expand Up @@ -102,4 +103,6 @@ class GroupTreeModel : public QAbstractTreeModel
QVariant group_column_header_;

QVector<int> group_by_columns_;

QFont standardFont;
};
12 changes: 10 additions & 2 deletions app/mon/mon_gui/src/widgets/models/topic_tree_item.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

#include "topic_tree_item.h"

#include <QColor>
#include <QFont>
#include <QString>
#include <QByteArray>
Expand All @@ -42,6 +41,7 @@ QVariant TopicTreeItem::data(int column, Qt::ItemDataRole role) const

QVariant TopicTreeItem::data(Columns column, Qt::ItemDataRole role) const
{

if (role == (Qt::ItemDataRole)ItemDataRoles::RawDataRole) //-V1016 //-V547
{
if (column == Columns::REGISTRATION_CLOCK)
Expand Down Expand Up @@ -312,6 +312,7 @@ QVariant TopicTreeItem::data(Columns column, Qt::ItemDataRole role) const
{
QFont font;
font.setItalic(true);
font.setBold(itemfont.bold());
return font;
}
}
Expand All @@ -322,16 +323,23 @@ QVariant TopicTreeItem::data(Columns column, Qt::ItemDataRole role) const
{
QFont font;
font.setItalic(true);
font.setBold(itemfont.bold());
return font;
}
}

return QVariant(); // Invalid QVariant
return itemfont;
}

return QVariant(); // Invalid QVariant
}

bool TopicTreeItem::setFont(const QFont& font)
{
itemfont = font;
return false;
}

int TopicTreeItem::type() const
{
return (int)TreeItemType::Topic;
Expand Down
6 changes: 4 additions & 2 deletions app/mon/mon_gui/src/widgets/models/topic_tree_item.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#pragma once

#include "CustomQt/QAbstractTreeItem.h"
#include <QFont>

#ifdef _MSC_VER
#pragma warning(push)
Expand Down Expand Up @@ -67,6 +68,8 @@ class TopicTreeItem :

QVariant data(Columns column, Qt::ItemDataRole role = Qt::ItemDataRole::DisplayRole) const;

bool setFont(const QFont& font);

int type() const;

void update(const eCAL::pb::Topic& topic);
Expand All @@ -77,7 +80,6 @@ class TopicTreeItem :

private:
eCAL::pb::Topic topic_;

QFont itemfont;
static QString toFrequencyString(long long freq);
};

85 changes: 75 additions & 10 deletions app/mon/mon_gui/src/widgets/models/topic_tree_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
* ========================= eCAL LICENSE =================================
*/

#include <QFont>
#include <QTimer>

#include "topic_tree_model.h"
#include "tree_item_type.h"
#include "item_data_roles.h"
Expand Down Expand Up @@ -49,7 +52,6 @@ QVariant TopicTreeModel::headerData(int section, Qt::Orientation orientation, in
return QAbstractTreeModel::headerData(section, orientation, role);
}


int TopicTreeModel::mapColumnToItem(int model_column, int tree_item_type) const
{
switch ((TreeItemType)tree_item_type)
Expand All @@ -70,7 +72,7 @@ void TopicTreeModel::monitorUpdated(const eCAL::pb::Monitoring& monitoring_pb)
{
// Create a list of all topics to check if we have to remove them
std::map<std::string, bool> topic_still_existing;
for(const auto& topic : topic_tree_item_map_)
for (const auto& topic : topic_tree_item_map_)
{
topic_still_existing[topic.first] = false;
}
Expand All @@ -84,12 +86,51 @@ void TopicTreeModel::monitorUpdated(const eCAL::pb::Monitoring& monitoring_pb)
// Got a new topic
TopicTreeItem* topic_tree_item = new TopicTreeItem(topic);
insertItemIntoGroups(topic_tree_item);
topic_tree_item_map_[topic_id] = topic_tree_item;
STopicTreeEntry tree_entry;
tree_entry.tree_item = topic_tree_item;
topic_tree_item_map_[topic_id] = tree_entry;
auto fontrole = topic_tree_item->data(1, Qt::ItemDataRole::FontRole);
auto font = qvariant_cast<QFont>(fontrole);
font.setBold(true);
topic_tree_item->setFont(font);

QTimer::singleShot(10000, [this, topic_id]()
{
if(topic_tree_item_map_.find(topic_id) != topic_tree_item_map_.end())
{
topic_tree_item_map_[topic_id].new_topic_timer = true;
}
});
}
else
{
auto& tree_entry = topic_tree_item_map_.at(topic_id);
auto *topic_tree_item = tree_entry.tree_item;

if (tree_entry.striked_out)
{
auto fontrole = topic_tree_item->data(1, Qt::ItemDataRole::FontRole);
auto font = qvariant_cast<QFont>(fontrole);
font.setStrikeOut(false);
font.setBold(false);
topic_tree_item->setFont(font);
tree_entry.striked_out = false;
tree_entry.default_font = true;
}

if(tree_entry.new_topic_timer && !tree_entry.default_font)
{
auto fontrole = topic_tree_item->data(1, Qt::ItemDataRole::FontRole);
auto font = qvariant_cast<QFont>(fontrole);
font.setBold(false);
topic_tree_item->setFont(font);
tree_entry.default_font = true;
}

// Update an existing topic
topic_tree_item_map_.at(topic_id)->update(topic);
tree_entry.topic_removed = false;
tree_entry.deleted_topic_timer = false;
topic_tree_item->update(topic);
topic_still_existing[topic_id] = true;
}
}
Expand All @@ -99,25 +140,49 @@ void TopicTreeModel::monitorUpdated(const eCAL::pb::Monitoring& monitoring_pb)
{
if (!topic.second)
{
removeItemFromGroups(topic_tree_item_map_.at(topic.first));
topic_tree_item_map_.erase(topic.first);
auto& tree_entry = topic_tree_item_map_.at(topic.first);
TopicTreeItem* topic_tree_item = tree_entry.tree_item;

if (!tree_entry.striked_out)
{
auto fontrole = topic_tree_item->data(1, Qt::ItemDataRole::FontRole);
auto font = qvariant_cast<QFont>(fontrole);
font.setStrikeOut(true);
topic_tree_item->setFont(font);
tree_entry.striked_out = true;
tree_entry.topic_removed = true;
}

if (!tree_entry.deleted_topic_timer)
{
tree_entry.deleted_topic_timer = true;
QTimer::singleShot(10000, [this, topic_tree_item, topic]()
{
if (topic_tree_item_map_.find(topic.first) != topic_tree_item_map_.end() && topic_tree_item_map_[topic.first].topic_removed)
{
removeItemFromGroups(topic_tree_item);
topic_tree_item_map_.erase(topic.first);
}
});
}
}
}

updateAll();
}

QVector<QPair<int, QString>> TopicTreeModel::getTreeItemColumnNameMapping() const

QVector<QPair<int, QVariant>> TopicTreeModel::getTreeItemColumnNameMapping() const
{
QVector<QPair<int, QString>> column_name_mapping;
QVector<QPair<int, QVariant>> column_name_mapping;

for (int i = 0; i < columnCount(); i++)
{
int column = mapColumnToItem(i, (int)TreeItemType::Topic);
if (column >= 0)
{
QString name = headerData(i, Qt::Orientation::Horizontal, Qt::ItemDataRole::DisplayRole).toString();
column_name_mapping.push_back(QPair<int, QString>(column, name));
const QVariant name = headerData(i, Qt::Orientation::Horizontal, Qt::ItemDataRole::DisplayRole);
column_name_mapping.push_back(QPair<int, QVariant>(column, name));
}
}

Expand Down
13 changes: 11 additions & 2 deletions app/mon/mon_gui/src/widgets/models/topic_tree_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class TopicTreeModel : public GroupTreeModel

QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;

QVector<QPair<int, QString>> getTreeItemColumnNameMapping() const;
QVector<QPair<int, QVariant>> getTreeItemColumnNameMapping() const;

void monitorUpdated(const eCAL::pb::Monitoring& monitoring_pb) override;

Expand Down Expand Up @@ -133,5 +133,14 @@ class TopicTreeModel : public GroupTreeModel
{ Columns::DATA_FREQUENCY, (int)TopicTreeItem::Columns::DFREQ },
};

std::map<std::string, TopicTreeItem*> topic_tree_item_map_;
struct STopicTreeEntry
{
TopicTreeItem* tree_item = nullptr;
bool default_font = false;
bool new_topic_timer = false;
bool striked_out = false;
bool deleted_topic_timer = false;
bool topic_removed = false;
};
std::map<std::string, STopicTreeEntry> topic_tree_item_map_;
};

0 comments on commit 428e952

Please sign in to comment.