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 }