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