move getTransactionFee to OptionsModel
[novacoin.git] / gui / src / sendcoinsdialog.cpp
1 #include "sendcoinsdialog.h"
2 #include "ui_sendcoinsdialog.h"
3 #include "clientmodel.h"
4
5 #include "addressbookdialog.h"
6 #include "bitcoinaddressvalidator.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     /* Set up validators */
26     ui->payTo->setMaxLength(BitcoinAddressValidator::MaxAddressLength);
27     ui->payTo->setValidator(new BitcoinAddressValidator(this));
28     QDoubleValidator *amountValidator = new QDoubleValidator(this);
29     amountValidator->setDecimals(8);
30     amountValidator->setBottom(0.0);
31     ui->payAmount->setValidator(amountValidator);
32
33     /* Set initial address if provided */
34     if(!address.isEmpty())
35     {
36         ui->payTo->setText(address);
37         ui->payAmount->setFocus();
38     }
39 }
40
41 void SendCoinsDialog::setModel(ClientModel *model)
42 {
43     this->model = model;
44 }
45
46 SendCoinsDialog::~SendCoinsDialog()
47 {
48     delete ui;
49 }
50
51 void SendCoinsDialog::on_sendButton_clicked()
52 {
53     bool valid;
54     QString payAmount = ui->payAmount->text();
55     qint64 payAmountParsed;
56
57     valid = ParseMoney(payAmount.toStdString(), payAmountParsed);
58
59     if(!valid)
60     {
61         QMessageBox::warning(this, tr("Send Coins"),
62             tr("The amount to pay must be a valid number."),
63             QMessageBox::Ok, QMessageBox::Ok);
64         return;
65     }
66
67     switch(model->sendCoins(ui->payTo->text(), payAmountParsed))
68     {
69     case ClientModel::InvalidAddress:
70         QMessageBox::warning(this, tr("Send Coins"),
71             tr("The recepient address is not valid, please recheck."),
72             QMessageBox::Ok, QMessageBox::Ok);
73         ui->payTo->setFocus();
74         break;
75     case ClientModel::InvalidAmount:
76         QMessageBox::warning(this, tr("Send Coins"),
77             tr("The amount to pay must be larger than 0."),
78             QMessageBox::Ok, QMessageBox::Ok);
79         ui->payAmount->setFocus();
80         break;
81     case ClientModel::AmountExceedsBalance:
82         QMessageBox::warning(this, tr("Send Coins"),
83             tr("Amount exceeds your balance"),
84             QMessageBox::Ok, QMessageBox::Ok);
85         ui->payAmount->setFocus();
86         break;
87     case ClientModel::AmountWithFeeExceedsBalance:
88         QMessageBox::warning(this, tr("Send Coins"),
89             tr("Total exceeds your balance when the %1 transaction fee is included").
90                 arg(QString::fromStdString(FormatMoney(model->getOptionsModel()->getTransactionFee()))),
91             QMessageBox::Ok, QMessageBox::Ok);
92         ui->payAmount->setFocus();
93         break;
94     case ClientModel::OK:
95         accept();
96         break;
97     }
98 }
99
100 void SendCoinsDialog::on_pasteButton_clicked()
101 {
102     /* Paste text from clipboard into recipient field */
103     ui->payTo->setText(QApplication::clipboard()->text());
104 }
105
106 void SendCoinsDialog::on_addressBookButton_clicked()
107 {
108     AddressBookDialog dlg;
109     dlg.exec();
110     ui->payTo->setText(dlg.getReturnValue());
111 }
112
113 void SendCoinsDialog::on_buttonBox_rejected()
114 {
115     reject();
116 }