From 703c2bd6f651049320fab0ac08db50f10219a025 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Wed, 16 Jun 2021 15:32:57 +0300 Subject: [PATCH] detailsdlg:provide scheme custom item delegate --- .../detailsdialog/delegates/CMakeLists.txt | 1 + .../delegates/schemecmbitemdelegate.cpp | 53 +++++++++++++++++++ .../delegates/schemecmbitemdelegate.h | 34 ++++++++++++ app/settings/detailsdialog/detailshandler.cpp | 2 + 4 files changed, 90 insertions(+) create mode 100644 app/settings/detailsdialog/delegates/schemecmbitemdelegate.cpp create mode 100644 app/settings/detailsdialog/delegates/schemecmbitemdelegate.h diff --git a/app/settings/detailsdialog/delegates/CMakeLists.txt b/app/settings/detailsdialog/delegates/CMakeLists.txt index 47026e6f6..7a884dc18 100644 --- a/app/settings/detailsdialog/delegates/CMakeLists.txt +++ b/app/settings/detailsdialog/delegates/CMakeLists.txt @@ -1,6 +1,7 @@ set(lattedock-app_SRCS ${lattedock-app_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/colorcmbitemdelegate.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/schemecmbitemdelegate.cpp PARENT_SCOPE ) diff --git a/app/settings/detailsdialog/delegates/schemecmbitemdelegate.cpp b/app/settings/detailsdialog/delegates/schemecmbitemdelegate.cpp new file mode 100644 index 000000000..7d498439d --- /dev/null +++ b/app/settings/detailsdialog/delegates/schemecmbitemdelegate.cpp @@ -0,0 +1,53 @@ +/* + SPDX-FileCopyrightText: 2020 Michail Vourlakos + SPDX-License-Identifier: GPL-2.0-or-later +*/ + +#include "schemecmbitemdelegate.h" + +// local +#include "../schemesmodel.h" +#include "../../generic/generictools.h" + +// Qt +#include +#include +#include +#include +#include + + +namespace Latte { +namespace Settings { +namespace Details { +namespace Delegate { + +SchemeCmbItemDelegate::SchemeCmbItemDelegate(QObject *parent) + : QStyledItemDelegate(parent) +{ +} + +void SchemeCmbItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + QStyleOptionViewItem myOptions = option; + + //! background + Latte::drawBackground(painter, option); + + QColor backcolor = index.data(Model::Schemes::BACKGROUNDCOLORROLE).value(); + QColor textcolor = index.data(Model::Schemes::TEXTCOLORROLE).value(); + + //! icon + QRect remained = Latte::remainedFromColorSchemeIcon(myOptions, Qt::AlignLeft, 4, 2); + Latte::drawColorSchemeIcon(painter, myOptions, textcolor, backcolor, Qt::AlignLeft, 5, 2); //+1px in order to take into account popup window border + myOptions.rect = remained; + + //! + QStyledItemDelegate::paint(painter, myOptions, index); +} + +} +} +} +} + diff --git a/app/settings/detailsdialog/delegates/schemecmbitemdelegate.h b/app/settings/detailsdialog/delegates/schemecmbitemdelegate.h new file mode 100644 index 000000000..96fa090a9 --- /dev/null +++ b/app/settings/detailsdialog/delegates/schemecmbitemdelegate.h @@ -0,0 +1,34 @@ +/* + SPDX-FileCopyrightText: 2020 Michail Vourlakos + SPDX-License-Identifier: GPL-2.0-or-later +*/ + +#ifndef SCHEMECMBITEMDELEGATE_H +#define SCHEMECMBITEMDELEGATE_H + +// Qt +#include + +class QModelIndex; +class QWidget; + +namespace Latte { +namespace Settings { +namespace Details { +namespace Delegate { + +class SchemeCmbItemDelegate : public QStyledItemDelegate +{ + Q_OBJECT +public: + SchemeCmbItemDelegate(QObject *parent = 0); + + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; +}; + +} +} +} +} + +#endif diff --git a/app/settings/detailsdialog/detailshandler.cpp b/app/settings/detailsdialog/detailshandler.cpp index a4ae9fe48..b31cdbaea 100644 --- a/app/settings/detailsdialog/detailshandler.cpp +++ b/app/settings/detailsdialog/detailshandler.cpp @@ -12,6 +12,7 @@ #include "patternwidget.h" #include "schemesmodel.h" #include "delegates/colorcmbitemdelegate.h" +#include "delegates/schemecmbitemdelegate.h" #include "../settingsdialog/layoutscontroller.h" #include "../settingsdialog/layoutsmodel.h" #include "../settingsdialog/delegates/layoutcmbitemdelegate.h" @@ -59,6 +60,7 @@ void DetailsHandler::init() //! Schemes m_ui->customSchemeCmb->setModel(m_schemesModel); + m_ui->customSchemeCmb->setItemDelegate(new Settings::Details::Delegate::SchemeCmbItemDelegate(this)); //! Background Pattern m_backButtonsGroup = new QButtonGroup(this);