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 }