File indexing completed on 2024-05-12 16:43:52
0001 /* 0002 SPDX-FileCopyrightText: 2015 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "ledgerviewpage.h" 0007 #include "mymoneyaccount.h" 0008 0009 // ---------------------------------------------------------------------------- 0010 // QT Includes 0011 0012 // ---------------------------------------------------------------------------- 0013 // KDE Includes 0014 0015 // ---------------------------------------------------------------------------- 0016 // Project Includes 0017 0018 #include "newtransactionform.h" 0019 #include "models.h" 0020 #include "ledgermodel.h" 0021 #include "ui_ledgerviewpage.h" 0022 #include "mymoneyenums.h" 0023 0024 class LedgerViewPage::Private 0025 { 0026 public: 0027 Private(QWidget* parent) 0028 : ui(new Ui_LedgerViewPage) 0029 , form(0) 0030 { 0031 ui->setupUi(parent); 0032 0033 // make sure, we can disable the detail form but not the ledger view 0034 ui->splitter->setCollapsible(0, false); 0035 ui->splitter->setCollapsible(1, true); 0036 0037 // make sure the ledger gets all the stretching 0038 ui->splitter->setStretchFactor(0, 3); 0039 ui->splitter->setStretchFactor(1, 1); 0040 ui->splitter->setSizes(QList<int>() << 10000 << ui->formWidget->sizeHint().height()); 0041 } 0042 0043 ~Private() 0044 { 0045 delete ui; 0046 } 0047 0048 Ui_LedgerViewPage* ui; 0049 NewTransactionForm* form; 0050 QSet<QString> hideFormReasons; 0051 }; 0052 0053 LedgerViewPage::LedgerViewPage(QWidget* parent) 0054 : QWidget(parent) 0055 , d(new Private(this)) 0056 { 0057 connect(d->ui->ledgerView, &LedgerView::transactionSelected, this, &LedgerViewPage::transactionSelected); 0058 connect(d->ui->ledgerView, &LedgerView::aboutToStartEdit, this, &LedgerViewPage::aboutToStartEdit); 0059 connect(d->ui->ledgerView, &LedgerView::aboutToFinishEdit, this, &LedgerViewPage::aboutToFinishEdit); 0060 connect(d->ui->ledgerView, &LedgerView::aboutToStartEdit, this, &LedgerViewPage::startEdit); 0061 connect(d->ui->ledgerView, &LedgerView::aboutToFinishEdit, this, &LedgerViewPage::finishEdit); 0062 connect(d->ui->splitter, &QSplitter::splitterMoved, this, &LedgerViewPage::splitterChanged); 0063 } 0064 0065 LedgerViewPage::~LedgerViewPage() 0066 { 0067 delete d; 0068 } 0069 0070 QString LedgerViewPage::accountId() const 0071 { 0072 return d->ui->ledgerView->accountId(); 0073 } 0074 0075 void LedgerViewPage::setAccount(const MyMoneyAccount& acc) 0076 { 0077 // get rid of current form 0078 delete d->form; 0079 d->form = 0; 0080 d->hideFormReasons.insert(QLatin1String("FormAvailable")); 0081 0082 switch(acc.accountType()) { 0083 case eMyMoney::Account::Type::Investment: 0084 break; 0085 0086 default: 0087 d->form = new NewTransactionForm(d->ui->formWidget); 0088 break; 0089 } 0090 0091 if(d->form) { 0092 d->hideFormReasons.remove(QLatin1String("FormAvailable")); 0093 // make sure we have a layout 0094 if(!d->ui->formWidget->layout()) { 0095 d->ui->formWidget->setLayout(new QHBoxLayout(d->ui->formWidget)); 0096 } 0097 d->ui->formWidget->layout()->addWidget(d->form); 0098 connect(d->ui->ledgerView, &LedgerView::transactionSelected, 0099 d->form, &NewTransactionForm::showTransaction); 0100 connect(Models::instance()->ledgerModel(), &LedgerModel::dataChanged, 0101 d->form, &NewTransactionForm::modelDataChanged); 0102 } 0103 d->ui->formWidget->setVisible(d->hideFormReasons.isEmpty()); 0104 d->ui->ledgerView->setAccount(acc); 0105 } 0106 0107 void LedgerViewPage::showTransactionForm(bool show) 0108 { 0109 if(show) { 0110 d->hideFormReasons.remove(QLatin1String("General")); 0111 } else { 0112 d->hideFormReasons.insert(QLatin1String("General")); 0113 } 0114 d->ui->formWidget->setVisible(d->hideFormReasons.isEmpty()); 0115 } 0116 0117 void LedgerViewPage::startEdit() 0118 { 0119 d->hideFormReasons.insert(QLatin1String("Edit")); 0120 d->ui->formWidget->hide(); 0121 } 0122 0123 void LedgerViewPage::finishEdit() 0124 { 0125 d->hideFormReasons.remove(QLatin1String("Edit")); 0126 d->ui->formWidget->setVisible(d->hideFormReasons.isEmpty()); 0127 // the focus should be on the ledger view once editing ends 0128 d->ui->ledgerView->setFocus(); 0129 } 0130 0131 void LedgerViewPage::splitterChanged(int pos, int index) 0132 { 0133 Q_UNUSED(pos); 0134 Q_UNUSED(index); 0135 0136 d->ui->ledgerView->ensureCurrentItemIsVisible(); 0137 } 0138 0139 void LedgerViewPage::setShowEntryForNewTransaction(bool show) 0140 { 0141 d->ui->ledgerView->setShowEntryForNewTransaction(show); 0142 }