File indexing completed on 2024-05-12 16:43:57
0001 /* 0002 SPDX-FileCopyrightText: 2006-2018 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-FileCopyrightText: 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "groupmarker.h" 0008 #include "groupmarker_p.h" 0009 0010 // ---------------------------------------------------------------------------- 0011 // QT Includes 0012 0013 #include <QString> 0014 #include <QPixmap> 0015 #include <QHeaderView> 0016 #include <QStyleOptionViewItem> 0017 #include <QPainter> 0018 0019 // ---------------------------------------------------------------------------- 0020 // KDE Includes 0021 0022 // ---------------------------------------------------------------------------- 0023 // Project Includes 0024 0025 #include "widgetenums.h" 0026 0027 using namespace KMyMoneyRegister; 0028 0029 QPixmap* GroupMarkerPrivate::GroupMarkerPrivate::m_bg = nullptr; 0030 int GroupMarkerPrivate::GroupMarkerPrivate::m_bgRefCnt = 0; 0031 0032 GroupMarker::GroupMarker(Register *parent, const QString& txt) : 0033 RegisterItem(*new GroupMarkerPrivate, parent) 0034 { 0035 Q_D(GroupMarker); 0036 d->m_txt = txt; 0037 d->init(); 0038 } 0039 0040 GroupMarker::GroupMarker(GroupMarkerPrivate &dd, Register *parent, const QString& txt) : 0041 RegisterItem(dd, parent) 0042 { 0043 Q_D(GroupMarker); 0044 d->m_txt = txt; 0045 d->init(); 0046 } 0047 0048 GroupMarker::~GroupMarker() 0049 { 0050 Q_D(GroupMarker); 0051 --d->GroupMarkerPrivate::m_bgRefCnt; 0052 if (!d->GroupMarkerPrivate::m_bgRefCnt) { 0053 delete d->GroupMarkerPrivate::m_bg; 0054 d->GroupMarkerPrivate::m_bg = 0; 0055 } 0056 } 0057 0058 void GroupMarker::setText(const QString& txt) 0059 { 0060 Q_D(GroupMarker); 0061 d->m_txt = txt; 0062 } 0063 0064 QString GroupMarker::text() const 0065 { 0066 Q_D(const GroupMarker); 0067 return d->m_txt; 0068 } 0069 0070 bool GroupMarker::isSelectable() const 0071 { 0072 return false; 0073 } 0074 0075 bool GroupMarker::canHaveFocus() const 0076 { 0077 return false; 0078 } 0079 0080 int GroupMarker::numRows() const 0081 { 0082 return 1; 0083 } 0084 0085 const char* GroupMarker::className() 0086 { 0087 return "GroupMarker"; 0088 } 0089 0090 bool GroupMarker::isErroneous() const 0091 { 0092 Q_D(const GroupMarker); 0093 return d->m_erroneous; 0094 } 0095 0096 void GroupMarker::paintRegisterCell(QPainter *painter, QStyleOptionViewItem &option, const QModelIndex &index) 0097 { 0098 Q_D(GroupMarker); 0099 QRect r(option.rect); 0100 painter->save(); 0101 0102 // the group marker always uses all cols 0103 r.setX(d->m_parent->horizontalHeader()->sectionPosition(0)); 0104 r.setWidth(d->m_parent->viewport()->width()); 0105 painter->translate(r.x(), r.y()); 0106 0107 QRect cellRect; 0108 cellRect.setX(0); 0109 cellRect.setY(0); 0110 cellRect.setWidth(d->m_parent->viewport()->width()); 0111 cellRect.setHeight(d->m_parent->rowHeight(index.row())); 0112 0113 option.palette.setColor(QPalette::Base, isErroneous() ? KMyMoneySettings::schemeColor(SchemeColor::TransactionErroneous) : KMyMoneySettings::schemeColor(SchemeColor::GroupMarker)); 0114 0115 QBrush backgroundBrush(option.palette.color(QPalette::Base)); 0116 painter->fillRect(cellRect, backgroundBrush); 0117 painter->setPen(KMyMoneySettings::schemeColor(SchemeColor::ListGrid)); 0118 painter->drawLine(cellRect.x(), cellRect.height() - 1, cellRect.width(), cellRect.height() - 1); 0119 0120 // now write the text 0121 painter->setPen(option.palette.color(QPalette::HighlightedText)); 0122 QFont font = painter->font(); 0123 font.setBold(true); 0124 painter->setFont(font); 0125 0126 painter->drawText(cellRect, Qt::AlignVCenter | Qt::AlignCenter, d->m_txt); 0127 0128 cellRect.setHeight(d->GroupMarkerPrivate::m_bg->height()); 0129 0130 // now it's time to draw the background 0131 painter->drawPixmap(cellRect, *KMyMoneyRegister::GroupMarkerPrivate::m_bg); 0132 0133 // in case we need to show the date, we just paint it in col 1 0134 if (d->m_showDate) { 0135 font.setBold(false); 0136 cellRect.setX(d->m_parent->horizontalHeader()->sectionPosition((int)eWidgets::eTransaction::Column::Date)); 0137 cellRect.setWidth(d->m_parent->horizontalHeader()->sectionSize((int)eWidgets::eTransaction::Column::Date)); 0138 painter->setFont(font); 0139 painter->drawText(cellRect, Qt::AlignVCenter | Qt::AlignCenter, QLocale().toString(sortPostDate(), QLocale::ShortFormat)); 0140 } 0141 0142 painter->restore(); 0143 } 0144 0145 void GroupMarker::paintFormCell(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) 0146 { 0147 Q_UNUSED(painter); 0148 Q_UNUSED(option); 0149 Q_UNUSED(index); 0150 } 0151 0152 int GroupMarker::rowHeightHint() const 0153 { 0154 Q_D(const GroupMarker); 0155 if (!d->m_visible) 0156 return 0; 0157 0158 return d->GroupMarkerPrivate::m_bg->height(); 0159 } 0160 0161 bool GroupMarker::matches(const RegisterFilter&) const 0162 { 0163 return true; 0164 } 0165 0166 int GroupMarker::sortSamePostDate() const 0167 { 0168 return 0; 0169 } 0170 0171 void GroupMarker::setErroneous(bool condition) 0172 { 0173 Q_D(GroupMarker); 0174 d->m_erroneous = condition; 0175 }