Merge pull request #2452 from Diapolo/Qt_fix_GUI
Bitcoin-Qt: fix GUI after initial multi-wallet patch
This commit is contained in:
commit
7129c6ece1
4 changed files with 42 additions and 142 deletions
|
@ -56,7 +56,7 @@
|
||||||
|
|
||||||
const QString BitcoinGUI::DEFAULT_WALLET = "~Default";
|
const QString BitcoinGUI::DEFAULT_WALLET = "~Default";
|
||||||
|
|
||||||
BitcoinGUI::BitcoinGUI(QWidget *parent):
|
BitcoinGUI::BitcoinGUI(QWidget *parent) :
|
||||||
QMainWindow(parent),
|
QMainWindow(parent),
|
||||||
clientModel(0),
|
clientModel(0),
|
||||||
encryptWalletAction(0),
|
encryptWalletAction(0),
|
||||||
|
@ -221,6 +221,7 @@ void BitcoinGUI::createActions()
|
||||||
optionsAction->setMenuRole(QAction::PreferencesRole);
|
optionsAction->setMenuRole(QAction::PreferencesRole);
|
||||||
toggleHideAction = new QAction(QIcon(":/icons/bitcoin"), tr("&Show / Hide"), this);
|
toggleHideAction = new QAction(QIcon(":/icons/bitcoin"), tr("&Show / Hide"), this);
|
||||||
toggleHideAction->setStatusTip(tr("Show or hide the main Window"));
|
toggleHideAction->setStatusTip(tr("Show or hide the main Window"));
|
||||||
|
|
||||||
encryptWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Encrypt Wallet..."), this);
|
encryptWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Encrypt Wallet..."), this);
|
||||||
encryptWalletAction->setStatusTip(tr("Encrypt the private keys that belong to your wallet"));
|
encryptWalletAction->setStatusTip(tr("Encrypt the private keys that belong to your wallet"));
|
||||||
encryptWalletAction->setCheckable(true);
|
encryptWalletAction->setCheckable(true);
|
||||||
|
|
|
@ -29,6 +29,7 @@ class QStackedWidget;
|
||||||
class QUrl;
|
class QUrl;
|
||||||
class QListWidget;
|
class QListWidget;
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
|
class QAction;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -59,6 +60,14 @@ public:
|
||||||
|
|
||||||
void removeAllWallets();
|
void removeAllWallets();
|
||||||
|
|
||||||
|
/** Used by WalletView to allow access to needed QActions */
|
||||||
|
QAction * getOverviewAction() { return overviewAction; }
|
||||||
|
QAction * getHistoryAction() { return historyAction; }
|
||||||
|
QAction * getAddressBookAction() { return addressBookAction; }
|
||||||
|
QAction * getReceiveCoinsAction() { return receiveCoinsAction; }
|
||||||
|
QAction * getSendCoinsAction() { return sendCoinsAction; }
|
||||||
|
QAction * getExportAction() { return exportAction; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void changeEvent(QEvent *e);
|
void changeEvent(QEvent *e);
|
||||||
void closeEvent(QCloseEvent *event);
|
void closeEvent(QCloseEvent *event);
|
||||||
|
|
|
@ -10,26 +10,17 @@
|
||||||
#include "addressbookpage.h"
|
#include "addressbookpage.h"
|
||||||
#include "sendcoinsdialog.h"
|
#include "sendcoinsdialog.h"
|
||||||
#include "signverifymessagedialog.h"
|
#include "signverifymessagedialog.h"
|
||||||
#include "optionsdialog.h"
|
|
||||||
#include "aboutdialog.h"
|
|
||||||
#include "clientmodel.h"
|
#include "clientmodel.h"
|
||||||
#include "walletmodel.h"
|
#include "walletmodel.h"
|
||||||
#include "editaddressdialog.h"
|
|
||||||
#include "optionsmodel.h"
|
#include "optionsmodel.h"
|
||||||
#include "transactiondescdialog.h"
|
|
||||||
#include "addresstablemodel.h"
|
|
||||||
#include "transactionview.h"
|
#include "transactionview.h"
|
||||||
#include "overviewpage.h"
|
#include "overviewpage.h"
|
||||||
#include "bitcoinunits.h"
|
|
||||||
#include "guiconstants.h"
|
|
||||||
#include "askpassphrasedialog.h"
|
#include "askpassphrasedialog.h"
|
||||||
#include "guiutil.h"
|
|
||||||
#include "ui_interface.h"
|
#include "ui_interface.h"
|
||||||
|
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QActionGroup>
|
#include <QActionGroup>
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QLabel>
|
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
|
||||||
|
@ -37,13 +28,8 @@ WalletView::WalletView(QWidget *parent, BitcoinGUI *_gui):
|
||||||
QStackedWidget(parent),
|
QStackedWidget(parent),
|
||||||
gui(_gui),
|
gui(_gui),
|
||||||
clientModel(0),
|
clientModel(0),
|
||||||
walletModel(0),
|
walletModel(0)
|
||||||
encryptWalletAction(0),
|
|
||||||
changePassphraseAction(0)
|
|
||||||
{
|
{
|
||||||
// Create actions for the toolbar, menu bar and tray/dock icon
|
|
||||||
createActions();
|
|
||||||
|
|
||||||
// Create tabs
|
// Create tabs
|
||||||
overviewPage = new OverviewPage();
|
overviewPage = new OverviewPage();
|
||||||
|
|
||||||
|
@ -88,74 +74,6 @@ WalletView::~WalletView()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void WalletView::createActions()
|
|
||||||
{
|
|
||||||
QActionGroup *tabGroup = new QActionGroup(this);
|
|
||||||
|
|
||||||
overviewAction = new QAction(QIcon(":/icons/overview"), tr("&Overview"), this);
|
|
||||||
overviewAction->setStatusTip(tr("Show general overview of wallet"));
|
|
||||||
overviewAction->setToolTip(overviewAction->statusTip());
|
|
||||||
overviewAction->setCheckable(true);
|
|
||||||
overviewAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_1));
|
|
||||||
tabGroup->addAction(overviewAction);
|
|
||||||
|
|
||||||
sendCoinsAction = new QAction(QIcon(":/icons/send"), tr("&Send coins"), this);
|
|
||||||
sendCoinsAction->setStatusTip(tr("Send coins to a Bitcoin address"));
|
|
||||||
sendCoinsAction->setToolTip(sendCoinsAction->statusTip());
|
|
||||||
sendCoinsAction->setCheckable(true);
|
|
||||||
sendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_2));
|
|
||||||
tabGroup->addAction(sendCoinsAction);
|
|
||||||
|
|
||||||
receiveCoinsAction = new QAction(QIcon(":/icons/receiving_addresses"), tr("&Receive coins"), this);
|
|
||||||
receiveCoinsAction->setStatusTip(tr("Show the list of addresses for receiving payments"));
|
|
||||||
receiveCoinsAction->setToolTip(receiveCoinsAction->statusTip());
|
|
||||||
receiveCoinsAction->setCheckable(true);
|
|
||||||
receiveCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_3));
|
|
||||||
tabGroup->addAction(receiveCoinsAction);
|
|
||||||
|
|
||||||
historyAction = new QAction(QIcon(":/icons/history"), tr("&Transactions"), this);
|
|
||||||
historyAction->setStatusTip(tr("Browse transaction history"));
|
|
||||||
historyAction->setToolTip(historyAction->statusTip());
|
|
||||||
historyAction->setCheckable(true);
|
|
||||||
historyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_4));
|
|
||||||
tabGroup->addAction(historyAction);
|
|
||||||
|
|
||||||
addressBookAction = new QAction(QIcon(":/icons/address-book"), tr("&Address Book"), this);
|
|
||||||
addressBookAction->setStatusTip(tr("Edit the list of stored addresses and labels"));
|
|
||||||
addressBookAction->setToolTip(addressBookAction->statusTip());
|
|
||||||
addressBookAction->setCheckable(true);
|
|
||||||
addressBookAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_5));
|
|
||||||
tabGroup->addAction(addressBookAction);
|
|
||||||
|
|
||||||
connect(overviewAction, SIGNAL(triggered()), this, SLOT(gotoOverviewPage()));
|
|
||||||
connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(gotoSendCoinsPage()));
|
|
||||||
connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(gotoReceiveCoinsPage()));
|
|
||||||
connect(historyAction, SIGNAL(triggered()), this, SLOT(gotoHistoryPage()));
|
|
||||||
connect(addressBookAction, SIGNAL(triggered()), this, SLOT(gotoAddressBookPage()));
|
|
||||||
|
|
||||||
encryptWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Encrypt Wallet..."), this);
|
|
||||||
encryptWalletAction->setStatusTip(tr("Encrypt the private keys that belong to your wallet"));
|
|
||||||
encryptWalletAction->setCheckable(true);
|
|
||||||
backupWalletAction = new QAction(QIcon(":/icons/filesave"), tr("&Backup Wallet..."), this);
|
|
||||||
backupWalletAction->setStatusTip(tr("Backup wallet to another location"));
|
|
||||||
changePassphraseAction = new QAction(QIcon(":/icons/key"), tr("&Change Passphrase..."), this);
|
|
||||||
changePassphraseAction->setStatusTip(tr("Change the passphrase used for wallet encryption"));
|
|
||||||
signMessageAction = new QAction(QIcon(":/icons/edit"), tr("Sign &message..."), this);
|
|
||||||
signMessageAction->setStatusTip(tr("Sign messages with your Bitcoin addresses to prove you own them"));
|
|
||||||
verifyMessageAction = new QAction(QIcon(":/icons/transaction_0"), tr("&Verify message..."), this);
|
|
||||||
verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified Bitcoin addresses"));
|
|
||||||
|
|
||||||
exportAction = new QAction(QIcon(":/icons/export"), tr("&Export..."), this);
|
|
||||||
exportAction->setStatusTip(tr("Export the data in the current tab to a file"));
|
|
||||||
exportAction->setToolTip(exportAction->statusTip());
|
|
||||||
|
|
||||||
connect(encryptWalletAction, SIGNAL(triggered(bool)), this, SLOT(encryptWallet(bool)));
|
|
||||||
connect(backupWalletAction, SIGNAL(triggered()), this, SLOT(backupWallet()));
|
|
||||||
connect(changePassphraseAction, SIGNAL(triggered()), this, SLOT(changePassphrase()));
|
|
||||||
connect(signMessageAction, SIGNAL(triggered()), this, SLOT(gotoSignMessageTab()));
|
|
||||||
connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(gotoVerifyMessageTab()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void WalletView::setBitcoinGUI(BitcoinGUI *gui)
|
void WalletView::setBitcoinGUI(BitcoinGUI *gui)
|
||||||
{
|
{
|
||||||
this->gui = gui;
|
this->gui = gui;
|
||||||
|
@ -164,7 +82,7 @@ void WalletView::setBitcoinGUI(BitcoinGUI *gui)
|
||||||
void WalletView::setClientModel(ClientModel *clientModel)
|
void WalletView::setClientModel(ClientModel *clientModel)
|
||||||
{
|
{
|
||||||
this->clientModel = clientModel;
|
this->clientModel = clientModel;
|
||||||
if(clientModel)
|
if (clientModel)
|
||||||
{
|
{
|
||||||
overviewPage->setClientModel(clientModel);
|
overviewPage->setClientModel(clientModel);
|
||||||
addressBookPage->setOptionsModel(clientModel->getOptionsModel());
|
addressBookPage->setOptionsModel(clientModel->getOptionsModel());
|
||||||
|
@ -175,7 +93,7 @@ void WalletView::setClientModel(ClientModel *clientModel)
|
||||||
void WalletView::setWalletModel(WalletModel *walletModel)
|
void WalletView::setWalletModel(WalletModel *walletModel)
|
||||||
{
|
{
|
||||||
this->walletModel = walletModel;
|
this->walletModel = walletModel;
|
||||||
if(walletModel)
|
if (walletModel)
|
||||||
{
|
{
|
||||||
// Receive and report messages from wallet thread
|
// Receive and report messages from wallet thread
|
||||||
connect(walletModel, SIGNAL(message(QString,QString,unsigned int)), gui, SLOT(message(QString,QString,unsigned int)));
|
connect(walletModel, SIGNAL(message(QString,QString,unsigned int)), gui, SLOT(message(QString,QString,unsigned int)));
|
||||||
|
@ -222,52 +140,52 @@ void WalletView::incomingTransaction(const QModelIndex& parent, int start, int /
|
||||||
|
|
||||||
void WalletView::gotoOverviewPage()
|
void WalletView::gotoOverviewPage()
|
||||||
{
|
{
|
||||||
overviewAction->setChecked(true);
|
gui->getOverviewAction()->setChecked(true);
|
||||||
setCurrentWidget(overviewPage);
|
setCurrentWidget(overviewPage);
|
||||||
|
|
||||||
exportAction->setEnabled(false);
|
gui->getExportAction()->setEnabled(false);
|
||||||
disconnect(exportAction, SIGNAL(triggered()), 0, 0);
|
disconnect(gui->getExportAction(), SIGNAL(triggered()), 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WalletView::gotoHistoryPage()
|
void WalletView::gotoHistoryPage()
|
||||||
{
|
{
|
||||||
historyAction->setChecked(true);
|
gui->getHistoryAction()->setChecked(true);
|
||||||
setCurrentWidget(transactionsPage);
|
setCurrentWidget(transactionsPage);
|
||||||
|
|
||||||
exportAction->setEnabled(true);
|
gui->getExportAction()->setEnabled(true);
|
||||||
disconnect(exportAction, SIGNAL(triggered()), 0, 0);
|
disconnect(gui->getExportAction(), SIGNAL(triggered()), 0, 0);
|
||||||
connect(exportAction, SIGNAL(triggered()), transactionView, SLOT(exportClicked()));
|
connect(gui->getExportAction(), SIGNAL(triggered()), transactionView, SLOT(exportClicked()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WalletView::gotoAddressBookPage()
|
void WalletView::gotoAddressBookPage()
|
||||||
{
|
{
|
||||||
addressBookAction->setChecked(true);
|
gui->getAddressBookAction()->setChecked(true);
|
||||||
setCurrentWidget(addressBookPage);
|
setCurrentWidget(addressBookPage);
|
||||||
|
|
||||||
exportAction->setEnabled(true);
|
gui->getExportAction()->setEnabled(true);
|
||||||
disconnect(exportAction, SIGNAL(triggered()), 0, 0);
|
disconnect(gui->getExportAction(), SIGNAL(triggered()), 0, 0);
|
||||||
connect(exportAction, SIGNAL(triggered()), addressBookPage, SLOT(exportClicked()));
|
connect(gui->getExportAction(), SIGNAL(triggered()), addressBookPage, SLOT(exportClicked()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WalletView::gotoReceiveCoinsPage()
|
void WalletView::gotoReceiveCoinsPage()
|
||||||
{
|
{
|
||||||
receiveCoinsAction->setChecked(true);
|
gui->getReceiveCoinsAction()->setChecked(true);
|
||||||
setCurrentWidget(receiveCoinsPage);
|
setCurrentWidget(receiveCoinsPage);
|
||||||
|
|
||||||
exportAction->setEnabled(true);
|
gui->getExportAction()->setEnabled(true);
|
||||||
disconnect(exportAction, SIGNAL(triggered()), 0, 0);
|
disconnect(gui->getExportAction(), SIGNAL(triggered()), 0, 0);
|
||||||
connect(exportAction, SIGNAL(triggered()), receiveCoinsPage, SLOT(exportClicked()));
|
connect(gui->getExportAction(), SIGNAL(triggered()), receiveCoinsPage, SLOT(exportClicked()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WalletView::gotoSendCoinsPage(QString addr)
|
void WalletView::gotoSendCoinsPage(QString addr)
|
||||||
{
|
{
|
||||||
sendCoinsAction->setChecked(true);
|
gui->getSendCoinsAction()->setChecked(true);
|
||||||
setCurrentWidget(sendCoinsPage);
|
setCurrentWidget(sendCoinsPage);
|
||||||
|
|
||||||
exportAction->setEnabled(false);
|
gui->getExportAction()->setEnabled(false);
|
||||||
disconnect(exportAction, SIGNAL(triggered()), 0, 0);
|
disconnect(gui->getExportAction(), SIGNAL(triggered()), 0, 0);
|
||||||
|
|
||||||
if(!addr.isEmpty())
|
if (!addr.isEmpty())
|
||||||
sendCoinsPage->setAddress(addr);
|
sendCoinsPage->setAddress(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,7 +194,7 @@ void WalletView::gotoSignMessageTab(QString addr)
|
||||||
// call show() in showTab_SM()
|
// call show() in showTab_SM()
|
||||||
signVerifyMessageDialog->showTab_SM(true);
|
signVerifyMessageDialog->showTab_SM(true);
|
||||||
|
|
||||||
if(!addr.isEmpty())
|
if (!addr.isEmpty())
|
||||||
signVerifyMessageDialog->setAddress_SM(addr);
|
signVerifyMessageDialog->setAddress_SM(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -285,7 +203,7 @@ void WalletView::gotoVerifyMessageTab(QString addr)
|
||||||
// call show() in showTab_VM()
|
// call show() in showTab_VM()
|
||||||
signVerifyMessageDialog->showTab_VM(true);
|
signVerifyMessageDialog->showTab_VM(true);
|
||||||
|
|
||||||
if(!addr.isEmpty())
|
if (!addr.isEmpty())
|
||||||
signVerifyMessageDialog->setAddress_VM(addr);
|
signVerifyMessageDialog->setAddress_VM(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,8 +245,8 @@ void WalletView::backupWallet()
|
||||||
{
|
{
|
||||||
QString saveDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation);
|
QString saveDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation);
|
||||||
QString filename = QFileDialog::getSaveFileName(this, tr("Backup Wallet"), saveDir, tr("Wallet Data (*.dat)"));
|
QString filename = QFileDialog::getSaveFileName(this, tr("Backup Wallet"), saveDir, tr("Wallet Data (*.dat)"));
|
||||||
if(!filename.isEmpty()) {
|
if (!filename.isEmpty()) {
|
||||||
if(!walletModel->backupWallet(filename)) {
|
if (!walletModel->backupWallet(filename)) {
|
||||||
gui->message(tr("Backup Failed"), tr("There was an error trying to save the wallet data to the new location."),
|
gui->message(tr("Backup Failed"), tr("There was an error trying to save the wallet data to the new location."),
|
||||||
CClientUIInterface::MSG_ERROR);
|
CClientUIInterface::MSG_ERROR);
|
||||||
}
|
}
|
||||||
|
@ -350,7 +268,7 @@ void WalletView::unlockWallet()
|
||||||
if(!walletModel)
|
if(!walletModel)
|
||||||
return;
|
return;
|
||||||
// Unlock wallet when requested by wallet model
|
// Unlock wallet when requested by wallet model
|
||||||
if(walletModel->getEncryptionStatus() == WalletModel::Locked)
|
if (walletModel->getEncryptionStatus() == WalletModel::Locked)
|
||||||
{
|
{
|
||||||
AskPassphraseDialog dlg(AskPassphraseDialog::Unlock, this);
|
AskPassphraseDialog dlg(AskPassphraseDialog::Unlock, this);
|
||||||
dlg.setModel(walletModel);
|
dlg.setModel(walletModel);
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include <QStackedWidget>
|
#include <QStackedWidget>
|
||||||
|
|
||||||
class BitcoinGUI;
|
class BitcoinGUI;
|
||||||
class TransactionTableModel;
|
|
||||||
class ClientModel;
|
class ClientModel;
|
||||||
class WalletModel;
|
class WalletModel;
|
||||||
class TransactionView;
|
class TransactionView;
|
||||||
|
@ -18,7 +17,6 @@ class OverviewPage;
|
||||||
class AddressBookPage;
|
class AddressBookPage;
|
||||||
class SendCoinsDialog;
|
class SendCoinsDialog;
|
||||||
class SignVerifyMessageDialog;
|
class SignVerifyMessageDialog;
|
||||||
class Notificator;
|
|
||||||
class RPCConsole;
|
class RPCConsole;
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
@ -35,6 +33,7 @@ QT_END_NAMESPACE
|
||||||
class WalletView : public QStackedWidget
|
class WalletView : public QStackedWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit WalletView(QWidget *parent, BitcoinGUI *_gui);
|
explicit WalletView(QWidget *parent, BitcoinGUI *_gui);
|
||||||
~WalletView();
|
~WalletView();
|
||||||
|
@ -66,35 +65,8 @@ private:
|
||||||
SendCoinsDialog *sendCoinsPage;
|
SendCoinsDialog *sendCoinsPage;
|
||||||
SignVerifyMessageDialog *signVerifyMessageDialog;
|
SignVerifyMessageDialog *signVerifyMessageDialog;
|
||||||
|
|
||||||
QLabel *labelEncryptionIcon;
|
|
||||||
QLabel *labelConnectionsIcon;
|
|
||||||
QLabel *labelBlocksIcon;
|
|
||||||
QLabel *progressBarLabel;
|
|
||||||
|
|
||||||
QAction *overviewAction;
|
|
||||||
QAction *historyAction;
|
|
||||||
QAction *quitAction;
|
|
||||||
QAction *sendCoinsAction;
|
|
||||||
QAction *addressBookAction;
|
|
||||||
QAction *signMessageAction;
|
|
||||||
QAction *verifyMessageAction;
|
|
||||||
QAction *aboutAction;
|
|
||||||
QAction *receiveCoinsAction;
|
|
||||||
QAction *optionsAction;
|
|
||||||
QAction *toggleHideAction;
|
|
||||||
QAction *exportAction;
|
|
||||||
QAction *encryptWalletAction;
|
|
||||||
QAction *backupWalletAction;
|
|
||||||
QAction *changePassphraseAction;
|
|
||||||
QAction *aboutQtAction;
|
|
||||||
QAction *openRPCConsoleAction;
|
|
||||||
|
|
||||||
TransactionView *transactionView;
|
TransactionView *transactionView;
|
||||||
|
|
||||||
/** Create the main UI actions. */
|
|
||||||
void createActions();
|
|
||||||
/** Create the menu bar and sub-menus. */
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
/** Switch to overview (home) page */
|
/** Switch to overview (home) page */
|
||||||
void gotoOverviewPage();
|
void gotoOverviewPage();
|
||||||
|
|
Loading…
Reference in a new issue