File indexing completed on 2024-05-12 16:42:10
0001 /* 0002 SPDX-FileCopyrightText: 2007-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 "kselecttransactionsdlg.h" 0008 #include "kselecttransactionsdlg_p.h" 0009 0010 // ---------------------------------------------------------------------------- 0011 // QT Includes 0012 0013 #include <QEvent> 0014 #include <QHeaderView> 0015 #include <QKeyEvent> 0016 #include <QList> 0017 #include <QPushButton> 0018 0019 // ---------------------------------------------------------------------------- 0020 // KDE Includes 0021 0022 #include <KStandardGuiItem> 0023 #include <KLocalizedString> 0024 0025 // ---------------------------------------------------------------------------- 0026 // Project Includes 0027 0028 #include "ui_kselecttransactionsdlg.h" 0029 0030 #include "mymoneyaccount.h" 0031 #include "selectedtransactions.h" 0032 #include "mymoneysplit.h" 0033 #include "mymoneytransaction.h" 0034 #include "transaction.h" 0035 #include "kmymoneysettings.h" 0036 #include "widgetenums.h" 0037 0038 KSelectTransactionsDlg::KSelectTransactionsDlg(const MyMoneyAccount& _account, QWidget* parent) : 0039 QDialog(parent), 0040 d_ptr(new KSelectTransactionsDlgPrivate) 0041 { 0042 Q_D(KSelectTransactionsDlg); 0043 d->m_account = _account; 0044 d->ui->setupUi(this); 0045 // setup descriptive texts 0046 setWindowTitle(i18n("Select Transaction")); 0047 d->ui->m_description->setText(i18n("Select a transaction and press the OK button or use Cancel to select none.")); 0048 0049 // clear current register contents 0050 d->ui->m_register->clear(); 0051 0052 // no selection possible 0053 d->ui->m_register->setSelectionMode(QTableWidget::SingleSelection); 0054 0055 // setup header font 0056 auto font = KMyMoneySettings::listHeaderFontEx(); 0057 QFontMetrics fm(font); 0058 auto height = fm.lineSpacing() + 6; 0059 d->ui->m_register->horizontalHeader()->setMinimumHeight(height); 0060 d->ui->m_register->horizontalHeader()->setMaximumHeight(height); 0061 d->ui->m_register->horizontalHeader()->setFont(font); 0062 0063 // setup cell font 0064 font = KMyMoneySettings::listCellFontEx(); 0065 d->ui->m_register->setFont(font); 0066 0067 // ... setup the register columns ... 0068 d->ui->m_register->setupRegister(d->m_account); 0069 0070 // setup buttons 0071 0072 // default is to need at least one transaction selected 0073 d->ui->buttonBox->button(QDialogButtonBox::Ok)->setDisabled(true); 0074 0075 // catch some events from the register 0076 d->ui->m_register->installEventFilter(this); 0077 0078 connect(d->ui->m_register, &KMyMoneyRegister::Register::transactionsSelected, this, &KSelectTransactionsDlg::slotEnableOk); 0079 connect(d->ui->m_register, &KMyMoneyRegister::Register::editTransaction, this, &QDialog::accept); 0080 0081 connect(d->ui->buttonBox, &QDialogButtonBox::helpRequested, this, &KSelectTransactionsDlg::slotHelp); 0082 } 0083 0084 KSelectTransactionsDlg::~KSelectTransactionsDlg() 0085 { 0086 Q_D(KSelectTransactionsDlg); 0087 delete d; 0088 } 0089 0090 void KSelectTransactionsDlg::slotEnableOk(const KMyMoneyRegister::SelectedTransactions& list) 0091 { 0092 Q_D(KSelectTransactionsDlg); 0093 d->ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(list.count() != 0); 0094 } 0095 0096 void KSelectTransactionsDlg::addTransaction(const MyMoneyTransaction& t) 0097 { 0098 Q_D(KSelectTransactionsDlg); 0099 foreach (const auto split, t.splits()) { 0100 if (split.accountId() == d->m_account.id()) { 0101 KMyMoneyRegister::Transaction* tr = KMyMoneyRegister::Register::transactionFactory(d->ui->m_register, t, split, 0); 0102 // force full detail display 0103 tr->setNumRowsRegister(tr->numRowsRegister(true)); 0104 break; 0105 } 0106 } 0107 } 0108 0109 int KSelectTransactionsDlg::exec() 0110 { 0111 Q_D(KSelectTransactionsDlg); 0112 d->ui->m_register->updateRegister(true); 0113 d->ui->m_register->update(); 0114 0115 d->ui->m_register->setFocus(); 0116 0117 return QDialog::exec(); 0118 } 0119 0120 void KSelectTransactionsDlg::slotHelp() 0121 { 0122 // KHelpClient::invokeHelp("details.ledgers.match"); 0123 } 0124 0125 void KSelectTransactionsDlg::showEvent(QShowEvent* event) 0126 { 0127 Q_D(KSelectTransactionsDlg); 0128 QDialog::showEvent(event); 0129 d->ui->m_register->resize((int)eWidgets::eTransaction::Column::Detail, true); 0130 } 0131 0132 void KSelectTransactionsDlg::resizeEvent(QResizeEvent* ev) 0133 { 0134 Q_D(KSelectTransactionsDlg); 0135 // don't forget the resizer 0136 QDialog::resizeEvent(ev); 0137 0138 // resize the register 0139 d->ui->m_register->resize((int)eWidgets::eTransaction::Column::Detail, true); 0140 } 0141 0142 MyMoneyTransaction KSelectTransactionsDlg::transaction() const 0143 { 0144 Q_D(const KSelectTransactionsDlg); 0145 MyMoneyTransaction t; 0146 0147 QList<KMyMoneyRegister::RegisterItem*> list; 0148 list = d->ui->m_register->selectedItems(); 0149 if (list.count()) { 0150 if (auto _t = dynamic_cast<KMyMoneyRegister::Transaction*>(list[0])) 0151 t = _t->transaction(); 0152 } 0153 return t; 0154 } 0155 0156 KMyMoneyRegister::Register* KSelectTransactionsDlg::getRegister() 0157 { 0158 Q_D(KSelectTransactionsDlg); 0159 return d->ui->m_register; 0160 } 0161 0162 bool KSelectTransactionsDlg::eventFilter(QObject* o, QEvent* e) 0163 { 0164 Q_D(KSelectTransactionsDlg); 0165 auto rc = false; 0166 0167 if (o == d->ui->m_register) { 0168 switch (e->type()) { 0169 case QEvent::KeyPress: 0170 if (auto k = dynamic_cast<QKeyEvent*>(e)) { 0171 if ((k->modifiers() & Qt::KeyboardModifierMask) == 0 0172 || (k->modifiers() & Qt::KeypadModifier) != 0) { 0173 switch (k->key()) { 0174 case Qt::Key_Return: 0175 case Qt::Key_Enter: 0176 if (d->ui->buttonBox->button(QDialogButtonBox::Ok)->isEnabled()) { 0177 accept(); 0178 rc = true; 0179 } 0180 // tricky fall through here 0181 default: 0182 break; 0183 } 0184 } 0185 } 0186 // tricky fall through here 0187 default: 0188 break; 0189 } 0190 } 0191 return rc; 0192 }