TreeTypedDataVisitor.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <sstream>
4 #include <stack>
5 
6 #include <QLabel>
7 #include <QTreeWidget>
8 
9 #include <SimoxUtility/algorithm/string/string_tools.h>
10 
16 
18 {
19 
22  public TreeDataVisitorBase
23  {
24  public:
26 
27  void
29  const aron::type::VariantPtr& type) override
30  {
33  const std::string key = data->getPath().getLastElement();
34  _visitEnter(key, sanitizeTypeName(type->getFullName()), data->childrenSize());
35  }
36 
37  void
39  {
40  _visitExit();
41  }
42 
43  void
45  const aron::type::VariantPtr& type) override
46  {
49  const std::string key = data->getPath().getLastElement();
50  _visitEnter(key, sanitizeTypeName(type->getFullName()), data->childrenSize());
51  }
52 
53  void
55  {
56  _visitExit();
57  }
58 
59  void
61  const aron::type::VariantPtr& type) override
62  {
65  const std::string key = data->getPath().getLastElement();
66  _visitEnter(key, sanitizeTypeName(type->getFullName()), data->childrenSize());
67  }
68 
69  void
71  {
72  _visitExit();
73  }
74 
75  void
77  const aron::type::VariantPtr& type) override
78  {
81  const std::string key = data->getPath().getLastElement();
82  _visitEnter(key, sanitizeTypeName(type->getFullName()), data->childrenSize());
83  }
84 
85  void
87  {
88  _visitExit();
89  }
90 
91  // What about Pair??
92 
93 
94  void
96  {
99  const std::string key = data->getPath().getLastElement();
100 
103  this->addValueRow(key, d, t);
104  }
105 
106  void
108  {
110  ARMARX_CHECK_NOT_NULL(type);
111  const std::string key = data->getPath().getLastElement();
112 
115  this->addValueRow(key, d, t);
116  }
117 
118  void
120  {
122  ARMARX_CHECK_NOT_NULL(type);
123  const std::string key = data->getPath().getLastElement();
124 
127  this->addValueRow(key, d, t);
128  }
129 
130  void
132  {
134  ARMARX_CHECK_NOT_NULL(type);
135  const std::string key = data->getPath().getLastElement();
136 
138  auto t = *aron::type::Int::DynamicCastAndCheck(type);
139  this->addValueRow(key, d, t);
140  }
141 
142  void
144  {
146  ARMARX_CHECK_NOT_NULL(type);
147  const std::string key = data->getPath().getLastElement();
148 
151  this->addValueRow(key, d, t);
152  }
153 
154  void
156  {
158  ARMARX_CHECK_NOT_NULL(type);
159  const std::string key = data->getPath().getLastElement();
160 
163  this->addValueRow(key, d, t);
164  }
165 
166  /*void visitDateTime(const aron::data::VariantPtr& data, const aron::type::VariantPtr& type) override
167  {
168  ARMARX_CHECK_NOT_NULL(data);
169  ARMARX_CHECK_NOT_NULL(type);
170  const std::string key = data->getPath().getLastElement();
171 
172  auto d = *aron::data::Long::DynamicCastAndCheck(data);
173  auto t = *aron::type::DateTime::DynamicCastAndCheck(type);
174  this->addValueRow(key, d, t);
175  }*/
176 
177 
178  void
180  {
182  ARMARX_CHECK_NOT_NULL(type);
183  const std::string key = data->getPath().getLastElement();
184 
187  this->addValueRow(key, d, t);
188  }
189 
190  void
192  const aron::type::VariantPtr& type) override
193  {
195  ARMARX_CHECK_NOT_NULL(type);
196  const std::string key = data->getPath().getLastElement();
197 
200  this->addValueRow(key, d, t);
201  }
202 
203  void
205  const aron::type::VariantPtr& type) override
206  {
208  ARMARX_CHECK_NOT_NULL(type);
209  const std::string key = data->getPath().getLastElement();
210 
213  this->addValueRow(key, d, t);
214  }
215 
216  void
218  {
220  ARMARX_CHECK_NOT_NULL(type);
221  const std::string key = data->getPath().getLastElement();
222 
225  this->addValueRow(key, d, t);
226  }
227 
228  // What aboud NDArray
229 
230 
231  protected:
232  template <class DataNavigatorT, class TypeNavigatorT>
233  bool
234  addValueRow(const std::string& key, const DataNavigatorT& data, const TypeNavigatorT& type)
235  {
236  if (items.size() > 0)
237  {
238  QTreeWidgetItem* item = makeItem(key, data, type);
239  items.top()->addChild(item);
240 
241  item->setData(columnKey, Qt::UserRole, serializePath(data.getPath()));
242  item->setData(columnType, Qt::UserRole, int(type.getDescriptor()));
243 
244  if (false) // remove?
245  {
246  QFont font;
247  font.setFamily("Consolas");
248  font.setStyleHint(QFont::Monospace);
249  font.setFixedPitch(true);
250  font.setPointSize(10);
251  item->setFont(columnValue, font);
252  }
253  }
254  return true;
255  }
256 
257  template <class DataNavigatorT, class TypeNavigatorT>
258  QTreeWidgetItem*
259  makeItem(const std::string& key,
260  const DataNavigatorT& data,
261  const TypeNavigatorT& type) const
262  {
263  std::stringstream ss;
264  try
265  {
266  this->streamValueText(data, type, ss);
267  }
268  catch (const aron::error::AronException& e)
269  {
270  ss << "x ";
272  std::stringstream es;
273  es << e.what();
274  ss << simox::alg::replace_all(es.str(), "\n", " | ");
275  }
276  return new QTreeWidgetItem(
277  this->makeValueRowStrings(key, ss.str(), sanitizeTypeName(type.getFullName())));
278  }
279 
280  template <class DataNavigatorT, class TypeNavigatorT>
281  void
282  streamValueText(const DataNavigatorT& data,
283  const TypeNavigatorT& type,
284  std::stringstream& ss) const
285  {
286  // Fallback to type-agnostic (but data-aware).
287  (void)type;
289  }
290 
292  //void streamValueText(const aron::data::Long& data, const aron::type::DateTime& type, std::stringstream& ss) const;
294  const aron::type::Matrix& type,
295  std::stringstream& ss) const;
296 
298  const aron::type::Matrix& type,
299  std::stringstream& ss) const;
301  const aron::type::Matrix& type,
302  std::stringstream& ss) const;
304  const aron::type::Matrix& type,
305  std::stringstream& ss) const;
306 
307 
308  std::string coeffSep = " ";
309  };
310 
311 } // namespace armarx::armem::gui::instance
sanitize_typename.h
armarx::armem::gui::instance::TreeTypedDataVisitor::addValueRow
bool addValueRow(const std::string &key, const DataNavigatorT &data, const TypeNavigatorT &type)
Definition: TreeTypedDataVisitor.h:234
armarx::armem::gui::instance::TreeTypedDataVisitor::streamOrientationText
void streamOrientationText(const aron::data::NDArray &data, const aron::type::Matrix &type, std::stringstream &ss) const
Definition: TreeTypedDataVisitor.cpp:81
armarx::armem::gui::instance::TreeDataVisitorBase
Definition: TreeDataVisitorBase.h:14
armarx::armem::gui::instance::TreeTypedDataVisitor::visitDouble
void visitDouble(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:107
armarx::aron::error::AronException
A base class for aron exceptions.
Definition: Exception.h:36
armarx::armem::gui::instance::TreeDataVisitorBase::items
std::stack< QTreeWidgetItem * > items
Definition: TreeDataVisitorBase.h:76
armarx::aron::type::VariantPtr
std::shared_ptr< Variant > VariantPtr
Definition: forward_declarations.h:11
armarx::armem::gui::instance::TreeTypedDataVisitor::visitListOnExit
void visitListOnExit(const aron::data::VariantPtr &, const aron::type::VariantPtr &) override
Definition: TreeTypedDataVisitor.h:70
armarx::armem::gui::instance::sanitizeTypeName
std::string sanitizeTypeName(const std::string &typeName)
Definition: sanitize_typename.cpp:31
armarx::armem::gui::instance::TreeTypedDataVisitor::visitFloat
void visitFloat(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:119
armarx::aron::data::NDArray
Definition: NDArray.h:48
armarx::armem::gui::instance::TreeTypedDataVisitor::visitListOnEnter
void visitListOnEnter(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:60
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::armem::gui::instance::TreeTypedDataVisitor::visitBool
void visitBool(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:95
armarx::armem::gui::instance::TreeTypedDataVisitor::visitString
void visitString(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:155
armarx::armem::gui::instance::TreeTypedDataVisitor::visitPointCloud
void visitPointCloud(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:204
armarx::armem::gui::instance::TreeTypedDataVisitor::visitInt
void visitInt(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:131
armarx::armem::gui::instance::TreeTypedDataVisitor::visitTupleOnExit
void visitTupleOnExit(const aron::data::VariantPtr &, const aron::type::VariantPtr &) override
Definition: TreeTypedDataVisitor.h:86
armarx::aron::data::detail::SpecializedVariantBase< data::dto::AronBool, Bool >::DynamicCastAndCheck
static PointerType DynamicCastAndCheck(const VariantPtr &n)
Definition: SpecializedVariant.h:134
armarx::armem::gui::instance::TreeTypedDataVisitor::visitImage
void visitImage(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:217
armarx::armem::gui::instance::TreeDataVisitorBase::streamValueText
void streamValueText(Navigator &n, std::stringstream &ss) const
Definition: TreeDataVisitorBase.h:64
armarx::armem::gui::instance::TreeDataVisitorBase::TreeDataVisitorBase
TreeDataVisitorBase()
Definition: TreeDataVisitorBase.cpp:10
armarx::armem::gui::instance::TreeTypedDataVisitor::streamPoseText
void streamPoseText(const aron::data::NDArray &data, const aron::type::Matrix &type, std::stringstream &ss) const
Definition: TreeTypedDataVisitor.cpp:56
armarx::aron::data::VariantPtr
std::shared_ptr< Variant > VariantPtr
Definition: forward_declarations.h:11
armarx::armem::gui::instance::TreeTypedDataVisitor::makeItem
QTreeWidgetItem * makeItem(const std::string &key, const DataNavigatorT &data, const TypeNavigatorT &type) const
Definition: TreeTypedDataVisitor.h:259
armarx::armem::gui::instance::TreeDataVisitorBase::_visitExit
bool _visitExit()
Definition: TreeDataVisitorBase.cpp:55
armarx::armem::gui::instance::TreeTypedDataVisitor::visitObjectOnEnter
void visitObjectOnEnter(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:44
armarx::armem::gui::instance
Definition: AronDataView.cpp:3
armarx::armem::gui::instance::TreeTypedDataVisitor::visitQuaternion
void visitQuaternion(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:191
armarx::armem::gui::instance::TreeTypedDataVisitor::visitObjectOnExit
void visitObjectOnExit(const aron::data::VariantPtr &, const aron::type::VariantPtr &) override
Definition: TreeTypedDataVisitor.h:54
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::armem::gui::instance::TreeTypedDataVisitor::streamPositionText
void streamPositionText(const aron::data::NDArray &data, const aron::type::Matrix &type, std::stringstream &ss) const
Definition: TreeTypedDataVisitor.cpp:69
armarx::armem::gui::instance::TreeTypedDataVisitor::visitDictOnExit
void visitDictOnExit(const aron::data::VariantPtr &, const aron::type::VariantPtr &) override
Definition: TreeTypedDataVisitor.h:38
armarx::armem::gui::instance::TreeTypedDataVisitor
Definition: TreeTypedDataVisitor.h:20
armarx::armem::gui::instance::TreeDataVisitorBase::_visitEnter
bool _visitEnter(const std::string &key, const std::string &type, size_t numChildren)
Definition: TreeDataVisitorBase.cpp:32
All.h
armarx::armem::gui::instance::TreeDataVisitorBase::makeValueRowStrings
QStringList makeValueRowStrings(const std::string &key, const std::string &value, const std::string &typeName) const
Definition: TreeDataVisitorBase.h:42
armarx::armem::gui::instance::TreeTypedDataVisitor::visitDictOnEnter
void visitDictOnEnter(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:28
armarx::armem::gui::instance::serializePath
QStringList serializePath(const aron::Path &path)
Definition: serialize_path.cpp:13
VariantVisitor.h
armarx::armem::gui::instance::TreeDataVisitorBase::columnValue
int columnValue
Definition: TreeDataVisitorBase.h:79
armarx::aron::type::detail::SpecializedVariantBase< type::dto::AronBool, Bool >::DynamicCastAndCheck
static std::shared_ptr< Bool > DynamicCastAndCheck(const VariantPtr &n)
Definition: SpecializedVariant.h:119
armarx::aron::data::RecursiveConstTypedVariantVisitor
Definition: VariantVisitor.h:193
armarx::armem::gui::instance::TreeTypedDataVisitor::visitMatrix
void visitMatrix(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:179
armarx::armem::gui::instance::TreeTypedDataVisitor::visitLong
void visitLong(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:143
armarx::armem::gui::instance::TreeTypedDataVisitor::streamValueText
void streamValueText(const DataNavigatorT &data, const TypeNavigatorT &type, std::stringstream &ss) const
Definition: TreeTypedDataVisitor.h:282
TreeDataVisitorBase.h
armarx::armem::gui::instance::TreeDataVisitorBase::columnKey
int columnKey
Definition: TreeDataVisitorBase.h:78
armarx::armem::gui::instance::TreeTypedDataVisitor::coeffSep
std::string coeffSep
Definition: TreeTypedDataVisitor.h:308
armarx::armem::gui::instance::TreeDataVisitorBase::columnType
int columnType
Definition: TreeDataVisitorBase.h:80
armarx::armem::gui::instance::TreeTypedDataVisitor::visitTupleOnEnter
void visitTupleOnEnter(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
Definition: TreeTypedDataVisitor.h:76
serialize_path.h
armarx::aron::type::Matrix
The Matrix class.
Definition: Matrix.h:39