From c4ca4708f96c85300ce508349911cd4866f28deb Mon Sep 17 00:00:00 2001 From: levonpetrosyan93 Date: Mon, 8 Apr 2024 05:01:10 +0400 Subject: [PATCH] Strip RAP addresses page --- src/Makefile.qt.include | 6 +- src/qt/bitcoingui.cpp | 31 +--- src/qt/bitcoingui.h | 5 - src/qt/createpcodedialog.cpp | 237 ---------------------------- src/qt/createpcodedialog.h | 80 ---------- src/qt/forms/createpcodedialog.ui | 253 ------------------------------ src/qt/walletframe.cpp | 7 - src/qt/walletframe.h | 1 - src/qt/walletview.cpp | 9 -- src/qt/walletview.h | 3 - 10 files changed, 2 insertions(+), 630 deletions(-) delete mode 100644 src/qt/createpcodedialog.cpp delete mode 100644 src/qt/createpcodedialog.h delete mode 100644 src/qt/forms/createpcodedialog.ui diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index a7dd455242..ac6c08c3be 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -119,8 +119,7 @@ QT_FORMS_UI = \ qt/forms/sendtopcodedialog.ui \ qt/forms/signverifymessagedialog.ui \ qt/forms/transactiondescdialog.ui \ - qt/forms/lelantusdialog.ui \ - qt/forms/createpcodedialog.ui + qt/forms/lelantusdialog.ui QT_MOC_CPP = \ qt/moc_addressbookpage.cpp \ @@ -139,7 +138,6 @@ QT_MOC_CPP = \ qt/moc_manualmintdialog.cpp \ qt/moc_coincontroltreewidget.cpp \ qt/moc_csvmodelwriter.cpp \ - qt/moc_createpcodedialog.cpp \ qt/moc_editaddressdialog.cpp \ qt/moc_guiutil.cpp \ qt/moc_intro.cpp \ @@ -215,7 +213,6 @@ BITCOIN_QT_H = \ qt/cancelpassworddialog.h \ qt/clientmodel.h \ qt/coincontroldialog.h \ - qt/createpcodedialog.h \ qt/manualmintdialog.h \ qt/coincontroltreewidget.h \ qt/csvmodelwriter.h \ @@ -429,7 +426,6 @@ BITCOIN_QT_WALLET_CPP = \ qt/askpassphrasedialog.cpp \ qt/coincontroldialog.cpp \ qt/coincontroltreewidget.cpp \ - qt/createpcodedialog.cpp \ qt/editaddressdialog.cpp \ qt/manualmintdialog.cpp \ qt/openuridialog.cpp \ diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index b1ac1c059c..cf304dd1c5 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -122,7 +122,6 @@ BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle * showHelpMessageAction(0), lelantusAction(0), masternodeAction(0), - createPcodeAction(0), logoAction(0), trayIcon(0), trayIconMenu(0), @@ -366,13 +365,6 @@ void BitcoinGUI::createActions() tabGroup->addAction(masternodeAction); #endif - createPcodeAction = new QAction(tr("RA&P addresses"), this); - createPcodeAction->setStatusTip(tr("Create RAP addresses (BIP47 payment codes)")); - createPcodeAction->setToolTip(createPcodeAction->statusTip()); - createPcodeAction->setCheckable(true); - createPcodeAction->setShortcut(QKeySequence(Qt::ALT + key++)); - tabGroup->addAction(createPcodeAction); - #ifdef ENABLE_WALLET connect(masternodeAction, &QAction::triggered, [this]{ showNormalIfMinimized(); }); connect(masternodeAction, &QAction::triggered, this, &BitcoinGUI::gotoMasternodePage); @@ -390,7 +382,6 @@ void BitcoinGUI::createActions() connect(historyAction, &QAction::triggered, this, &BitcoinGUI::gotoHistoryPage); connect(lelantusAction, &QAction::triggered, this, &BitcoinGUI::gotoLelantusPage); - connect(createPcodeAction, &QAction::triggered, this, &BitcoinGUI::gotoCreatePcodePage); #endif // ENABLE_WALLET quitAction = new QAction(tr("E&xit"), this); @@ -530,8 +521,7 @@ void BitcoinGUI::createToolBars() toolbar->addAction(historyAction); toolbar->addAction(lelantusAction); toolbar->addAction(masternodeAction); - toolbar->addAction(createPcodeAction); - + QLabel *logoLabel = new QLabel(); logoLabel->setObjectName("lblToolbarLogo"); logoLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); @@ -592,10 +582,6 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel) // update lelantus page if option is changed. connect(optionsModel, &OptionsModel::lelantusPageChanged, this, &BitcoinGUI::updateLelantusPage); - // update RAP Addresses page if option is changed. - connect(optionsModel, &OptionsModel::enableRapAddressesChanged, this, &BitcoinGUI::setRapAddressesVisible); - createPcodeAction->setVisible(optionsModel->getRapAddresses()); - // initialize the disable state of the tray icon with the current value in the model. setTrayIconVisible(optionsModel->getHideTrayIcon()); } @@ -658,7 +644,6 @@ void BitcoinGUI::setWalletActionsEnabled(bool enabled) sendCoinsMenuAction->setEnabled(enabled); receiveCoinsAction->setEnabled(enabled); receiveCoinsMenuAction->setEnabled(enabled); - createPcodeAction->setEnabled(enabled); historyAction->setEnabled(enabled); lelantusAction->setEnabled(enabled); masternodeAction->setEnabled(enabled); @@ -810,12 +795,6 @@ void BitcoinGUI::gotoReceiveCoinsPage() if (walletFrame) walletFrame->gotoReceiveCoinsPage(); } -void BitcoinGUI::gotoCreatePcodePage() -{ - createPcodeAction->setChecked(true); - if (walletFrame) walletFrame->gotoCreatePcodePage(); -} - void BitcoinGUI::gotoSendCoinsPage(QString addr) { sendCoinsAction->setChecked(true); @@ -1349,14 +1328,6 @@ void BitcoinGUI::updateLelantusPage() checkLelantusVisibility(blocks); } -void BitcoinGUI::setRapAddressesVisible(bool checked) -{ -#ifdef ENABLE_WALLET - gotoOverviewPage(); -#endif // ENABLE_WALLET - createPcodeAction->setVisible(checked); -} - static bool ThreadSafeMessageBox(BitcoinGUI *gui, const std::string& message, const std::string& caption, unsigned int style) { bool modal = (style & CClientUIInterface::MODAL); diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index 514b0f3501..a2e6b1c5fd 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -120,7 +120,6 @@ class BitcoinGUI : public QMainWindow QAction *showHelpMessageAction; QAction *lelantusAction; QAction *masternodeAction; - QAction *createPcodeAction; QAction *logoAction; QSystemTrayIcon *trayIcon; @@ -218,8 +217,6 @@ public Q_SLOTS: void gotoMasternodePage(); /** Switch to receive coins page */ void gotoReceiveCoinsPage(); - /** Switch to create payment code page */ - void gotoCreatePcodePage(); /** Switch to send coins page */ void gotoSendCoinsPage(QString addr = ""); /** Switch to lelantus page */ @@ -275,8 +272,6 @@ public Q_SLOTS: /** Update Lelantus page visibility */ void updateLelantusPage(); - /** Update RAP Addresses page visibility */ - void setRapAddressesVisible(bool); }; class UnitDisplayStatusBarControl : public QLabel diff --git a/src/qt/createpcodedialog.cpp b/src/qt/createpcodedialog.cpp deleted file mode 100644 index 852fe864a5..0000000000 --- a/src/qt/createpcodedialog.cpp +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (c) 2019-2021 The Firo Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "createpcodedialog.h" -#include "ui_createpcodedialog.h" - -#include "addressbookpage.h" -#include "addresstablemodel.h" -#include "bitcoinunits.h" -#include "guiutil.h" -#include "optionsmodel.h" -#include "platformstyle.h" -#include "receiverequestdialog.h" -#include "recentrequeststablemodel.h" -#include "walletmodel.h" -#include "pcodemodel.h" - -#include -#include -#include -#include -#include -#include - -CreatePcodeDialog::CreatePcodeDialog(const PlatformStyle *_platformStyle, QWidget *parent) : - QDialog(parent), - ui(new Ui::CreatePcodeDialog), - model(0), - platformStyle(_platformStyle) -{ - ui->setupUi(this); - - if (!_platformStyle->getImagesOnButtons()) { - ui->clearButton->setIcon(QIcon()); - ui->createPcodeButton->setIcon(QIcon()); - } else { - ui->clearButton->setIcon(_platformStyle->SingleColorIcon(":/icons/remove")); - ui->createPcodeButton->setIcon(_platformStyle->SingleColorIcon(":/icons/paymentcode")); - } - - // context menu actions - QAction *copyPcodeAction = new QAction(tr("Copy RAP Address"), this); - QAction *copyNotificationAddrAction = new QAction(tr("Copy Notification Address"), this); - QAction *showQrcodeAction = new QAction(tr("Show QR Code"), this); - - // context menu - contextMenu = new QMenu(this); - contextMenu->addAction(copyPcodeAction); - contextMenu->addAction(copyNotificationAddrAction); - contextMenu->addAction(showQrcodeAction); - - // context menu signals - connect(ui->pcodesView, &QWidget::customContextMenuRequested, this, &CreatePcodeDialog::showMenu); - connect(copyPcodeAction, &QAction::triggered, this, &CreatePcodeDialog::copyPcode); - connect(copyNotificationAddrAction, &QAction::triggered, this, &CreatePcodeDialog::copyNotificationAddr); - connect(showQrcodeAction, &QAction::triggered, this, &CreatePcodeDialog::showQrcode); - - connect(ui->clearButton, &QPushButton::clicked, this, &CreatePcodeDialog::clear); - - ui->statusLabel->setStyleSheet("QLabel { color: " + QColor(GUIUtil::GUIColors::warning).name() + "; }"); -} - -void CreatePcodeDialog::setModel(WalletModel *_model) -{ - model = _model; - - if(_model && _model->getOptionsModel()) - { - _model->getPcodeModel()->sort(int(PcodeModel::ColumnIndex::Number), Qt::DescendingOrder); - - QTableView* tableView = ui->pcodesView; - - tableView->verticalHeader()->hide(); - tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - tableView->setModel(_model->getPcodeModel()); - tableView->setAlternatingRowColors(true); - tableView->setSelectionBehavior(QAbstractItemView::SelectRows); - tableView->setSelectionMode(QAbstractItemView::ContiguousSelection); - tableView->setColumnWidth(static_cast(PcodeModel::ColumnIndex::Number), static_cast(ColumnWidths::Number)); - tableView->setColumnWidth(static_cast(PcodeModel::ColumnIndex::Pcode), static_cast(ColumnWidths::Pcode)); - tableView->setItemDelegateForColumn(int(PcodeModel::ColumnIndex::Pcode), new GUIUtil::TextElideStyledItemDelegate(tableView)); - connect(tableView->selectionModel(), &QItemSelectionModel::selectionChanged, - this, &CreatePcodeDialog::pcodesView_selectionChanged); - - ui->createPcodeButton->setEnabled(false); - ui->statusLabel->setText(tr("The label should not be empty.")); - } -} - -CreatePcodeDialog::~CreatePcodeDialog() -{ - delete ui; -} - -void CreatePcodeDialog::clear() -{ - ui->labelText->setText(""); -} - -void CreatePcodeDialog::reject() -{ - clear(); -} - -void CreatePcodeDialog::accept() -{ - clear(); -} - -void CreatePcodeDialog::on_createPcodeButton_clicked() -{ - WalletModel::UnlockContext ctx(model->requestUnlock()); - if(!ctx.isValid()) return; - try { - model->getWallet()->GeneratePcode(ui->labelText->text().toStdString()); - } - catch (std::runtime_error const & e) - { - QMessageBox::critical(0, tr(PACKAGE_NAME), - tr("RAP address creation failed with error: \"%1\"").arg(e.what())); - } - on_labelText_textChanged(); -} - -void CreatePcodeDialog::on_labelText_textChanged() -{ - QString status = ""; - if (ui->labelText->text().size() == 0) - status = tr("The label should not be empty."); - for (bip47::CPaymentCodeDescription const & desr : model->getPcodeModel()->getItems()) { - if (std::get<2>(desr) == ui->labelText->text().toStdString()) - status = tr("The label should be unique."); - } - ui->statusLabel->setText(status); - ui->createPcodeButton->setEnabled(status.size() == 0); -} - -void CreatePcodeDialog::on_pcodesView_doubleClicked(const QModelIndex &index) -{ - if(index.column() == int(PcodeModel::ColumnIndex::Label)) - { - ui->pcodesView->edit(index); - return; - } - showQrcode(); -} - -void CreatePcodeDialog::on_showPcodeButton_clicked() -{ - showQrcode(); -} - -void CreatePcodeDialog::pcodesView_selectionChanged(QItemSelection const & selected, QItemSelection const & deselected) -{ - bool const enable = !ui->pcodesView->selectionModel()->selectedRows().isEmpty(); - ui->showPcodeButton->setEnabled(enable); -} - -void CreatePcodeDialog::keyPressEvent(QKeyEvent *event) -{ - if (event->key() == Qt::Key_Return) - { - // press return -> submit form - if (ui->labelText->hasFocus()) - { - event->ignore(); - on_createPcodeButton_clicked(); - return; - } - } - - this->QDialog::keyPressEvent(event); -} - -QModelIndex CreatePcodeDialog::selectedRow() -{ - if(!model || !model->getRecentRequestsTableModel() || !ui->pcodesView->selectionModel()) - return QModelIndex(); - QModelIndexList selection = ui->pcodesView->selectionModel()->selectedRows(); - if(selection.empty()) - return QModelIndex(); - // correct for selection mode ContiguousSelection - QModelIndex firstIndex = selection.at(0); - return firstIndex; -} - -// copy column of selected row to clipboard -void CreatePcodeDialog::copyColumnToClipboard(int column) -{ - QModelIndex firstIndex = selectedRow(); - if (!firstIndex.isValid()) { - return; - } - GUIUtil::setClipboard(model->getRecentRequestsTableModel()->data(firstIndex.child(firstIndex.row(), column), Qt::EditRole).toString()); -} - -// context menu -void CreatePcodeDialog::showMenu(const QPoint &point) -{ - if (!selectedRow().isValid()) { - return; - } - contextMenu->exec(QCursor::pos()); -} - -void CreatePcodeDialog::copyPcode() -{ - QModelIndex sel = selectedRow(); - if (!sel.isValid()) { - return; - } - GUIUtil::setClipboard(std::get<1>(model->getPcodeModel()->getItems().at(sel.row())).toString().c_str()); -} - -void CreatePcodeDialog::copyNotificationAddr() -{ - QModelIndex sel = selectedRow(); - if (!sel.isValid()) { - return; - } - GUIUtil::setClipboard(std::get<3>(model->getPcodeModel()->getItems().at(sel.row())).ToString().c_str()); -} - -void CreatePcodeDialog::showQrcode() -{ - QModelIndex sel = selectedRow(); - if (!sel.isValid()) { - return; - } - recipient.address = QString(std::get<1>(model->getPcodeModel()->getItems().at(sel.row())).toString().c_str()); - ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this); - dialog->setModel(model->getOptionsModel()); - dialog->setInfo(recipient); - dialog->setAttribute(Qt::WA_DeleteOnClose); - dialog->show(); -} diff --git a/src/qt/createpcodedialog.h b/src/qt/createpcodedialog.h deleted file mode 100644 index b41feec761..0000000000 --- a/src/qt/createpcodedialog.h +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) 2019-2021 The Firo Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#ifndef BITCOIN_QT_CREATEPCODEDIALOG_H -#define BITCOIN_QT_CREATEPCODEDIALOG_H - -#include "guiutil.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "walletmodel.h" -#include "bip47/paymentcode.h" - -class OptionsModel; -class PlatformStyle; -class WalletModel; - -namespace Ui { - class CreatePcodeDialog; -} - -QT_BEGIN_NAMESPACE -class QModelIndex; -QT_END_NAMESPACE - -/** Dialog for requesting payment of bitcoins */ -class CreatePcodeDialog : public QDialog -{ - Q_OBJECT - -public: - enum struct ColumnWidths : int { - Number = 80, - Label = 180, - Pcode = 180 - }; - - explicit CreatePcodeDialog(const PlatformStyle *platformStyle, QWidget *parent = 0); - ~CreatePcodeDialog(); - - void setModel(WalletModel *model); - -public Q_SLOTS: - void clear(); - void reject(); - void accept(); - -protected: - virtual void keyPressEvent(QKeyEvent *event); - -private: - Ui::CreatePcodeDialog *ui; - WalletModel *model; - QMenu *contextMenu; - const PlatformStyle *platformStyle; - SendCoinsRecipient recipient; - - QModelIndex selectedRow(); - void copyColumnToClipboard(int column); - -private Q_SLOTS: - void on_createPcodeButton_clicked(); - void on_labelText_textChanged(); - void on_pcodesView_doubleClicked(const QModelIndex &index); - void pcodesView_selectionChanged(QItemSelection const & selected, QItemSelection const & deselected); - void on_showPcodeButton_clicked(); - void showMenu(const QPoint &point); - void copyPcode(); - void copyNotificationAddr(); - void showQrcode(); -}; - -#endif // BITCOIN_QT_CREATEPCODEDIALOG_H diff --git a/src/qt/forms/createpcodedialog.ui b/src/qt/forms/createpcodedialog.ui deleted file mode 100644 index db9d343f8c..0000000000 --- a/src/qt/forms/createpcodedialog.ui +++ /dev/null @@ -1,253 +0,0 @@ - - - CreatePcodeDialog - - - - 0 - 0 - 776 - 364 - - - - - - - - 0 - 0 - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - - - - - - - 0 - 0 - - - - <html><head/><body><p>Use this form to create a Receiver Address Privacy (BIP47) payment code.</p></body></html> - - - - - - - An optional label to associate with the new receiving address. - - - &Label: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - labelText - - - - - - - - - - 150 - 0 - - - - C&reate payment code - - - - - - - - 0 - 0 - - - - Clear all fields of the form. - - - Clear - - - false - - - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 10 - 20 - - - - - - - - - 0 - 0 - - - - statusLabel - - - - - - - - - - - - - - - - A mandatory label to associate with the new payment code. - - - - - - - - - - - - Qt::Vertical - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - 75 - true - - - - Recent payment codes - - - - - - - Qt::CustomContextMenu - - - Double click on Label to edit, on other columns for more info - - - false - - - true - - - - - - - - - false - - - Show more info on the selected payment code (does the same as double clicking an entry) - - - Show - - - false - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - labelText - createPcodeButton - clearButton - pcodesView - showPcodeButton - - - - - - - slot1() - - diff --git a/src/qt/walletframe.cpp b/src/qt/walletframe.cpp index 21cf5b0302..06ca9a2868 100644 --- a/src/qt/walletframe.cpp +++ b/src/qt/walletframe.cpp @@ -146,13 +146,6 @@ void WalletFrame::gotoReceiveCoinsPage() i.value()->gotoReceiveCoinsPage(); } -void WalletFrame::gotoCreatePcodePage() -{ - QMap::const_iterator i; - for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) - i.value()->gotoCreatePcodePage(); -} - void WalletFrame::gotoSendCoinsPage(QString addr) { QMap::const_iterator i; diff --git a/src/qt/walletframe.h b/src/qt/walletframe.h index 4addb0552b..2c99bd74bd 100644 --- a/src/qt/walletframe.h +++ b/src/qt/walletframe.h @@ -76,7 +76,6 @@ public Q_SLOTS: void gotoMasternodePage(); /** Switch to receive coins page */ void gotoReceiveCoinsPage(); - void gotoCreatePcodePage(); /** Switch to send coins page */ void gotoSendCoinsPage(QString addr = ""); /** Switch to lelantus page */ diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp index abaf8c4871..eb65f9fa6b 100644 --- a/src/qt/walletview.cpp +++ b/src/qt/walletview.cpp @@ -10,7 +10,6 @@ #include "automintmodel.h" #include "bitcoingui.h" #include "clientmodel.h" -#include "createpcodedialog.h" #include "guiutil.h" #include "lelantusdialog.h" #include "lelantusmodel.h" @@ -52,7 +51,6 @@ WalletView::WalletView(const PlatformStyle *_platformStyle, QWidget *parent): overviewPage = new OverviewPage(platformStyle); transactionsPage = new QWidget(this); receiveCoinsPage = new ReceiveCoinsDialog(platformStyle); - createPcodePage = new CreatePcodeDialog(platformStyle); usedSendingAddressesPage = new AddressBookPage(platformStyle, AddressBookPage::ForEditing, AddressBookPage::SendingTab, this); usedReceivingAddressesPage = new AddressBookPage(platformStyle, AddressBookPage::ForEditing, AddressBookPage::ReceivingTab, this, false); lelantusPage = new QWidget(this); @@ -73,7 +71,6 @@ WalletView::WalletView(const PlatformStyle *_platformStyle, QWidget *parent): addWidget(overviewPage); addWidget(transactionsPage); addWidget(receiveCoinsPage); - addWidget(createPcodePage); addWidget(sendCoinsPage); addWidget(lelantusPage); addWidget(masternodeListPage); @@ -200,7 +197,6 @@ void WalletView::setWalletModel(WalletModel *_walletModel) firoTransactionList->setModel(_walletModel); overviewPage->setWalletModel(_walletModel); receiveCoinsPage->setModel(_walletModel); - createPcodePage->setModel(_walletModel); // TODO: fix this //sendCoinsPage->setModel(_walletModel); if (pwalletMain->IsHDSeedAvailable()) { @@ -308,11 +304,6 @@ void WalletView::gotoReceiveCoinsPage() setCurrentWidget(receiveCoinsPage); } -void WalletView::gotoCreatePcodePage() -{ - setCurrentWidget(createPcodePage); -} - void WalletView::gotoLelantusPage() { setCurrentWidget(lelantusPage); diff --git a/src/qt/walletview.h b/src/qt/walletview.h index 4e94074fa0..b0203dd00c 100644 --- a/src/qt/walletview.h +++ b/src/qt/walletview.h @@ -22,7 +22,6 @@ class ClientModel; class OverviewPage; class PlatformStyle; class ReceiveCoinsDialog; -class CreatePcodeDialog; class SendCoinsDialog; class SendCoinsRecipient; class TransactionView; @@ -79,7 +78,6 @@ class WalletView : public QStackedWidget QWidget *transactionsPage; QWidget *smartPropertyPage; ReceiveCoinsDialog *receiveCoinsPage; - CreatePcodeDialog *createPcodePage; AddressBookPage *usedSendingAddressesPage; AddressBookPage *usedReceivingAddressesPage; QWidget *sendCoinsPage; @@ -109,7 +107,6 @@ public Q_SLOTS: void gotoMasternodePage(); /** Switch to receive coins page */ void gotoReceiveCoinsPage(); - void gotoCreatePcodePage(); /** Switch to send coins page */ void gotoSendCoinsPage(QString addr = ""); /** Switch to lelantus page */