Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 36 additions & 4 deletions src/ReceiveWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "ReceiveWidget.h"
#include "ui_ReceiveWidget.h"

#include <QFileDialog>
#include <QMenu>

#include "dialog/PaymentRequestDialog.h"
Expand Down Expand Up @@ -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<void(bool show)>& func) {
Expand Down Expand Up @@ -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();
}
}

Expand Down Expand Up @@ -263,4 +295,4 @@ SubaddressRow* ReceiveWidget::currentEntry() {
}
}

ReceiveWidget::~ReceiveWidget() = default;
ReceiveWidget::~ReceiveWidget() = default;
1 change: 1 addition & 0 deletions src/ReceiveWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ private slots:
void showHeaderMenu(const QPoint& position);
void showOnDevice();
void generateSubaddress();
void exportSubaddresses();

private:
QScopedPointer<Ui::ReceiveWidget> ui;
Expand Down
20 changes: 20 additions & 0 deletions src/ReceiveWidget.ui
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,33 @@
</property>
</spacer>
</item>
<item>
<widget class="QSpinBox" name="spn_numBatchSubaddresses">
<property name="toolTip">
<string>Number of addresses to generate.</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_generateSubaddress">
<property name="text">
<string>Create new address</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_exportSubAddresses">
<property name="text">
<string>Export addresses</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
Expand Down