CatalogueTreeWidgetItem.cpp
90 lines
| 2.8 KiB
| text/x-c
|
CppLexer
r1129 | #include "Catalogue/CatalogueTreeWidgetItem.h" | |||
r1142 | #include <memory> | |||
#include <QBoxLayout> | ||||
#include <QToolButton> | ||||
const auto VALIDATION_BUTTON_ICON_SIZE = 12; | ||||
r1129 | struct CatalogueTreeWidgetItem::CatalogueTreeWidgetItemPrivate { | |||
DBCatalogue m_Catalogue; | ||||
CatalogueTreeWidgetItemPrivate(DBCatalogue catalogue) : m_Catalogue(catalogue) {} | ||||
}; | ||||
CatalogueTreeWidgetItem::CatalogueTreeWidgetItem(DBCatalogue catalogue, int type) | ||||
: QTreeWidgetItem(type), | ||||
impl{spimpl::make_unique_impl<CatalogueTreeWidgetItemPrivate>(catalogue)} | ||||
{ | ||||
r1140 | setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable); | |||
r1129 | } | |||
QVariant CatalogueTreeWidgetItem::data(int column, int role) const | ||||
{ | ||||
r1142 | if (column == 0) { | |||
switch (role) { | ||||
case Qt::EditRole: // fallthrough | ||||
case Qt::DisplayRole: | ||||
return impl->m_Catalogue.getName(); | ||||
default: | ||||
break; | ||||
} | ||||
r1129 | } | |||
return QTreeWidgetItem::data(column, role); | ||||
} | ||||
r1140 | void CatalogueTreeWidgetItem::setData(int column, int role, const QVariant &value) | |||
{ | ||||
if (role == Qt::EditRole && column == 0) { | ||||
auto newName = value.toString(); | ||||
r1142 | if (newName != impl->m_Catalogue.getName()) { | |||
setText(0, newName); | ||||
impl->m_Catalogue.setName(newName); | ||||
setHasChanges(true); | ||||
} | ||||
r1140 | } | |||
else { | ||||
QTreeWidgetItem::setData(column, role, value); | ||||
} | ||||
} | ||||
r1129 | DBCatalogue CatalogueTreeWidgetItem::catalogue() const | |||
{ | ||||
return impl->m_Catalogue; | ||||
} | ||||
r1142 | ||||
void CatalogueTreeWidgetItem::setHasChanges(bool value) | ||||
{ | ||||
if (value) { | ||||
auto widet = new QWidget{treeWidget()}; | ||||
auto layout = new QHBoxLayout{widet}; | ||||
layout->setContentsMargins(0, 0, 0, 0); | ||||
layout->setSpacing(0); | ||||
auto btnValid = new QToolButton{widet}; | ||||
btnValid->setIcon(QIcon{":/icones/save"}); | ||||
btnValid->setIconSize(QSize{VALIDATION_BUTTON_ICON_SIZE, VALIDATION_BUTTON_ICON_SIZE}); | ||||
btnValid->setAutoRaise(true); | ||||
QObject::connect(btnValid, &QToolButton::clicked, [this]() { setHasChanges(false); }); | ||||
layout->addWidget(btnValid); | ||||
auto btnDiscard = new QToolButton{widet}; | ||||
btnDiscard->setIcon(QIcon{":/icones/discard"}); | ||||
btnDiscard->setIconSize(QSize{VALIDATION_BUTTON_ICON_SIZE, VALIDATION_BUTTON_ICON_SIZE}); | ||||
btnDiscard->setAutoRaise(true); | ||||
QObject::connect(btnDiscard, &QToolButton::clicked, [this]() { setHasChanges(false); }); | ||||
layout->addWidget(btnDiscard); | ||||
treeWidget()->setItemWidget(this, 1, {widet}); | ||||
treeWidget()->resizeColumnToContents(1); | ||||
} | ||||
else { | ||||
// Note: the widget is destroyed | ||||
treeWidget()->setItemWidget(this, 1, nullptr); | ||||
} | ||||
} | ||||