TreeWidget.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <map>
4 
5 #include <QTreeWidget>
6 
9 
11 {
12 
13  class TreeWidget : public QTreeWidget
14  {
15  Q_OBJECT
16  using This = TreeWidget;
17 
18  public:
19  TreeWidget();
20 
21  void update(const armem::wm::Memory& memory);
22  void update(const std::map<std::string, const armem::wm::Memory*>& memories);
23 
24  std::optional<MemoryID> selectedID() const;
25 
26 
27  signals:
28 
29  /// Tree contents have changed.
30  void updated();
31 
32  /// The selected item or its contents have changed.
33  void selectedItemChanged(const MemoryID& id);
34 
35  void itemSelected(const MemoryID& id);
36 
37  void memorySelected(const MemoryID& id);
38  void coreSegmentSelected(const MemoryID& id);
39  void providerSegmentSelected(const MemoryID& id);
40  void entitySelected(const MemoryID& id);
41  void snapshotSelected(const MemoryID& id);
42  void instanceSelected(const MemoryID& id);
43 
45  QWidget* parent,
46  const QPoint& pos,
47  QMenu* menu);
48 
49 
50  private slots:
51 
52  void handleSelection();
53 
54 
55  private:
56  void initWidget();
57  void initBuilders();
58 
59  void updateChildren(const armem::wm::Memory& memory, QTreeWidget* tree);
60  void updateChildren(const std::map<std::string, const armem::wm::Memory*>& memories,
61  QTreeWidget* tree);
62 
63  void updateChildren(const armem::wm::Memory& memory, QTreeWidgetItem* memoryItem);
64  void updateChildren(const armem::wm::CoreSegment& coreSeg, QTreeWidgetItem* coreSegItem);
65  void updateChildren(const armem::wm::ProviderSegment& provSeg,
66  QTreeWidgetItem* provSegItem);
67  void updateChildren(const armem::wm::Entity& entity, QTreeWidgetItem* entityItem);
68  void updateChildren(const armem::wm::EntitySnapshot& snapshot,
69  QTreeWidgetItem* snapshotItem);
70  void updateChildren(const armem::wm::EntityInstance& data, QTreeWidgetItem* parent);
71 
72  void prepareTreeContextMenu(const QPoint& pos);
73 
74  template <class MemoryItemT>
75  QTreeWidgetItem* makeItem(const std::string& key, const MemoryItemT& memoryItem);
76  QTreeWidgetItem*
77  makeItem(const std::string& key, const std::string& levelName, const MemoryID& id);
78 
79  void updateItemItem(const armem::base::detail::MemoryItem& level, QTreeWidgetItem* item);
80  template <class ContainerT>
81  void updateContainerItem(const ContainerT& container, QTreeWidgetItem* item);
82 
83 
84  private:
86  TreeWidgetBuilder<wm::CoreSegment> coreSegmentBuilder;
87  TreeWidgetBuilder<wm::ProviderSegment> provSegmentBuilder;
88  TreeWidgetBuilder<wm::Entity> entityBuilder;
91 
92  std::optional<MemoryID> _selectedID;
93  /// While this is false, do not handle selection updates.
94  bool handleSelections = true;
95 
96  enum class Columns
97  {
98  KEY = 0,
99  SIZE = 1,
100  TYPE = 2,
101  LEVEL = 3,
102  ID = 4,
103  NUM = 5
104  };
105  };
106 
107 } // namespace armarx::armem::gui::memory
108 
109 namespace armarx::armem::gui
110 {
112 }
armarx::armem::gui::memory
Definition: GroupBox.cpp:10
armarx::armem::wm::ProviderSegment
Client-side working memory provider segment.
Definition: memory_definitions.h:105
armarx::armem::gui::memory::TreeWidget::providerSegmentSelected
void providerSegmentSelected(const MemoryID &id)
armarx::armem::wm::EntityInstance
Client-side working entity instance.
Definition: memory_definitions.h:32
armarx::armem::gui::memory::TreeWidget::entitySelected
void entitySelected(const MemoryID &id)
armarx::armem::base::detail::MemoryItem
Base class of memory classes on different levels.
Definition: MemoryItem.h:13
armarx::MapTreeWidgetBuilder
A class to efficiently build and maintain sorted items of QTreeWidget or QTreeWidgetItem based on a m...
Definition: TreeWidgetBuilder.h:137
armarx::armem::gui::memory::TreeWidget
Definition: TreeWidget.h:13
TreeWidgetBuilder.h
armarx::memory
Brief description of class memory.
Definition: memory.h:38
armarx::armem::gui::memory::TreeWidget::instanceSelected
void instanceSelected(const MemoryID &id)
armarx::armem::gui::memory::TreeWidget::updated
void updated()
Tree contents have changed.
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:47
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::armem::wm::CoreSegment
Client-side working memory core segment.
Definition: memory_definitions.h:119
armarx::armem::wm::Memory
Client-side working memory.
Definition: memory_definitions.h:133
armarx::armem::gui::memory::TreeWidget::snapshotSelected
void snapshotSelected(const MemoryID &id)
armarx::TreeWidgetBuilder
A class to efficiently build and maintain sorted items of QTreeWidget or QTreeWidgetItem based on a s...
Definition: DataTreeBuilderBase.h:10
armarx::armem::wm::EntitySnapshot
Client-side working memory entity snapshot.
Definition: memory_definitions.h:80
armarx::armem::gui::memory::TreeWidget::actionsMenuRequested
void actionsMenuRequested(const MemoryID &memoryID, QWidget *parent, const QPoint &pos, QMenu *menu)
armarx::armem::gui::memory::TreeWidget::selectedID
std::optional< MemoryID > selectedID() const
Definition: TreeWidget.cpp:173
memory_definitions.h
armarx::armem::gui::memory::TreeWidget::memorySelected
void memorySelected(const MemoryID &id)
armarx::armem::gui
Definition: ActionsMenuBuilder.cpp:5
armarx::armem::index::memoryID
const MemoryID memoryID
Definition: memory_ids.cpp:28
armarx::armem::gui::memory::TreeWidget::selectedItemChanged
void selectedItemChanged(const MemoryID &id)
The selected item or its contents have changed.
armarx::armem::wm::Entity
Client-side working memory entity.
Definition: memory_definitions.h:93
armarx::armem::gui::memory::TreeWidget::coreSegmentSelected
void coreSegmentSelected(const MemoryID &id)
armarx::armem::gui::memory::TreeWidget::TreeWidget
TreeWidget()
Definition: TreeWidget.cpp:15
armarx::armem::gui::memory::TreeWidget::update
void update(const armem::wm::Memory &memory)
Definition: TreeWidget.cpp:154
armarx::armem::gui::memory::TreeWidget::itemSelected
void itemSelected(const MemoryID &id)