DataTreeBuilderBase.cpp
Go to the documentation of this file.
2
3#include <QTreeWidgetItem>
4
6// #include <ArmarXCore/core/logging/Logging.h>
7
11
13{
14
15 const int keyIndexRole = Qt::UserRole + 10;
16
20
24
25 void
26 DataTreeBuilderBase::setColumns(int key, int value, int type)
27 {
28 this->columnKey = key;
29 this->columnType = type;
30 this->columnValue = value;
31 }
32
33 QTreeWidgetItem*
34 DataTreeBuilderBase::makeItem(const std::string& key) const
35 {
36 return new QTreeWidgetItem(QStringList{QString::fromStdString(key)});
37 }
38
39 QTreeWidgetItem*
41 {
42 QTreeWidgetItem* item = new QTreeWidgetItem();
43 item->setData(0, keyIndexRole, static_cast<int>(key));
44 return item;
45 }
46
47 void
48 DataTreeBuilderBase::setRowTexts(QTreeWidgetItem* item,
49 const std::string& key,
50 const std::string& value,
51 const std::string& typeName) const
52 {
53 item->setText(columnKey, QString::fromStdString(key));
54 item->setText(columnValue, QString::fromStdString(value));
55 item->setText(columnType, QString::fromStdString(typeName));
56 }
57
58 void
59 DataTreeBuilderBase::setRowTexts(QTreeWidgetItem* item,
60 const std::string& key,
62 {
63 if (!data)
64 {
65 return;
66 }
67 const std::string value = armarx::aron::DataDisplayVisitor::getValue(data);
68 setRowTexts(item, key, value, sanitizeTypeName(data->getFullName()));
69 }
70
73 {
74 DictBuilder builder;
75 builder.setCompareFn([](const std::string& key, QTreeWidgetItem* item)
76 { return armarx::detail::compare(key, item->text(0).toStdString()); });
77 builder.setMakeItemFn([this](const std::string& key) { return this->makeItem(key); });
78 return builder;
79 }
80
83 {
84 ListBuilder builder;
85 builder.setCompareFn(
86 [](size_t key, QTreeWidgetItem* item)
87 {
88 QVariant itemKey = item->data(0, keyIndexRole);
89 ARMARX_CHECK_EQUAL(itemKey.type(), QVariant::Type::Int);
90 // << VAROUT(key) << " | " << VAROUT(item->text(0).toStdString()) << itemKey.typeName();
91
92 return armarx::detail::compare(static_cast<int>(key), itemKey.toInt());
93 });
94 builder.setMakeItemFn([this](size_t key) { return this->makeItem(key); });
95 return builder;
96 }
97
98 std::vector<size_t>
100 {
101 std::vector<size_t> index;
102 index.reserve(size);
103 for (size_t i = 0; i < size; ++i)
104 {
105 index.push_back(i);
106 }
107 return index;
108 }
109
110} // namespace armarx::armem::gui::instance
std::vector< size_t > getIndex(size_t size) const
armarx::TreeWidgetBuilder< std::string > DictBuilder
armarx::TreeWidgetBuilder< size_t > ListBuilder
void setRowTexts(QTreeWidgetItem *item, const std::string &key, const std::string &value, const std::string &typeName="") const
QTreeWidgetItem * makeItem(const std::string &key) const
static std::string getValue(const data::VariantPtr &n)
#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...
std::string sanitizeTypeName(const std::string &typeName)
std::shared_ptr< Variant > VariantPtr
int compare(const T &lhs, const T &rhs)
void setMakeItemFn(MakeItemFn makeItemFn)
void setCompareFn(CompareFn compareFn)