InstanceView.cpp
Go to the documentation of this file.
1#include "InstanceView.h"
2
3#include <new>
4
5#include <QAction>
6#include <QApplication>
7#include <QClipboard>
8#include <QGroupBox>
9#include <QHeaderView>
10#include <QImage>
11#include <QLabel>
12#include <QLayout>
13#include <QMenu>
14#include <QSplitter>
15#include <QTreeWidget>
16#include <QVBoxLayout>
17
18#include <SimoxUtility/algorithm/string.h>
19
21
22#include <RobotAPI/libraries/armem/aron/MemoryID.aron.generated.h>
32
34#include "WidgetsWithToolbar.h"
35
37{
38
40 {
41 Logging::setTag("InstanceView");
42
43 treeItemInstanceID = new MemoryIDTreeWidgetItem({"Instance ID"});
44 treeItemInstanceID->addKeyChildren();
45
46 treeItemMetadata = new QTreeWidgetItem({"Metadata"});
47 treeItemMetadata->addChild(new QTreeWidgetItem({"Confidence"}));
48 treeItemMetadata->addChild(new QTreeWidgetItem({"Time Created"}));
49 treeItemMetadata->addChild(new QTreeWidgetItem({"Time Sent"}));
50 treeItemMetadata->addChild(new QTreeWidgetItem({"Time Arrived"}));
51 treeItemMetadata->addChild(new QTreeWidgetItem({"Time Last Accessed"}));
52 treeItemMetadata->addChild(new QTreeWidgetItem({"Origin"}));
53
54 QList<QTreeWidgetItem*> items = {treeItemInstanceID, treeItemMetadata};
55 tree->insertTopLevelItems(0, items);
56
57 treeItemInstanceID->setExpanded(true);
58 treeItemMetadata->setExpanded(false);
59 }
60
61 void
63 {
64 aron::type::ObjectPtr aronType = nullptr;
65 const armem::wm::EntityInstance* instance = nullptr;
66 try
67 {
68 instance = &memory.getInstance(id);
69 if (useTypeInfo)
70 {
71 aronType = memory.getProviderSegment(id).aronType();
72 }
73 }
74 catch (const armem::error::ArMemError& e)
75 {
76 showErrorMessage(e.what());
77 }
78 if (instance)
79 {
80 update(*instance, aronType);
81 }
82 }
83
84 void
86 {
87 currentInstance = instance;
88 currentAronType = aronType;
89 update();
90 }
91
92 void
94 {
95 if (currentInstance)
96 {
97 updateInstanceID(currentInstance->id());
98 updateMetaData(currentInstance->metadata());
99 updateData(currentInstance->data(), currentAronType);
100 updateImageView(currentInstance->data());
101
102 emit updated();
103 }
104 }
105
106 void
107 InstanceView::updateInstanceID(const MemoryID& id)
108 {
109 treeItemInstanceID->setInstanceID(id, int(Columns::VALUE));
110 }
111
112 void
113 InstanceView::updateMetaData(const wm::EntityInstanceMetadata& metadata)
114 {
115 std::vector<std::string> items = {std::to_string(metadata.confidence),
120 " (" + std::to_string(metadata.numAccessed) +
121 " times total)",
122 metadata.origin};
123 ARMARX_CHECK_EQUAL(static_cast<size_t>(treeItemMetadata->childCount()), items.size());
124 int i = 0;
125 for (const std::string& item : items)
126 {
127 treeItemMetadata->child(i++)->setText(int(Columns::VALUE),
128 QString::fromStdString(item));
129 }
130 }
131
132 QMenu*
133 InstanceView::buildActionsMenu(const QPoint& pos)
134 {
135 auto* parentMenu = DataView::buildActionsMenu(pos);
136
137 const QTreeWidgetItem* item = tree->itemAt(pos);
138 if (item == this->treeItemInstanceID && currentInstance.has_value())
139 {
140 if (QAction* action = makeActionCopyMemoryID(currentInstance->id()))
141 {
142 parentMenu->addAction(action);
143 }
144 }
145
146 return parentMenu;
147 }
148
149 void
150 InstanceView::prepareTreeContextMenu(const QPoint& pos)
151 {
152 if (currentInstance.has_value())
153 {
154 auto* menu = buildActionsMenu(pos);
155
156 emit actionsMenuRequested(currentInstance->id(),
157 this,
158 tree->mapToGlobal(pos),
159 menu->actions().isEmpty() ? nullptr : menu);
160 }
161 }
162
164 InstanceView::getData()
165 {
166 if (currentInstance)
167 {
168 return currentInstance->data();
169 }
170 return nullptr;
171 }
172
173} // namespace armarx::armem::gui::instance
void setTag(const LogTag &tag)
Definition Logging.cpp:54
Base class for all exceptions thrown by the armem library.
Definition ArMemError.h:19
QAction * makeActionCopyMemoryID(const MemoryID &id)
Definition DataView.cpp:232
void actionsMenuRequested(const MemoryID &memoryID, QWidget *parent, const QPoint &pos, QMenu *menu)
virtual void updateData(const aron::data::DictPtr &data, aron::type::ObjectPtr aronType=nullptr)
Definition DataView.cpp:101
void showErrorMessage(const std::string &message)
Definition DataView.cpp:133
void updateImageView(const aron::data::DictPtr &data)
Definition DataView.cpp:576
aron::type::ObjectPtr currentAronType
Definition DataView.h:96
virtual QMenu * buildActionsMenu(const QPoint &pos)
Definition DataView.cpp:343
void setInstanceID(const MemoryID &id, int valueColumn=1)
Client-side working entity instance.
Brief description of class memory.
Definition memory.h:39
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
base::EntityInstanceMetadata EntityInstanceMetadata
armem::wm::EntityInstance EntityInstance
std::string toDateTimeMilliSeconds(const Time &time, int decimals=6)
Returns timeas e.g.
Definition Time.cpp:35
std::shared_ptr< Dict > DictPtr
Definition Dict.h:42
std::shared_ptr< Object > ObjectPtr
Definition Object.h:36
float confidence
An optional confidence, may be used for things like decay.
Time lastAccessedTime
An optional value indicating the time of last access.
unsigned long numAccessed
A counter how often the instance has been accessed.
Time arrivedTime
Time when this value has arrived at the memory.
Time referencedTime
Time this instance refers to.
std::string origin
Indicates the source of the instance e.g. from a specific LTM.
Time sentTime
Time when this value was sent to the memory.