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),
22 #ifdef Q_WS_MAC // Icons on push buttons are very uncommon on Mac
23 ui->newAddressButton->setIcon(QIcon());
24 ui->copyToClipboard->setIcon(QIcon());
25 ui->deleteButton->setIcon(QIcon());
31 connect(ui->tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept()));
32 ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
33 ui->tableView->setFocus();
36 ui->buttonBox->hide();
42 ui->labelExplanation->hide();
47 ui->tableView->setTabKeyNavigation(false);
49 connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
52 AddressBookPage::~AddressBookPage()
57 void AddressBookPage::setModel(AddressTableModel *model)
60 // Refresh list from core
63 proxyModel = new QSortFilterProxyModel(this);
64 proxyModel->setSourceModel(model);
65 proxyModel->setDynamicSortFilter(true);
70 proxyModel->setFilterRole(AddressTableModel::TypeRole);
71 proxyModel->setFilterFixedString(AddressTableModel::Receive);
75 proxyModel->setFilterRole(AddressTableModel::TypeRole);
76 proxyModel->setFilterFixedString(AddressTableModel::Send);
79 ui->tableView->setModel(proxyModel);
80 ui->tableView->sortByColumn(0, Qt::AscendingOrder);
83 ui->tableView->horizontalHeader()->resizeSection(
84 AddressTableModel::Address, 320);
85 ui->tableView->horizontalHeader()->setResizeMode(
86 AddressTableModel::Label, QHeaderView::Stretch);
88 connect(ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
89 this, SLOT(selectionChanged()));
91 if(mode == ForSending)
93 // Auto-select first row when in sending mode
94 ui->tableView->selectRow(0);
99 QTableView *AddressBookPage::getCurrentTable()
101 return ui->tableView;
104 void AddressBookPage::on_copyToClipboard_clicked()
106 // Copy currently selected address to clipboard
107 // (or nothing, if nothing selected)
108 QTableView *table = getCurrentTable();
109 QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
111 foreach (QModelIndex index, indexes)
113 QVariant address = index.data();
114 QApplication::clipboard()->setText(address.toString());
118 void AddressBookPage::on_newAddressButton_clicked()
120 EditAddressDialog dlg(
122 EditAddressDialog::NewSendingAddress :
123 EditAddressDialog::NewReceivingAddress);
127 // Select row for newly created address
128 QString address = dlg.getAddress();
129 QModelIndexList lst = proxyModel->match(proxyModel->index(0,
130 AddressTableModel::Address, QModelIndex()),
131 Qt::EditRole, address, 1, Qt::MatchExactly);
134 ui->tableView->setFocus();
135 ui->tableView->selectRow(lst.at(0).row());
140 void AddressBookPage::on_deleteButton_clicked()
142 QTableView *table = getCurrentTable();
143 QModelIndexList indexes = table->selectionModel()->selectedRows();
144 if(!indexes.isEmpty())
146 table->model()->removeRow(indexes.at(0).row());
150 void AddressBookPage::selectionChanged()
152 // Set button states based on selected tab and selection
153 QTableView *table = getCurrentTable();
155 if(table->selectionModel()->hasSelection())
160 ui->deleteButton->setEnabled(true);
163 ui->deleteButton->setEnabled(false);
166 ui->copyToClipboard->setEnabled(true);
170 ui->deleteButton->setEnabled(false);
171 ui->copyToClipboard->setEnabled(false);
175 void AddressBookPage::done(int retval)
177 // When this is a tab/widget and not a model dialog, ignore "done"
178 if(mode == ForEditing)
181 // Figure out which address was selected, and return it
182 QTableView *table = getCurrentTable();
183 QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
185 foreach (QModelIndex index, indexes)
187 QVariant address = table->model()->data(index);
188 returnValue = address.toString();
191 if(returnValue.isEmpty())
196 QDialog::done(retval);
199 void AddressBookPage::exportClicked()
201 // CSV is currently the only supported format
202 QString filename = QFileDialog::getSaveFileName(
204 tr("Export Address Book Data"),
206 tr("Comma separated file (*.csv)"));
208 if (filename.isNull()) return;
210 CSVModelWriter writer(filename);
212 // name, column, role
213 writer.setModel(proxyModel);
214 writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole);
215 writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole);
219 QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename),
220 QMessageBox::Abort, QMessageBox::Abort);