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