File indexing completed on 2024-05-12 16:43:51
0001 /* 0002 SPDX-FileCopyrightText: 2012 Alessandro Russo <axela74@yahoo.it> 0003 SPDX-FileCopyrightText: 2017 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KTAGSVIEW_P_H 0008 #define KTAGSVIEW_P_H 0009 0010 #include "ktagsview.h" 0011 0012 // ---------------------------------------------------------------------------- 0013 // QT Includes 0014 0015 #include <QList> 0016 0017 // ---------------------------------------------------------------------------- 0018 // KDE Includes 0019 0020 #include <KLocalizedString> 0021 #include <KSharedConfig> 0022 #include <KConfigGroup> 0023 #include <KListWidgetSearchLine> 0024 0025 // ---------------------------------------------------------------------------- 0026 // Project Includes 0027 0028 #include "ui_ktagsview.h" 0029 0030 #include "kmymoneyviewbase_p.h" 0031 #include "mymoneyaccount.h" 0032 #include "mymoneyfile.h" 0033 #include "mymoneytag.h" 0034 #include "mymoneytransactionfilter.h" 0035 #include "icons.h" 0036 #include "viewenums.h" 0037 #include "widgetenums.h" 0038 0039 using namespace Icons; 0040 namespace Ui { 0041 class KTagsView; 0042 } 0043 0044 // *** KTagListItem Implementation *** 0045 0046 /** 0047 * This class represents an item in the tags list view. 0048 */ 0049 class KTagListItem : public QListWidgetItem 0050 { 0051 public: 0052 /** 0053 * Constructor to be used to construct a tag entry object. 0054 * 0055 * @param parent pointer to the QListWidget object this entry should be 0056 * added to. 0057 * @param tag const reference to MyMoneyTag for which 0058 * the QListWidget entry is constructed 0059 */ 0060 explicit KTagListItem(QListWidget *parent, const MyMoneyTag& tag) : 0061 QListWidgetItem(parent, QListWidgetItem::UserType), 0062 m_tag(tag) 0063 { 0064 setText(tag.name()); 0065 // allow in column rename 0066 setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); 0067 } 0068 0069 ~KTagListItem() {} 0070 0071 MyMoneyTag tag() const 0072 { 0073 return m_tag; 0074 } 0075 0076 private: 0077 MyMoneyTag m_tag; 0078 }; 0079 0080 class KTagsViewPrivate : public KMyMoneyViewBasePrivate 0081 { 0082 Q_DECLARE_PUBLIC(KTagsView) 0083 0084 public: 0085 explicit KTagsViewPrivate(KTagsView *qq) : 0086 q_ptr(qq), 0087 ui(new Ui::KTagsView), 0088 m_needLoad(true), 0089 m_searchWidget(nullptr), 0090 m_inSelection(false), 0091 m_allowEditing(true), 0092 m_tagFilterType(0) 0093 { 0094 } 0095 0096 ~KTagsViewPrivate() override 0097 { 0098 if (!m_needLoad) { 0099 // remember the splitter settings for startup 0100 KConfigGroup grp = KSharedConfig::openConfig()->group("Last Use Settings"); 0101 grp.writeEntry("KTagsViewSplitterSize", ui->m_splitter->saveState()); 0102 grp.sync(); 0103 } 0104 delete ui; 0105 } 0106 0107 void init() 0108 { 0109 Q_Q(KTagsView); 0110 m_needLoad = false; 0111 ui->setupUi(q); 0112 0113 // create the searchline widget 0114 // and insert it into the existing layout 0115 m_searchWidget = new KListWidgetSearchLine(q, ui->m_tagsList); 0116 m_searchWidget->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); 0117 ui->m_tagsList->setContextMenuPolicy(Qt::CustomContextMenu); 0118 ui->m_listTopHLayout->insertWidget(0, m_searchWidget); 0119 0120 //load the filter type 0121 ui->m_filterBox->addItem(i18nc("@item Show all tags", "All")); 0122 ui->m_filterBox->addItem(i18nc("@item Show only used tags", "Used")); 0123 ui->m_filterBox->addItem(i18nc("@item Show only unused tags", "Unused")); 0124 ui->m_filterBox->addItem(i18nc("@item Show only opened tags", "Opened")); 0125 ui->m_filterBox->addItem(i18nc("@item Show only closed tags", "Closed")); 0126 ui->m_filterBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); 0127 0128 ui->m_newButton->setIcon(Icons::get(Icon::ListAddTag)); 0129 ui->m_renameButton->setIcon(Icons::get(Icon::EditRename)); 0130 ui->m_deleteButton->setIcon(Icons::get(Icon::ListRemoveTag)); 0131 ui->m_updateButton->setIcon(Icons::get(Icon::DialogOK)); 0132 ui->m_updateButton->setEnabled(false); 0133 0134 ui->m_register->setupRegister(MyMoneyAccount(), 0135 QList<eWidgets::eTransaction::Column> { eWidgets::eTransaction::Column::Date, 0136 eWidgets::eTransaction::Column::Account, 0137 eWidgets::eTransaction::Column::Detail, 0138 eWidgets::eTransaction::Column::ReconcileFlag, 0139 eWidgets::eTransaction::Column::Payment, 0140 eWidgets::eTransaction::Column::Deposit 0141 }); 0142 ui->m_register->setSelectionMode(QTableWidget::SingleSelection); 0143 ui->m_register->setDetailsColumnType(eWidgets::eRegister::DetailColumn::AccountFirst); 0144 ui->m_balanceLabel->hide(); 0145 0146 q->connect(ui->m_tagsList, &QListWidget::currentItemChanged, q, static_cast<void (KTagsView::*)(QListWidgetItem *, QListWidgetItem *)>(&KTagsView::slotSelectTag)); 0147 q->connect(ui->m_tagsList, &QListWidget::itemSelectionChanged, q, static_cast<void (KTagsView::*)()>(&KTagsView::slotSelectTag)); 0148 q->connect(ui->m_tagsList, &QListWidget::itemDoubleClicked, q, &KTagsView::slotStartRename); 0149 q->connect(ui->m_tagsList, &QListWidget::itemChanged, q, &KTagsView::slotRenameSingleTag); 0150 q->connect(ui->m_tagsList, &QWidget::customContextMenuRequested, q, &KTagsView::slotShowTagsMenu); 0151 0152 q->connect(ui->m_newButton, &QAbstractButton::clicked, q, &KTagsView::slotNewTag); 0153 q->connect(ui->m_renameButton, &QAbstractButton::clicked, q, &KTagsView::slotRenameTag); 0154 q->connect(ui->m_deleteButton, &QAbstractButton::clicked, q, &KTagsView::slotDeleteTag); 0155 0156 q->connect(ui->m_colorbutton, &KColorButton::changed, q, &KTagsView::slotTagDataChanged); 0157 q->connect(ui->m_closed, &QCheckBox::stateChanged, q, &KTagsView::slotTagDataChanged); 0158 q->connect(ui->m_notes, &QTextEdit::textChanged, q, &KTagsView::slotTagDataChanged); 0159 0160 q->connect(ui->m_updateButton, &QAbstractButton::clicked, q, &KTagsView::slotUpdateTag); 0161 q->connect(ui->m_helpButton, &QAbstractButton::clicked, q, &KTagsView::slotHelp); 0162 0163 q->connect(ui->m_register, &KMyMoneyRegister::Register::editTransaction, q, &KTagsView::slotSelectTransaction); 0164 0165 q->connect(MyMoneyFile::instance(), &MyMoneyFile::dataChanged, q, &KTagsView::refresh); 0166 0167 q->connect(ui->m_filterBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), q, &KTagsView::slotChangeFilter); 0168 0169 // use the size settings of the last run (if any) 0170 auto grp = KSharedConfig::openConfig()->group("Last Use Settings"); 0171 ui->m_splitter->restoreState(grp.readEntry("KTagsViewSplitterSize", QByteArray())); 0172 ui->m_splitter->setChildrenCollapsible(false); 0173 0174 // At start we haven't any tag selected 0175 ui->m_tabWidget->setEnabled(false); // disable tab widget 0176 ui->m_deleteButton->setEnabled(false); // disable delete and rename button 0177 ui->m_renameButton->setEnabled(false); 0178 m_tag = MyMoneyTag(); // make sure we don't access an undefined tag 0179 q->clearItemData(); 0180 } 0181 0182 /** 0183 * Check if a list contains a tag with a given id 0184 * 0185 * @param list const reference to value list 0186 * @param id const reference to id 0187 * 0188 * @retval true object has been found 0189 * @retval false object is not in list 0190 */ 0191 bool tagInList(const QList<MyMoneyTag>& list, const QString& id) const 0192 { 0193 bool rc = false; 0194 QList<MyMoneyTag>::const_iterator it_p = list.begin(); 0195 while (it_p != list.end()) { 0196 if ((*it_p).id() == id) { 0197 rc = true; 0198 break; 0199 } 0200 ++it_p; 0201 } 0202 return rc; 0203 } 0204 0205 KTagsView *q_ptr; 0206 Ui::KTagsView *ui; 0207 0208 MyMoneyTag m_tag; 0209 QString m_newName; 0210 0211 /** 0212 * This member holds a list of all transactions 0213 */ 0214 QList<QPair<MyMoneyTransaction, MyMoneySplit> > m_transactionList; 0215 0216 /** 0217 * This member holds the load state of page 0218 */ 0219 bool m_needLoad; 0220 0221 /** 0222 * Search widget for the list 0223 */ 0224 KListWidgetSearchLine* m_searchWidget; 0225 0226 /** 0227 * Semaphore to suppress loading during selection 0228 */ 0229 bool m_inSelection; 0230 0231 /** 0232 * This signals whether a tag can be edited 0233 **/ 0234 bool m_allowEditing; 0235 0236 /** 0237 * This holds the filter type 0238 */ 0239 int m_tagFilterType; 0240 0241 QList<MyMoneyTag> m_selectedTags; 0242 }; 0243 0244 0245 #endif