DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
treenode.cpp
Go to the documentation of this file.
1// DUNE DAQ modification notice:
2// This file has been modified from the original ATLAS dbe source for the DUNE DAQ project.
3// Fork baseline commit: dbe-02-12-17 (2022-05-12).
4// Renamed since fork: no.
5
7#include "dbe/treenode.hpp"
12#include "dbe/dbcontroller.hpp"
13#include "dbe/ui_constants.hpp"
14
15#include <QApplication>
16#include <QBitmap>
17#include <QComboBox>
18#include <QDrag>
19#include <QGraphicsPixmapItem>
20#include <QGraphicsScene>
21#include <QGraphicsSceneMouseEvent>
22#include <QHBoxLayout>
23#include <QLabel>
24#include <QMessageBox>
25#include <QMimeData>
26#include <QPainter>
27#include <QPushButton>
28
30 : Parent(ParentNode)
31 , HasStructure(false)
32 , WasFetched(false)
33{
34 if (Parent != nullptr) {
35 Parent->AddChild(this);
36 }
37}
38
39dbe::treenode::treenode(const QString& Datum, treenode* ParentNode)
40 : treenode(ParentNode)
41{
42 Data.append(Datum);
43}
44
45dbe::treenode::treenode(const QStringList& DataList, treenode* ParentNode)
46 : treenode(ParentNode)
47{
48
49 for (auto& i : DataList) {
50 Data.append(i);
51 }
52}
53
55{
56 qDeleteAll(Children);
57}
58
59QVariant
60dbe::treenode::GetData(const int Column, int role) const
61{
62 if (role == Qt::DisplayRole) {
63 return Data.value(Column);
64 } else {
65 return QVariant();
66 }
67}
68
69void
70dbe::treenode::rename(QString const& name)
71{
72 Data[0] = QVariant(name);
73}
74
77{
78 throw daq::dbe::cannot_handle_invalid_qmodelindex(ERS_HERE);
79}
80
81int
83{
84 if (Parent) {
85 return Parent->Children.indexOf(const_cast<treenode*>(this));
86 }
87
88 return 0;
89}
90
91void
93{
94 Children.append(Child);
95}
96
97void
99{
100 Children.removeOne(Child);
101}
102
104dbe::treenode::GetChild(const int Row) const
105{
106 return Children.at(Row);
107}
108
109QList<dbe::treenode*>
111{
112 return Children;
113}
114
117{
118 return Parent;
119}
120
121int
123{
124 return Children.size();
125}
126
127int
129{
130 return Data.size();
131}
132
133void
135{
136 HasStructure = Structure;
137}
138
139bool
141{
142 return HasStructure;
143}
144
145void
147{
148 WasFetched = Fetched;
149}
150
151bool
153{
154 return WasFetched;
155}
156
158 : treenode(ParentNode)
159 , ClassInfo(Info)
160 , numObjects(0)
161{
162 Data.append(QVariant(QString::fromStdString(ClassInfo.p_name)));
163 Data.append(QVariant(numObjects));
164 m_tooltip = QVariant(QString::fromStdString(ClassInfo.p_description));
165}
166
168
169void
171{
172 addition ? ++numObjects : --numObjects;
173
174 Data[1] = QVariant(numObjects);
175
176 confaccessor::increase_total_objects(addition == true ? 1 : -1);
177
178 if (numObjects == 0) {
179 SetWasFetched(true);
180 } else {
181 SetHasStructure(true);
182 }
183}
184
185void
191
192void
198
199QVariant
200dbe::ClassNode::GetData(const int Column, int role) const
201{
202 switch (role) {
203
204 case Qt::DisplayRole:
205 return Data.value(Column);
206
207 case Qt::ToolTipRole:
208
209 return m_tooltip;
210
211 break;
212 case Qt::DecorationRole:
213
214 if (Column == 0) {
215 return QIcon(":/Images/Folder.png");
216 }
217 }
218
219 return QVariant();
220}
221
224{
225 return ClassInfo;
226}
227
228dbe::ObjectNode::ObjectNode(dref obj, bool acopy, treenode* ParentNode)
229 : treenode(ParentNode)
230 , configdata(obj)
231{
232 Data.append(QVariant(QString::fromStdString(configdata.UID())));
233 if (not acopy) {
235 std::vector<dunedaq::conffwk::attribute_t> Attributes = ClassInfo.p_attributes;
236 std::vector<dunedaq::conffwk::relationship_t> Relationships = ClassInfo.p_relationships;
237
238 if ((Relationships.size() > 0)) {
239 SetHasStructure(true);
240 }
241
242 for (dunedaq::conffwk::attribute_t& Attribute : Attributes) {
243 new AttributeNode(Attribute, static_cast<treenode*>(this));
244 }
245
246 for (dunedaq::conffwk::relationship_t& Relationship : Relationships) {
247 new RelationshipNode(Relationship, static_cast<treenode*>(this));
248 }
249 }
250
251 SetWasFetched(true);
252}
253
255
256QVariant
257dbe::ObjectNode::GetData(const int Column, int role) const
258{
259 switch (role) {
260
261 case Qt::DisplayRole:
262 return Data.value(Column);
263
264 case Qt::DecorationRole:
265
266 if (Column == 0) {
267 return QIcon(":/Images/TextGeneric.png");
268 }
269 break;
270 }
271
272 return QVariant();
273}
274
277{
278 return configdata.ref();
279}
280
282 : treenode(ParentNode)
283 , attribute_t_definition(AttributeData)
284{
285 Data.append(QVariant(QString::fromStdString(AttributeData.p_name)));
286
287 tref ObjectParent = GetParent()->GetObject();
288
289 QStringList DataList{ dbe::config::api::get::attribute::list<QStringList>(ObjectParent, AttributeData) };
290
291 for (QString& ObjectData : DataList) {
292 if (!ObjectData.isEmpty()) {
293 treenode* ChildNode = new treenode(ObjectData, static_cast<treenode*>(this));
294 ChildNode->SetWasFetched(true);
295 }
296 }
297
298 if (DataList.size() > 0 && !DataList.at(0).isNull()) {
299 SetHasStructure(true);
300 }
301
302 SetWasFetched(true);
303}
304
306
307QVariant
308dbe::AttributeNode::GetData(const int Column, int role) const
309{
310 switch (role) {
311
312 case Qt::DisplayRole:
313 return Data.value(Column);
314
315 case Qt::DecorationRole:
316
317 if (Column == 0) {
318 return QIcon(":/Images/SLink.png");
319 }
320 }
321
322 return QVariant();
323}
324
330
332 : treenode(ParentNode)
333 , relation_t_definition(relation)
334{
335 Data.append(QVariant(QString::fromStdString(relation.p_name)));
336
337 std::vector<tref> DataList;
338 tref ObjectParent = GetParent()->GetObject();
339
342 try {
343 tref Data = dbe::config::api::graph::linked::through::relation<tref>(ObjectParent, relation);
344 DataList.push_back(Data);
345 } catch (daq::dbe::config_object_retrieval_result_is_null const& e) {
346 // nothing needs be done to handle the case that a relationship is not set
347 }
348 } else {
349 DataList = config::api::graph::linked::through::relation<std::vector<tref>>(ObjectParent, relation);
350 }
351
352 for (tref const& Object : DataList) {
353 new ObjectNode(Object, true, static_cast<treenode*>(this));
354 }
355
356 if (DataList.size() > 0) {
357 SetHasStructure(true);
358 }
359
360 SetWasFetched(true);
361}
362
364
365QVariant
366dbe::RelationshipNode::GetData(const int Column, int role) const
367{
368 switch (role) {
369
370 case Qt::DisplayRole:
371 return Data.value(Column);
372
373 case Qt::DecorationRole:
374
375 if (Column == 0) {
376 return QIcon(":/Images/SLink.png");
377 }
378 }
379
380 return QVariant();
381}
382
#define ERS_HERE
virtual QVariant GetData(const int Column, int role=Qt::DisplayRole) const
Definition treenode.cpp:308
dunedaq::conffwk::attribute_t attribute_t() const
Definition treenode.cpp:326
AttributeNode(const dunedaq::conffwk::attribute_t &AttributeData, treenode *ParentNode)
Definition treenode.cpp:281
dunedaq::conffwk::attribute_t attribute_t_definition
Definition treenode.hpp:102
void AddChild(treenode *Child) override
Definition treenode.cpp:186
unsigned int numObjects
Definition treenode.hpp:77
dunedaq::conffwk::class_t GetClassInfo() const
Definition treenode.cpp:223
void updateData(bool addition)
Definition treenode.cpp:170
virtual QVariant GetData(int Column, int role=Qt::DisplayRole) const
Definition treenode.cpp:200
QVariant m_tooltip
Definition treenode.hpp:78
void RemoveChild(treenode *Child) override
Definition treenode.cpp:193
dunedaq::conffwk::class_t ClassInfo
Definition treenode.hpp:76
ClassNode(const dunedaq::conffwk::class_t &Info, treenode *ParentNode)
Definition treenode.cpp:157
ObjectNode(dref ObjectData, bool IsCopy, treenode *ParentNode)
Definition treenode.cpp:228
tref GetObject() const
Definition treenode.cpp:276
virtual QVariant GetData(const int Column, int role=Qt::DisplayRole) const
Definition treenode.cpp:257
virtual QVariant GetData(const int Column, int role=Qt::DisplayRole) const
Definition treenode.cpp:366
dunedaq::conffwk::relationship_t relation_t_definition
Definition treenode.hpp:114
dunedaq::conffwk::relationship_t relation_t() const
Definition treenode.cpp:384
RelationshipNode(const dunedaq::conffwk::relationship_t &RelationshipData, treenode *ParentNode)
Definition treenode.cpp:331
static void increase_total_objects(int const i)
static T list(dbe::inner::configobject::tref obj, dunedaq::conffwk::attribute_t const &attr)
static dunedaq::conffwk::class_t definition(std::string const &cn, bool direct_only)
dunedaq::conffwk::ConfigObject & ref(bool check_null=true) const
QList< treenode * > Children
Definition treenode.hpp:55
int ColumnCount() const
Definition treenode.cpp:128
virtual ~treenode()
Definition treenode.cpp:54
treenode * GetParent() const
Definition treenode.cpp:116
virtual void RemoveChild(treenode *Child)
Definition treenode.cpp:98
void rename(QString const &)
Definition treenode.cpp:70
void SetHasStructure(bool Structure)
Definition treenode.cpp:134
bool GetHasStructure() const
Definition treenode.cpp:140
virtual tref GetObject() const
Definition treenode.cpp:76
treenode(treenode *ParentNode=nullptr)
Including QT Headers.
Definition treenode.cpp:29
QList< treenode * > GetChildren() const
Definition treenode.cpp:110
treenode * GetChild(const int Row) const
Definition treenode.cpp:104
int ChildCount() const
Definition treenode.cpp:122
virtual void AddChild(treenode *Child)
Definition treenode.cpp:92
treenode * Parent
Definition treenode.hpp:54
bool GetWasFetched() const
Definition treenode.cpp:152
virtual QVariant GetData(const int Column, int role=Qt::DisplayRole) const
Definition treenode.cpp:60
bool HasStructure
Definition treenode.hpp:57
void SetWasFetched(bool Fetched)
Definition treenode.cpp:146
int GetRow() const
Definition treenode.cpp:82
QList< QVariant > Data
Definition treenode.hpp:56
T relation(tref item, dunedaq::conffwk::relationship_t const &relation)
inner::configobject::tref tref
Definition tref.hpp:36
config_object_description dref
const std::vector< attribute_t > p_attributes
Definition Schema.hpp:161
const std::vector< relationship_t > p_relationships
Definition Schema.hpp:162
std::string p_description
Definition Schema.hpp:156