allow adding address to address book in send dialog
[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     QString label;
50     qint64 payAmountParsed;
51
52     valid = ParseMoney(payAmount.toStdString(), payAmountParsed);
53
54     if(!valid)
55     {
56         QMessageBox::warning(this, tr("Send Coins"),
57             tr("The amount to pay must be a valid number."),
58             QMessageBox::Ok, QMessageBox::Ok);
59         return;
60     }
61
62     if(ui->addToAddressBook->isChecked())
63     {
64         // Add address to address book under label, if specified
65         label = ui->addAsLabel->text();
66     }
67
68     switch(model->sendCoins(ui->payTo->text(), payAmountParsed, label))
69     {
70     case ClientModel::InvalidAddress:
71         QMessageBox::warning(this, tr("Send Coins"),
72             tr("The recepient address is not valid, please recheck."),
73             QMessageBox::Ok, QMessageBox::Ok);
74         ui->payTo->setFocus();
75         break;
76     case ClientModel::InvalidAmount:
77         QMessageBox::warning(this, tr("Send Coins"),
78             tr("The amount to pay must be larger than 0."),
79             QMessageBox::Ok, QMessageBox::Ok);
80         ui->payAmount->setFocus();
81         break;
82     case ClientModel::AmountExceedsBalance:
83         QMessageBox::warning(this, tr("Send Coins"),
84             tr("Amount exceeds your balance"),
85             QMessageBox::Ok, QMessageBox::Ok);
86         ui->payAmount->setFocus();
87         break;
88     case ClientModel::AmountWithFeeExceedsBalance:
89         QMessageBox::warning(this, tr("Send Coins"),
90             tr("Total exceeds your balance when the %1 transaction fee is included").
91                 arg(QString::fromStdString(FormatMoney(model->getOptionsModel()->getTransactionFee()))),
92             QMessageBox::Ok, QMessageBox::Ok);
93         ui->payAmount->setFocus();
94         break;
95     case ClientModel::OK:
96         accept();
97         break;
98     }
99 }
100
101 void SendCoinsDialog::on_pasteButton_clicked()
102 {
103     // Paste text from clipboard into recipient field
104     ui->payTo->setText(QApplication::clipboard()->text());
105 }
106
107 void SendCoinsDialog::on_addressBookButton_clicked()
108 {
109     AddressBookDialog dlg(AddressBookDialog::ForSending);
110     dlg.setModel(model->getAddressTableModel());
111     dlg.setTab(AddressBookDialog::SendingTab);
112     dlg.exec();
113     ui->payTo->setText(dlg.getReturnValue());
114 }
115
116 void SendCoinsDialog::on_buttonBox_rejected()
117 {
118     reject();
119 }
120
121 void SendCoinsDialog::on_addToAddressBook_toggled(bool checked)
122 {
123     ui->addAsLabel->setEnabled(checked);
124 }