1 #include "addressbookpage.h"
2 #include "ui_addressbookpage.h"
4 #include "addresstablemodel.h"
5 #include "editaddressdialog.h"
6 #include "csvmodelwriter.h"
8 #include <QSortFilterProxyModel>
10 #include <QFileDialog>
11 #include <QMessageBox>
13 AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
15 ui(new Ui::AddressBookPage),
24 connect(ui->tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept()));
25 ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
26 ui->tableView->setFocus();
29 ui->buttonBox->hide();
35 ui->labelExplanation->hide();
40 ui->tableView->setTabKeyNavigation(false);
42 connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
45 AddressBookPage::~AddressBookPage()
50 void AddressBookPage::setModel(AddressTableModel *model)
53 // Refresh list from core
56 proxyModel = new QSortFilterProxyModel(this);
57 proxyModel->setSourceModel(model);
58 proxyModel->setDynamicSortFilter(true);
63 proxyModel->setFilterRole(AddressTableModel::TypeRole);
64 proxyModel->setFilterFixedString(AddressTableModel::Receive);
68 proxyModel->setFilterRole(AddressTableModel::TypeRole);
69 proxyModel->setFilterFixedString(AddressTableModel::Send);
72 ui->tableView->setModel(proxyModel);
73 ui->tableView->sortByColumn(0, Qt::AscendingOrder);
76 ui->tableView->horizontalHeader()->resizeSection(
77 AddressTableModel::Address, 320);
78 ui->tableView->horizontalHeader()->setResizeMode(
79 AddressTableModel::Label, QHeaderView::Stretch);
81 connect(ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
82 this, SLOT(selectionChanged()));
84 if(mode == ForSending)
86 // Auto-select first row when in sending mode
87 ui->tableView->selectRow(0);
92 QTableView *AddressBookPage::getCurrentTable()
97 void AddressBookPage::on_copyToClipboard_clicked()
99 // Copy currently selected address to clipboard
100 // (or nothing, if nothing selected)
101 QTableView *table = getCurrentTable();
102 QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
104 foreach (QModelIndex index, indexes)
106 QVariant address = index.data();
107 QApplication::clipboard()->setText(address.toString());
111 void AddressBookPage::on_newAddressButton_clicked()
113 EditAddressDialog dlg(
115 EditAddressDialog::NewSendingAddress :
116 EditAddressDialog::NewReceivingAddress);
120 // Select row for newly created address
121 QString address = dlg.getAddress();
122 QModelIndexList lst = proxyModel->match(proxyModel->index(0,
123 AddressTableModel::Address, QModelIndex()),
124 Qt::EditRole, address, 1, Qt::MatchExactly);
127 ui->tableView->setFocus();
128 ui->tableView->selectRow(lst.at(0).row());
133 void AddressBookPage::on_deleteButton_clicked()
135 QTableView *table = getCurrentTable();
136 QModelIndexList indexes = table->selectionModel()->selectedRows();
137 if(!indexes.isEmpty())
139 table->model()->removeRow(indexes.at(0).row());
143 void AddressBookPage::selectionChanged()
145 // Set button states based on selected tab and selection
146 QTableView *table = getCurrentTable();
148 if(table->selectionModel()->hasSelection())
153 ui->deleteButton->setEnabled(true);
156 ui->deleteButton->setEnabled(false);
159 ui->copyToClipboard->setEnabled(true);
163 ui->deleteButton->setEnabled(false);
164 ui->copyToClipboard->setEnabled(false);
168 void AddressBookPage::done(int retval)
170 // When this is a tab/widget and not a model dialog, ignore "done"
171 if(mode == ForEditing)
174 // Figure out which address was selected, and return it
175 QTableView *table = getCurrentTable();
176 QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
178 foreach (QModelIndex index, indexes)
180 QVariant address = table->model()->data(index);
181 returnValue = address.toString();
184 if(returnValue.isEmpty())
189 QDialog::done(retval);
192 void AddressBookPage::exportClicked()
194 // CSV is currently the only supported format
195 QString filename = QFileDialog::getSaveFileName(
197 tr("Export Address Book Data"),
199 tr("Comma separated file (*.csv)"));
201 if (filename.isNull()) return;
203 CSVModelWriter writer(filename);
205 // name, column, role
206 writer.setModel(proxyModel);
207 writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole);
208 writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole);
212 QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename),
213 QMessageBox::Abort, QMessageBox::Abort);