5f9ee18a37e9145e6ca855d89f461624029784af
[novacoin.git] / src / qt / sendcoinsdialog.cpp
1 #include "sendcoinsdialog.h"
2 #include "ui_sendcoinsdialog.h"
3 #include "clientmodel.h"
4 #include "guiutil.h"
5
6 #include "addressbookdialog.h"
7 #include "optionsmodel.h"
8
9 #include <QApplication>
10 #include <QClipboard>
11 #include <QMessageBox>
12 #include <QLocale>
13 #include <QDebug>
14
15 #include "util.h"
16 #include "base58.h"
17
18 SendCoinsDialog::SendCoinsDialog(QWidget *parent, const QString &address) :
19     QDialog(parent),
20     ui(new Ui::SendCoinsDialog),
21     model(0)
22 {
23     ui->setupUi(this);
24
25     GUIUtil::setupAddressWidget(ui->payTo, this);
26
27     // Set initial send-to address if provided
28     if(!address.isEmpty())
29     {
30         ui->payTo->setText(address);
31         ui->payAmount->setFocus();
32     }
33 }
34
35 void SendCoinsDialog::setModel(ClientModel *model)
36 {
37     this->model = model;
38 }
39
40 SendCoinsDialog::~SendCoinsDialog()
41 {
42     delete ui;
43 }
44
45 void SendCoinsDialog::on_sendButton_clicked()
46 {
47     bool valid;
48     QString payAmount = ui->payAmount->text();
49     qint64 payAmountParsed;
50
51     valid = ParseMoney(payAmount.toStdString(), payAmountParsed);
52
53     if(!valid)
54     {
55         QMessageBox::warning(this, tr("Send Coins"),
56             tr("The amount to pay must be a valid number."),
57             QMessageBox::Ok, QMessageBox::Ok);
58         return;
59     }
60
61     switch(model->sendCoins(ui->payTo->text(), payAmountParsed))
62     {
63     case ClientModel::InvalidAddress:
64         QMessageBox::warning(this, tr("Send Coins"),
65             tr("The recepient address is not valid, please recheck."),
66             QMessageBox::Ok, QMessageBox::Ok);
67         ui->payTo->setFocus();
68         break;
69     case ClientModel::InvalidAmount:
70         QMessageBox::warning(this, tr("Send Coins"),
71             tr("The amount to pay must be larger than 0."),
72             QMessageBox::Ok, QMessageBox::Ok);
73         ui->payAmount->setFocus();
74         break;
75     case ClientModel::AmountExceedsBalance:
76         QMessageBox::warning(this, tr("Send Coins"),
77             tr("Amount exceeds your balance"),
78             QMessageBox::Ok, QMessageBox::Ok);
79         ui->payAmount->setFocus();
80         break;
81     case ClientModel::AmountWithFeeExceedsBalance:
82         QMessageBox::warning(this, tr("Send Coins"),
83             tr("Total exceeds your balance when the %1 transaction fee is included").
84                 arg(QString::fromStdString(FormatMoney(model->getOptionsModel()->getTransactionFee()))),
85             QMessageBox::Ok, QMessageBox::Ok);
86         ui->payAmount->setFocus();
87         break;
88     case ClientModel::OK:
89         accept();
90         break;
91     }
92 }
93
94 void SendCoinsDialog::on_pasteButton_clicked()
95 {
96     // Paste text from clipboard into recipient field
97     ui->payTo->setText(QApplication::clipboard()->text());
98 }
99
100 void SendCoinsDialog::on_addressBookButton_clicked()
101 {
102     AddressBookDialog dlg(AddressBookDialog::ForSending);
103     dlg.setModel(model->getAddressTableModel());
104     dlg.setTab(AddressBookDialog::SendingTab);
105     dlg.exec();
106     ui->payTo->setText(dlg.getReturnValue());
107 }
108
109 void SendCoinsDialog::on_buttonBox_rejected()
110 {
111     reject();
112 }