File indexing completed on 2024-05-19 05:06:49
0001 /* 0002 SPDX-FileCopyrightText: 2020 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "amounteditcurrencyhelper.h" 0007 0008 // ---------------------------------------------------------------------------- 0009 // QT Includes 0010 0011 #include <QDebug> 0012 0013 // ---------------------------------------------------------------------------- 0014 // KDE Includes 0015 0016 // ---------------------------------------------------------------------------- 0017 // Project Includes 0018 0019 #include "accountsmodel.h" 0020 #include "amountedit.h" 0021 #include "kmymoneyaccountcombo.h" 0022 #include "multicurrencyedit.h" 0023 #include "mymoneyexception.h" 0024 #include "mymoneyfile.h" 0025 #include "securitiesmodel.h" 0026 0027 class AmountEditCurrencyHelperPrivate 0028 { 0029 Q_DECLARE_PUBLIC(AmountEditCurrencyHelper) 0030 0031 public: 0032 AmountEditCurrencyHelperPrivate(AmountEditCurrencyHelper* qq, MultiCurrencyEdit* aamount) 0033 : q_ptr(qq) 0034 , amount(aamount) 0035 { 0036 } 0037 0038 AmountEditCurrencyHelper* q_ptr; 0039 MultiCurrencyEdit* amount; 0040 QString commodityId; 0041 0042 void init(KMyMoneyAccountCombo* category, const QString& _commodityId) 0043 { 0044 Q_Q(AmountEditCurrencyHelper); 0045 commodityId = _commodityId; 0046 0047 q->connect(category, &KMyMoneyAccountCombo::accountSelected, q, &AmountEditCurrencyHelper::categoryChanged); 0048 0049 q->categoryChanged(category->getSelected()); 0050 } 0051 }; 0052 0053 AmountEditCurrencyHelper::AmountEditCurrencyHelper(KMyMoneyAccountCombo* category, MultiCurrencyEdit* amount, const QString& commodityId) 0054 : QObject(category) 0055 , d_ptr(new AmountEditCurrencyHelperPrivate(this, amount)) 0056 { 0057 Q_D(AmountEditCurrencyHelper); 0058 connect(amount->widget(), &QObject::destroyed, this, &QObject::deleteLater); 0059 connect(this, &AmountEditCurrencyHelper::commodityChanged, this, [&](const MyMoneySecurity& commodity) { 0060 Q_D(AmountEditCurrencyHelper); 0061 d->amount->setSharesCommodity(commodity); 0062 }); 0063 d->init(category, commodityId); 0064 } 0065 0066 AmountEditCurrencyHelper::~AmountEditCurrencyHelper() 0067 { 0068 Q_D(AmountEditCurrencyHelper); 0069 delete d; 0070 } 0071 0072 void AmountEditCurrencyHelper::setCommodity(const QString& commodityId) 0073 { 0074 Q_D(AmountEditCurrencyHelper); 0075 d->commodityId = commodityId; 0076 // update the widget 0077 if (!commodityId.isEmpty()) { 0078 const auto category = qobject_cast<KMyMoneyAccountCombo*>(parent()); 0079 if (category) { 0080 categoryChanged(category->getSelected()); 0081 } 0082 } 0083 } 0084 0085 void AmountEditCurrencyHelper::categoryChanged(const QString& id) 0086 { 0087 Q_D(AmountEditCurrencyHelper); 0088 0089 if (!id.isEmpty()) { 0090 try { 0091 const auto category = MyMoneyFile::instance()->account(id); 0092 const auto security = MyMoneyFile::instance()->security(category.currencyId()); 0093 if (security.id() != d->commodityId) { 0094 if (category.isIncomeExpense()) { 0095 Q_EMIT commodityChanged(security); 0096 } else { 0097 Q_EMIT commodityChanged(MyMoneyFile::instance()->security(d->commodityId)); 0098 } 0099 } 0100 } catch (MyMoneyException&) { 0101 } 0102 } 0103 }