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