From: tobtoht Date: Tue, 4 Mar 2025 12:48:46 +0000 (+0100) Subject: PaymentRequest: add fiat conversion X-Git-Url: https://git.nutra.tk/v2?a=commitdiff_plain;h=8f3205d632781da3ef60804b98afe78920863d6d;p=gamesguru%2Ffeather.git PaymentRequest: add fiat conversion --- diff --git a/src/dialog/PaymentRequestDialog.cpp b/src/dialog/PaymentRequestDialog.cpp index c95014db..9f4527de 100644 --- a/src/dialog/PaymentRequestDialog.cpp +++ b/src/dialog/PaymentRequestDialog.cpp @@ -10,6 +10,8 @@ #include #include "WalletManager.h" +#include "utils/AppData.h" +#include "utils/config.h" #include "utils/Utils.h" PaymentRequestDialog::PaymentRequestDialog(QWidget *parent, Wallet *wallet, QString address) @@ -24,9 +26,17 @@ PaymentRequestDialog::PaymentRequestDialog(QWidget *parent, Wallet *wallet, QStr QRegularExpression rx; rx.setPattern(amount_rx); QValidator *validator = new QRegularExpressionValidator(rx, this); - ui->line_amountXMR->setValidator(validator); + ui->line_amount->setValidator(validator); + + connect(ui->line_amount, &QLineEdit::textEdited, [this] (const QString &text){ + this->calculateFiat(); + this->updatePaymentRequest(); + }); + connect(ui->line_amountFiat, &QLineEdit::textEdited, [this](const QString &text) { + this->calculateCrypto(); + this->updatePaymentRequest(); + }); - connect(ui->line_amountXMR, &QLineEdit::textChanged, this, &PaymentRequestDialog::updatePaymentRequest); connect(ui->line_description, &QLineEdit::textChanged, this, &PaymentRequestDialog::updatePaymentRequest); connect(ui->line_recipient, &QLineEdit::textChanged, this, &PaymentRequestDialog::updatePaymentRequest); @@ -34,9 +44,26 @@ PaymentRequestDialog::PaymentRequestDialog(QWidget *parent, Wallet *wallet, QStr connect(ui->btn_copyImage, &QPushButton::clicked, this, &PaymentRequestDialog::copyImage); connect(ui->btn_saveImage, &QPushButton::clicked, this, &PaymentRequestDialog::saveImage); + QString preferredFiatCurrency = conf()->get(Config::preferredFiatCurrency).toString(); + QStringList fiatSymbols = conf()->get(Config::fiatSymbols).toStringList(); + if (fiatSymbols.contains(preferredFiatCurrency)) { + fiatSymbols.removeAll(preferredFiatCurrency); + } + + ui->comboCurrency->addItem(preferredFiatCurrency); + ui->comboCurrency->addItems(fiatSymbols); + ui->comboCurrency->setCurrentIndex(0); + connect(ui->comboCurrency, &QComboBox::currentIndexChanged, [this] (int index){ + calculateFiat(); + }); + + if (conf()->get(Config::disableWebsocket).toBool()) { + ui->frame_fiat->hide(); + } + this->updatePaymentRequest(); - ui->line_amountXMR->setFocus(); + ui->line_amount->setFocus(); this->adjustSize(); } @@ -44,7 +71,7 @@ PaymentRequestDialog::PaymentRequestDialog(QWidget *parent, Wallet *wallet, QStr void PaymentRequestDialog::updatePaymentRequest() { QString description = ui->line_description->text(); QString recipient = ui->line_recipient->text(); - quint64 amount = WalletManager::amountFromString(ui->line_amountXMR->text()); + quint64 amount = WalletManager::amountFromString(ui->line_amount->text()); QString uri = m_wallet->make_uri(m_address, amount, description, recipient); @@ -58,6 +85,22 @@ void PaymentRequestDialog::updatePaymentRequest() { } } +void PaymentRequestDialog::calculateCrypto() { + QString fiatCurrency = ui->comboCurrency->currentText(); + QString fiatAmount = ui->line_amountFiat->text(); + + double cryptoAmount = appData()->prices.convert(fiatCurrency, "XMR", fiatAmount.toDouble()); + ui->line_amount->setText(QString::number(cryptoAmount, 'f', 10)); +} + +void PaymentRequestDialog::calculateFiat() { + QString fiatCurrency = ui->comboCurrency->currentText(); + QString cryptoAmount = ui->line_amount->text(); + + double fiatAmount = appData()->prices.convert("XMR", fiatCurrency, cryptoAmount.toDouble()); + ui->line_amountFiat->setText(QString::number(fiatAmount, 'f', 2)); +} + void PaymentRequestDialog::copyLink() { Utils::copyToClipboard(ui->line_paymentRequestUri->text()); QMessageBox::information(this, "Information", "Payment request link copied to clipboard."); @@ -80,4 +123,4 @@ void PaymentRequestDialog::saveImage() { QMessageBox::information(this, "Information", "QR code saved to file"); } -PaymentRequestDialog::~PaymentRequestDialog() = default; \ No newline at end of file +PaymentRequestDialog::~PaymentRequestDialog() = default; diff --git a/src/dialog/PaymentRequestDialog.h b/src/dialog/PaymentRequestDialog.h index 57508006..1e35bc15 100644 --- a/src/dialog/PaymentRequestDialog.h +++ b/src/dialog/PaymentRequestDialog.h @@ -28,6 +28,9 @@ private slots: void copyImage(); void saveImage(); + void calculateCrypto(); + void calculateFiat(); + private: QScopedPointer ui; Wallet *m_wallet; diff --git a/src/dialog/PaymentRequestDialog.ui b/src/dialog/PaymentRequestDialog.ui index 5b4dac23..60fc7160 100644 --- a/src/dialog/PaymentRequestDialog.ui +++ b/src/dialog/PaymentRequestDialog.ui @@ -34,7 +34,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -52,7 +52,7 @@ - + 0 @@ -71,7 +71,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -85,26 +85,94 @@ - + Description: - + - + Your name: - + + + + + + + + + + + + + + QFrame::Shape::NoFrame + + + QFrame::Shadow::Sunken + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + @@ -133,7 +201,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -146,10 +214,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Close + QDialogButtonBox::StandardButton::Close