diff --git a/app/mon/mon_gui/src/widgets/ecalmon_tree_widget/topic_widget.cpp b/app/mon/mon_gui/src/widgets/ecalmon_tree_widget/topic_widget.cpp index 690df3d401..e466e73124 100644 --- a/app/mon/mon_gui/src/widgets/ecalmon_tree_widget/topic_widget.cpp +++ b/app/mon/mon_gui/src/widgets/ecalmon_tree_widget/topic_widget.cpp @@ -277,7 +277,6 @@ void TopicWidget::autoSizeColumns() ui_.tree_view->resizeColumnToContents(column); } - topic_tree_model_->removeItem(example_topic_item); topic_tree_model_->removeItem(example_group_item); diff --git a/app/mon/mon_gui/src/widgets/models/topic_tree_item.cpp b/app/mon/mon_gui/src/widgets/models/topic_tree_item.cpp index b5fd78a55d..e60a2fce79 100644 --- a/app/mon/mon_gui/src/widgets/models/topic_tree_item.cpp +++ b/app/mon/mon_gui/src/widgets/models/topic_tree_item.cpp @@ -19,7 +19,6 @@ #include "topic_tree_item.h" -#include #include #include #include @@ -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::RCLOCK) @@ -312,6 +312,7 @@ QVariant TopicTreeItem::data(Columns column, Qt::ItemDataRole role) const { QFont font; font.setItalic(true); + font.setBold(itemfont.bold()); return font; } } @@ -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; diff --git a/app/mon/mon_gui/src/widgets/models/topic_tree_item.h b/app/mon/mon_gui/src/widgets/models/topic_tree_item.h index a5d82842d3..60f9c32a71 100644 --- a/app/mon/mon_gui/src/widgets/models/topic_tree_item.h +++ b/app/mon/mon_gui/src/widgets/models/topic_tree_item.h @@ -1,6 +1,6 @@ /* ========================= eCAL LICENSE ================================= * - * Copyright (C) 2016 - 2019 Continental Corporation + * Copyright (C) 2016 - 2024 Continental Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ #pragma once #include "CustomQt/QAbstractTreeItem.h" +#include #ifdef _MSC_VER #pragma warning(push) @@ -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); @@ -77,7 +80,6 @@ class TopicTreeItem : private: eCAL::pb::Topic topic_; - + QFont itemfont; static QString toFrequencyString(long long freq); }; - diff --git a/app/mon/mon_gui/src/widgets/models/topic_tree_model.cpp b/app/mon/mon_gui/src/widgets/models/topic_tree_model.cpp index 919aa0417e..522e593b90 100644 --- a/app/mon/mon_gui/src/widgets/models/topic_tree_model.cpp +++ b/app/mon/mon_gui/src/widgets/models/topic_tree_model.cpp @@ -17,6 +17,9 @@ * ========================= eCAL LICENSE ================================= */ +#include +#include + #include "topic_tree_model.h" #include "tree_item_type.h" #include "item_data_roles.h" @@ -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) @@ -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 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; } @@ -84,12 +86,38 @@ 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(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.new_topic_timer && !tree_entry.default_font) + { + auto fontrole = topic_tree_item->data(1, Qt::ItemDataRole::FontRole); + auto font = qvariant_cast(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); + topic_tree_item->update(topic); topic_still_existing[topic_id] = true; } } @@ -99,7 +127,7 @@ void TopicTreeModel::monitorUpdated(const eCAL::pb::Monitoring& monitoring_pb) { if (!topic.second) { - removeItemFromGroups(topic_tree_item_map_.at(topic.first)); + removeItemFromGroups(topic_tree_item_map_.at(topic.first).tree_item); topic_tree_item_map_.erase(topic.first); } } @@ -107,17 +135,18 @@ void TopicTreeModel::monitorUpdated(const eCAL::pb::Monitoring& monitoring_pb) updateAll(); } -QVector> TopicTreeModel::getTreeItemColumnNameMapping() const + +QVector> TopicTreeModel::getTreeItemColumnNameMapping() const { - QVector> column_name_mapping; + QVector> 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(column, name)); + const QVariant name = headerData(i, Qt::Orientation::Horizontal, Qt::ItemDataRole::DisplayRole); + column_name_mapping.push_back(QPair(column, name)); } } diff --git a/app/mon/mon_gui/src/widgets/models/topic_tree_model.h b/app/mon/mon_gui/src/widgets/models/topic_tree_model.h index 79abfa4d6c..b943293b5b 100644 --- a/app/mon/mon_gui/src/widgets/models/topic_tree_model.h +++ b/app/mon/mon_gui/src/widgets/models/topic_tree_model.h @@ -76,7 +76,7 @@ class TopicTreeModel : public GroupTreeModel QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; - QVector> getTreeItemColumnNameMapping() const; + QVector> getTreeItemColumnNameMapping() const; void monitorUpdated(const eCAL::pb::Monitoring& monitoring_pb) override; @@ -133,5 +133,11 @@ class TopicTreeModel : public GroupTreeModel { Columns::DATA_FREQUENCY, (int)TopicTreeItem::Columns::DFREQ }, }; - std::map topic_tree_item_map_; + struct STopicTreeEntry + { + TopicTreeItem* tree_item = nullptr; + bool default_font = false; + bool new_topic_timer = false; + }; + std::map topic_tree_item_map_; };