convert to full tab-based ui
[novacoin.git] / src / qt / addressbookpage.cpp
1 #include "addressbookpage.h"
2 #include "ui_addressbookpage.h"
3
4 #include "addresstablemodel.h"
5 #include "editaddressdialog.h"
6
7 #include <QSortFilterProxyModel>
8 #include <QClipboard>
9 #include <QDebug>
10
11 AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
12     QDialog(parent),
13     ui(new Ui::AddressBookPage),
14     model(0),
15     mode(mode),
16     tab(tab)
17 {
18     ui->setupUi(this);
19     switch(mode)
20     {
21     case ForSending:
22         connect(ui->tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_buttonBox_accepted()));
23         ui->tableView->setFocus();
24         break;
25     case ForEditing:
26         ui->buttonBox->hide();
27         break;
28     }
29     switch(tab)
30     {
31     case SendingTab:
32         ui->labelExplanation->hide();
33         break;
34     case ReceivingTab:
35         break;
36     }
37 }
38
39 AddressBookPage::~AddressBookPage()
40 {
41     delete ui;
42 }
43
44 void AddressBookPage::setModel(AddressTableModel *model)
45 {
46     this->model = model;
47     // Refresh list from core
48     model->updateList();
49
50     switch(tab)
51     {
52     case ReceivingTab: {
53         // Receive filter
54         QSortFilterProxyModel *receive_model = new QSortFilterProxyModel(this);
55         receive_model->setSourceModel(model);
56         receive_model->setDynamicSortFilter(true);
57         receive_model->setFilterRole(AddressTableModel::TypeRole);
58         receive_model->setFilterFixedString(AddressTableModel::Receive);
59         ui->tableView->setModel(receive_model);
60         ui->tableView->sortByColumn(0, Qt::AscendingOrder);
61         } break;
62     case SendingTab: {
63         // Send filter
64         QSortFilterProxyModel *send_model = new QSortFilterProxyModel(this);
65         send_model->setSourceModel(model);
66         send_model->setDynamicSortFilter(true);
67         send_model->setFilterRole(AddressTableModel::TypeRole);
68         send_model->setFilterFixedString(AddressTableModel::Send);
69         ui->tableView->setModel(send_model);
70         ui->tableView->sortByColumn(0, Qt::AscendingOrder);
71         } break;
72     }
73
74     // Set column widths
75     ui->tableView->horizontalHeader()->resizeSection(
76             AddressTableModel::Address, 320);
77     ui->tableView->horizontalHeader()->setResizeMode(
78             AddressTableModel::Label, QHeaderView::Stretch);
79
80     connect(ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
81             this, SLOT(selectionChanged()));
82
83     if(mode == ForSending)
84     {
85         // Auto-select first row when in sending mode
86         ui->tableView->selectRow(0);
87     }
88     selectionChanged();
89 }
90
91 QTableView *AddressBookPage::getCurrentTable()
92 {
93     return ui->tableView;
94 }
95
96 void AddressBookPage::on_copyToClipboard_clicked()
97 {
98     // Copy currently selected address to clipboard
99     //   (or nothing, if nothing selected)
100     QTableView *table = getCurrentTable();
101     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
102
103     foreach (QModelIndex index, indexes)
104     {
105         QVariant address = index.data();
106         QApplication::clipboard()->setText(address.toString());
107     }
108 }
109
110 void AddressBookPage::on_newAddressButton_clicked()
111 {
112     EditAddressDialog dlg(
113             tab == SendingTab ?
114             EditAddressDialog::NewSendingAddress :
115             EditAddressDialog::NewReceivingAddress);
116     dlg.setModel(model);
117     dlg.exec();
118 }
119
120 void AddressBookPage::on_deleteButton_clicked()
121 {
122     QTableView *table = getCurrentTable();
123     QModelIndexList indexes = table->selectionModel()->selectedRows();
124     if(!indexes.isEmpty())
125     {
126         table->model()->removeRow(indexes.at(0).row());
127     }
128 }
129
130 void AddressBookPage::on_buttonBox_accepted()
131 {
132     QTableView *table = getCurrentTable();
133     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
134
135     foreach (QModelIndex index, indexes)
136     {
137         QVariant address = table->model()->data(index);
138         returnValue = address.toString();
139     }
140     if(!returnValue.isEmpty())
141     {
142         accept();
143     }
144     else
145     {
146         reject();
147     }
148 }
149
150 void AddressBookPage::selectionChanged()
151 {
152     // Set button states based on selected tab and selection
153     QTableView *table = getCurrentTable();
154
155     if(table->selectionModel()->hasSelection())
156     {
157         switch(tab)
158         {
159         case SendingTab:
160             ui->deleteButton->setEnabled(true);
161             break;
162         case ReceivingTab:
163             ui->deleteButton->setEnabled(false);
164             break;
165         }
166         ui->copyToClipboard->setEnabled(true);
167     }
168     else
169     {
170         ui->deleteButton->setEnabled(false);
171         ui->copyToClipboard->setEnabled(false);
172     }
173 }
174
175 void AddressBookPage::done(int retval)
176 {
177     // When this is a tab/widget and not a model dialog, ignore "done"
178     if(mode == ForEditing)
179         return;
180     QDialog::done(retval);
181 }