annotate src/qt/sendcoinsdialog.cpp @ 1271:052a2a34f756 draft

Wallet encryption part 2: ask passphrase when needed, add menu options
author Wladimir J. van der Laan <laanwj@gmail.com>
date Wed, 24 Aug 2011 22:07:26 +0200 (2011-08-24)
parents d0d7e33253e5
children 310e1e69448b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
1 #include "sendcoinsdialog.h"
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
2 #include "ui_sendcoinsdialog.h"
1113
fed522d006eb Split off WalletModel from ClientModel, to be able to support multi-wallets in future
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1112
diff changeset
3 #include "walletmodel.h"
1213
b76439e5e887 preparations for multiple unit (uBTC, mBTC, BTC) support, fix amount entry issue
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1187
diff changeset
4 #include "bitcoinunits.h"
1151
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
5 #include "addressbookpage.h"
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
6 #include "optionsmodel.h"
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
7 #include "sendcoinsentry.h"
1257
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
8 #include "guiutil.h"
1271
052a2a34f756 Wallet encryption part 2: ask passphrase when needed, add menu options
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1258
diff changeset
9 #include "askpassphrasedialog.h"
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
10
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
11 #include <QMessageBox>
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
12 #include <QLocale>
1238
cba27e4719cf Properly html-escape labels
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1225
diff changeset
13 #include <QTextDocument>
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
14
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
15 SendCoinsDialog::SendCoinsDialog(QWidget *parent) :
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
16 QDialog(parent),
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
17 ui(new Ui::SendCoinsDialog),
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
18 model(0)
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
19 {
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
20 ui->setupUi(this);
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
21
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
22 addEntry();
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
23
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
24 connect(ui->addButton, SIGNAL(clicked()), this, SLOT(addEntry()));
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
25 }
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
26
1113
fed522d006eb Split off WalletModel from ClientModel, to be able to support multi-wallets in future
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1112
diff changeset
27 void SendCoinsDialog::setModel(WalletModel *model)
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
28 {
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
29 this->model = model;
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
30
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
31 for(int i = 0; i < ui->entries->count(); ++i)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
32 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
33 SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
34 if(entry)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
35 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
36 entry->setModel(model);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
37 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
38 }
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
39 }
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
40
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
41 SendCoinsDialog::~SendCoinsDialog()
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
42 {
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
43 delete ui;
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
44 }
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
45
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
46 void SendCoinsDialog::on_sendButton_clicked()
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
47 {
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
48 QList<SendCoinsRecipient> recipients;
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
49 bool valid = true;
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
50 for(int i = 0; i < ui->entries->count(); ++i)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
51 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
52 SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
53 if(entry)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
54 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
55 if(entry->validate())
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
56 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
57 recipients.append(entry->getValue());
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
58 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
59 else
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
60 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
61 valid = false;
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
62 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
63 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
64 }
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
65
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
66 if(!valid || recipients.isEmpty())
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
67 {
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
68 return;
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
69 }
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
70
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
71 // Format confirmation message
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
72 QStringList formatted;
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
73 foreach(const SendCoinsRecipient &rcp, recipients)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
74 {
1238
cba27e4719cf Properly html-escape labels
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1225
diff changeset
75 formatted.append(tr("<b>%1</b> to %2 (%3)").arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, rcp.amount), Qt::escape(rcp.label), rcp.address));
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
76 }
1099
843ca2ecfffa allow adding address to address book in send dialog
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1086
diff changeset
77
1151
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
78 QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm send coins"),
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
79 tr("Are you sure you want to send %1?").arg(formatted.join(tr(" and "))),
1151
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
80 QMessageBox::Yes|QMessageBox::Cancel,
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
81 QMessageBox::Cancel);
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
82
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
83 if(retval != QMessageBox::Yes)
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
84 {
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
85 return;
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
86 }
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
87
1271
052a2a34f756 Wallet encryption part 2: ask passphrase when needed, add menu options
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1258
diff changeset
88 WalletModel::UnlockContext ctx(model->requestUnlock());
052a2a34f756 Wallet encryption part 2: ask passphrase when needed, add menu options
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1258
diff changeset
89 if(!ctx.isValid())
052a2a34f756 Wallet encryption part 2: ask passphrase when needed, add menu options
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1258
diff changeset
90 {
052a2a34f756 Wallet encryption part 2: ask passphrase when needed, add menu options
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1258
diff changeset
91 // Unlock wallet was cancelled
052a2a34f756 Wallet encryption part 2: ask passphrase when needed, add menu options
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1258
diff changeset
92 return;
052a2a34f756 Wallet encryption part 2: ask passphrase when needed, add menu options
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1258
diff changeset
93 }
052a2a34f756 Wallet encryption part 2: ask passphrase when needed, add menu options
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1258
diff changeset
94
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
95 WalletModel::SendCoinsReturn sendstatus = model->sendCoins(recipients);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
96 switch(sendstatus.status)
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
97 {
1113
fed522d006eb Split off WalletModel from ClientModel, to be able to support multi-wallets in future
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1112
diff changeset
98 case WalletModel::InvalidAddress:
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
99 QMessageBox::warning(this, tr("Send Coins"),
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
100 tr("The recepient address is not valid, please recheck."),
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
101 QMessageBox::Ok, QMessageBox::Ok);
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
102 break;
1113
fed522d006eb Split off WalletModel from ClientModel, to be able to support multi-wallets in future
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1112
diff changeset
103 case WalletModel::InvalidAmount:
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
104 QMessageBox::warning(this, tr("Send Coins"),
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
105 tr("The amount to pay must be larger than 0."),
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
106 QMessageBox::Ok, QMessageBox::Ok);
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
107 break;
1113
fed522d006eb Split off WalletModel from ClientModel, to be able to support multi-wallets in future
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1112
diff changeset
108 case WalletModel::AmountExceedsBalance:
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
109 QMessageBox::warning(this, tr("Send Coins"),
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
110 tr("Amount exceeds your balance"),
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
111 QMessageBox::Ok, QMessageBox::Ok);
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
112 break;
1113
fed522d006eb Split off WalletModel from ClientModel, to be able to support multi-wallets in future
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1112
diff changeset
113 case WalletModel::AmountWithFeeExceedsBalance:
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
114 QMessageBox::warning(this, tr("Send Coins"),
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
115 tr("Total exceeds your balance when the %1 transaction fee is included").
1213
b76439e5e887 preparations for multiple unit (uBTC, mBTC, BTC) support, fix amount entry issue
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1187
diff changeset
116 arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, sendstatus.fee)),
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
117 QMessageBox::Ok, QMessageBox::Ok);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
118 break;
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
119 case WalletModel::DuplicateAddress:
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
120 QMessageBox::warning(this, tr("Send Coins"),
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
121 tr("Duplicate address found, can only send to each address once in one send operation"),
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
122 QMessageBox::Ok, QMessageBox::Ok);
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
123 break;
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
124 case WalletModel::TransactionCreationFailed:
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
125 QMessageBox::warning(this, tr("Send Coins"),
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
126 tr("Error: Transaction creation failed "),
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
127 QMessageBox::Ok, QMessageBox::Ok);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
128 break;
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
129 case WalletModel::TransactionCommitFailed:
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
130 QMessageBox::warning(this, tr("Send Coins"),
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
131 tr("Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."),
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
132 QMessageBox::Ok, QMessageBox::Ok);
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
133 break;
1113
fed522d006eb Split off WalletModel from ClientModel, to be able to support multi-wallets in future
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1112
diff changeset
134 case WalletModel::OK:
1049
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
135 accept();
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
136 break;
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
137 }
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
138 }
e5518d9b9f05 move back to original directory structure
Wladimir J. van der Laan <laanwj@gmail.com>
parents:
diff changeset
139
1151
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
140 void SendCoinsDialog::clear()
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
141 {
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
142 // Remove entries until only one left
1257
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
143 while(ui->entries->count())
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
144 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
145 delete ui->entries->takeAt(0)->widget();
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
146 }
1257
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
147 addEntry();
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
148
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
149 updateRemoveEnabled();
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
150
1161
43ca4b501ae7 send coins dialog: make sure send button remain default button (triggered with enter)
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1160
diff changeset
151 ui->sendButton->setDefault(true);
1151
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
152 }
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
153
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
154 void SendCoinsDialog::reject()
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
155 {
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
156 clear();
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
157 }
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
158
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
159 void SendCoinsDialog::accept()
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
160 {
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
161 clear();
3d30ee709c6b convert to full tab-based ui
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1135
diff changeset
162 }
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
163
1257
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
164 SendCoinsEntry *SendCoinsDialog::addEntry()
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
165 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
166 SendCoinsEntry *entry = new SendCoinsEntry(this);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
167 entry->setModel(model);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
168 ui->entries->addWidget(entry);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
169 connect(entry, SIGNAL(removeEntry(SendCoinsEntry*)), this, SLOT(removeEntry(SendCoinsEntry*)));
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
170
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
171 updateRemoveEnabled();
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
172
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
173 // Focus the field, so that entry can start immediately
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
174 entry->clear();
1257
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
175 return entry;
1187
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
176 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
177
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
178 void SendCoinsDialog::updateRemoveEnabled()
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
179 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
180 // Remove buttons are enabled as soon as there is more than one send-entry
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
181 bool enabled = (ui->entries->count() > 1);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
182 for(int i = 0; i < ui->entries->count(); ++i)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
183 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
184 SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
185 if(entry)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
186 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
187 entry->setRemoveEnabled(enabled);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
188 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
189 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
190 setupTabChain(0);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
191 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
192
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
193 void SendCoinsDialog::removeEntry(SendCoinsEntry* entry)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
194 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
195 delete entry;
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
196 updateRemoveEnabled();
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
197 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
198
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
199 QWidget *SendCoinsDialog::setupTabChain(QWidget *prev)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
200 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
201 for(int i = 0; i < ui->entries->count(); ++i)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
202 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
203 SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
204 if(entry)
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
205 {
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
206 prev = entry->setupTabChain(prev);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
207 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
208 }
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
209 QWidget::setTabOrder(prev, ui->addButton);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
210 QWidget::setTabOrder(ui->addButton, ui->sendButton);
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
211 return ui->sendButton;
5c41b03dc484 add sendmany support
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1176
diff changeset
212 }
1257
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
213
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
214 void SendCoinsDialog::pasteEntry(const SendCoinsRecipient &rv)
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
215 {
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
216 SendCoinsEntry *entry = 0;
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
217 // Replace the first entry if it is still unused
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
218 if(ui->entries->count() == 1)
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
219 {
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
220 SendCoinsEntry *first = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(0)->widget());
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
221 if(first->isClear())
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
222 {
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
223 entry = first;
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
224 }
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
225 }
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
226 if(!entry)
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
227 {
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
228 entry = addEntry();
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
229 }
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
230
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
231 entry->setValue(rv);
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
232 }
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
233
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
234
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
235 void SendCoinsDialog::handleURL(const QUrl *url)
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
236 {
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
237 SendCoinsRecipient rv;
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
238 if(!GUIUtil::parseBitcoinURL(url, &rv))
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
239 {
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
240 return;
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
241 }
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
242 pasteEntry(rv);
3f0305184c57 Accept "bitcoin:" URL drops from browsers
Wladimir J. van der Laan <laanwj@gmail.com>
parents: 1238
diff changeset
243 }