Merge bitcoin-core/gui#390: Add SubFeeFromAmount to options

62b125fd197879f112322a1f67a318d6ab22e67a qt, refactor: Fix indentation (Prateek Sancheti)
ad28b66e98c9bb3bc7af2545654842544a798601 qt: Add SubFeeFromAmount option (Prateek Sancheti)

Pull request description:

  This PR adds **_SubFeeFromAmount_** option which lets the user select their preferred setting of whether fee for a transaction is to be subtracted from the amount or not for future transactions. The setting chosen by the user is remembered even when the GUI mode is turned off.

  **_Functionality and Usage:_**

  - Go to `Settings > Options > Wallet` on _Windows/Linux_ or `bitcoin-qt > Preferences > Wallet` on _macOS_.
  - The checkbox **Subtract Fee From Amount** corresponds to the added option **SubFeeFromAmount**.
  - The preferred setting intended to be the default for all future send transactions should be selected by the user.
  - Click on **OK**.
  - Go to the **Send** tab in the wallet.
  - You shall notice, any new Send transaction created will have the preferred setting as chosen by the user.<br> (Try clicking on Add recipient or even restarting the Node in GUI)

  Attaching ScreenRecordings to explain the added feature.

  > Master.mov: Master Branch

  https://user-images.githubusercontent.com/54016434/127763378-be91837d-d0ab-4ae5-87c0-d303fa70a336.mov

  > PR.mov: PullRequest

  https://user-images.githubusercontent.com/54016434/127763404-05b834c1-4082-4fbd-9b05-1528ac898a21.mov

  Close #386

ACKs for top commit:
  Talkless:
    tACK 62b125fd197879f112322a1f67a318d6ab22e67a, tested on Debian Sid with 5.15.2 and it works as described.
  hebasto:
    re-ACK 62b125fd197879f112322a1f67a318d6ab22e67a, only removed the unused `SubFeeFromAmountChanged` signal since my [previous](https://github.com/bitcoin-core/gui/pull/390#pullrequestreview-726531766) review.
  meshcollider:
    utACK 62b125fd197879f112322a1f67a318d6ab22e67a

Tree-SHA512: 932ca89ae578a1e1c426561400d87cf005c231944feaf0f662ff8d88f32bdd65a927a090ea41510a15f8ec0ebcd5529672e9917720eb5ea85f413f081e45d5bb
This commit is contained in:
Hennadii Stepanov 2021-08-12 02:26:18 +03:00 committed by Konstantin Akimov
parent 7df9788c85
commit 368a6ef512
No known key found for this signature in database
GPG Key ID: 2176C4A5D01EA524
5 changed files with 29 additions and 2 deletions

View File

@ -139,7 +139,7 @@
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
@ -315,6 +315,16 @@
</widget> </widget>
<widget class="QWidget" name="pageWallet"> <widget class="QWidget" name="pageWallet">
<layout class="QVBoxLayout" name="verticalLayout_Wallet"> <layout class="QVBoxLayout" name="verticalLayout_Wallet">
<item>
<widget class="QCheckBox" name="subFeeFromAmount">
<property name="toolTip">
<string extracomment="Tooltip text for Options window setting that sets subtracting the fee from a sending amount as default.">Whether to set subtract fee from amount as default or not.</string>
</property>
<property name="text">
<string extracomment="An Options window setting to set subtracting the fee from a sending amount as default.">Subtract &amp;fee from amount by default</string>
</property>
</widget>
</item>
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>

View File

@ -325,6 +325,7 @@ void OptionsDialog::setMapper()
/* Wallet */ /* Wallet */
mapper->addMapping(ui->coinControlFeatures, OptionsModel::CoinControlFeatures); mapper->addMapping(ui->coinControlFeatures, OptionsModel::CoinControlFeatures);
mapper->addMapping(ui->subFeeFromAmount, OptionsModel::SubFeeFromAmount);
mapper->addMapping(ui->keepChangeAddress, OptionsModel::KeepChangeAddress); mapper->addMapping(ui->keepChangeAddress, OptionsModel::KeepChangeAddress);
mapper->addMapping(ui->showMasternodesTab, OptionsModel::ShowMasternodesTab); mapper->addMapping(ui->showMasternodesTab, OptionsModel::ShowMasternodesTab);
mapper->addMapping(ui->showGovernanceTab, OptionsModel::ShowGovernanceTab); mapper->addMapping(ui->showGovernanceTab, OptionsModel::ShowGovernanceTab);

View File

@ -222,6 +222,11 @@ void OptionsModel::Init(bool resetSettings)
if (!gArgs.SoftSetBoolArg("-spendzeroconfchange", settings.value("bSpendZeroConfChange").toBool())) if (!gArgs.SoftSetBoolArg("-spendzeroconfchange", settings.value("bSpendZeroConfChange").toBool()))
addOverriddenOption("-spendzeroconfchange"); addOverriddenOption("-spendzeroconfchange");
if (!settings.contains("SubFeeFromAmount")) {
settings.setValue("SubFeeFromAmount", false);
}
m_sub_fee_from_amount = settings.value("SubFeeFromAmount", false).toBool();
// CoinJoin // CoinJoin
if (!settings.contains("nCoinJoinSessions")) if (!settings.contains("nCoinJoinSessions"))
settings.setValue("nCoinJoinSessions", DEFAULT_COINJOIN_SESSIONS); settings.setValue("nCoinJoinSessions", DEFAULT_COINJOIN_SESSIONS);
@ -458,6 +463,8 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
case SpendZeroConfChange: case SpendZeroConfChange:
return settings.value("bSpendZeroConfChange"); return settings.value("bSpendZeroConfChange");
case SubFeeFromAmount:
return m_sub_fee_from_amount;
case ShowMasternodesTab: case ShowMasternodesTab:
return settings.value("fShowMasternodesTab"); return settings.value("fShowMasternodesTab");
case ShowGovernanceTab: case ShowGovernanceTab:
@ -633,6 +640,10 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
setRestartRequired(true); setRestartRequired(true);
} }
break; break;
case SubFeeFromAmount:
m_sub_fee_from_amount = value.toBool();
settings.setValue("SubFeeFromAmount", m_sub_fee_from_amount);
break;
case ShowGovernanceTab: case ShowGovernanceTab:
if (settings.value("fShowGovernanceTab") != value) { if (settings.value("fShowGovernanceTab") != value) {
settings.setValue("fShowGovernanceTab", value); settings.setValue("fShowGovernanceTab", value);

View File

@ -67,6 +67,7 @@ public:
FontWeightBold, // int FontWeightBold, // int
Language, // QString Language, // QString
CoinControlFeatures, // bool CoinControlFeatures, // bool
SubFeeFromAmount, // bool
KeepChangeAddress, // bool KeepChangeAddress, // bool
ThreadsScriptVerif, // int ThreadsScriptVerif, // int
Prune, // bool Prune, // bool
@ -105,6 +106,7 @@ public:
int getDisplayUnit() const { return nDisplayUnit; } int getDisplayUnit() const { return nDisplayUnit; }
QString getThirdPartyTxUrls() const { return strThirdPartyTxUrls; } QString getThirdPartyTxUrls() const { return strThirdPartyTxUrls; }
bool getCoinControlFeatures() const { return fCoinControlFeatures; } bool getCoinControlFeatures() const { return fCoinControlFeatures; }
bool getSubFeeFromAmount() const { return m_sub_fee_from_amount; }
bool getKeepChangeAddress() const { return fKeepChangeAddress; } bool getKeepChangeAddress() const { return fKeepChangeAddress; }
bool getShowAdvancedCJUI() { return fShowAdvancedCJUI; } bool getShowAdvancedCJUI() { return fShowAdvancedCJUI; }
const QString& getOverriddenByCommandLine() { return strOverriddenByCommandLine; } const QString& getOverriddenByCommandLine() { return strOverriddenByCommandLine; }
@ -132,6 +134,7 @@ private:
int nDisplayUnit; int nDisplayUnit;
QString strThirdPartyTxUrls; QString strThirdPartyTxUrls;
bool fCoinControlFeatures; bool fCoinControlFeatures;
bool m_sub_fee_from_amount;
bool fKeepChangeAddress; bool fKeepChangeAddress;
bool fShowAdvancedCJUI; bool fShowAdvancedCJUI;
/* settings that were overridden by command-line */ /* settings that were overridden by command-line */

View File

@ -103,7 +103,9 @@ void SendCoinsEntry::clear()
ui->payTo->clear(); ui->payTo->clear();
ui->addAsLabel->clear(); ui->addAsLabel->clear();
ui->payAmount->clear(); ui->payAmount->clear();
ui->checkboxSubtractFeeFromAmount->setCheckState(Qt::Unchecked); if (model && model->getOptionsModel()) {
ui->checkboxSubtractFeeFromAmount->setChecked(model->getOptionsModel()->getSubFeeFromAmount());
}
ui->messageTextLabel->clear(); ui->messageTextLabel->clear();
ui->messageTextLabel->hide(); ui->messageTextLabel->hide();
ui->messageLabel->hide(); ui->messageLabel->hide();