diff --git a/gui/include/Catalogue/CatalogueEventsWidget.h b/gui/include/Catalogue/CatalogueEventsWidget.h index 1886a81..5793d23 100644 --- a/gui/include/Catalogue/CatalogueEventsWidget.h +++ b/gui/include/Catalogue/CatalogueEventsWidget.h @@ -22,7 +22,7 @@ public: virtual ~CatalogueEventsWidget(); public slots: - void populateWithCatalogue(const DBCatalogue &catalogue); + void populateWithCatalogues(const QVector &catalogues); private: Ui::CatalogueEventsWidget *ui; diff --git a/gui/include/Catalogue/CatalogueSideBarWidget.h b/gui/include/Catalogue/CatalogueSideBarWidget.h index 7e6fb43..f1a6af1 100644 --- a/gui/include/Catalogue/CatalogueSideBarWidget.h +++ b/gui/include/Catalogue/CatalogueSideBarWidget.h @@ -15,9 +15,11 @@ class CatalogueSideBarWidget : public QWidget { Q_OBJECT signals: - void catalogueSelected(const DBCatalogue &catalogue); + void catalogueSelected(const QVector &catalogues); + void databaseSelected(const QStringList &databases); void allEventsSelected(); void trashSelected(); + void selectionCleared(); public: explicit CatalogueSideBarWidget(QWidget *parent = 0); diff --git a/gui/src/Catalogue/CatalogueEventsWidget.cpp b/gui/src/Catalogue/CatalogueEventsWidget.cpp index 887a1dc..66ab323 100644 --- a/gui/src/Catalogue/CatalogueEventsWidget.cpp +++ b/gui/src/Catalogue/CatalogueEventsWidget.cpp @@ -41,23 +41,17 @@ CatalogueEventsWidget::CatalogueEventsWidget(QWidget *parent) } }); - connect(ui->tableView, &QTableView::clicked, [this](auto index) { + auto emitSelection = [this]() { QVector events; for (auto rowIndex : ui->tableView->selectionModel()->selectedRows()) { events << impl->m_Model->getEvent(rowIndex.row()); } emit this->eventsSelected(events); - }); + }; - connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged, [this]() { - QVector events; - for (auto rowIndex : ui->tableView->selectionModel()->selectedRows()) { - events << impl->m_Model->getEvent(rowIndex.row()); - } - - emit this->eventsSelected(events); - }); + connect(ui->tableView, &QTableView::clicked, emitSelection); + connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged, emitSelection); connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged, [this]() { auto isNotMultiSelection = ui->tableView->selectionModel()->selectedRows().count() <= 1; @@ -75,17 +69,24 @@ CatalogueEventsWidget::~CatalogueEventsWidget() delete ui; } -void CatalogueEventsWidget::populateWithCatalogue(const DBCatalogue &catalogue) +void CatalogueEventsWidget::populateWithCatalogues(const QVector &catalogues) { auto &dao = sqpApp->catalogueController().getDao(); - auto events = dao.getCatalogueEvents(catalogue); - QVector eventVector; - for (auto event : events) { - eventVector << event; + QSet eventIds; + QVector events; + + for (auto catalogue : catalogues) { + auto catalogueEvents = dao.getCatalogueEvents(catalogue); + for (auto event : catalogueEvents) { + if (!eventIds.contains(event.getUniqId())) { + events << event; + eventIds.insert(event.getUniqId()); + } + } } ui->tableView->setSortingEnabled(false); - impl->m_Model->setEvents(eventVector); + impl->m_Model->setEvents(events); ui->tableView->setSortingEnabled(true); } diff --git a/gui/src/Catalogue/CatalogueExplorer.cpp b/gui/src/Catalogue/CatalogueExplorer.cpp index fbaeb00..877b0e6 100644 --- a/gui/src/Catalogue/CatalogueExplorer.cpp +++ b/gui/src/Catalogue/CatalogueExplorer.cpp @@ -10,11 +10,30 @@ CatalogueExplorer::CatalogueExplorer(QWidget *parent) { ui->setupUi(this); - connect(ui->catalogues, &CatalogueSideBarWidget::catalogueSelected, [this](auto catalogue) { - ui->inspector->setCatalogue(catalogue); - ui->events->populateWithCatalogue(catalogue); + connect(ui->catalogues, &CatalogueSideBarWidget::catalogueSelected, [this](auto catalogues) { + if (catalogues.count() == 1) { + ui->inspector->setCatalogue(catalogues.first()); + } + else { + ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); + } + + ui->events->populateWithCatalogues(catalogues); }); + connect(ui->catalogues, &CatalogueSideBarWidget::databaseSelected, [this](auto databases) { + ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); + }); + + connect(ui->catalogues, &CatalogueSideBarWidget::trashSelected, + [this]() { ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); }); + + connect(ui->catalogues, &CatalogueSideBarWidget::allEventsSelected, + [this]() { ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); }); + + connect(ui->catalogues, &CatalogueSideBarWidget::selectionCleared, + [this]() { ui->inspector->showPage(CatalogueInspectorWidget::Page::Empty); }); + connect(ui->events, &CatalogueEventsWidget::eventsSelected, [this](auto events) { if (events.count() == 1) { ui->inspector->setEvent(events.first()); diff --git a/gui/src/Catalogue/CatalogueSideBarWidget.cpp b/gui/src/Catalogue/CatalogueSideBarWidget.cpp index aa91bc0..158e96f 100644 --- a/gui/src/Catalogue/CatalogueSideBarWidget.cpp +++ b/gui/src/Catalogue/CatalogueSideBarWidget.cpp @@ -32,22 +32,60 @@ CatalogueSideBarWidget::CatalogueSideBarWidget(QWidget *parent) ui->setupUi(this); impl->configureTreeWidget(ui->treeWidget); - auto emitSelection = [this](auto item) { - switch (item->type()) { - case CATALOGUE_ITEM_TYPE: - emit this->catalogueSelected( - static_cast(item)->catalogue()); - break; - case ALL_EVENT_ITEM_TYPE: - emit this->allEventsSelected(); - break; - case TRASH_ITEM_TYPE: - emit this->trashSelected(); - break; - case DATABASE_ITEM_TYPE: - default: - break; + auto emitSelection = [this]() { + + auto selectedItems = ui->treeWidget->selectedItems(); + if (selectedItems.isEmpty()) { + emit this->selectionCleared(); + } + else { + QVector catalogues; + QStringList databases; + int selectionType = selectedItems.first()->type(); + + for (auto item : ui->treeWidget->selectedItems()) { + if (item->type() == selectionType) { + switch (selectionType) { + case CATALOGUE_ITEM_TYPE: + catalogues.append( + static_cast(item)->catalogue()); + break; + case DATABASE_ITEM_TYPE: + selectionType = DATABASE_ITEM_TYPE; + databases.append(item->text(0)); + case ALL_EVENT_ITEM_TYPE: // fallthrough + case TRASH_ITEM_TYPE: // fallthrough + default: + break; + } + } + else { + // Incoherent multi selection + selectionType = -1; + break; + } + } + + switch (selectionType) { + case CATALOGUE_ITEM_TYPE: + emit this->catalogueSelected(catalogues); + break; + case DATABASE_ITEM_TYPE: + emit this->databaseSelected(databases); + break; + case ALL_EVENT_ITEM_TYPE: + emit this->allEventsSelected(); + break; + case TRASH_ITEM_TYPE: + emit this->trashSelected(); + break; + default: + emit this->selectionCleared(); + break; + } } + + }; connect(ui->treeWidget, &QTreeWidget::itemClicked, emitSelection); diff --git a/gui/ui/Catalogue/CatalogueSideBarWidget.ui b/gui/ui/Catalogue/CatalogueSideBarWidget.ui index ca3e22d..34e03a1 100644 --- a/gui/ui/Catalogue/CatalogueSideBarWidget.ui +++ b/gui/ui/Catalogue/CatalogueSideBarWidget.ui @@ -34,7 +34,7 @@ + - + :/icones/add.png:/icones/add.png @@ -48,7 +48,7 @@ - - + :/icones/remove.png:/icones/remove.png @@ -73,6 +73,9 @@ + + QAbstractItemView::ExtendedSelection + false @@ -85,6 +88,9 @@ - + + + +