33// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44
55#include " qt/pivx/masternodeswidget.h"
6+ #include " coincontrol.h"
67#include " qt/pivx/forms/ui_masternodeswidget.h"
78
89#include " qt/pivx/qtutils.h"
@@ -88,11 +89,16 @@ MasterNodesWidget::MasterNodesWidget(PIVXGUI *parent) :
8889 setCssBtnPrimary (ui->pushButtonStartAll );
8990 setCssBtnPrimary (ui->pushButtonStartMissing );
9091
92+ /* Coin control */
93+ this ->coinControlDialog = new CoinControlDialog ();
94+
9195 /* Options */
9296 ui->btnAbout ->setTitleClassAndText (" btn-title-grey" , tr (" What is a Masternode?" ));
9397 ui->btnAbout ->setSubTitleClassAndText (" text-subtitle" , tr (" FAQ explaining what Masternodes are" ));
9498 ui->btnAboutController ->setTitleClassAndText (" btn-title-grey" , tr (" What is a Controller?" ));
9599 ui->btnAboutController ->setSubTitleClassAndText (" text-subtitle" , tr (" FAQ explaining what is a Masternode Controller" ));
100+ ui->btnCoinControl ->setTitleClassAndText (" btn-title-grey" , " Coin Control" );
101+ ui->btnCoinControl ->setSubTitleClassAndText (" text-subtitle" , " Select the source of coins to create a Masternode" );
96102
97103 setCssProperty (ui->listMn , " container" );
98104 ui->listMn ->setItemDelegate (delegate);
@@ -115,6 +121,7 @@ MasterNodesWidget::MasterNodesWidget(PIVXGUI *parent) :
115121 connect (ui->listMn , &QListView::clicked, this , &MasterNodesWidget::onMNClicked);
116122 connect (ui->btnAbout , &OptionButton::clicked, [this ](){window->openFAQ (SettingsFaqWidget::Section::MASTERNODE);});
117123 connect (ui->btnAboutController , &OptionButton::clicked, [this ](){window->openFAQ (SettingsFaqWidget::Section::MNCONTROLLER);});
124+ connect (ui->btnCoinControl , &OptionButton::clicked, this , &MasterNodesWidget::onCoinControlClicked);
118125}
119126
120127void MasterNodesWidget::showEvent (QShowEvent *event)
@@ -366,6 +373,22 @@ void MasterNodesWidget::onCreateMNClicked()
366373 .arg (GUIUtil::formatBalance (mnCollateralAmount, BitcoinUnits::PIV)));
367374 return ;
368375 }
376+
377+ if (coinControlDialog->coinControl && coinControlDialog->coinControl ->HasSelected ()) {
378+ std::vector<OutPointWrapper> coins;
379+ coinControlDialog->coinControl ->ListSelected (coins);
380+ CAmount selectedBalance = 0 ;
381+ for (const auto & coin : coins) {
382+ selectedBalance += coin.value ;
383+ }
384+ if (selectedBalance <= mnCollateralAmount) {
385+ inform (tr (" Not enough coins selected to create a masternode, %1 required." )
386+ .arg (GUIUtil::formatBalance (mnCollateralAmount, BitcoinUnits::PIV)));
387+ return ;
388+ }
389+ mnModel->setCoinControl (coinControlDialog->coinControl );
390+ }
391+
369392 showHideOp (true );
370393 MasterNodeWizardDialog *dialog = new MasterNodeWizardDialog (walletModel, mnModel, window);
371394 if (openDialogWithOpaqueBackgroundY (dialog, window, 5 , 7 )) {
@@ -380,13 +403,30 @@ void MasterNodesWidget::onCreateMNClicked()
380403 }
381404 }
382405 dialog->deleteLater ();
406+ resetCoinControl ();
383407}
384408
385409void MasterNodesWidget::changeTheme (bool isLightTheme, QString& theme)
386410{
387411 static_cast <MNHolder*>(this ->delegate ->getRowFactory ())->isLightTheme = isLightTheme;
388412}
389413
414+ void MasterNodesWidget::onCoinControlClicked ()
415+ {
416+ if (!coinControlDialog->hasModel ()) coinControlDialog->setModel (walletModel);
417+ coinControlDialog->setSelectionType (true );
418+ coinControlDialog->refreshDialog ();
419+ coinControlDialog->exec ();
420+ ui->btnCoinControl ->setActive (coinControlDialog->coinControl ->HasSelected ());
421+ }
422+
423+ void MasterNodesWidget::resetCoinControl ()
424+ {
425+ if (coinControlDialog) coinControlDialog->coinControl ->SetNull ();
426+ mnModel->resetCoinControl ();
427+ ui->btnCoinControl ->setActive (false );
428+ }
429+
390430MasterNodesWidget::~MasterNodesWidget ()
391431{
392432 delete ui;
0 commit comments