##// END OF EJS Templates
Really basic implementation of Downloader which might replace current...
Really basic implementation of Downloader which might replace current NetworkController It is currently really basic, it only does synchronous DLs with or without authentication. It is written to isolate as much as possible Qt Network classes. Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1327:07b2554d7734
r1342:91cbf8a85daf
Show More
CatalogueSideBarWidget.cpp
461 lines | 17.6 KiB | text/x-c | CppLexer
/ gui / src / Catalogue / CatalogueSideBarWidget.cpp
Sub widget classes
r1095 #include "Catalogue/CatalogueSideBarWidget.h"
#include "ui_CatalogueSideBarWidget.h"
Display catalogues and events with CatalogueAPI
r1129 #include <SqpApplication.h>
#include <Catalogue/CatalogueController.h>
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 #include <Catalogue/CatalogueExplorerHelper.h>
Refactoring of catalogue: use a custom item class
r1229 #include <Catalogue/CatalogueTreeItems/CatalogueTextTreeItem.h>
#include <Catalogue/CatalogueTreeItems/CatalogueTreeItem.h>
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 #include <Catalogue/CatalogueTreeModel.h>
Display catalogues and events with CatalogueAPI
r1129 #include <CatalogueDao.h>
Move event in catalogue with Drag&Drop
r1308 #include <Common/MimeTypesDef.h>
Display catalogues and events with CatalogueAPI
r1129 #include <ComparaisonPredicate.h>
#include <DBCatalogue.h>
Add supp shortcut for Catalogues
r1314 #include <QKeyEvent>
Basic context menu on a catalogue item
r1141 #include <QMenu>
Add catalogue handling
r1302 #include <QMessageBox>
Move event in catalogue with Drag&Drop
r1308 #include <QMimeData>
Basic context menu on a catalogue item
r1141
Edition of catalogues from the inspector
r1147 Q_LOGGING_CATEGORY(LOG_CatalogueSideBarWidget, "CatalogueSideBarWidget")
Sub widget classes
r1095
Refactoring of catalogue: use a custom item class
r1229 constexpr auto ALL_EVENT_ITEM_TYPE = CatalogueAbstractTreeItem::DEFAULT_TYPE + 1;
constexpr auto TRASH_ITEM_TYPE = CatalogueAbstractTreeItem::DEFAULT_TYPE + 2;
constexpr auto CATALOGUE_ITEM_TYPE = CatalogueAbstractTreeItem::DEFAULT_TYPE + 3;
constexpr auto DATABASE_ITEM_TYPE = CatalogueAbstractTreeItem::DEFAULT_TYPE + 4;
Catalog side bar
r1098
Refresh catalogue menu when the catalogue list changed
r1327 const auto DEFAULT_CATALOGUE_NAME = QObject::tr("Catalogue");
Catalog side bar
r1098
struct CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate {
Display catalogues and events with CatalogueAPI
r1129
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 CatalogueTreeModel *m_TreeModel = nullptr;
void configureTreeWidget(QTreeView *treeView);
QModelIndex addDatabaseItem(const QString &name);
Refactoring of catalogue: use a custom item class
r1229 CatalogueAbstractTreeItem *getDatabaseItem(const QString &name);
Add addCatalogue method
r1303 CatalogueAbstractTreeItem *addCatalogueItem(const std::shared_ptr<DBCatalogue> &catalogue,
const QModelIndex &databaseIndex);
Edition of catalogues from the inspector
r1147
Refactoring of catalogue: use a custom item class
r1229 CatalogueTreeItem *getCatalogueItem(const std::shared_ptr<DBCatalogue> &catalogue) const;
Add catalogue handling
r1302 void setHasChanges(bool value, const QModelIndex &index, CatalogueSideBarWidget *sideBarWidget);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 bool hasChanges(const QModelIndex &index, QTreeView *treeView);
Drop of events on a catalogue
r1230
int selectionType(QTreeView *treeView) const
{
auto selectedItems = treeView->selectionModel()->selectedRows();
if (selectedItems.isEmpty()) {
return CatalogueAbstractTreeItem::DEFAULT_TYPE;
}
else {
auto firstIndex = selectedItems.first();
auto firstItem = m_TreeModel->item(firstIndex);
if (!firstItem) {
Q_ASSERT(false);
return CatalogueAbstractTreeItem::DEFAULT_TYPE;
}
auto selectionType = firstItem->type();
for (auto itemIndex : selectedItems) {
auto item = m_TreeModel->item(itemIndex);
if (!item || item->type() != selectionType) {
// Incoherent multi selection
selectionType = CatalogueAbstractTreeItem::DEFAULT_TYPE;
break;
}
}
return selectionType;
}
}
QVector<std::shared_ptr<DBCatalogue> > selectedCatalogues(QTreeView *treeView) const
{
QVector<std::shared_ptr<DBCatalogue> > catalogues;
auto selectedItems = treeView->selectionModel()->selectedRows();
for (auto itemIndex : selectedItems) {
auto item = m_TreeModel->item(itemIndex);
if (item && item->type() == CATALOGUE_ITEM_TYPE) {
catalogues.append(static_cast<CatalogueTreeItem *>(item)->catalogue());
}
}
return catalogues;
}
QStringList selectedRepositories(QTreeView *treeView) const
{
QStringList repositories;
auto selectedItems = treeView->selectionModel()->selectedRows();
for (auto itemIndex : selectedItems) {
auto item = m_TreeModel->item(itemIndex);
if (item && item->type() == DATABASE_ITEM_TYPE) {
repositories.append(item->text());
}
}
return repositories;
}
Catalog side bar
r1098 };
Sub widget classes
r1095 CatalogueSideBarWidget::CatalogueSideBarWidget(QWidget *parent)
Catalog side bar
r1098 : QWidget(parent),
ui(new Ui::CatalogueSideBarWidget),
impl{spimpl::make_unique_impl<CatalogueSideBarWidgetPrivate>()}
Sub widget classes
r1095 {
ui->setupUi(this);
Basic interactions
r1103
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 impl->m_TreeModel = new CatalogueTreeModel(this);
ui->treeView->setModel(impl->m_TreeModel);
impl->configureTreeWidget(ui->treeView);
Refresh catalogue menu when the catalogue list changed
r1327 emit catalogueListChanged();
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228
ui->treeView->header()->setStretchLastSection(false);
ui->treeView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
Fix hardcorded icon size for save and discard tool button
r1318 ui->treeView->header()->setSectionResizeMode((int)CatalogueTreeModel::Column::Name,
QHeaderView::Stretch);
Display of the save & cancel button next to a catalogue
r1142
Add catalogue handling
r1302 connect(ui->treeView, &QTreeView::clicked, this, &CatalogueSideBarWidget::emitSelection);
connect(ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, this,
&CatalogueSideBarWidget::emitSelection);
Add addCatalogue method
r1303 connect(ui->btnAdd, &QToolButton::clicked, [this]() {
auto catalogue = std::make_shared<DBCatalogue>();
Refresh catalogue menu when the catalogue list changed
r1327 catalogue->setName(DEFAULT_CATALOGUE_NAME);
Add addCatalogue method
r1303 sqpApp->catalogueController().addCatalogue(catalogue);
auto item = this->addCatalogue(catalogue, REPOSITORY_DEFAULT);
this->setCatalogueChanges(catalogue, true);
ui->treeView->edit(impl->m_TreeModel->indexOf(item));
Add catalogue handling
r1302
Add addCatalogue method
r1303 });
Add catalogue handling
r1302
Move event in catalogue with Drag&Drop
r1308 connect(impl->m_TreeModel, &CatalogueTreeModel::itemDropped,
[this](auto index, auto mimeData, auto action) {
auto item = impl->m_TreeModel->item(index);
Fix move of an event in another catalogue
r1325
Move event in catalogue with Drag&Drop
r1308 if (item && item->type() == CATALOGUE_ITEM_TYPE) {
auto catalogue = static_cast<CatalogueTreeItem *>(item)->catalogue();
this->setCatalogueChanges(catalogue, true);
}
if (action == Qt::MoveAction) {
/// Display a save button on source catalogues
auto sourceCatalogues = sqpApp->catalogueController().cataloguesForMimeData(
mimeData->data(MIME_TYPE_SOURCE_CATALOGUE_LIST));
for (auto catalogue : sourceCatalogues) {
if (auto catalogueItem = impl->getCatalogueItem(catalogue)) {
Fix move of an event in another catalogue
r1325 catalogueItem->replaceCatalogue(catalogue);
Move event in catalogue with Drag&Drop
r1308 this->setCatalogueChanges(catalogue, true);
}
}
Fix move of an event in another catalogue
r1325
this->emitSelection();
Move event in catalogue with Drag&Drop
r1308 }
});
Add catalogue handling
r1302 connect(ui->btnRemove, &QToolButton::clicked, [this]() {
QVector<QPair<std::shared_ptr<DBCatalogue>, CatalogueAbstractTreeItem *> >
cataloguesToItems;
auto selectedIndexes = ui->treeView->selectionModel()->selectedRows();
for (auto index : selectedIndexes) {
auto item = impl->m_TreeModel->item(index);
if (item && item->type() == CATALOGUE_ITEM_TYPE) {
auto catalogue = static_cast<CatalogueTreeItem *>(item)->catalogue();
cataloguesToItems << qMakePair(catalogue, item);
}
}
if (!cataloguesToItems.isEmpty()) {
if (QMessageBox::warning(this, tr("Remove Catalogue(s)"),
tr("The selected catalogues(s) will be completly removed "
"from the repository!\nAre you sure you want to continue?"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::No)
== QMessageBox::Yes) {
for (auto catalogueToItem : cataloguesToItems) {
sqpApp->catalogueController().removeCatalogue(catalogueToItem.first);
impl->m_TreeModel->removeChildItem(
catalogueToItem.second,
impl->m_TreeModel->indexOf(catalogueToItem.second->parent()));
}
Remove the catalogue from discard or remove button have now the same gui...
r1317 emitSelection();
Refresh catalogue menu when the catalogue list changed
r1327 emit catalogueListChanged();
Add catalogue handling
r1302 }
}
});
Skeleton to fill the inspector with the selection
r1105
Add catalogue handling
r1302 connect(impl->m_TreeModel, &CatalogueTreeModel::itemRenamed, [this](auto index) {
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 auto selectedIndexes = ui->treeView->selectionModel()->selectedRows();
if (selectedIndexes.contains(index)) {
Add catalogue handling
r1302 this->emitSelection();
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
Add catalogue handling
r1302 impl->setHasChanges(true, index, this);
Refresh catalogue menu when the catalogue list changed
r1327 emit this->catalogueListChanged();
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 });
Basic context menu on a catalogue item
r1141
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
Refactoring of catalogue: use a custom item class
r1229 connect(ui->treeView, &QTreeView::customContextMenuRequested, this,
Basic context menu on a catalogue item
r1141 &CatalogueSideBarWidget::onContextMenuRequested);
Sub widget classes
r1095 }
CatalogueSideBarWidget::~CatalogueSideBarWidget()
{
delete ui;
}
Catalog side bar
r1098
Add addCatalogue method
r1303 CatalogueAbstractTreeItem *
CatalogueSideBarWidget::addCatalogue(const std::shared_ptr<DBCatalogue> &catalogue,
const QString &repository)
Updates model after an event has been created through the colored zone
r1231 {
auto repositoryItem = impl->getDatabaseItem(repository);
Refresh catalogue menu when the catalogue list changed
r1327 auto catalogueItem
= impl->addCatalogueItem(catalogue, impl->m_TreeModel->indexOf(repositoryItem));
emit catalogueListChanged();
return catalogueItem;
Updates model after an event has been created through the colored zone
r1231 }
Edition of catalogues from the inspector
r1147 void CatalogueSideBarWidget::setCatalogueChanges(const std::shared_ptr<DBCatalogue> &catalogue,
bool hasChanges)
{
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 if (auto catalogueItem = impl->getCatalogueItem(catalogue)) {
auto index = impl->m_TreeModel->indexOf(catalogueItem);
Add catalogue handling
r1302 impl->setHasChanges(hasChanges, index, this);
Refactoring of catalogue: use a custom item class
r1229 // catalogueItem->refresh();
Edition of catalogues from the inspector
r1147 }
}
Updates model after an event has been created through the colored zone
r1231 QVector<std::shared_ptr<DBCatalogue> >
CatalogueSideBarWidget::getCatalogues(const QString &repository) const
{
QVector<std::shared_ptr<DBCatalogue> > result;
auto repositoryItem = impl->getDatabaseItem(repository);
for (auto child : repositoryItem->children()) {
if (child->type() == CATALOGUE_ITEM_TYPE) {
auto catalogueItem = static_cast<CatalogueTreeItem *>(child);
result << catalogueItem->catalogue();
}
else {
qCWarning(LOG_CatalogueSideBarWidget()) << "getCatalogues: invalid structure";
}
}
return result;
}
Add catalogue handling
r1302 void CatalogueSideBarWidget::emitSelection()
{
auto selectionType = impl->selectionType(ui->treeView);
switch (selectionType) {
case CATALOGUE_ITEM_TYPE:
emit this->catalogueSelected(impl->selectedCatalogues(ui->treeView));
break;
case DATABASE_ITEM_TYPE:
emit this->databaseSelected(impl->selectedRepositories(ui->treeView));
break;
case ALL_EVENT_ITEM_TYPE:
emit this->allEventsSelected();
break;
case TRASH_ITEM_TYPE:
emit this->trashSelected();
break;
default:
emit this->selectionCleared();
break;
}
}
Basic context menu on a catalogue item
r1141 void CatalogueSideBarWidget::onContextMenuRequested(const QPoint &pos)
{
QMenu menu{this};
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 auto currentIndex = ui->treeView->currentIndex();
auto currentItem = impl->m_TreeModel->item(currentIndex);
if (!currentItem) {
return;
}
Basic context menu on a catalogue item
r1141 switch (currentItem->type()) {
case CATALOGUE_ITEM_TYPE:
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 menu.addAction("Rename", [this, currentIndex]() { ui->treeView->edit(currentIndex); });
Basic context menu on a catalogue item
r1141 break;
case DATABASE_ITEM_TYPE:
break;
case ALL_EVENT_ITEM_TYPE:
break;
case TRASH_ITEM_TYPE:
menu.addAction("Empty Trash", []() {
// TODO
});
break;
default:
break;
}
if (!menu.isEmpty()) {
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 menu.exec(ui->treeView->mapToGlobal(pos));
Basic context menu on a catalogue item
r1141 }
}
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 void CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::configureTreeWidget(QTreeView *treeView)
Catalog side bar
r1098 {
Refactoring of catalogue: use a custom item class
r1229 auto allEventsItem = new CatalogueTextTreeItem{QIcon{":/icones/allEvents.png"}, "All Events",
ALL_EVENT_ITEM_TYPE};
Some fixes
r1235 auto allEventIndex = m_TreeModel->addTopLevelItem(allEventsItem);
treeView->setCurrentIndex(allEventIndex);
Catalog side bar
r1098
Refactoring of catalogue: use a custom item class
r1229 auto trashItem
= new CatalogueTextTreeItem{QIcon{":/icones/trash.png"}, "Trash", TRASH_ITEM_TYPE};
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 m_TreeModel->addTopLevelItem(trashItem);
Catalog side bar
r1098
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 auto separator = new QFrame{treeView};
Catalog side bar
r1098 separator->setFrameShape(QFrame::HLine);
Refactoring of catalogue: use a custom item class
r1229 auto separatorItem
= new CatalogueTextTreeItem{QIcon{}, QString{}, CatalogueAbstractTreeItem::DEFAULT_TYPE};
separatorItem->setEnabled(false);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 auto separatorIndex = m_TreeModel->addTopLevelItem(separatorItem);
treeView->setIndexWidget(separatorIndex, separator);
Methods to add some catalogue items
r1102
Adaptation to last version of catalogue controller
r1164 auto repositories = sqpApp->catalogueController().getRepositories();
for (auto dbname : repositories) {
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 auto dbIndex = addDatabaseItem(dbname);
Adaptation to last version of catalogue controller
r1164 auto catalogues = sqpApp->catalogueController().retrieveCatalogues(dbname);
for (auto catalogue : catalogues) {
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 addCatalogueItem(catalogue, dbIndex);
Adaptation to last version of catalogue controller
r1164 }
Display catalogues and events with CatalogueAPI
r1129 }
Methods to add some catalogue items
r1102
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 treeView->expandAll();
Methods to add some catalogue items
r1102 }
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 QModelIndex
CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::addDatabaseItem(const QString &name)
Methods to add some catalogue items
r1102 {
Refactoring of catalogue: use a custom item class
r1229 auto databaseItem
= new CatalogueTextTreeItem{QIcon{":/icones/database.png"}, {name}, DATABASE_ITEM_TYPE};
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 auto databaseIndex = m_TreeModel->addTopLevelItem(databaseItem);
Methods to add some catalogue items
r1102
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 return databaseIndex;
Methods to add some catalogue items
r1102 }
Refactoring of catalogue: use a custom item class
r1229 CatalogueAbstractTreeItem *
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::getDatabaseItem(const QString &name)
Methods to facilitate add/remove operations
r1134 {
Refactoring of catalogue: use a custom item class
r1229 for (auto item : m_TreeModel->topLevelItems()) {
if (item->type() == DATABASE_ITEM_TYPE && item->text() == name) {
Methods to facilitate add/remove operations
r1134 return item;
}
}
return nullptr;
}
Add addCatalogue method
r1303 CatalogueAbstractTreeItem *CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::addCatalogueItem(
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 const std::shared_ptr<DBCatalogue> &catalogue, const QModelIndex &databaseIndex)
Methods to add some catalogue items
r1102 {
Refactoring of catalogue: use a custom item class
r1229 auto catalogueItem
= new CatalogueTreeItem{catalogue, QIcon{":/icones/catalogue.png"}, CATALOGUE_ITEM_TYPE};
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 m_TreeModel->addChildItem(catalogueItem, databaseIndex);
Add addCatalogue method
r1303
return catalogueItem;
Catalog side bar
r1098 }
Edition of catalogues from the inspector
r1147
Refactoring of catalogue: use a custom item class
r1229 CatalogueTreeItem *CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::getCatalogueItem(
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 const std::shared_ptr<DBCatalogue> &catalogue) const
Edition of catalogues from the inspector
r1147 {
Refactoring of catalogue: use a custom item class
r1229 for (auto item : m_TreeModel->topLevelItems()) {
Edition of catalogues from the inspector
r1147 if (item->type() == DATABASE_ITEM_TYPE) {
Refactoring of catalogue: use a custom item class
r1229 for (auto childItem : item->children()) {
Edition of catalogues from the inspector
r1147 if (childItem->type() == CATALOGUE_ITEM_TYPE) {
Refactoring of catalogue: use a custom item class
r1229 auto catalogueItem = static_cast<CatalogueTreeItem *>(childItem);
Move event in catalogue with Drag&Drop
r1308 if (catalogueItem->catalogue()->getUniqId() == catalogue->getUniqId()) {
Edition of catalogues from the inspector
r1147 return catalogueItem;
}
}
else {
qCWarning(LOG_CatalogueSideBarWidget()) << "getCatalogueItem: Invalid tree "
"structure. A database item should "
"only contain catalogues.";
Q_ASSERT(false);
}
}
}
}
return nullptr;
}
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228
Add catalogue handling
r1302 void CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::setHasChanges(
bool value, const QModelIndex &index, CatalogueSideBarWidget *sideBarWidget)
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 {
Add catalogue handling
r1302 std::shared_ptr<DBCatalogue> catalogue = nullptr;
auto item = m_TreeModel->item(index);
if (item && item->type() == CATALOGUE_ITEM_TYPE) {
catalogue = static_cast<CatalogueTreeItem *>(item)->catalogue();
}
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 auto validationIndex = index.sibling(index.row(), (int)CatalogueTreeModel::Column::Validation);
if (value) {
Add catalogue handling
r1302 if (!hasChanges(validationIndex, sideBarWidget->ui->treeView)) {
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 auto widget = CatalogueExplorerHelper::buildValidationWidget(
Add catalogue handling
r1302 sideBarWidget->ui->treeView,
[this, validationIndex, sideBarWidget, catalogue]() {
if (catalogue) {
sqpApp->catalogueController().saveCatalogue(catalogue);
Save a statical catalogue now remove events save gui button
r1316 emit sideBarWidget->catalogueSaved(catalogue);
Add catalogue handling
r1302 }
setHasChanges(false, validationIndex, sideBarWidget);
},
[this, validationIndex, sideBarWidget, catalogue, item]() {
if (catalogue) {
bool removed;
sqpApp->catalogueController().discardCatalogue(catalogue, removed);
if (removed) {
m_TreeModel->removeChildItem(item,
m_TreeModel->indexOf(item->parent()));
}
else {
m_TreeModel->refresh(m_TreeModel->indexOf(item));
setHasChanges(false, validationIndex, sideBarWidget);
}
sideBarWidget->emitSelection();
}
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 });
Add catalogue handling
r1302 sideBarWidget->ui->treeView->setIndexWidget(validationIndex, widget);
Fix hardcorded icon size for save and discard tool button
r1318 sideBarWidget->ui->treeView->header()->resizeSection(
(int)CatalogueTreeModel::Column::Validation, QHeaderView::ResizeToContents);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
}
else {
// Note: the widget is destroyed
Add catalogue handling
r1302 sideBarWidget->ui->treeView->setIndexWidget(validationIndex, nullptr);
Refactoring of catalogue display using a QTreeView and a custom model based on QTreeWidgetItem
r1228 }
}
bool CatalogueSideBarWidget::CatalogueSideBarWidgetPrivate::hasChanges(const QModelIndex &index,
QTreeView *treeView)
{
auto validationIndex = index.sibling(index.row(), (int)CatalogueTreeModel::Column::Validation);
return treeView->indexWidget(validationIndex) != nullptr;
}
Add supp shortcut for Catalogues
r1314
void CatalogueSideBarWidget::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_Delete: {
ui->btnRemove->click();
}
default:
break;
}
}