From b544e6dfcebf530b586ec60fffb5a3cab2c9650e Mon Sep 17 00:00:00 2001 From: tobtoht Date: Fri, 25 Dec 2020 22:07:48 +0100 Subject: [PATCH] Settings: allow changing default wallet directory --- src/appcontext.cpp | 14 +++++-- src/mainwindow.cpp | 1 + src/mainwindow.h | 1 - src/settings.cpp | 24 ++++++++--- src/settings.h | 1 + src/settings.ui | 75 ++++++++++++++++++++++++++++++++--- src/utils/keysfiles.cpp | 32 +++++++++------ src/utils/keysfiles.h | 2 + src/wizard/createwallet.cpp | 8 ++++ src/wizard/createwallet.h | 3 +- src/wizard/createwalletseed.h | 1 - src/wizard/walletwizard.cpp | 3 ++ src/wizard/walletwizard.h | 2 + 13 files changed, 135 insertions(+), 32 deletions(-) diff --git a/src/appcontext.cpp b/src/appcontext.cpp index 638705b..2541f25 100644 --- a/src/appcontext.cpp +++ b/src/appcontext.cpp @@ -80,13 +80,19 @@ AppContext::AppContext(QCommandLineParser *cmdargs) { this->accountName = Utils::getUnixAccountName(); this->homeDir = QDir::homePath(); + QString walletDir = config()->get(Config::walletDirectory).toString(); + if (walletDir.isEmpty()) { #if defined(Q_OS_LINUX) or defined(Q_OS_MAC) - this->defaultWalletDir = QString("%1/Monero/wallets").arg(this->configRoot); - this->defaultWalletDirRoot = QString("%1/Monero").arg(this->configRoot); + this->defaultWalletDir = QString("%1/Monero/wallets").arg(this->configRoot); + this->defaultWalletDirRoot = QString("%1/Monero").arg(this->configRoot); #elif defined(Q_OS_WIN) - this->defaultWalletDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Monero"; - this->defaultWalletDirRoot = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); + this->defaultWalletDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Monero"; + this->defaultWalletDirRoot = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); #endif + } else { + this->defaultWalletDir = walletDir; + this->defaultWalletDirRoot = walletDir; + } // Create wallet dirs if (!QDir().mkpath(defaultWalletDir)) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index d33cd97..8872bcd 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -522,6 +522,7 @@ void MainWindow::initWidgets() { WalletWizard *MainWindow::createWizard(WalletWizard::Page startPage){ auto *wizard = new WalletWizard(m_ctx, startPage, this); connect(wizard, &WalletWizard::openWallet, m_ctx, &AppContext::onOpenWallet); + connect(wizard, &WalletWizard::defaultWalletDirChanged, m_windowSettings, &Settings::updatePaths); return wizard; } diff --git a/src/mainwindow.h b/src/mainwindow.h index 35e2d08..ff23eb5 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -177,7 +177,6 @@ private: Ui::MainWindow *ui; Settings *m_windowSettings = nullptr; CalcWindow *m_windowCalc = nullptr; - SignVerifyDialog *m_windowSignVerify = nullptr; RestoreDialog *m_restoreDialog = nullptr; AboutDialog *m_aboutDialog = nullptr; XMRigWidget *m_xmrig = nullptr; diff --git a/src/settings.cpp b/src/settings.cpp index 3c47349..09c13e4 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -7,6 +7,8 @@ #include "utils/config.h" #include "mainwindow.h" +#include + Settings::Settings(QWidget *parent) : QDialog(parent), ui(new Ui::Settings) @@ -58,16 +60,26 @@ Settings::Settings(QWidget *parent) : connect(ui->comboBox_fiatCurrency, QOverload::of(&QComboBox::currentIndexChanged), this, &Settings::fiatCurrencySelected); - // setup path tab -#if defined(Q_OS_LINUX) - ui->textEditPaths->appendPlainText(m_ctx->applicationPath); -#endif - ui->textEditPaths->appendPlainText(m_ctx->configDirectory); - ui->textEditPaths->appendPlainText(m_ctx->defaultWalletDir); + // setup paths tab + this->updatePaths(); + connect(ui->btn_browseDefaultWalletDir, &QPushButton::clicked, [this]{ + QString walletDir = QFileDialog::getExistingDirectory(this, "Select wallet directory ", m_ctx->defaultWalletDir, QFileDialog::ShowDirsOnly); + if (walletDir.isEmpty()) return; + m_ctx->defaultWalletDir = walletDir; + m_ctx->defaultWalletDirRoot = walletDir; + config()->set(Config::walletDirectory, walletDir); + ui->lineEdit_defaultWalletDir->setText(m_ctx->defaultWalletDir); + }); this->adjustSize(); } +void Settings::updatePaths() { + ui->lineEdit_defaultWalletDir->setText(m_ctx->defaultWalletDir); + ui->lineEdit_configDir->setText(m_ctx->configDirectory); + ui->lineEdit_applicationDir->setText(m_ctx->applicationPath); +} + void Settings::fiatCurrencySelected(int index) { QString selection = ui->comboBox_fiatCurrency->itemText(index); config()->set(Config::preferredFiatCurrency, selection); diff --git a/src/settings.h b/src/settings.h index 075ad09..a34e9e7 100644 --- a/src/settings.h +++ b/src/settings.h @@ -31,6 +31,7 @@ signals: void blockExplorerChanged(QString blockExplorer); public slots: + void updatePaths(); void copyToClipboard(); void checkboxExternalLinkWarn(); void fiatCurrencySelected(int index); diff --git a/src/settings.ui b/src/settings.ui index d973835..20ff38f 100644 --- a/src/settings.ui +++ b/src/settings.ui @@ -6,8 +6,8 @@ 0 0 - 1019 - 336 + 1123 + 555 @@ -282,11 +282,74 @@ - - - true + + + + + + + false + + + + + + + Browse + + + + + + + + + Wallet directory: + + + + + + + Config directory: + + + + + + + false + + + + + + + Application directory: + + + + + + + false + + + + + + + + + Qt::Vertical - + + + 20 + 0 + + + diff --git a/src/utils/keysfiles.cpp b/src/utils/keysfiles.cpp index 4d44372..da7ca95 100644 --- a/src/utils/keysfiles.cpp +++ b/src/utils/keysfiles.cpp @@ -46,19 +46,11 @@ int WalletKeysFiles::networkType() const { return m_networkType; } -WalletKeysFilesModel::WalletKeysFilesModel(AppContext *ctx, QObject *parent) : - QAbstractTableModel(parent), - m_ctx(ctx) { - this->walletDirectories << m_ctx->defaultWalletDirRoot; - auto walletPath = config()->get(Config::walletPath).toString(); - if(!walletPath.isEmpty() && Utils::fileExists(walletPath)) { - QDir d = QFileInfo(walletPath).absoluteDir(); - this->walletDirectories << d.absolutePath(); - } - - this->walletDirectories << m_ctx->homeDir; - this->walletDirectories.removeDuplicates(); - +WalletKeysFilesModel::WalletKeysFilesModel(AppContext *ctx, QObject *parent) + : QAbstractTableModel(parent) + , m_ctx(ctx) +{ + this->updateDirectories(); this->m_walletKeysFilesItemModel = qobject_cast(this); } @@ -71,6 +63,20 @@ void WalletKeysFilesModel::clear() { void WalletKeysFilesModel::refresh() { this->clear(); this->findWallets(); + endResetModel(); +} + +void WalletKeysFilesModel::updateDirectories() { + this->walletDirectories.clear(); + this->walletDirectories << m_ctx->defaultWalletDirRoot; + auto walletPath = config()->get(Config::walletPath).toString(); + if(!walletPath.isEmpty() && Utils::fileExists(walletPath)) { + QDir d = QFileInfo(walletPath).absoluteDir(); + this->walletDirectories << d.absolutePath(); + } + + this->walletDirectories << m_ctx->homeDir; + this->walletDirectories.removeDuplicates(); } void WalletKeysFilesModel::findWallets() { diff --git a/src/utils/keysfiles.h b/src/utils/keysfiles.h index 5277ab9..e044911 100644 --- a/src/utils/keysfiles.h +++ b/src/utils/keysfiles.h @@ -54,6 +54,8 @@ public: QStringList walletDirectories; private: + void updateDirectories(); + AppContext *m_ctx; QList m_walletKeyFiles; QAbstractItemModel *m_walletKeysFilesItemModel; diff --git a/src/wizard/createwallet.cpp b/src/wizard/createwallet.cpp index a5b223a..a33e376 100644 --- a/src/wizard/createwallet.cpp +++ b/src/wizard/createwallet.cpp @@ -34,7 +34,11 @@ CreateWalletPage::CreateWalletPage(AppContext *ctx, QWidget *parent) : connect(ui->btnChange, &QPushButton::clicked, [=] { QString walletDir = QFileDialog::getExistingDirectory(this, "Select wallet directory ", m_ctx->defaultWalletDir, QFileDialog::ShowDirsOnly); if(walletDir.isEmpty()) return; + m_ctx->defaultWalletDir = walletDir; + m_ctx->defaultWalletDirRoot = walletDir; ui->directory->setText(walletDir); + config()->set(Config::walletDirectory, walletDir); + emit defaultWalletDirChanged(walletDir); }); connect(ui->directory, &QLineEdit::textChanged, [=](const QString &data) { @@ -47,6 +51,10 @@ CreateWalletPage::CreateWalletPage(AppContext *ctx, QWidget *parent) : }); } +void CreateWalletPage::initializePage() { + ui->directory->setText(m_ctx->defaultWalletDir); +} + bool CreateWalletPage::validateWidgets(){ ui->walletName->setStyleSheet(""); ui->directory->setStyleSheet(""); diff --git a/src/wizard/createwallet.h b/src/wizard/createwallet.h index 730f0c9..050ff14 100644 --- a/src/wizard/createwallet.h +++ b/src/wizard/createwallet.h @@ -20,15 +20,16 @@ class CreateWalletPage : public QWizardPage public: explicit CreateWalletPage(AppContext *ctx, QWidget *parent = nullptr); + void initializePage() override; bool validatePage() override; int nextId() const override; signals: void createWallet(); + void defaultWalletDirChanged(QString walletDir); private: AppContext *m_ctx; - QLabel *topLabel; Ui::CreateWalletPage *ui; QString m_walletDir; bool validateWidgets(); diff --git a/src/wizard/createwalletseed.h b/src/wizard/createwalletseed.h index dcd64c4..feb604e 100644 --- a/src/wizard/createwalletseed.h +++ b/src/wizard/createwalletseed.h @@ -23,7 +23,6 @@ public: explicit CreateWalletSeedPage(AppContext *ctx, QWidget *parent = nullptr); bool validatePage() override; int nextId() const override; -// bool isFinalPage() const; public slots: void displaySeed(const QString &seed); diff --git a/src/wizard/walletwizard.cpp b/src/wizard/walletwizard.cpp index f20d3d3..37c02a3 100644 --- a/src/wizard/walletwizard.cpp +++ b/src/wizard/walletwizard.cpp @@ -54,6 +54,9 @@ WalletWizard::WalletWizard(AppContext *ctx, WalletWizard::Page startPage, QWidge connect(createWalletSeed, &CreateWalletSeedPage::createWallet, this, &WalletWizard::createWallet); connect(createWallet, &CreateWalletPage::createWallet, this, &WalletWizard::createWallet); + connect(createWallet, &CreateWalletPage::defaultWalletDirChanged, [this](const QString &walletDir){ + emit defaultWalletDirChanged(walletDir); + }); connect(openWalletPage, &OpenWalletPage::openWallet, [=](const QString &path){ const auto walletPasswd = this->field("walletPasswd").toString(); diff --git a/src/wizard/walletwizard.h b/src/wizard/walletwizard.h index acffac5..b295cc0 100644 --- a/src/wizard/walletwizard.h +++ b/src/wizard/walletwizard.h @@ -20,8 +20,10 @@ public: enum Page { Page_Menu, Page_CreateWallet, Page_CreateWalletSeed, Page_OpenWallet, Page_Network, Page_Restore, Page_ViewOnly }; explicit WalletWizard(AppContext *ctx, WalletWizard::Page startPage = WalletWizard::Page::Page_Menu, QWidget *parent = nullptr); + signals: void openWallet(QString path, QString password); + void defaultWalletDirChanged(QString walletDir); private: AppContext *m_ctx;