create new address from main gui, move address book model to client model
[novacoin.git] / gui / src / addressbookdialog.cpp
1 #include "addressbookdialog.h"
2 #include "ui_addressbookdialog.h"
3
4 #include "addresstablemodel.h"
5 #include "editaddressdialog.h"
6
7 #include <QSortFilterProxyModel>
8 #include <QClipboard>
9 #include <QDebug>
10
11 AddressBookDialog::AddressBookDialog(QWidget *parent) :
12     QDialog(parent),
13     ui(new Ui::AddressBookDialog),
14     model(0)
15 {
16     ui->setupUi(this);
17 }
18
19 AddressBookDialog::~AddressBookDialog()
20 {
21     delete ui;
22 }
23
24 void AddressBookDialog::setModel(AddressTableModel *model)
25 {
26     /* Refresh list from core */
27     model->updateList();
28
29     /* Receive filter */
30     QSortFilterProxyModel *receive_model = new QSortFilterProxyModel(this);
31     receive_model->setSourceModel(model);
32     receive_model->setDynamicSortFilter(true);
33     receive_model->setFilterRole(AddressTableModel::TypeRole);
34     receive_model->setFilterFixedString(AddressTableModel::Receive);
35     ui->receiveTableView->setModel(receive_model);
36
37     /* Send filter */
38     QSortFilterProxyModel *send_model = new QSortFilterProxyModel(this);
39     send_model->setSourceModel(model);
40     send_model->setDynamicSortFilter(true);
41     send_model->setFilterRole(AddressTableModel::TypeRole);
42     send_model->setFilterFixedString(AddressTableModel::Send);
43     ui->sendTableView->setModel(send_model);
44
45     /* Set column widths */
46     ui->receiveTableView->horizontalHeader()->resizeSection(
47             AddressTableModel::Address, 320);
48     ui->receiveTableView->horizontalHeader()->setResizeMode(
49             AddressTableModel::Label, QHeaderView::Stretch);
50     ui->sendTableView->horizontalHeader()->resizeSection(
51             AddressTableModel::Address, 320);
52     ui->sendTableView->horizontalHeader()->setResizeMode(
53             AddressTableModel::Label, QHeaderView::Stretch);
54 }
55
56 void AddressBookDialog::setTab(int tab)
57 {
58     ui->tabWidget->setCurrentIndex(tab);
59 }
60
61 QTableView *AddressBookDialog::getCurrentTable()
62 {
63     switch(ui->tabWidget->currentIndex())
64     {
65     case SendingTab:
66         return ui->sendTableView;
67     case ReceivingTab:
68         return ui->receiveTableView;
69     default:
70         return 0;
71     }
72 }
73
74 void AddressBookDialog::on_copyToClipboard_clicked()
75 {
76     /* Copy currently selected address to clipboard
77        (or nothing, if nothing selected)
78      */
79     QTableView *table = getCurrentTable();
80     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
81
82     foreach (QModelIndex index, indexes) {
83         QVariant address = table->model()->data(index);
84         QApplication::clipboard()->setText(address.toString());
85     }
86 }
87
88 void AddressBookDialog::on_editButton_clicked()
89 {
90     QModelIndexList indexes = getCurrentTable()->selectionModel()->selectedRows();
91     if(indexes.isEmpty())
92     {
93         return;
94     }
95
96     /* Double click also triggers edit button */
97     EditAddressDialog dlg(
98             ui->tabWidget->currentIndex() == SendingTab ?
99             EditAddressDialog::EditSendingAddress :
100             EditAddressDialog::EditReceivingAddress);
101     dlg.setModel(model);
102     dlg.loadRow(indexes.at(0).row());
103     if(dlg.exec())
104     {
105         dlg.saveCurrentRow();
106     }
107 }
108
109 void AddressBookDialog::on_newAddressButton_clicked()
110 {
111     EditAddressDialog dlg(
112             ui->tabWidget->currentIndex() == SendingTab ?
113             EditAddressDialog::NewSendingAddress :
114             EditAddressDialog::NewReceivingAddress);
115     dlg.setModel(model);
116     if(dlg.exec())
117     {
118         dlg.saveCurrentRow();
119     }
120 }
121
122 void AddressBookDialog::on_tabWidget_currentChanged(int index)
123 {
124     switch(index)
125     {
126     case SendingTab:
127         ui->deleteButton->setEnabled(true);
128         break;
129     case ReceivingTab:
130         ui->deleteButton->setEnabled(false);
131         break;
132     }
133 }
134
135 void AddressBookDialog::on_deleteButton_clicked()
136 {
137     QTableView *table = getCurrentTable();
138     QModelIndexList indexes = table->selectionModel()->selectedRows();
139     if(!indexes.isEmpty())
140     {
141         table->model()->removeRow(indexes.at(0).row());
142     }
143 }
144
145 void AddressBookDialog::on_buttonBox_accepted()
146 {
147     QTableView *table = getCurrentTable();
148     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
149
150     foreach (QModelIndex index, indexes) {
151         QVariant address = table->model()->data(index);
152         returnValue = address.toString();
153     }
154     if(!returnValue.isEmpty())
155     {
156         accept();
157     }
158     else
159     {
160         reject();
161     }
162 }