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 
33 #include "MemoryIDTreeWidgetItem.h"
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
sanitize_typename.h
WidgetsWithToolbar.h
armarx::armem::base::EntityInstanceMetadata::numAccessed
unsigned long numAccessed
A counter how often the instance has been accessed.
Definition: EntityInstanceBase.h:60
TypedDataTreeBuilder.h
armarx::armem::gui::instance::DataView::useTypeInfo
bool useTypeInfo
Definition: DataView.h:97
armarx::armem::wm::EntityInstance
Client-side working entity instance.
Definition: memory_definitions.h:32
armarx::armem::gui::instance::InstanceView::InstanceView
InstanceView()
Definition: InstanceView.cpp:39
armarx::armem::gui::instance::DataView::updated
void updated()
armarx::armem::error::ArMemError
Base class for all exceptions thrown by the armem library.
Definition: ArMemError.h:18
armarx::armem::gui::instance::DataView::tree
QTreeWidget * tree
Definition: DataView.h:101
armarx::armem::gui::instance::DataView::actionsMenuRequested
void actionsMenuRequested(const MemoryID &memoryID, QWidget *parent, const QPoint &pos, QMenu *menu)
armarx::memory
Brief description of class memory.
Definition: memory.h:38
NLohmannJSONConverter.h
armarx::armem::gui::instance::MemoryIDTreeWidgetItem::addKeyChildren
void addKeyChildren()
Definition: MemoryIDTreeWidgetItem.cpp:11
Object.h
DataTreeBuilder.h
armarx::armem::server::wm::Memory
Definition: memory_definitions.h:122
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:47
armarx::armem::gui::instance
Definition: AronDataView.cpp:3
armarx::armem::base::EntityInstanceMetadata::sentTime
Time sentTime
Time when this value was sent to the memory.
Definition: EntityInstanceBase.h:49
armarx::armem::toDateTimeMilliSeconds
std::string toDateTimeMilliSeconds(const Time &time, int decimals=6)
Returns timeas e.g.
Definition: Time.cpp:35
armarx::armem::gui::instance::InstanceView::update
void update() override
Definition: InstanceView.cpp:93
TreeTypedJSONConverter.h
InstanceView.h
armarx::armem::gui::instance::DataView::updateData
virtual void updateData(const aron::data::DictPtr &data, aron::type::ObjectPtr aronType=nullptr)
Definition: DataView.cpp:101
armarx::armem::gui::instance::DataView::buildActionsMenu
virtual QMenu * buildActionsMenu(const QPoint &pos)
Definition: DataView.cpp:343
armarx::armem::base::EntityInstanceMetadata::arrivedTime
Time arrivedTime
Time when this value has arrived at the memory.
Definition: EntityInstanceBase.h:51
armarx::armem::gui::instance::MemoryIDTreeWidgetItem::setInstanceID
void setInstanceID(const MemoryID &id, int valueColumn=1)
Definition: MemoryIDTreeWidgetItem.cpp:22
armarx::to_string
const std::string & to_string(const std::string &s)
Definition: StringHelpers.h:41
aron_conversions.h
ExpressionException.h
armarx::armem::base::EntityInstanceMetadata::referencedTime
Time referencedTime
Time this instance refers to.
Definition: EntityInstanceBase.h:46
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::armem::gui::instance::MemoryIDTreeWidgetItem
Definition: MemoryIDTreeWidgetItem.h:13
armarx::armem::gui::instance::DataView::showErrorMessage
void showErrorMessage(const std::string &message)
Definition: DataView.cpp:133
armarx::armem::base::EntityInstanceMetadata
Metadata of an entity instance.
Definition: EntityInstanceBase.h:34
armarx::aron::type::ObjectPtr
std::shared_ptr< Object > ObjectPtr
Definition: Object.h:36
armarx::Logging::setTag
void setTag(const LogTag &tag)
Definition: Logging.cpp:54
armarx::armem::gui::instance::DataView::currentAronType
aron::type::ObjectPtr currentAronType
Definition: DataView.h:96
armarx::armem::base::EntityInstanceMetadata::lastAccessedTime
Time lastAccessedTime
An optional value indicating the time of last access.
Definition: EntityInstanceBase.h:57
armarx::armem::base::EntityInstanceMetadata::confidence
float confidence
An optional confidence, may be used for things like decay.
Definition: EntityInstanceBase.h:54
ARMARX_CHECK_EQUAL
#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...
Definition: ExpressionException.h:130
armarx::armem::base::EntityInstanceMetadata::origin
std::string origin
Indicates the source of the instance e.g. from a specific LTM.
Definition: EntityInstanceBase.h:63
armarx::armem::gui::instance::DataView::Columns::VALUE
@ VALUE
MemoryIDTreeWidgetItem.h
armarx::armem::gui::instance::DataView::updateImageView
void updateImageView(const aron::data::DictPtr &data)
Definition: DataView.cpp:576
gui_utils.h
serialize_path.h
armarx::armem::gui::instance::DataView::makeActionCopyMemoryID
QAction * makeActionCopyMemoryID(const MemoryID &id)
Definition: DataView.cpp:232