##// END OF EJS Templates
Remove Event from Catalogue only unreferenced them
perrinel -
r1366:fdf0baf1b82b
parent child
Show More
@@ -1,594 +1,607
1 1 #include "Catalogue/CatalogueEventsWidget.h"
2 2 #include "ui_CatalogueEventsWidget.h"
3 3
4 4 #include <Catalogue/CatalogueController.h>
5 5 #include <Catalogue/CatalogueEventsModel.h>
6 6 #include <Catalogue/CatalogueExplorerHelper.h>
7 7 #include <CatalogueDao.h>
8 8 #include <DBCatalogue.h>
9 9 #include <DBEventProduct.h>
10 10 #include <DataSource/DataSourceController.h>
11 11 #include <DataSource/DataSourceItem.h>
12 12 #include <SqpApplication.h>
13 13 #include <Variable/Variable.h>
14 14 #include <Variable/VariableController.h>
15 15 #include <Visualization/VisualizationGraphWidget.h>
16 16 #include <Visualization/VisualizationTabWidget.h>
17 17 #include <Visualization/VisualizationWidget.h>
18 18 #include <Visualization/VisualizationZoneWidget.h>
19 19
20 20 #include <QDialog>
21 21 #include <QDialogButtonBox>
22 22 #include <QListWidget>
23 23 #include <QMessageBox>
24 24
25 25 Q_LOGGING_CATEGORY(LOG_CatalogueEventsWidget, "CatalogueEventsWidget")
26 26
27 27 /// Fixed size of the validation column
28 28 const auto VALIDATION_COLUMN_SIZE = 35;
29 29
30 30 /// Percentage added to the range of a event when it is displayed
31 31 const auto EVENT_RANGE_MARGE = 30; // in %
32 32
33 33 struct CatalogueEventsWidget::CatalogueEventsWidgetPrivate {
34 34
35 35 CatalogueEventsModel *m_Model = nullptr;
36 36 QStringList m_ZonesForTimeMode;
37 37 QString m_ZoneForGraphMode;
38 38 QVector<std::shared_ptr<DBCatalogue> > m_DisplayedCatalogues;
39 39 bool m_AllEventDisplayed = false;
40 40 QVector<VisualizationGraphWidget *> m_CustomGraphs;
41 41
42 42 VisualizationWidget *m_VisualizationWidget = nullptr;
43 43
44 44 void setEvents(const QVector<std::shared_ptr<DBEvent> > &events, CatalogueEventsWidget *widget)
45 45 {
46 46 widget->ui->treeView->setSortingEnabled(false);
47 47 m_Model->setSourceCatalogues(m_DisplayedCatalogues);
48 48 m_Model->setEvents(events);
49 49 widget->ui->treeView->setSortingEnabled(true);
50 50
51 51 for (auto event : events) {
52 52 if (sqpApp->catalogueController().eventHasChanges(event)) {
53 53 auto index = m_Model->indexOf(event);
54 54 widget->setEventChanges(event, true);
55 55 }
56 56 }
57 57 }
58 58
59 59 void addEvent(const std::shared_ptr<DBEvent> &event, QTreeView *treeView)
60 60 {
61 61 treeView->setSortingEnabled(false);
62 62 m_Model->addEvent(event);
63 63 treeView->setSortingEnabled(true);
64 64 }
65 65
66 66 void removeEvent(const std::shared_ptr<DBEvent> &event, QTreeView *treeView)
67 67 {
68 68 treeView->setSortingEnabled(false);
69 69 m_Model->removeEvent(event);
70 70 treeView->setSortingEnabled(true);
71 71 }
72 72
73 73 QStringList getAvailableVisualizationZoneList() const
74 74 {
75 75 if (m_VisualizationWidget) {
76 76 if (auto tab = m_VisualizationWidget->currentTabWidget()) {
77 77 return tab->availableZoneWidgets();
78 78 }
79 79 }
80 80
81 81 return QStringList{};
82 82 }
83 83
84 84 QStringList selectZone(QWidget *parent, const QStringList &selectedZones,
85 85 bool allowMultiSelection, const QPoint &location)
86 86 {
87 87 auto availableZones = getAvailableVisualizationZoneList();
88 88 if (availableZones.isEmpty()) {
89 89 return QStringList{};
90 90 }
91 91
92 92 QDialog d(parent, Qt::Tool);
93 93 d.setWindowTitle("Choose a zone");
94 94 auto layout = new QVBoxLayout{&d};
95 95 layout->setContentsMargins(0, 0, 0, 0);
96 96 auto listWidget = new QListWidget{&d};
97 97 layout->addWidget(listWidget);
98 98
99 99 QSet<QListWidgetItem *> checkedItems;
100 100 for (auto zone : availableZones) {
101 101 auto item = new QListWidgetItem{zone};
102 102 item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
103 103 if (selectedZones.contains(zone)) {
104 104 item->setCheckState(Qt::Checked);
105 105 checkedItems << item;
106 106 }
107 107 else {
108 108 item->setCheckState(Qt::Unchecked);
109 109 }
110 110
111 111 listWidget->addItem(item);
112 112 }
113 113
114 114 auto buttonBox = new QDialogButtonBox{QDialogButtonBox::Ok, &d};
115 115 layout->addWidget(buttonBox);
116 116
117 117 QObject::connect(buttonBox, &QDialogButtonBox::accepted, &d, &QDialog::accept);
118 118 QObject::connect(buttonBox, &QDialogButtonBox::rejected, &d, &QDialog::reject);
119 119
120 120 QObject::connect(listWidget, &QListWidget::itemChanged,
121 121 [&checkedItems, allowMultiSelection, listWidget](auto item) {
122 122 if (item->checkState() == Qt::Checked) {
123 123 if (!allowMultiSelection) {
124 124 for (auto checkedItem : checkedItems) {
125 125 listWidget->blockSignals(true);
126 126 checkedItem->setCheckState(Qt::Unchecked);
127 127 listWidget->blockSignals(false);
128 128 }
129 129
130 130 checkedItems.clear();
131 131 }
132 132 checkedItems << item;
133 133 }
134 134 else {
135 135 checkedItems.remove(item);
136 136 }
137 137 });
138 138
139 139 QStringList result;
140 140
141 141 d.setMinimumWidth(120);
142 142 d.resize(d.minimumSizeHint());
143 143 d.move(location);
144 144 if (d.exec() == QDialog::Accepted) {
145 145 for (auto item : checkedItems) {
146 146 result += item->text();
147 147 }
148 148 }
149 149 else {
150 150 result = selectedZones;
151 151 }
152 152
153 153 return result;
154 154 }
155 155
156 156 void updateForTimeMode(QTreeView *treeView)
157 157 {
158 158 auto selectedRows = treeView->selectionModel()->selectedRows();
159 159
160 160 if (selectedRows.count() == 1) {
161 161 auto event = m_Model->getEvent(selectedRows.first());
162 162 if (event) {
163 163 if (m_VisualizationWidget) {
164 164 if (auto tab = m_VisualizationWidget->currentTabWidget()) {
165 165
166 166 for (auto zoneName : m_ZonesForTimeMode) {
167 167 if (auto zone = tab->getZoneWithName(zoneName)) {
168 168 SqpRange eventRange;
169 169 eventRange.m_TStart = event->getTStart();
170 170 eventRange.m_TEnd = event->getTEnd();
171 171 zone->setZoneRange(eventRange);
172 172 }
173 173 }
174 174 }
175 175 else {
176 176 qCWarning(LOG_CatalogueEventsWidget())
177 177 << "updateTimeZone: no tab found in the visualization";
178 178 }
179 179 }
180 180 else {
181 181 qCWarning(LOG_CatalogueEventsWidget())
182 182 << "updateTimeZone: visualization widget not found";
183 183 }
184 184 }
185 185 }
186 186 else {
187 187 qCWarning(LOG_CatalogueEventsWidget())
188 188 << "updateTimeZone: not compatible with multiple events selected";
189 189 }
190 190 }
191 191
192 192 QVector<SqpRange> getGraphRanges(const std::shared_ptr<DBEvent> &event)
193 193 {
194 194 // Retrieves the range of each product and the maximum size
195 195 QVector<SqpRange> graphRanges;
196 196 double maxDt = 0;
197 197 for (auto eventProduct : event->getEventProducts()) {
198 198 SqpRange eventRange;
199 199 eventRange.m_TStart = eventProduct.getTStart();
200 200 eventRange.m_TEnd = eventProduct.getTEnd();
201 201 graphRanges << eventRange;
202 202
203 203 auto dt = eventRange.m_TEnd - eventRange.m_TStart;
204 204 if (dt > maxDt) {
205 205 maxDt = dt;
206 206 }
207 207 }
208 208
209 209 // Adds the marge
210 210 maxDt *= (100.0 + EVENT_RANGE_MARGE) / 100.0;
211 211
212 212 // Corrects the graph ranges so that they all have the same size
213 213 QVector<SqpRange> correctedGraphRanges;
214 214 for (auto range : graphRanges) {
215 215 auto dt = range.m_TEnd - range.m_TStart;
216 216 auto diff = qAbs((maxDt - dt) / 2.0);
217 217
218 218 SqpRange correctedRange;
219 219 correctedRange.m_TStart = range.m_TStart - diff;
220 220 correctedRange.m_TEnd = range.m_TEnd + diff;
221 221
222 222 correctedGraphRanges << correctedRange;
223 223 }
224 224
225 225 return correctedGraphRanges;
226 226 }
227 227
228 228 void updateForGraphMode(CatalogueEventsWidget *catalogueEventWidget)
229 229 {
230 230 auto selectedRows = catalogueEventWidget->ui->treeView->selectionModel()->selectedRows();
231 231 if (selectedRows.count() != 1) {
232 232 qCWarning(LOG_CatalogueEventsWidget())
233 233 << "updateGraphMode: not compatible with multiple events selected";
234 234 return;
235 235 }
236 236
237 237 if (!m_VisualizationWidget) {
238 238 qCWarning(LOG_CatalogueEventsWidget())
239 239 << "updateGraphMode: visualization widget not found";
240 240 return;
241 241 }
242 242
243 243 auto event = m_Model->getEvent(selectedRows.first());
244 244 if (!event) {
245 245 // A event product is probably selected
246 246 qCInfo(LOG_CatalogueEventsWidget()) << "updateGraphMode: no events are selected";
247 247 return;
248 248 }
249 249
250 250 auto tab = m_VisualizationWidget->currentTabWidget();
251 251 if (!tab) {
252 252 qCWarning(LOG_CatalogueEventsWidget())
253 253 << "updateGraphMode: no tab found in the visualization";
254 254 return;
255 255 }
256 256
257 257 auto zone = tab->getZoneWithName(m_ZoneForGraphMode);
258 258 if (!zone) {
259 259 qCWarning(LOG_CatalogueEventsWidget()) << "updateGraphMode: zone not found";
260 260 return;
261 261 }
262 262
263 263 // Closes the previous graph and delete the asociated variables
264 264 for (auto graph : m_CustomGraphs) {
265 265 graph->close();
266 266 auto variables = graph->variables().toVector();
267 267
268 268 QMetaObject::invokeMethod(&sqpApp->variableController(), "deleteVariables",
269 269 Qt::QueuedConnection,
270 270 Q_ARG(QVector<std::shared_ptr<Variable> >, variables));
271 271 }
272 272 m_CustomGraphs.clear();
273 273
274 274 // Closes the remaining graphs inside the zone
275 275 zone->closeAllGraphs();
276 276
277 277 // Calculates the range of each graph which will be created
278 278 auto graphRange = getGraphRanges(event);
279 279
280 280 // Loops through the event products and create the graph
281 281 auto itRange = graphRange.cbegin();
282 282 for (auto eventProduct : event->getEventProducts()) {
283 283 auto productId = eventProduct.getProductId();
284 284
285 285 auto range = *itRange;
286 286 ++itRange;
287 287
288 288 SqpRange productRange;
289 289 productRange.m_TStart = eventProduct.getTStart();
290 290 productRange.m_TEnd = eventProduct.getTEnd();
291 291
292 292 auto context = new QObject{catalogueEventWidget};
293 293 QObject::connect(
294 294 &sqpApp->variableController(), &VariableController::variableAdded, context,
295 295 [this, catalogueEventWidget, zone, context, event, range, productRange,
296 296 productId](auto variable) {
297 297
298 298 if (variable->metadata().value(DataSourceItem::ID_DATA_KEY).toString()
299 299 == productId) {
300 300 auto graph = zone->createGraph(variable);
301 301 graph->setAutoRangeOnVariableInitialization(false);
302 302
303 303 auto selectionZone
304 304 = graph->addSelectionZone(event->getName(), productRange);
305 305 emit catalogueEventWidget->selectionZoneAdded(event, productId,
306 306 selectionZone);
307 307 m_CustomGraphs << graph;
308 308
309 309 graph->setGraphRange(range, true);
310 310
311 311 // Removes the graph from the graph list if it is closed manually
312 312 QObject::connect(graph, &VisualizationGraphWidget::destroyed,
313 313 [this, graph]() { m_CustomGraphs.removeAll(graph); });
314 314
315 315 delete context; // removes the connection
316 316 }
317 317 },
318 318 Qt::QueuedConnection);
319 319
320 320 QMetaObject::invokeMethod(&sqpApp->dataSourceController(),
321 321 "requestVariableFromProductIdKey", Qt::QueuedConnection,
322 322 Q_ARG(QString, productId));
323 323 }
324 324 }
325 325
326 326 void getSelectedItems(
327 327 QTreeView *treeView, QVector<std::shared_ptr<DBEvent> > &events,
328 328 QVector<QPair<std::shared_ptr<DBEvent>, std::shared_ptr<DBEventProduct> > > &eventProducts)
329 329 {
330 330 for (auto rowIndex : treeView->selectionModel()->selectedRows()) {
331 331 auto itemType = m_Model->itemTypeOf(rowIndex);
332 332 if (itemType == CatalogueEventsModel::ItemType::Event) {
333 333 events << m_Model->getEvent(rowIndex);
334 334 }
335 335 else if (itemType == CatalogueEventsModel::ItemType::EventProduct) {
336 336 eventProducts << qMakePair(m_Model->getParentEvent(rowIndex),
337 337 m_Model->getEventProduct(rowIndex));
338 338 }
339 339 }
340 340 }
341 341 };
342 342
343 343 CatalogueEventsWidget::CatalogueEventsWidget(QWidget *parent)
344 344 : QWidget(parent),
345 345 ui(new Ui::CatalogueEventsWidget),
346 346 impl{spimpl::make_unique_impl<CatalogueEventsWidgetPrivate>()}
347 347 {
348 348 ui->setupUi(this);
349 349
350 350 impl->m_Model = new CatalogueEventsModel{this};
351 351 ui->treeView->setModel(impl->m_Model);
352 352
353 353 ui->treeView->setSortingEnabled(true);
354 354 ui->treeView->setDragDropMode(QAbstractItemView::DragDrop);
355 355 ui->treeView->setDragEnabled(true);
356 356
357 357 connect(ui->btnTime, &QToolButton::clicked, [this](auto checked) {
358 358 if (checked) {
359 359 ui->btnChart->setChecked(false);
360 360 impl->m_ZonesForTimeMode
361 361 = impl->selectZone(this, impl->m_ZonesForTimeMode, true,
362 362 this->mapToGlobal(ui->btnTime->frameGeometry().center()));
363 363
364 364 impl->updateForTimeMode(ui->treeView);
365 365 }
366 366 });
367 367
368 368 connect(ui->btnChart, &QToolButton::clicked, [this](auto checked) {
369 369 if (checked) {
370 370 ui->btnTime->setChecked(false);
371 371 impl->m_ZoneForGraphMode
372 372 = impl->selectZone(this, {impl->m_ZoneForGraphMode}, false,
373 373 this->mapToGlobal(ui->btnChart->frameGeometry().center()))
374 374 .value(0);
375 375
376 376 impl->updateForGraphMode(this);
377 377 }
378 378 });
379 379
380 380 connect(ui->btnRemove, &QToolButton::clicked, [this]() {
381 381 QVector<std::shared_ptr<DBEvent> > events;
382 382 QVector<QPair<std::shared_ptr<DBEvent>, std::shared_ptr<DBEventProduct> > > eventProducts;
383 383 impl->getSelectedItems(ui->treeView, events, eventProducts);
384 384
385 385 if (!events.isEmpty() && eventProducts.isEmpty()) {
386 386
387 if (QMessageBox::warning(this, tr("Remove Event(s)"),
388 tr("The selected event(s) will be permanently removed "
389 "from the repository!\nAre you sure you want to continue?"),
390 QMessageBox::Yes | QMessageBox::No, QMessageBox::No)
391 == QMessageBox::Yes) {
392
387 auto canRemoveEvent
388 = !this->isAllEventsDisplayed()
389 || (QMessageBox::warning(
390 this, tr("Remove Event(s)"),
391 tr("The selected event(s) will be permanently removed "
392 "from the repository!\nAre you sure you want to continue?"),
393 QMessageBox::Yes | QMessageBox::No, QMessageBox::No)
394 == QMessageBox::Yes);
395
396 if (canRemoveEvent) {
393 397 for (auto event : events) {
394 sqpApp->catalogueController().removeEvent(event);
395 impl->removeEvent(event, ui->treeView);
398 if (this->isAllEventsDisplayed()) {
399 impl->removeEvent(event, ui->treeView);
400 }
401 else {
402 for (auto catalogue : this->displayedCatalogues()) {
403 catalogue->removeEvent(event->getUniqId());
404 sqpApp->catalogueController().updateCatalogue(catalogue);
405 }
406 }
407 impl->m_Model->removeEvent(event);
396 408 }
397 409
410
398 411 emit this->eventsRemoved(events);
399 412 }
400 413 }
401 414 });
402 415
403 416 connect(ui->treeView, &QTreeView::clicked, this, &CatalogueEventsWidget::emitSelection);
404 417 connect(ui->treeView->selectionModel(), &QItemSelectionModel::selectionChanged, this,
405 418 &CatalogueEventsWidget::emitSelection);
406 419
407 420 ui->btnRemove->setEnabled(false); // Disabled by default when nothing is selected
408 421 connect(ui->treeView->selectionModel(), &QItemSelectionModel::selectionChanged, [this]() {
409 422 auto isNotMultiSelection = ui->treeView->selectionModel()->selectedRows().count() <= 1;
410 423 ui->btnChart->setEnabled(isNotMultiSelection);
411 424 ui->btnTime->setEnabled(isNotMultiSelection);
412 425
413 426 if (isNotMultiSelection && ui->btnTime->isChecked()) {
414 427 impl->updateForTimeMode(ui->treeView);
415 428 }
416 429 else if (isNotMultiSelection && ui->btnChart->isChecked()) {
417 430 impl->updateForGraphMode(this);
418 431 }
419 432
420 433 QVector<std::shared_ptr<DBEvent> > events;
421 434 QVector<QPair<std::shared_ptr<DBEvent>, std::shared_ptr<DBEventProduct> > > eventProducts;
422 435 impl->getSelectedItems(ui->treeView, events, eventProducts);
423 436 ui->btnRemove->setEnabled(!events.isEmpty() && eventProducts.isEmpty());
424 437 });
425 438
426 439 ui->treeView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
427 440 ui->treeView->header()->setSectionResizeMode((int)CatalogueEventsModel::Column::Tags,
428 441 QHeaderView::Stretch);
429 442 ui->treeView->header()->setSectionResizeMode((int)CatalogueEventsModel::Column::Validation,
430 443 QHeaderView::Fixed);
431 444 ui->treeView->header()->setSectionResizeMode((int)CatalogueEventsModel::Column::Name,
432 445 QHeaderView::Interactive);
433 446 ui->treeView->header()->resizeSection((int)CatalogueEventsModel::Column::Validation,
434 447 VALIDATION_COLUMN_SIZE);
435 448 ui->treeView->header()->setSortIndicatorShown(true);
436 449
437 450 connect(impl->m_Model, &CatalogueEventsModel::modelSorted, [this]() {
438 451 auto allEvents = impl->m_Model->events();
439 452 for (auto event : allEvents) {
440 453 setEventChanges(event, sqpApp->catalogueController().eventHasChanges(event));
441 454 }
442 455 });
443 456
444 457 populateWithAllEvents();
445 458 }
446 459
447 460 CatalogueEventsWidget::~CatalogueEventsWidget()
448 461 {
449 462 delete ui;
450 463 }
451 464
452 465 void CatalogueEventsWidget::setVisualizationWidget(VisualizationWidget *visualization)
453 466 {
454 467 impl->m_VisualizationWidget = visualization;
455 468 }
456 469
457 470 void CatalogueEventsWidget::addEvent(const std::shared_ptr<DBEvent> &event)
458 471 {
459 472 impl->addEvent(event, ui->treeView);
460 473 }
461 474
462 475 void CatalogueEventsWidget::setEventChanges(const std::shared_ptr<DBEvent> &event, bool hasChanges)
463 476 {
464 477 impl->m_Model->refreshEvent(event);
465 478
466 479 auto eventIndex = impl->m_Model->indexOf(event);
467 480 auto validationIndex
468 481 = eventIndex.sibling(eventIndex.row(), (int)CatalogueEventsModel::Column::Validation);
469 482
470 483 if (validationIndex.isValid()) {
471 484 if (hasChanges) {
472 485 if (ui->treeView->indexWidget(validationIndex) == nullptr) {
473 486 auto widget = CatalogueExplorerHelper::buildValidationWidget(
474 487 ui->treeView,
475 488 [this, event]() {
476 489 sqpApp->catalogueController().saveEvent(event);
477 490 setEventChanges(event, false);
478 491 },
479 492 [this, event]() {
480 493 bool removed = false;
481 494 sqpApp->catalogueController().discardEvent(event, removed);
482 495 if (removed) {
483 496 impl->m_Model->removeEvent(event);
484 497 }
485 498 else {
486 499 setEventChanges(event, false);
487 500 impl->m_Model->refreshEvent(event, true);
488 501 }
489 502 emitSelection();
490 503 });
491 504 ui->treeView->setIndexWidget(validationIndex, widget);
492 505 }
493 506 }
494 507 else {
495 508 // Note: the widget is destroyed
496 509 ui->treeView->setIndexWidget(validationIndex, nullptr);
497 510 }
498 511 }
499 512 else {
500 513 qCWarning(LOG_CatalogueEventsWidget())
501 514 << "setEventChanges: the event is not displayed in the model.";
502 515 }
503 516 }
504 517
505 518 QVector<std::shared_ptr<DBCatalogue> > CatalogueEventsWidget::displayedCatalogues() const
506 519 {
507 520 return impl->m_DisplayedCatalogues;
508 521 }
509 522
510 523 bool CatalogueEventsWidget::isAllEventsDisplayed() const
511 524 {
512 525 return impl->m_AllEventDisplayed;
513 526 }
514 527
515 528 bool CatalogueEventsWidget::isEventDisplayed(const std::shared_ptr<DBEvent> &event) const
516 529 {
517 530 return impl->m_Model->indexOf(event).isValid();
518 531 }
519 532
520 533 void CatalogueEventsWidget::refreshEvent(const std::shared_ptr<DBEvent> &event)
521 534 {
522 535 impl->m_Model->refreshEvent(event, true);
523 536 }
524 537
525 538 void CatalogueEventsWidget::populateWithCatalogues(
526 539 const QVector<std::shared_ptr<DBCatalogue> > &catalogues)
527 540 {
528 541 impl->m_DisplayedCatalogues = catalogues;
529 542 impl->m_AllEventDisplayed = false;
530 543
531 544 QSet<QUuid> eventIds;
532 545 QVector<std::shared_ptr<DBEvent> > events;
533 546
534 547 for (auto catalogue : catalogues) {
535 548 auto catalogueEvents = sqpApp->catalogueController().retrieveEventsFromCatalogue(catalogue);
536 549 for (auto event : catalogueEvents) {
537 550 if (!eventIds.contains(event->getUniqId())) {
538 551 events << event;
539 552 eventIds.insert(event->getUniqId());
540 553 }
541 554 }
542 555 }
543 556
544 557 impl->setEvents(events, this);
545 558 }
546 559
547 560 void CatalogueEventsWidget::populateWithAllEvents()
548 561 {
549 562 impl->m_DisplayedCatalogues.clear();
550 563 impl->m_AllEventDisplayed = true;
551 564
552 565 auto allEvents = sqpApp->catalogueController().retrieveAllEvents();
553 566
554 567 QVector<std::shared_ptr<DBEvent> > events;
555 568 for (auto event : allEvents) {
556 569 events << event;
557 570 }
558 571
559 572 impl->setEvents(events, this);
560 573 }
561 574
562 575 void CatalogueEventsWidget::clear()
563 576 {
564 577 impl->m_DisplayedCatalogues.clear();
565 578 impl->m_AllEventDisplayed = false;
566 579 impl->setEvents({}, this);
567 580 }
568 581
569 582 void CatalogueEventsWidget::refresh()
570 583 {
571 584 if (isAllEventsDisplayed()) {
572 585 populateWithAllEvents();
573 586 }
574 587 else if (!impl->m_DisplayedCatalogues.isEmpty()) {
575 588 populateWithCatalogues(impl->m_DisplayedCatalogues);
576 589 }
577 590 }
578 591
579 592 void CatalogueEventsWidget::emitSelection()
580 593 {
581 594 QVector<std::shared_ptr<DBEvent> > events;
582 595 QVector<QPair<std::shared_ptr<DBEvent>, std::shared_ptr<DBEventProduct> > > eventProducts;
583 596 impl->getSelectedItems(ui->treeView, events, eventProducts);
584 597
585 598 if (!events.isEmpty() && eventProducts.isEmpty()) {
586 599 emit eventsSelected(events);
587 600 }
588 601 else if (events.isEmpty() && !eventProducts.isEmpty()) {
589 602 emit eventProductsSelected(eventProducts);
590 603 }
591 604 else {
592 605 emit selectionCleared();
593 606 }
594 607 }
General Comments 0
You need to be logged in to leave comments. Login now