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 
53  QList<QTreeWidgetItem*> items = {treeItemInstanceID, treeItemMetadata};
54  tree->insertTopLevelItems(0, items);
55 
56  treeItemInstanceID->setExpanded(true);
57  treeItemMetadata->setExpanded(false);
58  }
59 
60  void
62  {
63  aron::type::ObjectPtr aronType = nullptr;
64  const armem::wm::EntityInstance* instance = nullptr;
65  try
66  {
67  instance = &memory.getInstance(id);
68  if (useTypeInfo)
69  {
70  aronType = memory.getProviderSegment(id).aronType();
71  }
72  }
73  catch (const armem::error::ArMemError& e)
74  {
75  showErrorMessage(e.what());
76  }
77  if (instance)
78  {
79  update(*instance, aronType);
80  }
81  }
82 
83  void
85  {
86  currentInstance = instance;
87  currentAronType = aronType;
88  update();
89  }
90 
91  void
93  {
94  if (currentInstance)
95  {
96  updateInstanceID(currentInstance->id());
97  updateMetaData(currentInstance->metadata());
98  updateData(currentInstance->data(), currentAronType);
99  updateImageView(currentInstance->data());
100 
101  emit updated();
102  }
103  }
104 
105  void
106  InstanceView::updateInstanceID(const MemoryID& id)
107  {
108  treeItemInstanceID->setInstanceID(id, int(Columns::VALUE));
109  }
110 
111  void
112  InstanceView::updateMetaData(const wm::EntityInstanceMetadata& metadata)
113  {
114  std::vector<std::string> items = {std::to_string(metadata.confidence),
119  " (" + std::to_string(metadata.numAccessed) +
120  " times total)"};
121  ARMARX_CHECK_EQUAL(static_cast<size_t>(treeItemMetadata->childCount()), items.size());
122  int i = 0;
123  for (const std::string& item : items)
124  {
125  treeItemMetadata->child(i++)->setText(int(Columns::VALUE),
126  QString::fromStdString(item));
127  }
128  }
129 
130  QMenu*
131  InstanceView::buildActionsMenu(const QPoint& pos)
132  {
133  auto* parentMenu = DataView::buildActionsMenu(pos);
134 
135  const QTreeWidgetItem* item = tree->itemAt(pos);
136  if (item == this->treeItemInstanceID && currentInstance.has_value())
137  {
138  if (QAction* action = makeActionCopyMemoryID(currentInstance->id()))
139  {
140  parentMenu->addAction(action);
141  }
142  }
143 
144  return parentMenu;
145  }
146 
147  void
148  InstanceView::prepareTreeContextMenu(const QPoint& pos)
149  {
150  if (currentInstance.has_value())
151  {
152  auto* menu = buildActionsMenu(pos);
153 
154  emit actionsMenuRequested(currentInstance->id(),
155  this,
156  tree->mapToGlobal(pos),
157  menu->actions().isEmpty() ? nullptr : menu);
158  }
159  }
160 
162  InstanceView::getData()
163  {
164  if (currentInstance)
165  {
166  return currentInstance->data();
167  }
168  return nullptr;
169  }
170 
171 } // 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:92
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::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