From c34b2f04fd540622a671e4848a37e509a6721d2c Mon Sep 17 00:00:00 2001 From: Nicolas Fella Date: Sat, 8 Jul 2023 23:46:29 +0200 Subject: [PATCH] Replace ServiceItemDelegate with standard Qt item delegate We don't need a custom delegate here Using the standard one from Qt also slightly improves margins --- src/CMakeLists.txt | 4 - .../contextmenu/contextmenusettingspage.cpp | 5 +- src/settings/general/previewssettingspage.cpp | 1 - src/settings/serviceitemdelegate.cpp | 109 ------------------ src/settings/serviceitemdelegate.h | 42 ------- src/settings/servicemodel.cpp | 10 +- src/settings/servicemodel.h | 3 +- 7 files changed, 5 insertions(+), 169 deletions(-) delete mode 100644 src/settings/serviceitemdelegate.cpp delete mode 100644 src/settings/serviceitemdelegate.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9cd4e2932..5a481e39f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -300,7 +300,6 @@ target_sources(dolphinstatic PRIVATE settings/navigation/navigationsettingspage.cpp settings/contextmenu/contextmenusettingspage.cpp settings/settingspagebase.cpp - settings/serviceitemdelegate.cpp settings/servicemodel.cpp settings/startup/startupsettingspage.cpp settings/trash/trashsettingspage.cpp @@ -359,7 +358,6 @@ target_sources(dolphinstatic PRIVATE settings/navigation/navigationsettingspage.h settings/contextmenu/contextmenusettingspage.h settings/settingspagebase.h - settings/serviceitemdelegate.h settings/servicemodel.h settings/startup/startupsettingspage.h settings/trash/trashsettingspage.h @@ -531,14 +529,12 @@ if(NOT WIN32) settings/general/previewssettingspage.cpp settings/general/confirmationssettingspage.cpp settings/settingspagebase.cpp - settings/serviceitemdelegate.cpp settings/servicemodel.cpp settings/kcm/kcmdolphingeneral.h settings/general/behaviorsettingspage.h settings/general/previewssettingspage.h settings/general/confirmationssettingspage.h settings/settingspagebase.h - settings/serviceitemdelegate.h settings/servicemodel.h ) diff --git a/src/settings/contextmenu/contextmenusettingspage.cpp b/src/settings/contextmenu/contextmenusettingspage.cpp index 07deb778a..eeaf3c168 100644 --- a/src/settings/contextmenu/contextmenusettingspage.cpp +++ b/src/settings/contextmenu/contextmenusettingspage.cpp @@ -10,7 +10,6 @@ #include "dolphin_generalsettings.h" #include "dolphin_versioncontrolsettings.h" #include "global.h" -#include "settings/serviceitemdelegate.h" #include "settings/servicemodel.h" #include @@ -72,7 +71,6 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget *parent, const KActionC m_listView = new QListView(this); QScroller::grabGesture(m_listView->viewport(), QScroller::TouchGesture); - auto *delegate = new ServiceItemDelegate(m_listView, m_listView); m_serviceModel = new ServiceModel(this); m_sortModel = new QSortFilterProxyModel(this); m_sortModel->setSourceModel(m_serviceModel); @@ -81,7 +79,6 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget *parent, const KActionC m_sortModel->setFilterRole(Qt::DisplayRole); m_sortModel->setFilterCaseSensitivity(Qt::CaseInsensitive); m_listView->setModel(m_sortModel); - m_listView->setItemDelegate(delegate); m_listView->setVerticalScrollMode(QListView::ScrollPerPixel); connect(m_listView, &QListView::clicked, this, &ContextMenuSettingsPage::changed); @@ -267,7 +264,7 @@ void ContextMenuSettingsPage::showEvent(QShowEvent *event) for (const QString &id : m_actionIds) { const QAction *action = m_actions->action(id); if (action) { - addRow(action->icon().name(), action->text(), id, entryVisible(id)); + addRow(action->icon().name(), KLocalizedString::removeAcceleratorMarker(action->text()), id, entryVisible(id)); } } } diff --git a/src/settings/general/previewssettingspage.cpp b/src/settings/general/previewssettingspage.cpp index 1e96025fd..dd1ce942e 100644 --- a/src/settings/general/previewssettingspage.cpp +++ b/src/settings/general/previewssettingspage.cpp @@ -7,7 +7,6 @@ #include "previewssettingspage.h" #include "dolphin_generalsettings.h" -#include "settings/serviceitemdelegate.h" #include "settings/servicemodel.h" #include diff --git a/src/settings/serviceitemdelegate.cpp b/src/settings/serviceitemdelegate.cpp deleted file mode 100644 index 929e699d8..000000000 --- a/src/settings/serviceitemdelegate.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2011 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "serviceitemdelegate.h" - -#include "servicemodel.h" - -#include -#include -#include -#include - -ServiceItemDelegate::ServiceItemDelegate(QAbstractItemView *itemView, QObject *parent) - : KWidgetItemDelegate(itemView, parent) -{ -} - -ServiceItemDelegate::~ServiceItemDelegate() -{ -} - -QSize ServiceItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - Q_UNUSED(index) - - const QStyle *style = itemView()->style(); - const int buttonHeight = style->pixelMetric(QStyle::PM_ButtonMargin) * 2 + style->pixelMetric(QStyle::PM_ButtonIconSize); - const int fontHeight = option.fontMetrics.height(); - return QSize(100, qMax(buttonHeight, fontHeight)); -} - -void ServiceItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - Q_UNUSED(index) - painter->save(); - - itemView()->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter); - - if (option.state & QStyle::State_Selected) { - painter->setPen(option.palette.highlightedText().color()); - } - - painter->restore(); -} - -QList ServiceItemDelegate::createItemWidgets(const QModelIndex &) const -{ - QCheckBox *checkBox = new QCheckBox(); - QPalette palette = checkBox->palette(); - palette.setColor(QPalette::WindowText, palette.color(QPalette::Text)); - checkBox->setPalette(palette); - connect(checkBox, &QCheckBox::clicked, this, &ServiceItemDelegate::slotCheckBoxClicked); - - QPushButton *configureButton = new QPushButton(); - connect(configureButton, &QPushButton::clicked, this, &ServiceItemDelegate::slotConfigureButtonClicked); - - return {checkBox, configureButton}; -} - -void ServiceItemDelegate::updateItemWidgets(const QList &widgets, const QStyleOptionViewItem &option, const QPersistentModelIndex &index) const -{ - QCheckBox *checkBox = static_cast(widgets[0]); - QPushButton *configureButton = static_cast(widgets[1]); - - const int itemHeight = sizeHint(option, index).height(); - - // Update the checkbox showing the service name and icon - const QAbstractItemModel *model = index.model(); - checkBox->setText(model->data(index).toString()); - const QString iconName = model->data(index, Qt::DecorationRole).toString(); - if (!iconName.isEmpty()) { - checkBox->setIcon(QIcon::fromTheme(iconName)); - } - checkBox->setChecked(model->data(index, Qt::CheckStateRole).value() == Qt::Checked); - - const bool configurable = model->data(index, ServiceModel::ConfigurableRole).toBool(); - - int checkBoxWidth = option.rect.width(); - if (configurable) { - checkBoxWidth -= configureButton->sizeHint().width(); - } - checkBox->resize(checkBoxWidth, checkBox->sizeHint().height()); - checkBox->move(0, (itemHeight - checkBox->height()) / 2); - - // Update the configuration button - if (configurable) { - configureButton->setEnabled(checkBox->isChecked()); - configureButton->setIcon(QIcon::fromTheme(QStringLiteral("configure"))); - configureButton->resize(configureButton->sizeHint()); - configureButton->move(option.rect.right() - configureButton->width(), (itemHeight - configureButton->height()) / 2); - } - configureButton->setVisible(configurable); -} - -void ServiceItemDelegate::slotCheckBoxClicked(bool checked) -{ - QAbstractItemModel *model = const_cast(focusedIndex().model()); - model->setData(focusedIndex(), checked ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); -} - -void ServiceItemDelegate::slotConfigureButtonClicked() -{ - Q_EMIT requestServiceConfiguration(focusedIndex()); -} - -#include "moc_serviceitemdelegate.cpp" diff --git a/src/settings/serviceitemdelegate.h b/src/settings/serviceitemdelegate.h deleted file mode 100644 index d7b243878..000000000 --- a/src/settings/serviceitemdelegate.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2011 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#ifndef SERVICEITEMDELEGATE_H -#define SERVICEITEMDELEGATE_H - -#include - -/** - * @brief Widget item delegate for a service that can be enabled or disabled. - * - * Additionally it is possible to configure a service. - * @see ServiceModel - */ -class ServiceItemDelegate : public KWidgetItemDelegate -{ - Q_OBJECT - -public: - explicit ServiceItemDelegate(QAbstractItemView *itemView, QObject *parent = nullptr); - ~ServiceItemDelegate() override; - - QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; - - void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; - - QList createItemWidgets(const QModelIndex &) const override; - - void updateItemWidgets(const QList &widgets, const QStyleOptionViewItem &option, const QPersistentModelIndex &index) const override; - -Q_SIGNALS: - void requestServiceConfiguration(const QModelIndex &index); - -private Q_SLOTS: - void slotCheckBoxClicked(bool checked); - void slotConfigureButtonClicked(); -}; - -#endif diff --git a/src/settings/servicemodel.cpp b/src/settings/servicemodel.cpp index 5333e88b9..c2ebda7c1 100644 --- a/src/settings/servicemodel.cpp +++ b/src/settings/servicemodel.cpp @@ -6,6 +6,8 @@ #include "servicemodel.h" +#include + ServiceModel::ServiceModel(QObject *parent) : QAbstractListModel(parent) , m_items() @@ -30,7 +32,6 @@ bool ServiceModel::insertRows(int row, int count, const QModelIndex &parent) for (int i = 0; i < count; ++i) { ServiceItem item; item.checked = Qt::Unchecked; - item.configurable = false; m_items.insert(row, item); } endInsertRows(); @@ -49,9 +50,6 @@ bool ServiceModel::setData(const QModelIndex &index, const QVariant &value, int case Qt::CheckStateRole: m_items[row].checked = value.value(); break; - case ConfigurableRole: - m_items[row].configurable = value.toBool(); - break; case Qt::DecorationRole: m_items[row].icon = value.toString(); break; @@ -74,12 +72,10 @@ QVariant ServiceModel::data(const QModelIndex &index, int role) const const int row = index.row(); if (row < rowCount()) { switch (role) { - case ConfigurableRole: - return m_items[row].configurable; case Qt::CheckStateRole: return m_items[row].checked; case Qt::DecorationRole: - return m_items[row].icon; + return QIcon::fromTheme(m_items[row].icon); case Qt::DisplayRole: return m_items[row].text; case DesktopEntryNameRole: diff --git a/src/settings/servicemodel.h b/src/settings/servicemodel.h index 7a8607926..0abe1fe46 100644 --- a/src/settings/servicemodel.h +++ b/src/settings/servicemodel.h @@ -25,7 +25,7 @@ class ServiceModel : public QAbstractListModel Q_OBJECT public: - enum Role { DesktopEntryNameRole = Qt::UserRole, ConfigurableRole }; + enum Role { DesktopEntryNameRole = Qt::UserRole }; explicit ServiceModel(QObject *parent = nullptr); ~ServiceModel() override; @@ -40,7 +40,6 @@ public: private: struct ServiceItem { Qt::CheckState checked; - bool configurable; QString icon; QString text; QString desktopEntryName; -- 2.47.3