diff --git a/src/init.cpp b/src/init.cpp index 2c5bb05f6f15..ba90affd3905 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -482,7 +482,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-budgetvotemode=", _("Change automatic finalized budget voting behavior. mode=auto: Vote for only exact finalized budget match to my generated budget. (string, default: auto)")); strUsage += HelpMessageGroup(_("Zerocoin options:")); - strUsage += HelpMessageOpt("-enablezeromint=", strprintf(_("Enable automatic Zerocoin minting (0-1, default: %u)"), 1)); + strUsage += HelpMessageOpt("-enablezeromint=", strprintf(_("Enable automatic Zerocoin minting (0-1, default: %u)"), 0)); strUsage += HelpMessageOpt("-zeromintpercentage=", strprintf(_("Percentage of automatically minted Zerocoin (10-100, default: %u)"), 10)); strUsage += HelpMessageOpt("-preferredDenom=", strprintf(_("Preferred Denomination for automatically minted Zerocoin (1/5/10/50/100/500/1000/5000), 0 for no preference. default: %u)"), 0)); strUsage += HelpMessageOpt("-backupzpiv=", strprintf(_("Enable automatic wallet backups triggered after each zPiv minting (0-1, default: %u)"), 1)); diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui index 47539a7de34f..2eed1f8b3b45 100644 --- a/src/qt/forms/optionsdialog.ui +++ b/src/qt/forms/optionsdialog.ui @@ -130,6 +130,27 @@ + + + + + + Enable PIV to zPIV Automint + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + + + diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index 05948cb517de..7d2f543b8055 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -7,7 +7,7 @@ 0 0 960 - 615 + 648 @@ -408,6 +408,72 @@ + + + + + 0 + 0 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + + Current percentage of zPIV autominting. + + + zPIV Auto-Minting: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + Unknown + + + + + + + Update + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index b002a7aba2e7..b1a9d67daf33 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -79,7 +79,7 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) : QDialog(paren digits.setNum(index); ui->digits->addItem(digits, digits); } - + /* Theme selector static themes */ ui->theme->addItem(QString("Default"), QVariant("default")); @@ -194,6 +194,8 @@ void OptionsDialog::setMapper() mapper->addMapping(ui->bitcoinAtStartup, OptionsModel::StartAtStartup); mapper->addMapping(ui->threadsScriptVerif, OptionsModel::ThreadsScriptVerif); mapper->addMapping(ui->databaseCache, OptionsModel::DatabaseCache); + // Zerocoin mint enabled + mapper->addMapping(ui->cbEnableAutoMint, OptionsModel::EnableZeromint); // Zerocoin mint percentage mapper->addMapping(ui->zeromintPercentage, OptionsModel::ZeromintPercentage); // Zerocoin preferred denomination @@ -211,7 +213,7 @@ void OptionsDialog::setMapper() mapper->addMapping(ui->proxyIp, OptionsModel::ProxyIP); mapper->addMapping(ui->proxyPort, OptionsModel::ProxyPort); - /* Window */ +/* Window */ #ifndef Q_OS_MAC mapper->addMapping(ui->minimizeToTray, OptionsModel::MinimizeToTray); mapper->addMapping(ui->minimizeOnClose, OptionsModel::MinimizeOnClose); diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 48147ce44cf2..5a5dff36d2ae 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -72,6 +72,9 @@ void OptionsModel::Init() settings.setValue("fCoinControlFeatures", false); fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool(); + if (!settings.contains("fEnableZeromint")) + settings.setValue("fEnableZeromint", true); + fEnableZeromint = settings.value("fEnableZeromint").toBool(); if (!settings.contains("nPreferredDenom")) settings.setValue("nPreferredDenom", 0); nPreferredDenom = settings.value("nPreferredDenom", "0").toLongLong(); @@ -147,6 +150,8 @@ void OptionsModel::Init() if (!SoftSetArg("-lang", settings.value("language").toString().toStdString())) addOverriddenOption("-lang"); + if (settings.contains("fEnableZeromint")) + SoftSetBoolArg("-enablezeromint", settings.value("fEnableZeromint").toBool()); if (settings.contains("nZeromintPercentage")) SoftSetArg("-zeromintpercentage", settings.value("nZeromintPercentage").toString().toStdString()); if (settings.contains("nPreferredDenom")) @@ -230,6 +235,8 @@ QVariant OptionsModel::data(const QModelIndex& index, int role) const return settings.value("nDatabaseCache"); case ThreadsScriptVerif: return settings.value("nThreadsScriptVerif"); + case EnableZeromint: + return QVariant(fEnableZeromint); case ZeromintPercentage: return QVariant(nZeromintPercentage); case ZeromintPrefDenom: @@ -339,6 +346,11 @@ bool OptionsModel::setData(const QModelIndex& index, const QVariant& value, int setRestartRequired(true); } break; + case EnableZeromint: + fEnableZeromint = value.toBool(); + settings.setValue("fEnableZeromint", fEnableZeromint); + emit zeromintEnabledChanged(fEnableZeromint); + break; case ZeromintPercentage: nZeromintPercentage = value.toInt(); settings.setValue("nZeromintPercentage", nZeromintPercentage); @@ -419,6 +431,7 @@ bool OptionsModel::getProxySettings(QNetworkProxy& proxy) const void OptionsModel::setRestartRequired(bool fRequired) { QSettings settings; + // XXX: why 'return' here? either remove or change function return type return settings.setValue("fRestartRequired", fRequired); } diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index 3b82f9e8610b..a1a38bb0ba7a 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -43,6 +43,7 @@ class OptionsModel : public QAbstractListModel ThreadsScriptVerif, // int DatabaseCache, // int SpendZeroConfChange, // bool + EnableZeromint, // bool ZeromintPercentage, // int ZeromintPrefDenom, // int AnonymizePivxAmount, //int @@ -90,6 +91,7 @@ class OptionsModel : public QAbstractListModel signals: void displayUnitChanged(int unit); + void zeromintEnabledChanged(bool); void zeromintPercentageChanged(int); void preferredDenomChanged(int); void anonymizePivxAmountChanged(int); diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index f97a01130737..b1f1df63b91b 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -14,9 +14,11 @@ #include "init.h" #include "obfuscation.h" #include "obfuscationconfig.h" +#include "optionsdialog.h" #include "optionsmodel.h" #include "transactionfilterproxy.h" #include "transactiontablemodel.h" +#include "util.h" #include "walletmodel.h" #include @@ -129,7 +131,7 @@ OverviewPage::OverviewPage(QWidget* parent) : QWidget(parent), ui->listTransactions->setAttribute(Qt::WA_MacShowFocusRect, false); connect(ui->listTransactions, SIGNAL(clicked(QModelIndex)), this, SLOT(handleTransactionClicked(QModelIndex))); - + connect(ui->pushButtonUpdateZeromint, SIGNAL(released()), this, SLOT(handleUpdateClicked())); // init "out of sync" warning labels ui->labelWalletStatus->setText("(" + tr("out of sync") + ")"); @@ -155,28 +157,23 @@ void OverviewPage::getPercentage(CAmount nUnlockedBalance, CAmount nZerocoinBala int nPrecision = 2; double dzPercentage = 0.0; - if (nZerocoinBalance <= 0){ + if (nZerocoinBalance <= 0) { dzPercentage = 0.0; - } - else{ - if (nUnlockedBalance <= 0){ + } else { + if (nUnlockedBalance <= 0) { dzPercentage = 100.0; - } - else{ + } else { dzPercentage = 100.0 * (double)(nZerocoinBalance / (double)(nZerocoinBalance + nUnlockedBalance)); } } double dPercentage = 100.0 - dzPercentage; - + szPIVPercentage = "(" + QLocale(QLocale::system()).toString(dzPercentage, 'f', nPrecision) + " %)"; sPIVPercentage = "(" + QLocale(QLocale::system()).toString(dPercentage, 'f', nPrecision) + " %)"; - } -void OverviewPage::setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, - const CAmount& zerocoinBalance, const CAmount& unconfirmedZerocoinBalance, const CAmount& immatureZerocoinBalance, - const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance) +void OverviewPage::setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, const CAmount& zerocoinBalance, const CAmount& unconfirmedZerocoinBalance, const CAmount& immatureZerocoinBalance, const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance) { currentBalance = balance; currentUnconfirmedBalance = unconfirmedBalance; @@ -227,13 +224,12 @@ void OverviewPage::setBalance(const CAmount& balance, const CAmount& unconfirmed // Adjust bubble-help according to AutoMint settings QString automintHelp = tr("Current percentage of zPIV.\nIf AutoMint is enabled this percentage will settle around the configured AutoMint percentage (default = 10%).\n"); - bool fEnableZeromint = GetBoolArg("-enablezeromint", true); - int nZeromintPercentage = GetArg("-zeromintpercentage", 10); if (fEnableZeromint) { + ui->labelPIV2zPIVAutoMint->setText(QString::number(nZeromintPercentage) + "%"); automintHelp += tr("AutoMint is currently enabled and set to ") + QString::number(nZeromintPercentage) + "%.\n"; automintHelp += tr("To disable AutoMint add 'enablezeromint=0' in pivx.conf."); - } - else { + } else { + ui->labelPIV2zPIVAutoMint->setText(tr("Disabled")); automintHelp += tr("AutoMint is currently disabled.\nTo enable AutoMint change 'enablezeromint=0' to 'enablezeromint=1' in pivx.conf"); } ui->labelzPIVPercent->setToolTip(automintHelp); @@ -304,15 +300,18 @@ void OverviewPage::setWalletModel(WalletModel* model) // Keep up to date with wallet setBalance(model->getBalance(), model->getUnconfirmedBalance(), model->getImmatureBalance(), - model->getZerocoinBalance(), model->getUnconfirmedZerocoinBalance(), model->getImmatureZerocoinBalance(), - model->getWatchBalance(), model->getWatchUnconfirmedBalance(), model->getWatchImmatureBalance()); - connect(model, SIGNAL(balanceChanged(CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount)), this, - SLOT(setBalance(CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount))); + model->getZerocoinBalance(), model->getUnconfirmedZerocoinBalance(), model->getImmatureZerocoinBalance(), + model->getWatchBalance(), model->getWatchUnconfirmedBalance(), model->getWatchImmatureBalance()); + connect(model, SIGNAL(balanceChanged(CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount)), this, + SLOT(setBalance(CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount, CAmount))); connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); updateWatchOnlyLabels(model->haveWatchOnly()); connect(model, SIGNAL(notifyWatchonlyChanged(bool)), this, SLOT(updateWatchOnlyLabels(bool))); + + connect(model->getOptionsModel(), SIGNAL(zeromintEnabledChanged(bool)), this, SLOT(updateZeromintOptionEnabled(bool))); + connect(model->getOptionsModel(), SIGNAL(zeromintPercentageChanged(int)), this, SLOT(updateZeromintOptionPercentage(int))); } // update the display unit, to not use the default ("PIV") @@ -345,3 +344,34 @@ void OverviewPage::showOutOfSyncWarning(bool fShow) ui->labelWalletStatus->setVisible(fShow); ui->labelTransactionsStatus->setVisible(fShow); } + +void OverviewPage::updateZeromintOptionStatus() +{ + if (fEnableZeromint) { + ui->labelPIV2zPIVAutoMint->setText(QString::number(nZeromintPercentage) + "%"); + } else { + ui->labelPIV2zPIVAutoMint->setText(tr("Disabled")); + } +} + +void OverviewPage::updateZeromintOptionEnabled(bool fEnabled) +{ + updateZeromintOptionStatus(); +} + +void OverviewPage::updateZeromintOptionPercentage(int p) +{ + updateZeromintOptionStatus(); +} + +void OverviewPage::handleUpdateClicked() +{ + // BitcoinGUI::optionsClicked(); + if (!this->clientModel || !clientModel->getOptionsModel()) + return; + + // can we assume enableWallet true here ? + OptionsDialog dlg(this, true); + dlg.setModel(clientModel->getOptionsModel()); + dlg.exec(); +} diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h index 233ac322f754..e2df9a44264b 100644 --- a/src/qt/overviewpage.h +++ b/src/qt/overviewpage.h @@ -37,9 +37,7 @@ class OverviewPage : public QWidget void showOutOfSyncWarning(bool fShow); public slots: - void setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, - const CAmount& zerocoinBalance, const CAmount& unconfirmedZerocoinBalance, const CAmount& immatureZerocoinBalance, - const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance); + void setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, const CAmount& zerocoinBalance, const CAmount& unconfirmedZerocoinBalance, const CAmount& immatureZerocoinBalance, const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance); signals: void transactionClicked(const QModelIndex& index); @@ -69,6 +67,10 @@ private slots: void handleTransactionClicked(const QModelIndex& index); void updateAlerts(const QString& warnings); void updateWatchOnlyLabels(bool showWatchOnly); + void handleUpdateClicked(); + void updateZeromintOptionStatus(); + void updateZeromintOptionEnabled(bool); + void updateZeromintOptionPercentage(int); }; #endif // BITCOIN_QT_OVERVIEWPAGE_H diff --git a/src/qt/res/css/default.css b/src/qt/res/css/default.css index 72a97b538a80..81404816a13f 100755 --- a/src/qt/res/css/default.css +++ b/src/qt/res/css/default.css @@ -1026,6 +1026,24 @@ font-size:14px; /* min-height:35px; */ } +QWidget .QFrame#frame_5 .QLabel#labelPIV2zPIVAutoMintText { /* PIV to zPIV Auto-Minting Label */ +qproperty-alignment: 'AlignVCenter | AlignRight'; +min-width:160px; +background-color:#5B4C7C; +color:#fff; +margin-right:5px; +padding-right:5px; +font-weight:bold; +font-size:14px; +/* min-height:35px; */ +} + +QWidget .QFrame#frame_5 .QLabel#labelPIV2zPIVAutoMint { /* PIV to zPIV Auto-Minting */ +min-width: 75px; +font-size: 12px; +margin-right: 5px; +} + QWidget .QFrame#frame_4 .QLabel#labelzBalance { /* Available zPIV Balance */ qproperty-alignment: 'AlignVCenter | AlignLeft'; font-size:12px;