cecb8aecd7926647371b6abcec44f5374d397283
[novacoin.git] / src / qt / editaddressdialog.cpp
1 #include "editaddressdialog.h"
2 #include "ui_editaddressdialog.h"
3 #include "addresstablemodel.h"
4 #include "guiutil.h"
5
6 #include <QDataWidgetMapper>
7 #include <QMessageBox>
8
9 EditAddressDialog::EditAddressDialog(Mode mode, QWidget *parent) :
10     QDialog(parent),
11     ui(new Ui::EditAddressDialog), mapper(0), mode(mode), model(0)
12 {
13     ui->setupUi(this);
14
15     GUIUtil::setupAddressWidget(ui->addressEdit, this);
16
17     switch(mode)
18     {
19     case NewReceivingAddress:
20         setWindowTitle(tr("New receiving address"));
21         ui->addressEdit->setEnabled(false);
22         break;
23     case NewSendingAddress:
24         setWindowTitle(tr("New sending address"));
25         break;
26     case EditReceivingAddress:
27         setWindowTitle(tr("Edit receiving address"));
28         ui->addressEdit->setDisabled(true);
29         break;
30     case EditSendingAddress:
31         setWindowTitle(tr("Edit sending address"));
32         break;
33     }
34
35     mapper = new QDataWidgetMapper(this);
36     mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
37 }
38
39 EditAddressDialog::~EditAddressDialog()
40 {
41     delete ui;
42 }
43
44 void EditAddressDialog::setModel(AddressTableModel *model)
45 {
46     this->model = model;
47     mapper->setModel(model);
48     mapper->addMapping(ui->labelEdit, AddressTableModel::Label);
49     mapper->addMapping(ui->addressEdit, AddressTableModel::Address);
50 }
51
52 void EditAddressDialog::loadRow(int row)
53 {
54     mapper->setCurrentIndex(row);
55 }
56
57 bool EditAddressDialog::saveCurrentRow()
58 {
59     if(!model)
60         return false;
61     switch(mode)
62     {
63     case NewReceivingAddress:
64     case NewSendingAddress:
65         address = model->addRow(
66                 mode == NewSendingAddress ? AddressTableModel::Send : AddressTableModel::Receive,
67                 ui->labelEdit->text(),
68                 ui->addressEdit->text());
69         break;
70     case EditReceivingAddress:
71     case EditSendingAddress:
72         if(mapper->submit())
73         {
74             address = ui->addressEdit->text();
75         }
76         break;
77     }
78     return !address.isEmpty();
79 }
80
81 void EditAddressDialog::accept()
82 {
83     if(!model)
84         return;
85     if(!saveCurrentRow())
86     {
87         switch(model->getEditStatus())
88         {
89         case AddressTableModel::DUPLICATE_ADDRESS:
90             QMessageBox::warning(this, windowTitle(),
91                 tr("The entered address \"%1\" is already in the address book.").arg(ui->addressEdit->text()),
92                 QMessageBox::Ok, QMessageBox::Ok);
93             break;
94         case AddressTableModel::INVALID_ADDRESS:
95             QMessageBox::warning(this, windowTitle(),
96                 tr("The entered address \"%1\" is not a valid bitcoin address.").arg(ui->addressEdit->text()),
97                 QMessageBox::Ok, QMessageBox::Ok);
98             return;
99         case AddressTableModel::WALLET_UNLOCK_FAILURE:
100             QMessageBox::critical(this, windowTitle(),
101                 tr("Could not unlock wallet."),
102                 QMessageBox::Ok, QMessageBox::Ok);
103             return;
104         case AddressTableModel::KEY_GENERATION_FAILURE:
105             QMessageBox::critical(this, windowTitle(),
106                 tr("New key generation failed."),
107                 QMessageBox::Ok, QMessageBox::Ok);
108             return;
109         case AddressTableModel::OK:
110             // Failed with unknown reason. Just reject.
111             break;
112         }
113
114         return;
115     }
116     QDialog::accept();
117 }
118
119 QString EditAddressDialog::getAddress() const
120 {
121     return address;
122 }
123
124 void EditAddressDialog::setAddress(const QString &address)
125 {
126     this->address = address;
127     ui->addressEdit->setText(address);
128 }