File indexing completed on 2024-05-12 16:44:04
0001 /* 0002 SPDX-FileCopyrightText: 2005 Ace Jones <acejones@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2017 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kmymoneytitlelabel.h" 0008 0009 // ---------------------------------------------------------------------------- 0010 // QT Includes 0011 0012 #include <QPixmap> 0013 #include <QStyle> 0014 #include <QPainter> 0015 #include <QLabel> 0016 #include <QStandardPaths> 0017 #include <QFontDatabase> 0018 #include <QImage> 0019 0020 // ---------------------------------------------------------------------------- 0021 // KDE Includes 0022 0023 #include <KColorScheme> 0024 0025 // ---------------------------------------------------------------------------- 0026 // Project Includes 0027 0028 class KMyMoneyTitleLabelPrivate 0029 { 0030 Q_DISABLE_COPY(KMyMoneyTitleLabelPrivate) 0031 0032 public: 0033 KMyMoneyTitleLabelPrivate() 0034 { 0035 } 0036 0037 QImage m_leftImage; 0038 QImage m_rightImage; 0039 QColor m_bgColor; 0040 QString m_text; 0041 0042 QString m_leftImageFile; 0043 QString m_rightImageFile; 0044 }; 0045 0046 KMyMoneyTitleLabel::KMyMoneyTitleLabel(QWidget *parent) : 0047 QLabel(parent), 0048 d_ptr(new KMyMoneyTitleLabelPrivate) 0049 { 0050 Q_D(KMyMoneyTitleLabel); 0051 d->m_bgColor = KColorScheme(isEnabled() ? QPalette::Active : QPalette::Inactive, KColorScheme::Selection).background(KColorScheme::NormalBackground).color(); 0052 0053 setFont(QFontDatabase::systemFont(QFontDatabase::TitleFont)); 0054 } 0055 0056 KMyMoneyTitleLabel::~KMyMoneyTitleLabel() 0057 { 0058 Q_D(KMyMoneyTitleLabel); 0059 delete d; 0060 } 0061 0062 void KMyMoneyTitleLabel::setBgColor(const QColor& _color) 0063 { 0064 Q_D(KMyMoneyTitleLabel); 0065 d->m_bgColor = _color; 0066 } 0067 0068 void KMyMoneyTitleLabel::setLeftImageFile(const QString& _file) 0069 { 0070 Q_D(KMyMoneyTitleLabel); 0071 d->m_leftImageFile = _file; 0072 QString lfullpath = QStandardPaths::locate(QStandardPaths::DataLocation, d->m_leftImageFile); 0073 d->m_leftImage.load(lfullpath); 0074 } 0075 0076 void KMyMoneyTitleLabel::setRightImageFile(const QString& _file) 0077 { 0078 Q_D(KMyMoneyTitleLabel); 0079 d->m_rightImageFile = _file; 0080 QString rfullpath = QStandardPaths::locate(QStandardPaths::DataLocation, d->m_rightImageFile); 0081 d->m_rightImage.load(rfullpath); 0082 if (d->m_rightImage.height() < 30) 0083 setMinimumHeight(30); 0084 else { 0085 setMinimumHeight(d->m_rightImage.height()); 0086 setMaximumHeight(d->m_rightImage.height()); 0087 } 0088 } 0089 0090 QString KMyMoneyTitleLabel::leftImageFile() const 0091 { 0092 Q_D(const KMyMoneyTitleLabel); 0093 return d->m_leftImageFile; 0094 } 0095 0096 QString KMyMoneyTitleLabel::rightImageFile() const 0097 { 0098 Q_D(const KMyMoneyTitleLabel); 0099 return d->m_rightImageFile; 0100 } 0101 0102 QColor KMyMoneyTitleLabel::bgColor() const 0103 { 0104 Q_D(const KMyMoneyTitleLabel); 0105 return d->m_bgColor; 0106 } 0107 0108 QString KMyMoneyTitleLabel::text() const 0109 { 0110 Q_D(const KMyMoneyTitleLabel); 0111 return d->m_text; 0112 } 0113 0114 void KMyMoneyTitleLabel::paintEvent(QPaintEvent *e) 0115 { 0116 Q_D(KMyMoneyTitleLabel); 0117 QLabel::paintEvent(e); 0118 0119 QPainter painter(this); 0120 QRect cr = contentsRect(); 0121 0122 // prepare the pixmap 0123 QImage output(cr.width(), cr.height(), QImage::Format_RGB32); 0124 output.fill(d->m_bgColor.rgb()); 0125 0126 QPixmap result = QPixmap::fromImage(output); 0127 QPixmap overlay = QPixmap::fromImage(d->m_rightImage); 0128 QPainter pixmapPainter(&result); 0129 pixmapPainter.drawPixmap(cr.width() - d->m_rightImage.width(), 0, overlay, 0, 0, overlay.width(), overlay.height()); 0130 overlay = QPixmap::fromImage(d->m_leftImage); 0131 pixmapPainter.drawPixmap(0, 0, overlay, 0, 0, overlay.width(), overlay.height()); 0132 0133 // first draw pixmap 0134 style()->drawItemPixmap(&painter, contentsRect(), alignment(), result); 0135 0136 // then draw text on top with a larger font (relative to the pixmap size) and with the appropriate color 0137 QFont font = painter.font(); 0138 font.setPointSizeF(qMax(result.height() / static_cast<qreal>(2.5), font.pointSizeF())); 0139 painter.setFont(font); 0140 painter.setPen(KColorScheme(QPalette::Active, KColorScheme::Selection).foreground(KColorScheme::NormalText).color()); 0141 style()->drawItemText(&painter, contentsRect(), alignment(), palette(), isEnabled(), QString(" ") + d->m_text); 0142 } 0143 0144 void KMyMoneyTitleLabel::setText(const QString& txt) 0145 { 0146 Q_D(KMyMoneyTitleLabel); 0147 d->m_text = txt; 0148 d->m_text.replace('\n', QLatin1String(" ")); 0149 update(); 0150 }