CatalogueSideBarWidget.cpp
113 lines
| 4.0 KiB
| text/x-c
|
CppLexer
r1095 | #include "Catalogue/CatalogueSideBarWidget.h" | |||
#include "ui_CatalogueSideBarWidget.h" | ||||
r1129 | #include <SqpApplication.h> | |||
#include <Catalogue/CatalogueController.h> | ||||
#include <Catalogue/CatalogueTreeWidgetItem.h> | ||||
#include <CatalogueDao.h> | ||||
#include <ComparaisonPredicate.h> | ||||
#include <DBCatalogue.h> | ||||
r1095 | ||||
r1103 | constexpr auto ALL_EVENT_ITEM_TYPE = QTreeWidgetItem::UserType; | |||
constexpr auto TRASH_ITEM_TYPE = QTreeWidgetItem::UserType + 1; | ||||
constexpr auto CATALOGUE_ITEM_TYPE = QTreeWidgetItem::UserType + 2; | ||||
constexpr auto DATABASE_ITEM_TYPE = QTreeWidgetItem::UserType + 3; | ||||
r1098 | ||||
struct CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate { | ||||
r1129 | ||||
QHash<QTreeWidgetItem *, DBCatalogue> m_CatalogueMap; | ||||
r1098 | void configureTreeWidget(QTreeWidget *treeWidget); | |||
r1102 | QTreeWidgetItem *addDatabaseItem(const QString &name, QTreeWidget *treeWidget); | |||
r1129 | void addCatalogueItem(const DBCatalogue &catalogue, QTreeWidgetItem *parentDatabaseItem); | |||
r1098 | }; | |||
r1095 | CatalogueSideBarWidget::CatalogueSideBarWidget(QWidget *parent) | |||
r1098 | : QWidget(parent), | |||
ui(new Ui::CatalogueSideBarWidget), | ||||
impl{spimpl::make_unique_impl<CatalogueSideBarWidgetPrivate>()} | ||||
r1095 | { | |||
ui->setupUi(this); | ||||
r1098 | impl->configureTreeWidget(ui->treeWidget); | |||
r1103 | ||||
r1105 | auto emitSelection = [this](auto item) { | |||
r1103 | switch (item->type()) { | |||
case CATALOGUE_ITEM_TYPE: | ||||
r1129 | emit this->catalogueSelected( | |||
static_cast<CatalogueTreeWidgetItem *>(item)->catalogue()); | ||||
r1103 | break; | |||
case ALL_EVENT_ITEM_TYPE: | ||||
emit this->allEventsSelected(); | ||||
break; | ||||
case TRASH_ITEM_TYPE: | ||||
emit this->trashSelected(); | ||||
break; | ||||
case DATABASE_ITEM_TYPE: | ||||
default: | ||||
break; | ||||
} | ||||
r1105 | }; | |||
connect(ui->treeWidget, &QTreeWidget::itemClicked, emitSelection); | ||||
connect(ui->treeWidget, &QTreeWidget::currentItemChanged, emitSelection); | ||||
r1095 | } | |||
CatalogueSideBarWidget::~CatalogueSideBarWidget() | ||||
{ | ||||
delete ui; | ||||
} | ||||
r1098 | ||||
void CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::configureTreeWidget( | ||||
QTreeWidget *treeWidget) | ||||
{ | ||||
auto allEventsItem = new QTreeWidgetItem({"All Events"}, ALL_EVENT_ITEM_TYPE); | ||||
allEventsItem->setIcon(0, QIcon(":/icones/allEvents.png")); | ||||
treeWidget->addTopLevelItem(allEventsItem); | ||||
auto trashItem = new QTreeWidgetItem({"Trash"}, TRASH_ITEM_TYPE); | ||||
trashItem->setIcon(0, QIcon(":/icones/trash.png")); | ||||
treeWidget->addTopLevelItem(trashItem); | ||||
auto separator = new QFrame(treeWidget); | ||||
separator->setFrameShape(QFrame::HLine); | ||||
auto separatorItem = new QTreeWidgetItem(); | ||||
separatorItem->setFlags(Qt::NoItemFlags); | ||||
treeWidget->addTopLevelItem(separatorItem); | ||||
treeWidget->setItemWidget(separatorItem, 0, separator); | ||||
r1102 | ||||
// Test | ||||
r1129 | auto &dao = sqpApp->catalogueController().getDao(); | |||
auto allPredicate = std::make_shared<ComparaisonPredicate>(QString{"uniqId"}, "-1", | ||||
ComparaisonOperation::DIFFERENT); | ||||
auto db = addDatabaseItem("Default", treeWidget); | ||||
r1102 | ||||
r1129 | auto catalogues = dao.getCatalogues(allPredicate); | |||
for (auto catalogue : catalogues) { | ||||
addCatalogueItem(catalogue, db); | ||||
} | ||||
r1102 | ||||
treeWidget->expandAll(); | ||||
} | ||||
QTreeWidgetItem * | ||||
CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::addDatabaseItem(const QString &name, | ||||
QTreeWidget *treeWidget) | ||||
{ | ||||
auto databaseItem = new QTreeWidgetItem({name}, DATABASE_ITEM_TYPE); | ||||
databaseItem->setIcon(0, QIcon(":/icones/database.png")); | ||||
treeWidget->addTopLevelItem(databaseItem); | ||||
return databaseItem; | ||||
} | ||||
void CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::addCatalogueItem( | ||||
r1129 | const DBCatalogue &catalogue, QTreeWidgetItem *parentDatabaseItem) | |||
r1102 | { | |||
r1129 | auto catalogueItem = new CatalogueTreeWidgetItem(catalogue, CATALOGUE_ITEM_TYPE); | |||
r1102 | catalogueItem->setIcon(0, QIcon(":/icones/catalogue.png")); | |||
parentDatabaseItem->addChild(catalogueItem); | ||||
r1098 | } | |||