Somewhat confident now, tested on GNOME+KDE, with all types of transactions. Next...
[novacoin.git] / src / qt / 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     this->model = model;
27     /* Refresh list from core */
28     model->updateList();
29
30     /* Receive filter */
31     QSortFilterProxyModel *receive_model = new QSortFilterProxyModel(this);
32     receive_model->setSourceModel(model);
33     receive_model->setDynamicSortFilter(true);
34     receive_model->setFilterRole(AddressTableModel::TypeRole);
35     receive_model->setFilterFixedString(AddressTableModel::Receive);
36     ui->receiveTableView->setModel(receive_model);
37
38     /* Send filter */
39     QSortFilterProxyModel *send_model = new QSortFilterProxyModel(this);
40     send_model->setSourceModel(model);
41     send_model->setDynamicSortFilter(true);
42     send_model->setFilterRole(AddressTableModel::TypeRole);
43     send_model->setFilterFixedString(AddressTableModel::Send);
44     ui->sendTableView->setModel(send_model);
45
46     /* Set column widths */
47     ui->receiveTableView->horizontalHeader()->resizeSection(
48             AddressTableModel::Address, 320);
49     ui->receiveTableView->horizontalHeader()->setResizeMode(
50             AddressTableModel::Label, QHeaderView::Stretch);
51     ui->sendTableView->horizontalHeader()->resizeSection(
52             AddressTableModel::Address, 320);
53     ui->sendTableView->horizontalHeader()->setResizeMode(
54             AddressTableModel::Label, QHeaderView::Stretch);
55 }
56
57 void AddressBookDialog::setTab(int tab)
58 {
59     ui->tabWidget->setCurrentIndex(tab);
60 }
61
62 QTableView *AddressBookDialog::getCurrentTable()
63 {
64     switch(ui->tabWidget->currentIndex())
65     {
66     case SendingTab:
67         return ui->sendTableView;
68     case ReceivingTab:
69         return ui->receiveTableView;
70     default:
71         return 0;
72     }
73 }
74
75 void AddressBookDialog::on_copyToClipboard_clicked()
76 {
77     /* Copy currently selected address to clipboard
78        (or nothing, if nothing selected)
79      */
80     QTableView *table = getCurrentTable();
81     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
82
83     foreach (QModelIndex index, indexes)
84     {
85         QVariant address = index.data();
86         QApplication::clipboard()->setText(address.toString());
87     }
88 }
89
90 void AddressBookDialog::on_editButton_clicked()
91 {
92     QModelIndexList indexes = getCurrentTable()->selectionModel()->selectedRows();
93     if(indexes.isEmpty())
94     {
95         return;
96     }
97     /* Map selected index to source address book model */
98     QAbstractProxyModel *proxy_model = static_cast<QAbstractProxyModel*>(getCurrentTable()->model());
99     QModelIndex selected = proxy_model->mapToSource(indexes.at(0));
100
101     /* Double click also triggers edit button */
102     EditAddressDialog dlg(
103             ui->tabWidget->currentIndex() == SendingTab ?
104             EditAddressDialog::EditSendingAddress :
105             EditAddressDialog::EditReceivingAddress);
106     dlg.setModel(model);
107     dlg.loadRow(selected.row());
108     if(dlg.exec())
109     {
110         dlg.saveCurrentRow();
111     }
112 }
113
114 void AddressBookDialog::on_newAddressButton_clicked()
115 {
116     EditAddressDialog dlg(
117             ui->tabWidget->currentIndex() == SendingTab ?
118             EditAddressDialog::NewSendingAddress :
119             EditAddressDialog::NewReceivingAddress);
120     dlg.setModel(model);
121     if(dlg.exec())
122     {
123         dlg.saveCurrentRow();
124     }
125 }
126
127 void AddressBookDialog::on_tabWidget_currentChanged(int index)
128 {
129     switch(index)
130     {
131     case SendingTab:
132         ui->deleteButton->setEnabled(true);
133         break;
134     case ReceivingTab:
135         ui->deleteButton->setEnabled(false);
136         break;
137     }
138 }
139
140 void AddressBookDialog::on_deleteButton_clicked()
141 {
142     QTableView *table = getCurrentTable();
143     QModelIndexList indexes = table->selectionModel()->selectedRows();
144     if(!indexes.isEmpty())
145     {
146         table->model()->removeRow(indexes.at(0).row());
147     }
148 }
149
150 void AddressBookDialog::on_buttonBox_accepted()
151 {
152     QTableView *table = getCurrentTable();
153     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
154
155     foreach (QModelIndex index, indexes)
156     {
157         QVariant address = table->model()->data(index);
158         returnValue = address.toString();
159     }
160     if(!returnValue.isEmpty())
161     {
162         accept();
163     }
164     else
165     {
166         reject();
167     }
168 }