DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
SchemaRelationshipEditor.cpp
Go to the documentation of this file.
1#include <QMessageBox>
5#include "ui_SchemaRelationshipEditor.h"
6
7using namespace dunedaq::oks;
8
10
12 OksRelationship * Relationship,
13 QWidget * parent )
14 : QWidget ( parent ),
15 ui ( new Ui::SchemaRelationshipEditor ),
16 SchemaRelationship ( Relationship ),
17 SchemaClass ( Class ),
18 UsedNew ( false ),
19 GraphScene ( false )
20{
21 QWidget::setAttribute(Qt::WA_DeleteOnClose);
22
24
25 ui->setupUi ( this );
26 auto title = SchemaClass->get_name() + "::" + SchemaRelationship->get_name();
27 setWindowTitle (
28 QString ( "Relationship Editor : %1" ).arg ( title.c_str() ) );
31}
32
34 QWidget * parent )
35 : QWidget ( parent ),
36 ui ( new Ui::SchemaRelationshipEditor ),
37 SchemaRelationship ( nullptr ),
38 SchemaClass ( Class ),
39 UsedNew ( true ),
40 GraphScene ( false )
41{
42 QWidget::setAttribute(Qt::WA_DeleteOnClose);
43 ui->setupUi ( this );
44 m_writable = true;
45 auto title = SchemaClass->get_name() + " New Relationship";
46 setWindowTitle (
47 QString ( "Relationship Editor : %1" ).arg ( title.c_str() ) );
50}
51
53 QString ClassType,
54 QWidget * parent )
55 : QWidget ( parent ),
56 ui ( new Ui::SchemaRelationshipEditor ),
57 SchemaRelationship ( nullptr ),
58 SchemaClass ( Class ),
59 UsedNew ( true ),
60 GraphScene ( true )
61{
62 QWidget::setAttribute(Qt::WA_DeleteOnClose);
63 m_writable = true;
64 ui->setupUi ( this );
65 setWindowTitle ( "New Relationship" );
68 ui->RelationshipTypeComboBox->setCurrentIndex (
69 ui->RelationshipTypeComboBox->findData ( ClassType, Qt::DisplayRole ) );
70}
72{
73 if(!UsedNew && ClassName.toStdString() == SchemaClass->get_name()) {
74 if(SchemaClass->find_direct_relationship(SchemaRelationship->get_name()) == nullptr) {
75 QWidget::close();
76 } else {
77 FillInfo();
78 }
79 }
80}
81
83{
84 auto name = SchemaClass->get_name() + "::" + SchemaRelationship->get_name();
85 setObjectName ( QString::fromStdString ( name ) );
86 ui->RelationshipNameLineEdit->setText (
87 QString::fromStdString ( SchemaRelationship->get_name() ) );
88 ui->RelationshipTypeComboBox->setCurrentIndex (
89 ui->RelationshipTypeComboBox->findData (
90 QString::fromStdString ( SchemaRelationship->get_type() ), Qt::DisplayRole ) );
91 ui->RelationshipDescriptionTextEdit->setPlainText (
92 QString::fromStdString ( SchemaRelationship->get_description() ) );
93
94 if ( SchemaRelationship->get_is_composite() )
95 {
96 ui->IsCompositeCombo->setCurrentIndex ( 0 );
97 }
98 else
99 {
100 ui->IsCompositeCombo->setCurrentIndex ( 1 );
101 }
102
103 if ( SchemaRelationship->get_is_exclusive() )
104 {
105 ui->IsExclusiveCombo->setCurrentIndex ( 0 );
106 }
107 else
108 {
109 ui->IsExclusiveCombo->setCurrentIndex ( 1 );
110 }
111
112 if ( SchemaRelationship->get_is_dependent() )
113 {
114 ui->IsDependentCombo->setCurrentIndex ( 0 );
115 }
116 else
117 {
118 ui->IsDependentCombo->setCurrentIndex ( 1 );
119 }
120
121 if ( SchemaRelationship->get_low_cardinality_constraint() ==
122 OksRelationship::CardinalityConstraint::Zero ) ui
123 ->LowCcCombo->setCurrentIndex ( 0 );
124 else if ( SchemaRelationship->get_low_cardinality_constraint()
125 == OksRelationship::CardinalityConstraint::One )
126 {
127 ui->LowCcCombo->setCurrentIndex ( 1 );
128 }
129 else
130 {
131 ui->LowCcCombo->setCurrentIndex ( 2 );
132 }
133
134 if ( SchemaRelationship->get_high_cardinality_constraint() ==
135 OksRelationship::CardinalityConstraint::Zero ) ui
136 ->HighCcCombo->setCurrentIndex ( 0 );
137 else if ( SchemaRelationship->get_high_cardinality_constraint()
138 == OksRelationship::CardinalityConstraint::One )
139 {
140 ui->HighCcCombo->setCurrentIndex ( 1 );
141 }
142 else
143 {
144 ui->HighCcCombo->setCurrentIndex ( 2 );
145 }
146}
147
149 if (event->key() == Qt::Key_Escape) {
150 close();
151 }
152 QWidget::keyPressEvent(event);
153}
154
155
157{
158 QStringList ClassList;
160 ui->RelationshipTypeComboBox->addItems ( ClassList );
161 auto name = SchemaClass->get_name() + "::";
162 setObjectName ( QString::fromStdString(name) );
163
164 if (!m_writable) {
165 ui->RelationshipTypeComboBox->setEnabled(false);
166 ui->IsCompositeCombo->setEnabled(false);
167 ui->IsExclusiveCombo->setEnabled(false);
168 ui->IsDependentCombo->setEnabled(false);
169 ui->LowCcCombo->setEnabled(false);
170 ui->HighCcCombo->setEnabled(false);
171 ui->RelationshipDescriptionTextEdit->setEnabled(false);
172 ui->RelationshipNameLineEdit->setEnabled(false);
173 }
174
175 if ( !UsedNew )
176 {
177 FillInfo();
178 }
179}
180
182{
183 if (m_writable) {
184 connect ( ui->buttonBox, SIGNAL ( accepted() ), this, SLOT ( ProxySlot() ) );
185 }
186 else {
187 connect ( ui->buttonBox, SIGNAL ( accepted() ), this, SLOT ( close() ) );
188 }
189 connect ( ui->buttonBox, SIGNAL ( rejected() ), this, SLOT ( close() ) );
190 connect ( &KernelWrapper::GetInstance(), SIGNAL ( ClassCreated(QString) ), this,
191 SLOT ( UpdateClassCombo() ) );
192 connect ( &KernelWrapper::GetInstance(), SIGNAL ( ClassUpdated ( QString ) ), this,
193 SLOT ( ClassUpdated ( QString ) ) );
194}
195
197{
198 bool changed = false;
199 QString RelationshipName = ui->RelationshipNameLineEdit->text();
200 QString RelationshipType = ui->RelationshipTypeComboBox->currentText();
201 QString RelationshipDescription = ui->RelationshipDescriptionTextEdit->toPlainText();
202
203 bool IsComposite;
204
205 if ( ui->IsCompositeCombo->currentIndex() == 0 )
206 {
207 IsComposite = true;
208 }
209 else
210 {
211 IsComposite = false;
212 }
213
214 bool IsExclusive;
215
216 if ( ui->IsExclusiveCombo->currentIndex() == 0 )
217 {
218 IsExclusive = true;
219 }
220 else
221 {
222 IsExclusive = false;
223 }
224
225 bool IsDependent;
226
227 if ( ui->IsDependentCombo->currentIndex() == 0 )
228 {
229 IsDependent = true;
230 }
231 else
232 {
233 IsDependent = false;
234 }
235
236 OksRelationship::CardinalityConstraint RelationshipHighCardinality;
237 OksRelationship::CardinalityConstraint RelationshipLowCardinality;
238
239 if ( ui->HighCcCombo->currentIndex() == 0 ) RelationshipHighCardinality =
240 OksRelationship::CardinalityConstraint::Zero;
241 else if ( ui->HighCcCombo->currentIndex() == 1 ) RelationshipHighCardinality =
242 OksRelationship::CardinalityConstraint::One;
243 else
244 {
245 RelationshipHighCardinality = OksRelationship::CardinalityConstraint::Many;
246 }
247
248 if ( ui->LowCcCombo->currentIndex() == 0 ) RelationshipLowCardinality =
249 OksRelationship::CardinalityConstraint::Zero;
250 else if ( ui->LowCcCombo->currentIndex() == 1 ) RelationshipLowCardinality =
251 OksRelationship::CardinalityConstraint::One;
252 else
253 {
254 RelationshipLowCardinality = OksRelationship::CardinalityConstraint::Many;
255 }
256
257 if ( RelationshipName != QString::fromStdString ( SchemaRelationship->get_name() ) )
258 {
260 SchemaClass, SchemaRelationship, RelationshipName.toStdString() );
261 changed = true;
262 }
263
264 if ( RelationshipType != QString::fromStdString ( SchemaRelationship->get_type() ) )
265 {
267 SchemaClass, SchemaRelationship, RelationshipType.toStdString() );
268 changed = true;
269 }
270
271 if ( RelationshipDescription != QString::fromStdString (
272 SchemaRelationship->get_description() ) )
273 {
275 SchemaClass, SchemaRelationship, RelationshipDescription.toStdString() );
276 changed = true;
277 }
278
279 if ( SchemaRelationship->get_is_composite() != IsComposite )
280 {
282 SchemaRelationship,
283 IsComposite );
284 changed = true;
285 }
286
287 if ( SchemaRelationship->get_is_exclusive() != IsExclusive )
288 {
290 SchemaRelationship,
291 IsExclusive );
292 changed = true;
293 }
294
295 if ( SchemaRelationship->get_is_dependent() != IsDependent )
296 {
298 SchemaRelationship,
299 IsDependent );
300 changed = true;
301 }
302
303 if ( RelationshipHighCardinality != SchemaRelationship->get_high_cardinality_constraint() )
304 {
306 SchemaClass, SchemaRelationship, RelationshipHighCardinality );
307 changed = true;
308 }
309
310 if ( RelationshipLowCardinality != SchemaRelationship->get_low_cardinality_constraint() )
311 {
313 SchemaClass, SchemaRelationship, RelationshipLowCardinality );
314 changed = true;
315 }
316
317 if ( changed )
318 {
319 emit RebuildModel();
320 }
321
322 close();
323}
324
326{
327 if ( ui->RelationshipNameLineEdit->text().isEmpty() )
328 {
329 QMessageBox::warning ( 0, "Schema editor",
330 QString ( "Please Provide a name for the relationship !" ) );
331 return;
332 }
333
334 QString RelationshipName = ui->RelationshipNameLineEdit->text();
335 QString RelationshipType = ui->RelationshipTypeComboBox->currentText();
336 QString RelationshipDescription = ui->RelationshipDescriptionTextEdit->toPlainText();
337
338 bool IsComposite;
339
340 if ( ui->IsCompositeCombo->currentIndex() == 0 )
341 {
342 IsComposite = true;
343 }
344 else
345 {
346 IsComposite = false;
347 }
348
349 bool IsExclusive;
350
351 if ( ui->IsExclusiveCombo->currentIndex() == 0 )
352 {
353 IsExclusive = true;
354 }
355 else
356 {
357 IsExclusive = false;
358 }
359
360 bool IsDependent;
361
362 if ( ui->IsDependentCombo->currentIndex() == 0 )
363 {
364 IsDependent = true;
365 }
366 else
367 {
368 IsDependent = false;
369 }
370
371 OksRelationship::CardinalityConstraint RelationshipHighCardinality;
372 OksRelationship::CardinalityConstraint RelationshipLowCardinality;
373
374 if ( ui->HighCcCombo->currentIndex() == 0 ) RelationshipHighCardinality =
375 OksRelationship::CardinalityConstraint::Zero;
376 else if ( ui->HighCcCombo->currentIndex() == 1 ) RelationshipHighCardinality =
377 OksRelationship::CardinalityConstraint::One;
378 else
379 {
380 RelationshipHighCardinality = OksRelationship::CardinalityConstraint::Many;
381 }
382
383 if ( ui->LowCcCombo->currentIndex() == 0 ) RelationshipLowCardinality =
384 OksRelationship::CardinalityConstraint::Zero;
385 else if ( ui->LowCcCombo->currentIndex() == 1 ) RelationshipLowCardinality =
386 OksRelationship::CardinalityConstraint::One;
387 else
388 {
389 RelationshipLowCardinality = OksRelationship::CardinalityConstraint::Many;
390 }
391
393 RelationshipName.toStdString(),
394 RelationshipDescription.toStdString(),
395 RelationshipType.toStdString(),
396 IsComposite, IsExclusive, IsDependent,
397 RelationshipLowCardinality,
398 RelationshipHighCardinality );
399 emit RebuildModel();
400
401 if ( GraphScene ) emit MakeGraphConnection ( QString::fromStdString (
402 SchemaClass->get_name() ),
403 ui->RelationshipTypeComboBox->currentText(),
404 RelationshipName );
405
406 close();
407}
408
410{
411 if ( UsedNew )
412 {
413 ParseToCreate();
414 }
415 else
416 {
417 ParseToSave();
418 }
419}
420
422{
423 QStringList ClassList;
425 ui->RelationshipTypeComboBox->clear();
426 ui->RelationshipTypeComboBox->addItems ( ClassList );
427 ui->RelationshipTypeComboBox->setCurrentIndex (
428 ui->RelationshipTypeComboBox->findData (
429 QString::fromStdString ( SchemaRelationship->get_type() ), Qt::DisplayRole ) );
430}
void PushSetIsCompositeRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, bool Value)
void GetClassListString(QStringList &ClassListString) const
static KernelWrapper & GetInstance()
void PushSetHighCcRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, dunedaq::oks::OksRelationship::CardinalityConstraint NewCardinality)
void PushSetIsDependentRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, bool Value)
void PushAddRelationship(dunedaq::oks::OksClass *Class, std::string Name, std::string Description, std::string Type, bool Composite, bool Exclusive, bool Dependent, dunedaq::oks::OksRelationship::CardinalityConstraint LowCc, dunedaq::oks::OksRelationship::CardinalityConstraint HighCc)
void PushSetIsExclusiveRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, bool Value)
void PushSetClassTypeRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, std::string ClassType)
void PushSetLowCcRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, dunedaq::oks::OksRelationship::CardinalityConstraint NewCardinality)
bool IsFileWritable(const std::string &FileName) const
void PushSetDescriptionRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, std::string Description)
void PushSetNameRelationshipCommand(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, std::string Name)
Relationship commands.
dbse::Ui::SchemaRelationshipEditor * ui
SchemaRelationshipEditor(dunedaq::oks::OksClass *Class, dunedaq::oks::OksRelationship *Relationship, QWidget *parent=nullptr)
void keyPressEvent(QKeyEvent *event) override
dunedaq::oks::OksRelationship * SchemaRelationship
The OKS class.
Definition class.hpp:200
const std::string & get_name() const noexcept
Definition class.hpp:363
OksFile * get_file() const noexcept
Definition class.hpp:338
const std::string & get_full_file_name() const
Definition file.hpp:523
const std::string & get_name() const noexcept