From 0589b2b0fbd936bf7d5fd5c791c2c8473a9f83d2 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Fri, 9 Apr 2021 10:55:24 +0300 Subject: [PATCH] viewsdialog:provide formatted text for options --- app/settings/generic/generictools.cpp | 52 +++++++++++++++++++ app/settings/generic/generictools.h | 3 ++ .../delegates/singleoptiondelegate.cpp | 18 +++++++ .../delegates/singleoptiondelegate.h | 3 +- 4 files changed, 75 insertions(+), 1 deletion(-) diff --git a/app/settings/generic/generictools.cpp b/app/settings/generic/generictools.cpp index f7b7844c1..a25a224ce 100644 --- a/app/settings/generic/generictools.cpp +++ b/app/settings/generic/generictools.cpp @@ -21,7 +21,9 @@ #include "generictools.h" // Qt +#include #include +#include namespace Latte { @@ -72,6 +74,15 @@ bool isFocused(const QStyleOption &option) return false; } +bool isTextCentered(const QStyleOptionViewItem &option) +{ + if (option.displayAlignment & Qt::AlignHCenter) { + return true; + } + + return false; +} + QPalette::ColorGroup colorGroup(const QStyleOption &option) { if (!isEnabled(option)) { @@ -102,6 +113,47 @@ QStringList subtracted(const QStringList &original, const QStringList ¤t) return subtract; } +void drawFormattedText(QPainter *painter, const QStyleOptionViewItem &option, const bool &isActive, const bool &isCentered) +{ + painter->save(); + + if (isActive) { + QPalette::ColorRole applyColor = Latte::isSelected(option) ? QPalette::HighlightedText : QPalette::Text; + QBrush nBrush = option.palette.brush(Latte::colorGroup(option), applyColor); + + QString css = QString("body { color : %1; }").arg(nBrush.color().name()); + + QTextDocument doc; + doc.setDefaultStyleSheet(css); + doc.setHtml("" + option.text + ""); + + QStyleOptionViewItem tempOptions = option; + tempOptions.text = ""; + option.widget->style()->drawControl(QStyle::CE_ItemViewItem, &tempOptions, painter); + + //we need an offset to be in the same vertical center of TextEdit + int offsetY = ((option.rect.height() - doc.size().height()) / 2); + int textWidth = doc.size().width(); + int textY = option.rect.top() + offsetY + 1; + + if (isCentered) { + int textX = qMax(0, (option.rect.width() / 2) - (textWidth/2)); + painter->translate(option.rect.left() + textX, textY); + } else if (qApp->layoutDirection() == Qt::RightToLeft) { + painter->translate(qMax(option.rect.left(), option.rect.right() - textWidth), textY); + } else { + painter->translate(option.rect.left(), textY); + } + + QRect clip(0, 0, option.rect.width(), option.rect.height()); + doc.drawContents(painter, clip); + } else { + QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &option, painter); + } + + painter->restore(); +} + void drawLayoutIcon(QPainter *painter, const QStyleOption &option, const QRect &target, const Latte::Data::LayoutIcon &icon) { bool active = Latte::isActive(option); diff --git a/app/settings/generic/generictools.h b/app/settings/generic/generictools.h index eb7732d14..bbf600101 100644 --- a/app/settings/generic/generictools.h +++ b/app/settings/generic/generictools.h @@ -29,6 +29,7 @@ #include #include #include +#include namespace Latte { @@ -37,6 +38,7 @@ bool isEnabled(const QStyleOption &option); bool isFocused(const QStyleOption &option); bool isSelected(const QStyleOption &option); bool isHovered(const QStyleOption &option); +bool isTextCentered(const QStyleOptionViewItem &option); QPalette::ColorGroup colorGroup(const QStyleOption &option); @@ -44,6 +46,7 @@ QPalette::ColorGroup colorGroup(const QStyleOption &option); //! now they are not present to current list QStringList subtracted(const QStringList &original, const QStringList ¤t); +void drawFormattedText(QPainter *painter, const QStyleOptionViewItem &option, const bool &isActive, const bool &isCentered); void drawLayoutIcon(QPainter *painter, const QStyleOption &option, const QRect &target, const Latte::Data::LayoutIcon &icon); } diff --git a/app/settings/viewsdialog/delegates/singleoptiondelegate.cpp b/app/settings/viewsdialog/delegates/singleoptiondelegate.cpp index 58416c12c..102c7a8eb 100644 --- a/app/settings/viewsdialog/delegates/singleoptiondelegate.cpp +++ b/app/settings/viewsdialog/delegates/singleoptiondelegate.cpp @@ -21,12 +21,15 @@ // local #include "../viewsmodel.h" +#include "../../generic/generictools.h" #include "../../../data/genericbasictable.h" #include "../../../data/screendata.h" // Qt +#include #include #include +#include #define PRESSEDPROPERTY "PRESSED" @@ -124,6 +127,21 @@ void SingleOption::updateButton(QWidget *editor, const QString &text) const QPushButton *button = static_cast(editor); button->setText(text); } + +void SingleOption::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + QStyleOptionViewItem myOptions = option; + //! Remove the focus dotted lines + myOptions.state = (myOptions.state & ~QStyle::State_HasFocus); + myOptions.text = index.model()->data(index, Qt::DisplayRole).toString(); + myOptions.displayAlignment = static_cast(index.model()->data(index, Qt::TextAlignmentRole).toInt()); + + bool isViewActive = index.data(Model::Views::ISACTIVEROLE).toBool(); + bool isTextCentered = Latte::isTextCentered(myOptions); + + Latte::drawFormattedText(painter, myOptions, isViewActive, isTextCentered); +} + } } } diff --git a/app/settings/viewsdialog/delegates/singleoptiondelegate.h b/app/settings/viewsdialog/delegates/singleoptiondelegate.h index de04c33f5..787174941 100644 --- a/app/settings/viewsdialog/delegates/singleoptiondelegate.h +++ b/app/settings/viewsdialog/delegates/singleoptiondelegate.h @@ -25,6 +25,7 @@ // Qt #include +#include #include class QModelIndex; @@ -46,7 +47,7 @@ public: void setEditorData(QWidget *editor, const QModelIndex &index) const override; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override; - //void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override; private: