diff --git a/src/ReceiveWidget.cpp b/src/ReceiveWidget.cpp index fff9e979..9527c0e1 100644 --- a/src/ReceiveWidget.cpp +++ b/src/ReceiveWidget.cpp @@ -4,6 +4,7 @@ #include "ReceiveWidget.h" #include "ui_ReceiveWidget.h" +#include #include #include "dialog/PaymentRequestDialog.h" @@ -80,6 +81,7 @@ ReceiveWidget::ReceiveWidget(Wallet *wallet, QWidget *parent) connect(ui->btn_generateSubaddress, &QPushButton::clicked, this, &ReceiveWidget::generateSubaddress); connect(ui->btn_createPaymentRequest, &QPushButton::clicked, this, &ReceiveWidget::createPaymentRequest); + connect(ui->btn_exportSubAddresses, &QPushButton::clicked, this, &ReceiveWidget::exportSubaddresses); } void ReceiveWidget::addOption(QMenu *menu, const QString &text, Config::ConfigKey key, const std::function& func) { @@ -220,9 +222,39 @@ void ReceiveWidget::showOnDevice() { } void ReceiveWidget::generateSubaddress() { - bool r = m_wallet->subaddress()->addRow(m_wallet->currentSubaddressAccount(), ""); - if (!r) { - Utils::showError(this, "Failed to generate subaddress", m_wallet->subaddress()->getError()); + int numSubaddressesToGenerate = ui->spn_numBatchSubaddresses->value(); + + for (int subAddressIndex = 0; subAddressIndex < numSubaddressesToGenerate; subAddressIndex++) { + bool r = m_wallet->subaddress()->addRow(m_wallet->currentSubaddressAccount(), ""); + if (!r) { + Utils::showError(this, "Failed to generate subaddress", m_wallet->subaddress()->getError()); + + //Stop the loop on first error, to prevent multiple errors if we batch create more than 1 address. + subAddressIndex = numSubaddressesToGenerate; + } + } +} + +void ReceiveWidget::exportSubaddresses() { + QFileDialog exportAddressesdialog; + exportAddressesdialog.setAcceptMode(QFileDialog::AcceptSave); + exportAddressesdialog.setDirectory("."); + exportAddressesdialog.selectFile("Addresses.txt"); + + if (exportAddressesdialog.exec()) { + QString fileName = exportAddressesdialog.selectedFiles().first(); + QFile file(fileName); + + if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + Utils::showError(this, "Failed to export subaddress", "Could not export subaddresses to file."); + } + + QTextStream stream(&file); + for (int i = 0; i < m_wallet->numSubaddresses(m_wallet->currentSubaddressAccount()); i++) { + QString address = this->getAddress(i); + stream << address << "\n"; + } + file.close(); } } @@ -263,4 +295,4 @@ SubaddressRow* ReceiveWidget::currentEntry() { } } -ReceiveWidget::~ReceiveWidget() = default; \ No newline at end of file +ReceiveWidget::~ReceiveWidget() = default; diff --git a/src/ReceiveWidget.h b/src/ReceiveWidget.h index cb60040f..f2130630 100644 --- a/src/ReceiveWidget.h +++ b/src/ReceiveWidget.h @@ -46,6 +46,7 @@ private slots: void showHeaderMenu(const QPoint& position); void showOnDevice(); void generateSubaddress(); + void exportSubaddresses(); private: QScopedPointer ui; diff --git a/src/ReceiveWidget.ui b/src/ReceiveWidget.ui index ab25a11a..d1e347a4 100644 --- a/src/ReceiveWidget.ui +++ b/src/ReceiveWidget.ui @@ -127,6 +127,19 @@ + + + + Number of addresses to generate. + + + 1 + + + 1000 + + + @@ -134,6 +147,13 @@ + + + + Export addresses + + +