6d53ee865781fc1a20fb8415d6620026c38fe999
[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(Mode mode, QWidget *parent) :
12     QDialog(parent),
13     ui(new Ui::AddressBookDialog),
14     model(0),
15     mode(mode)
16 {
17     ui->setupUi(this);
18     switch(mode)
19     {
20     case ForSending:
21         connect(ui->receiveTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_buttonBox_accepted()));
22         connect(ui->sendTableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_buttonBox_accepted()));
23         ui->sendTableView->setFocus();
24         break;
25     }
26
27     connect(ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(selectionChanged()));
28 }
29
30 AddressBookDialog::~AddressBookDialog()
31 {
32     delete ui;
33 }
34
35 void AddressBookDialog::setModel(AddressTableModel *model)
36 {
37     this->model = model;
38     // Refresh list from core
39     model->updateList();
40
41     // Receive filter
42     QSortFilterProxyModel *receive_model = new QSortFilterProxyModel(this);
43     receive_model->setSourceModel(model);
44     receive_model->setDynamicSortFilter(true);
45     receive_model->setFilterRole(AddressTableModel::TypeRole);
46     receive_model->setFilterFixedString(AddressTableModel::Receive);
47     ui->receiveTableView->setModel(receive_model);
48     ui->receiveTableView->sortByColumn(0, Qt::AscendingOrder);
49
50     // Send filter
51     QSortFilterProxyModel *send_model = new QSortFilterProxyModel(this);
52     send_model->setSourceModel(model);
53     send_model->setDynamicSortFilter(true);
54     send_model->setFilterRole(AddressTableModel::TypeRole);
55     send_model->setFilterFixedString(AddressTableModel::Send);
56     ui->sendTableView->setModel(send_model);
57     ui->sendTableView->sortByColumn(0, Qt::AscendingOrder);
58
59     // Set column widths
60     ui->receiveTableView->horizontalHeader()->resizeSection(
61             AddressTableModel::Address, 320);
62     ui->receiveTableView->horizontalHeader()->setResizeMode(
63             AddressTableModel::Label, QHeaderView::Stretch);
64     ui->sendTableView->horizontalHeader()->resizeSection(
65             AddressTableModel::Address, 320);
66     ui->sendTableView->horizontalHeader()->setResizeMode(
67             AddressTableModel::Label, QHeaderView::Stretch);
68
69     connect(ui->receiveTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
70             this, SLOT(selectionChanged()));
71     connect(ui->sendTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
72             this, SLOT(selectionChanged()));
73
74     if(mode == ForSending)
75     {
76         // Auto-select first row when in sending mode
77         ui->sendTableView->selectRow(0);
78     }
79 }
80
81 void AddressBookDialog::setTab(int tab)
82 {
83     ui->tabWidget->setCurrentIndex(tab);
84     selectionChanged();
85 }
86
87 QTableView *AddressBookDialog::getCurrentTable()
88 {
89     switch(ui->tabWidget->currentIndex())
90     {
91     case SendingTab:
92         return ui->sendTableView;
93     case ReceivingTab:
94         return ui->receiveTableView;
95     default:
96         return 0;
97     }
98 }
99
100 void AddressBookDialog::on_copyToClipboard_clicked()
101 {
102     // Copy currently selected address to clipboard
103     //   (or nothing, if nothing selected)
104     QTableView *table = getCurrentTable();
105     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
106
107     foreach (QModelIndex index, indexes)
108     {
109         QVariant address = index.data();
110         QApplication::clipboard()->setText(address.toString());
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     dlg.exec();
122 }
123
124 void AddressBookDialog::on_deleteButton_clicked()
125 {
126     QTableView *table = getCurrentTable();
127     QModelIndexList indexes = table->selectionModel()->selectedRows();
128     if(!indexes.isEmpty())
129     {
130         table->model()->removeRow(indexes.at(0).row());
131     }
132 }
133
134 void AddressBookDialog::on_buttonBox_accepted()
135 {
136     QTableView *table = getCurrentTable();
137     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
138
139     foreach (QModelIndex index, indexes)
140     {
141         QVariant address = table->model()->data(index);
142         returnValue = address.toString();
143     }
144     if(!returnValue.isEmpty())
145     {
146         accept();
147     }
148     else
149     {
150         reject();
151     }
152 }
153
154 void AddressBookDialog::selectionChanged()
155 {
156     // Set button states based on selected tab and selection
157     QTableView *table = getCurrentTable();
158
159     if(table->selectionModel()->hasSelection())
160     {
161         switch(ui->tabWidget->currentIndex())
162         {
163         case SendingTab:
164             ui->deleteButton->setEnabled(true);
165             break;
166         case ReceivingTab:
167             ui->deleteButton->setEnabled(false);
168             break;
169         }
170         ui->copyToClipboard->setEnabled(true);
171     }
172     else
173     {
174         ui->deleteButton->setEnabled(false);
175         ui->copyToClipboard->setEnabled(false);
176     }
177 }