31
31
#include < QTextDocument>
32
32
#include < QTimer>
33
33
34
+ static const std::array<int , 9 > confTargets = { {2 , 4 , 6 , 12 , 24 , 48 , 144 , 504 , 1008 } };
35
+ int getConfTargetForIndex (int index) {
36
+ if (index+1 > static_cast <int >(confTargets.size ())) {
37
+ return confTargets.back ();
38
+ }
39
+ if (index < 0 ) {
40
+ return confTargets[0 ];
41
+ }
42
+ return confTargets[index];
43
+ }
44
+ int getIndexForConfTarget (int target) {
45
+ for (unsigned int i = 0 ; i < confTargets.size (); i++) {
46
+ if (confTargets[i] >= target) {
47
+ return i;
48
+ }
49
+ }
50
+ return confTargets.size () - 1 ;
51
+ }
52
+
34
53
SendCoinsDialog::SendCoinsDialog (const PlatformStyle *_platformStyle, QWidget *parent) :
35
54
QDialog(parent),
36
55
ui(new Ui::SendCoinsDialog),
@@ -152,9 +171,12 @@ void SendCoinsDialog::setModel(WalletModel *_model)
152
171
coinControlUpdateLabels ();
153
172
154
173
// fee section
155
- connect (ui->sliderSmartFee , SIGNAL (valueChanged (int )), this , SLOT (updateSmartFeeLabel ()));
156
- connect (ui->sliderSmartFee , SIGNAL (valueChanged (int )), this , SLOT (updateGlobalFeeVariables ()));
157
- connect (ui->sliderSmartFee , SIGNAL (valueChanged (int )), this , SLOT (coinControlUpdateLabels ()));
174
+ for (const int &n : confTargets) {
175
+ ui->confTargetSelector ->addItem (tr (" %1 (%2 blocks)" ).arg (GUIUtil::formatNiceTimeOffset (n*Params ().GetConsensus ().nPowTargetSpacing )).arg (n));
176
+ }
177
+ connect (ui->confTargetSelector , SIGNAL (currentIndexChanged (int )), this , SLOT (updateSmartFeeLabel ()));
178
+ connect (ui->confTargetSelector , SIGNAL (currentIndexChanged (int )), this , SLOT (updateGlobalFeeVariables ()));
179
+ connect (ui->confTargetSelector , SIGNAL (currentIndexChanged (int )), this , SLOT (coinControlUpdateLabels ()));
158
180
connect (ui->groupFee , SIGNAL (buttonClicked (int )), this , SLOT (updateFeeSectionControls ()));
159
181
connect (ui->groupFee , SIGNAL (buttonClicked (int )), this , SLOT (updateGlobalFeeVariables ()));
160
182
connect (ui->groupFee , SIGNAL (buttonClicked (int )), this , SLOT (coinControlUpdateLabels ()));
@@ -177,10 +199,10 @@ void SendCoinsDialog::setModel(WalletModel *_model)
177
199
178
200
// set the smartfee-sliders default value (wallets default conf.target or last stored value)
179
201
QSettings settings;
180
- if (settings.value (" nSmartFeeSliderPosition " ).toInt () == 0 )
181
- ui->sliderSmartFee -> setValue (ui-> sliderSmartFee -> maximum () - model->getDefaultConfirmTarget () + 2 );
202
+ if (settings.value (" nConfTarget " ).toInt () == 0 )
203
+ ui->confTargetSelector -> setCurrentIndex ( getIndexForConfTarget ( model->getDefaultConfirmTarget ()) );
182
204
else
183
- ui->sliderSmartFee -> setValue ( settings.value (" nSmartFeeSliderPosition " ).toInt ());
205
+ ui->confTargetSelector -> setCurrentIndex ( getIndexForConfTarget ( settings.value (" nConfTarget " ).toInt () ));
184
206
}
185
207
}
186
208
@@ -190,7 +212,7 @@ SendCoinsDialog::~SendCoinsDialog()
190
212
settings.setValue (" fFeeSectionMinimized" , fFeeMinimized );
191
213
settings.setValue (" nFeeRadio" , ui->groupFee ->checkedId ());
192
214
settings.setValue (" nCustomFeeRadio" , ui->groupCustomFee ->checkedId ());
193
- settings.setValue (" nSmartFeeSliderPosition " , ui->sliderSmartFee -> value ( ));
215
+ settings.setValue (" nConfTarget " , getConfTargetForIndex ( ui->confTargetSelector -> currentIndex () ));
194
216
settings.setValue (" nTransactionFee" , (qint64)ui->customFee ->value ());
195
217
settings.setValue (" fPayOnlyMinFee" , ui->checkBoxMinimumFee ->isChecked ());
196
218
@@ -244,7 +266,7 @@ void SendCoinsDialog::on_sendButton_clicked()
244
266
if (model->getOptionsModel ()->getCoinControlFeatures ())
245
267
ctrl = *CoinControlDialog::coinControl;
246
268
if (ui->radioSmartFee ->isChecked ())
247
- ctrl.nConfirmTarget = ui-> sliderSmartFee -> maximum () - ui->sliderSmartFee -> value () + 2 ;
269
+ ctrl.nConfirmTarget = getConfTargetForIndex ( ui->confTargetSelector -> currentIndex ()) ;
248
270
else
249
271
ctrl.nConfirmTarget = 0 ;
250
272
@@ -594,14 +616,11 @@ void SendCoinsDialog::setMinimumFee()
594
616
595
617
void SendCoinsDialog::updateFeeSectionControls ()
596
618
{
597
- ui->sliderSmartFee ->setEnabled (ui->radioSmartFee ->isChecked ());
619
+ ui->confTargetSelector ->setEnabled (ui->radioSmartFee ->isChecked ());
598
620
ui->labelSmartFee ->setEnabled (ui->radioSmartFee ->isChecked ());
599
621
ui->labelSmartFee2 ->setEnabled (ui->radioSmartFee ->isChecked ());
600
622
ui->labelSmartFee3 ->setEnabled (ui->radioSmartFee ->isChecked ());
601
623
ui->labelFeeEstimation ->setEnabled (ui->radioSmartFee ->isChecked ());
602
- ui->labelSmartFeeNormal ->setEnabled (ui->radioSmartFee ->isChecked ());
603
- ui->labelSmartFeeFast ->setEnabled (ui->radioSmartFee ->isChecked ());
604
- ui->confirmationTargetLabel ->setEnabled (ui->radioSmartFee ->isChecked ());
605
624
ui->checkBoxMinimumFee ->setEnabled (ui->radioCustomFee ->isChecked ());
606
625
ui->labelMinFeeWarning ->setEnabled (ui->radioCustomFee ->isChecked ());
607
626
ui->radioCustomPerKilobyte ->setEnabled (ui->radioCustomFee ->isChecked () && !ui->checkBoxMinimumFee ->isChecked ());
@@ -612,11 +631,7 @@ void SendCoinsDialog::updateGlobalFeeVariables()
612
631
{
613
632
if (ui->radioSmartFee ->isChecked ())
614
633
{
615
- int nConfirmTarget = ui->sliderSmartFee ->maximum () - ui->sliderSmartFee ->value () + 2 ;
616
634
payTxFee = CFeeRate (0 );
617
-
618
- // show the estimated required time for confirmation
619
- ui->confirmationTargetLabel ->setText (GUIUtil::formatDurationStr (nConfirmTarget * Params ().GetConsensus ().nPowTargetSpacing ) + " / " + tr (" %n block(s)" , " " , nConfirmTarget));
620
635
}
621
636
else
622
637
{
@@ -650,7 +665,7 @@ void SendCoinsDialog::updateSmartFeeLabel()
650
665
if (!model || !model->getOptionsModel ())
651
666
return ;
652
667
653
- int nBlocksToConfirm = ui-> sliderSmartFee -> maximum () - ui->sliderSmartFee -> value () + 2 ;
668
+ int nBlocksToConfirm = getConfTargetForIndex ( ui->confTargetSelector -> currentIndex ()) ;
654
669
FeeCalculation feeCalc;
655
670
CFeeRate feeRate = ::feeEstimator.estimateSmartFee (nBlocksToConfirm, &feeCalc, ::mempool);
656
671
if (feeRate <= CFeeRate (0 )) // not enough data => minfee
@@ -823,7 +838,7 @@ void SendCoinsDialog::coinControlUpdateLabels()
823
838
CoinControlDialog::payAmounts.clear ();
824
839
CoinControlDialog::fSubtractFeeFromAmount = false ;
825
840
if (ui->radioSmartFee ->isChecked ()) {
826
- CoinControlDialog::coinControl->nConfirmTarget = ui-> sliderSmartFee -> maximum () - ui->sliderSmartFee -> value () + 2 ;
841
+ CoinControlDialog::coinControl->nConfirmTarget = getConfTargetForIndex ( ui->confTargetSelector -> currentIndex ()) ;
827
842
} else {
828
843
CoinControlDialog::coinControl->nConfirmTarget = model->getDefaultConfirmTarget ();
829
844
}
0 commit comments