make send coins dialog more user friendly (better checking)
[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 <QDebug>
9
10 AddressBookDialog::AddressBookDialog(QWidget *parent) :
11     QDialog(parent),
12     ui(new Ui::AddressBookDialog),
13     model(0)
14 {
15     ui->setupUi(this);
16
17     model = new AddressTableModel(this);
18     setModel(model);
19 }
20
21 AddressBookDialog::~AddressBookDialog()
22 {
23     delete ui;
24 }
25
26 void AddressBookDialog::setModel(AddressTableModel *model)
27 {
28     /* Receive filter */
29     QSortFilterProxyModel *receive_model = new QSortFilterProxyModel(this);
30     receive_model->setSourceModel(model);
31     receive_model->setDynamicSortFilter(true);
32     receive_model->setFilterRole(Qt::UserRole);
33     receive_model->setFilterKeyColumn(AddressTableModel::Type);
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(Qt::UserRole);
42     send_model->setFilterKeyColumn(AddressTableModel::Type);
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     /* Hide "Type" column in both views as it is only used for filtering */
57     ui->receiveTableView->setColumnHidden(AddressTableModel::Type, true);
58     ui->sendTableView->setColumnHidden(AddressTableModel::Type, true);
59 }
60
61 void AddressBookDialog::setTab(int tab)
62 {
63     ui->tabWidget->setCurrentIndex(tab);
64 }
65
66 QTableView *AddressBookDialog::getCurrentTable()
67 {
68     switch(ui->tabWidget->currentIndex())
69     {
70     case SendingTab:
71         return ui->sendTableView;
72     case ReceivingTab:
73         return ui->receiveTableView;
74     default:
75         return 0;
76     }
77 }
78
79 void AddressBookDialog::on_copyToClipboard_clicked()
80 {
81     /* Copy currently selected address to clipboard */
82
83 }
84
85 void AddressBookDialog::on_editButton_clicked()
86 {
87     /* Double click should trigger edit button */
88     EditAddressDialog dlg;
89     dlg.exec();
90 }
91
92 void AddressBookDialog::on_newAddressButton_clicked()
93 {
94     EditAddressDialog dlg;
95     dlg.exec();
96 }
97
98 void AddressBookDialog::on_tabWidget_currentChanged(int index)
99 {
100     switch(index)
101     {
102     case SendingTab:
103         ui->deleteButton->show();
104         break;
105     case ReceivingTab:
106         ui->deleteButton->hide();
107         break;
108     }
109 }
110
111 void AddressBookDialog::on_deleteButton_clicked()
112 {
113     QTableView *table = getCurrentTable();
114     QModelIndexList indexes = table->selectionModel()->selectedRows();
115
116     foreach (QModelIndex index, indexes) {
117         table->model()->removeRow(index.row());
118     }
119 }
120
121 void AddressBookDialog::on_buttonBox_accepted()
122 {
123     QTableView *table = getCurrentTable();
124     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
125
126     foreach (QModelIndex index, indexes) {
127         QVariant address = table->model()->data(index);
128         returnValue = address.toString();
129     }
130     if(!returnValue.isEmpty())
131     {
132         accept();
133     }
134     else
135     {
136         reject();
137     }
138 }