PRCYCoin  2.0.0.7rc1
P2P Digital Currency
multisenddialog.cpp
Go to the documentation of this file.
1 #include "multisenddialog.h"
2 #include "addressbookpage.h"
3 #include "base58.h"
4 #include "init.h"
5 #include "ui_multisenddialog.h"
6 #include "walletmodel.h"
7 #include <QLineEdit>
8 #include <QMessageBox>
9 #include <QStyle>
10 
11 
12 MultiSendDialog::MultiSendDialog(QWidget* parent) : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint),
13  ui(new Ui::MultiSendDialog),
14  model(0)
15 {
16  ui->setupUi(this);
17 
19 }
20 
22 {
23  delete ui;
24 }
25 
27 {
28  this->model = model;
29 }
30 
31 void MultiSendDialog::setAddress(const QString& address)
32 {
33  setAddress(address, ui->multiSendAddressEdit);
34 }
35 
36 void MultiSendDialog::setAddress(const QString& address, QLineEdit* addrEdit)
37 {
38  addrEdit->setText(address);
39  addrEdit->setFocus();
40 }
41 
43 {
44  ui->multiSendStakeCheckBox->setChecked(pwalletMain->fMultiSendStake);
45  ui->multiSendMasternodeCheckBox->setChecked(pwalletMain->fMultiSendMasternodeReward);
46 }
47 
49 {
50  if (model && model->getAddressTableModel()) {
53  if (dlg.exec())
54  setAddress(dlg.getReturnValue(), ui->multiSendAddressEdit);
55  }
56 }
57 
59 {
60  std::pair<std::string, int> pMultiSend;
61  std::string strMultiSendPrint = "";
64  strMultiSendPrint += "MultiSend Active for Stakes and Masternode Rewards\n";
65  else if (pwalletMain->fMultiSendStake)
66  strMultiSendPrint += "MultiSend Active for Stakes\n";
68  strMultiSendPrint += "MultiSend Active for Masternode Rewards\n";
69  } else
70  strMultiSendPrint += "MultiSend Not Active\n";
71 
72  for (int i = 0; i < (int)pwalletMain->vMultiSend.size(); i++) {
73  pMultiSend = pwalletMain->vMultiSend[i];
74  strMultiSendPrint += pMultiSend.first.c_str();
75  strMultiSendPrint += " - ";
76  strMultiSendPrint += std::to_string(pMultiSend.second);
77  strMultiSendPrint += "% \n";
78  }
79  ui->message->setProperty("status", "ok");
80  ui->message->style()->polish(ui->message);
81  ui->message->setText(QString(strMultiSendPrint.c_str()));
82  return;
83 }
84 
86 {
87  bool fValidConversion = false;
88  std::string strAddress = ui->multiSendAddressEdit->text().toStdString();
89  if (!CBitcoinAddress(strAddress).IsValid()) {
90  ui->message->setProperty("status", "error");
91  ui->message->style()->polish(ui->message);
92  ui->message->setText(tr("The entered address:\n") + ui->multiSendAddressEdit->text() + tr(" is invalid.\nPlease check the address and try again."));
93  ui->multiSendAddressEdit->setFocus();
94  return;
95  }
96  int nMultiSendPercent = ui->multiSendPercentEdit->text().toInt(&fValidConversion, 10);
97  int nSumMultiSend = 0;
98  for (int i = 0; i < (int)pwalletMain->vMultiSend.size(); i++)
99  nSumMultiSend += pwalletMain->vMultiSend[i].second;
100  if (nSumMultiSend + nMultiSendPercent > 100) {
101  ui->message->setProperty("status", "error");
102  ui->message->style()->polish(ui->message);
103  ui->message->setText(tr("The total amount of your MultiSend vector is over 100% of your stake reward\n"));
104  ui->multiSendAddressEdit->setFocus();
105  return;
106  }
107  if (!fValidConversion || nMultiSendPercent > 100 || nMultiSendPercent <= 0) {
108  ui->message->setProperty("status", "error");
109  ui->message->style()->polish(ui->message);
110  ui->message->setText(tr("Please Enter 1 - 100 for percent."));
111  ui->multiSendPercentEdit->setFocus();
112  return;
113  }
114  std::pair<std::string, int> pMultiSend;
115  pMultiSend.first = strAddress;
116  pMultiSend.second = nMultiSendPercent;
117  pwalletMain->vMultiSend.push_back(pMultiSend);
118  ui->message->setProperty("status", "ok");
119  ui->message->style()->polish(ui->message);
120  std::string strMultiSendPrint = "";
121  for (int i = 0; i < (int)pwalletMain->vMultiSend.size(); i++) {
122  pMultiSend = pwalletMain->vMultiSend[i];
123  strMultiSendPrint += pMultiSend.first.c_str();
124  strMultiSendPrint += " - ";
125  strMultiSendPrint += std::to_string(pMultiSend.second);
126  strMultiSendPrint += "% \n";
127  }
130  ui->message->setText(tr("MultiSend Vector\n") + QString(strMultiSendPrint.c_str()));
131  return;
132 }
133 
135 {
136  std::vector<std::pair<std::string, int> > vMultiSendTemp = pwalletMain->vMultiSend;
137  std::string strAddress = ui->multiSendAddressEdit->text().toStdString();
138  bool fRemoved = false;
139  for (int i = 0; i < (int)pwalletMain->vMultiSend.size(); i++) {
140  if (pwalletMain->vMultiSend[i].first == strAddress) {
141  pwalletMain->vMultiSend.erase(pwalletMain->vMultiSend.begin() + i);
142  fRemoved = true;
143  }
144  }
146  if (!walletdb.EraseMultiSend(vMultiSendTemp))
147  fRemoved = false;
148  if (!walletdb.WriteMultiSend(pwalletMain->vMultiSend))
149  fRemoved = false;
150 
151  if (fRemoved)
152  ui->message->setText(tr("Removed ") + QString(strAddress.c_str()));
153  else
154  ui->message->setText(tr("Could not locate address\n"));
155 
157 
158  return;
159 }
160 
162 {
163  std::string strRet = "";
164  if (pwalletMain->vMultiSend.size() < 1)
165  strRet = "Unable to activate MultiSend, check MultiSend vector\n";
166  else if (!(ui->multiSendStakeCheckBox->isChecked() || ui->multiSendMasternodeCheckBox->isChecked())) {
167  strRet = "Need to select to send on stake and/or masternode rewards\n";
168  } else if (CBitcoinAddress(pwalletMain->vMultiSend[0].first).IsValid()) {
169  pwalletMain->fMultiSendStake = ui->multiSendStakeCheckBox->isChecked();
170  pwalletMain->fMultiSendMasternodeReward = ui->multiSendMasternodeCheckBox->isChecked();
171 
174  strRet = "MultiSend activated but writing settings to DB failed";
175  else
176  strRet = "MultiSend activated";
177  } else
178  strRet = "First Address Not Valid";
179  ui->message->setProperty("status", "ok");
180  ui->message->style()->polish(ui->message);
181  ui->message->setText(tr(strRet.c_str()));
182  return;
183 }
184 
186 {
187  std::string strRet = "";
190  if (!walletdb.WriteMSettings(false, false, pwalletMain->nLastMultiSendHeight))
191  strRet = "MultiSend deactivated but writing settings to DB failed";
192  else
193  strRet = "MultiSend deactivated";
194  ui->message->setProperty("status", "");
195  ui->message->style()->polish(ui->message);
196  ui->message->setText(tr(strRet.c_str()));
197  return;
198 }
MultiSendDialog::on_addressBookButton_clicked
void on_addressBookButton_clicked()
Definition: multisenddialog.cpp:48
AddressBookPage::setModel
void setModel(AddressTableModel *model)
Definition: addressbookpage.cpp:110
AddressBookPage::SendingTab
@ SendingTab
Definition: addressbookpage.h:34
MultiSendDialog::MultiSendDialog
MultiSendDialog(QWidget *parent=0)
Definition: multisenddialog.cpp:12
MultiSendDialog::on_deleteButton_clicked
void on_deleteButton_clicked()
Definition: multisenddialog.cpp:134
WalletModel
Interface to Bitcoin wallet from Qt view code.
Definition: walletmodel.h:102
addressbookpage.h
walletmodel.h
CBitcoinAddress
base58-encoded PRCY addresses.
Definition: base58.h:109
WalletModel::getAddressTableModel
AddressTableModel * getAddressTableModel()
Definition: walletmodel.cpp:363
MultiSendDialog::updateCheckBoxes
void updateCheckBoxes()
Definition: multisenddialog.cpp:42
MultiSendDialog::on_activateButton_clicked
void on_activateButton_clicked()
Definition: multisenddialog.cpp:161
CWalletDB::EraseMultiSend
bool EraseMultiSend(std::vector< std::pair< std::string, int > > vMultiSend)
Definition: walletdb.cpp:212
MultiSendDialog::ui
Ui::MultiSendDialog * ui
Definition: multisenddialog.h:33
MultiSendDialog::model
WalletModel * model
Definition: multisenddialog.h:34
MultiSendDialog::~MultiSendDialog
~MultiSendDialog()
Definition: multisenddialog.cpp:21
MultiSendDialog
Definition: multisenddialog.h:13
init.h
CWallet::vMultiSend
std::vector< std::pair< std::string, int > > vMultiSend
Definition: wallet.h:322
CWallet::nLastMultiSendHeight
int nLastMultiSendHeight
Definition: wallet.h:327
CWalletDB
Access to the wallet database (wallet.dat)
Definition: walletdb.h:80
MultiSendDialog::on_disableButton_clicked
void on_disableButton_clicked()
Definition: multisenddialog.cpp:185
AddressBookPage
Widget that shows a list of sending or receiving addresses.
Definition: addressbookpage.h:28
MultiSendDialog::on_addButton_clicked
void on_addButton_clicked()
Definition: multisenddialog.cpp:85
CWallet::setMultiSendDisabled
void setMultiSendDisabled()
Definition: wallet.cpp:6147
MultiSendDialog::on_viewButton_clicked
void on_viewButton_clicked()
Definition: multisenddialog.cpp:58
Ui
Definition: 2faconfirmdialog.h:7
multisenddialog.h
CWalletDB::WriteMSettings
bool WriteMSettings(bool fMultiSendStake, bool fMultiSendMasternode, int nLastMultiSendHeight)
Definition: walletdb.cpp:225
MultiSendDialog::setAddress
void setAddress(const QString &address)
Definition: multisenddialog.cpp:31
base58.h
AddressBookPage::getReturnValue
const QString & getReturnValue() const
Definition: addressbookpage.h:47
CBitcoinAddress::IsValid
bool IsValid() const
Definition: base58.cpp:254
CWallet::fMultiSendStake
bool fMultiSendStake
Definition: wallet.h:323
CWallet::isMultiSendEnabled
bool isMultiSendEnabled()
Definition: wallet.cpp:6142
CWallet::strWalletFile
std::string strWalletFile
Definition: wallet.h:305
pwalletMain
CWallet * pwalletMain
Definition: wallet.cpp:49
MultiSendDialog::setModel
void setModel(WalletModel *model)
Definition: multisenddialog.cpp:26
AddressBookPage::ForSelection
@ ForSelection
Open address book to pick address.
Definition: addressbookpage.h:39
CWallet::fMultiSendMasternodeReward
bool fMultiSendMasternodeReward
Definition: wallet.h:324
CWalletDB::WriteMultiSend
bool WriteMultiSend(std::vector< std::pair< std::string, int > > vMultiSend)
Definition: walletdb.cpp:199