File indexing completed on 2024-05-12 16:42:04
0001 /* 0002 SPDX-FileCopyrightText: 2017 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0003 SPDX-FileCopyrightText: 2020 Thomas Baumgart <tbaumgart@kde.org> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kcurrencyeditordlg.h" 0008 0009 // ---------------------------------------------------------------------------- 0010 // QT Includes 0011 0012 #include <QPushButton> 0013 0014 // ---------------------------------------------------------------------------- 0015 // KDE Includes 0016 0017 // ---------------------------------------------------------------------------- 0018 // Project Includes 0019 0020 #include <ui_kcurrencyeditordlg.h> 0021 #include "mymoneymoney.h" 0022 #include "mymoneysecurity.h" 0023 0024 class KCurrencyEditorDlgPrivate 0025 { 0026 public: 0027 KCurrencyEditorDlgPrivate() 0028 : ui(new Ui::KCurrencyEditorDlg) 0029 { 0030 } 0031 0032 ~KCurrencyEditorDlgPrivate() 0033 { 0034 delete ui; 0035 } 0036 0037 void validateValues() 0038 { 0039 // enable the OK button only, if all values are valid 0040 ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); 0041 0042 if (ui->leIsoCode->text().isEmpty() 0043 || ui->leName->text().isEmpty() 0044 || ui->leSymbol->text().isEmpty() 0045 || MyMoneyMoney(ui->leCashFraction->text()).isZero() 0046 || MyMoneyMoney(ui->leCashFraction->text()).isNegative() 0047 || MyMoneyMoney(ui->leAccountFraction->text()).isZero() 0048 || MyMoneyMoney(ui->leAccountFraction->text()).isNegative()) { 0049 ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); 0050 } 0051 } 0052 0053 MyMoneySecurity currency; 0054 Ui::KCurrencyEditorDlg* ui; 0055 }; 0056 0057 KCurrencyEditorDlg::KCurrencyEditorDlg(const MyMoneySecurity& currency, QWidget *parent) 0058 : d_ptr(new KCurrencyEditorDlgPrivate) 0059 { 0060 Q_UNUSED(parent); 0061 Q_D(KCurrencyEditorDlg); 0062 d->currency = currency; 0063 d->ui->setupUi(this); 0064 0065 connect(d->ui->leIsoCode, &QLineEdit::textChanged, this, [&]() { 0066 Q_D(KCurrencyEditorDlg); 0067 d->validateValues(); 0068 }); 0069 connect(d->ui->leName, &QLineEdit::textChanged, this, [&]() { 0070 Q_D(KCurrencyEditorDlg); 0071 d->validateValues(); 0072 }); 0073 connect(d->ui->leSymbol, &QLineEdit::textChanged, this, [&]() { 0074 Q_D(KCurrencyEditorDlg); 0075 d->validateValues(); 0076 }); 0077 connect(d->ui->leCashFraction, &QLineEdit::textChanged, this, [&]() { 0078 Q_D(KCurrencyEditorDlg); 0079 d->validateValues(); 0080 }); 0081 connect(d->ui->leAccountFraction, &QLineEdit::textChanged, this, [&]() { 0082 Q_D(KCurrencyEditorDlg); 0083 d->validateValues(); 0084 }); 0085 0086 // fill the fields 0087 d->ui->leIsoCode->setText(currency.id()); 0088 0089 d->ui->leName->setText(currency.name()); 0090 d->ui->leSymbol->setText(currency.tradingSymbol()); 0091 0092 int precision = MyMoneyMoney::denomToPrec(currency.smallestCashFraction()); 0093 MyMoneyMoney smallestFraction = MyMoneyMoney::ONE / MyMoneyMoney(currency.smallestCashFraction()); 0094 d->ui->leCashFraction->setText(smallestFraction.formatMoney(QString(), precision)); 0095 0096 precision = MyMoneyMoney::denomToPrec(currency.smallestAccountFraction()); 0097 smallestFraction = MyMoneyMoney::ONE / MyMoneyMoney(currency.smallestAccountFraction()); 0098 d->ui->leAccountFraction->setText(smallestFraction.formatMoney(QString(), precision)); 0099 0100 d->ui->comboRoundingMethod->setCurrentIndex(currency.roundingMethod()); 0101 d->ui->spbPricePrecision->setValue(currency.pricePrecision()); 0102 0103 0104 // make those widgets readonly that are not allowed to change 0105 if (!currency.id().isEmpty()) { 0106 d->ui->leIsoCode->setReadOnly(true); 0107 d->ui->leCashFraction->setReadOnly(true); 0108 d->ui->leAccountFraction->setReadOnly(true); 0109 } 0110 0111 d->validateValues(); 0112 } 0113 0114 KCurrencyEditorDlg::~KCurrencyEditorDlg() 0115 { 0116 Q_D(KCurrencyEditorDlg); 0117 delete d; 0118 } 0119 0120 MyMoneySecurity KCurrencyEditorDlg::currency() const 0121 { 0122 Q_D(const KCurrencyEditorDlg); 0123 MyMoneySecurity newCurrency = d->currency; 0124 0125 // if we are creating a new currency, we need to assing the ID 0126 if (d->currency.id().isEmpty()) { 0127 newCurrency = MyMoneySecurity(d->ui->leIsoCode->text(), newCurrency); 0128 } 0129 0130 newCurrency.setName(d->ui->leName->text()); 0131 newCurrency.setTradingSymbol(d->ui->leSymbol->text()); 0132 0133 MyMoneyMoney value(d->ui->leCashFraction->text()); 0134 int fraction = static_cast<int>((MyMoneyMoney::ONE / value).toDouble()); 0135 newCurrency.setSmallestCashFraction(fraction); 0136 0137 value = MyMoneyMoney(d->ui->leAccountFraction->text()); 0138 fraction = static_cast<int>((MyMoneyMoney::ONE / value).toDouble()); 0139 newCurrency.setSmallestAccountFraction(fraction); 0140 0141 newCurrency.setRoundingMethod(static_cast<AlkValue::RoundingMethod>(d->ui->comboRoundingMethod->currentIndex())); 0142 newCurrency.setPricePrecision(d->ui->spbPricePrecision->value()); 0143 return newCurrency; 0144 } 0145