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
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
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
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
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
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 {
111 const std::string key = data->getPath().getLastElement();
112
115 this->addValueRow(key, d, t);
116 }
117
118 void
120 {
123 const std::string key = data->getPath().getLastElement();
124
127 this->addValueRow(key, d, t);
128 }
129
130 void
132 {
135 const std::string key = data->getPath().getLastElement();
136
139 this->addValueRow(key, d, t);
140 }
141
142 void
144 {
147 const std::string key = data->getPath().getLastElement();
148
151 this->addValueRow(key, d, t);
152 }
153
154 void
156 {
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 {
183 const std::string key = data->getPath().getLastElement();
184
186 auto t = *aron::type::Matrix::DynamicCastAndCheck(type);
187 this->addValueRow(key, d, t);
188 }
189
190 void
192 const aron::type::VariantPtr& type) override
193 {
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 {
209 const std::string key = data->getPath().getLastElement();
210
213 this->addValueRow(key, d, t);
214 }
215
216 void
218 {
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
void streamValueText(Navigator &n, std::stringstream &ss) const
QStringList makeValueRowStrings(const std::string &key, const std::string &value, const std::string &typeName) const
bool _visitEnter(const std::string &key, const std::string &type, size_t numChildren)
void visitTupleOnExit(const aron::data::VariantPtr &, const aron::type::VariantPtr &) override
void streamOrientationText(const aron::data::NDArray &data, const aron::type::Matrix &type, std::stringstream &ss) const
void visitListOnExit(const aron::data::VariantPtr &, const aron::type::VariantPtr &) override
void visitInt(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
bool addValueRow(const std::string &key, const DataNavigatorT &data, const TypeNavigatorT &type)
void visitObjectOnEnter(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void streamValueText(const DataNavigatorT &data, const TypeNavigatorT &type, std::stringstream &ss) const
void visitQuaternion(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void streamPositionText(const aron::data::NDArray &data, const aron::type::Matrix &type, std::stringstream &ss) const
void visitDictOnEnter(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void visitLong(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void visitPointCloud(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void streamPoseText(const aron::data::NDArray &data, const aron::type::Matrix &type, std::stringstream &ss) const
void visitMatrix(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void visitTupleOnEnter(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void visitBool(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void visitDouble(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void visitFloat(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
QTreeWidgetItem * makeItem(const std::string &key, const DataNavigatorT &data, const TypeNavigatorT &type) const
void visitString(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void visitObjectOnExit(const aron::data::VariantPtr &, const aron::type::VariantPtr &) override
void visitImage(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
void visitDictOnExit(const aron::data::VariantPtr &, const aron::type::VariantPtr &) override
void visitListOnEnter(const aron::data::VariantPtr &data, const aron::type::VariantPtr &type) override
A base class for aron exceptions.
Definition Exception.h:37
The Matrix class.
Definition Matrix.h:40
static std::shared_ptr< DerivedT > DynamicCastAndCheck(const VariantPtr &n)
#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...
std::string sanitizeTypeName(const std::string &typeName)
QStringList serializePath(const aron::Path &path)
std::shared_ptr< Variant > VariantPtr
std::shared_ptr< Variant > VariantPtr