776487c85d70ae02a2c14884505c30885b81b7f3
[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->setEnabled(false);
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     if(!model)
48         return;
49
50     mapper->setModel(model);
51     mapper->addMapping(ui->labelEdit, AddressTableModel::Label);
52     mapper->addMapping(ui->addressEdit, AddressTableModel::Address);
53 }
54
55 void EditAddressDialog::loadRow(int row)
56 {
57     mapper->setCurrentIndex(row);
58 }
59
60 bool EditAddressDialog::saveCurrentRow()
61 {
62     if(!model)
63         return false;
64
65     switch(mode)
66     {
67     case NewReceivingAddress:
68     case NewSendingAddress:
69         address = model->addRow(
70                 mode == NewSendingAddress ? AddressTableModel::Send : AddressTableModel::Receive,
71                 ui->labelEdit->text(),
72                 ui->addressEdit->text());
73         break;
74     case EditReceivingAddress:
75     case EditSendingAddress:
76         if(mapper->submit())
77         {
78             address = ui->addressEdit->text();
79         }
80         break;
81     }
82     return !address.isEmpty();
83 }
84
85 void EditAddressDialog::accept()
86 {
87     if(!model)
88         return;
89
90     if(!saveCurrentRow())
91     {
92         switch(model->getEditStatus())
93         {
94         case AddressTableModel::OK:
95             // Failed with unknown reason. Just reject.
96             break;
97         case AddressTableModel::NO_CHANGES:
98             // No changes were made during edit operation. Just reject.
99             break;
100         case AddressTableModel::INVALID_ADDRESS:
101             QMessageBox::warning(this, windowTitle(),
102                 tr("The entered address \"%1\" is not a valid NovaCoin address.").arg(ui->addressEdit->text()),
103                 QMessageBox::Ok, QMessageBox::Ok);
104             break;
105         case AddressTableModel::DUPLICATE_ADDRESS:
106             QMessageBox::warning(this, windowTitle(),
107                 tr("The entered address \"%1\" is already in the address book.").arg(ui->addressEdit->text()),
108                 QMessageBox::Ok, QMessageBox::Ok);
109             break;
110         case AddressTableModel::WALLET_UNLOCK_FAILURE:
111             QMessageBox::critical(this, windowTitle(),
112                 tr("Could not unlock wallet."),
113                 QMessageBox::Ok, QMessageBox::Ok);
114             break;
115         case AddressTableModel::KEY_GENERATION_FAILURE:
116             QMessageBox::critical(this, windowTitle(),
117                 tr("New key generation failed."),
118                 QMessageBox::Ok, QMessageBox::Ok);
119             break;
120
121         }
122         return;
123     }
124     QDialog::accept();
125 }
126
127 QString EditAddressDialog::getAddress() const
128 {
129     return address;
130 }
131
132 void EditAddressDialog::setAddress(const QString &address)
133 {
134     this->address = address;
135     ui->addressEdit->setText(address);
136 }