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>
14 AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
16 ui(new Ui::AddressBookPage),
25 connect(ui->tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept()));
26 ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
27 ui->tableView->setFocus();
30 ui->buttonBox->hide();
36 ui->labelExplanation->hide();
41 ui->tableView->setTabKeyNavigation(false);
43 connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
46 AddressBookPage::~AddressBookPage()
51 void AddressBookPage::setModel(AddressTableModel *model)
54 // Refresh list from core
57 proxyModel = new QSortFilterProxyModel(this);
58 proxyModel->setSourceModel(model);
59 proxyModel->setDynamicSortFilter(true);
64 proxyModel->setFilterRole(AddressTableModel::TypeRole);
65 proxyModel->setFilterFixedString(AddressTableModel::Receive);
69 proxyModel->setFilterRole(AddressTableModel::TypeRole);
70 proxyModel->setFilterFixedString(AddressTableModel::Send);
73 ui->tableView->setModel(proxyModel);
74 ui->tableView->sortByColumn(0, Qt::AscendingOrder);
77 ui->tableView->horizontalHeader()->resizeSection(
78 AddressTableModel::Address, 320);
79 ui->tableView->horizontalHeader()->setResizeMode(
80 AddressTableModel::Label, QHeaderView::Stretch);
82 connect(ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
83 this, SLOT(selectionChanged()));
85 if(mode == ForSending)
87 // Auto-select first row when in sending mode
88 ui->tableView->selectRow(0);
93 QTableView *AddressBookPage::getCurrentTable()
98 void AddressBookPage::on_copyToClipboard_clicked()
100 // Copy currently selected address to clipboard
101 // (or nothing, if nothing selected)
102 QTableView *table = getCurrentTable();
103 QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
105 foreach (QModelIndex index, indexes)
107 QVariant address = index.data();
108 QApplication::clipboard()->setText(address.toString());
112 void AddressBookPage::on_newAddressButton_clicked()
114 EditAddressDialog dlg(
116 EditAddressDialog::NewSendingAddress :
117 EditAddressDialog::NewReceivingAddress);
121 // Select row for newly created address
122 QString address = dlg.getAddress();
123 QModelIndexList lst = proxyModel->match(proxyModel->index(0,
124 AddressTableModel::Address, QModelIndex()),
125 Qt::EditRole, address, 1, Qt::MatchExactly);
128 ui->tableView->setFocus();
129 ui->tableView->selectRow(lst.at(0).row());
134 void AddressBookPage::on_deleteButton_clicked()
136 QTableView *table = getCurrentTable();
137 QModelIndexList indexes = table->selectionModel()->selectedRows();
138 if(!indexes.isEmpty())
140 table->model()->removeRow(indexes.at(0).row());
144 void AddressBookPage::selectionChanged()
146 // Set button states based on selected tab and selection
147 QTableView *table = getCurrentTable();
149 if(table->selectionModel()->hasSelection())
154 ui->deleteButton->setEnabled(true);
157 ui->deleteButton->setEnabled(false);
160 ui->copyToClipboard->setEnabled(true);
164 ui->deleteButton->setEnabled(false);
165 ui->copyToClipboard->setEnabled(false);
169 void AddressBookPage::done(int retval)
171 // When this is a tab/widget and not a model dialog, ignore "done"
172 if(mode == ForEditing)
175 // Figure out which address was selected, and return it
176 QTableView *table = getCurrentTable();
177 QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
179 foreach (QModelIndex index, indexes)
181 QVariant address = table->model()->data(index);
182 returnValue = address.toString();
185 if(returnValue.isEmpty())
190 QDialog::done(retval);
193 void AddressBookPage::exportClicked()
195 // CSV is currently the only supported format
196 QString filename = QFileDialog::getSaveFileName(
198 tr("Export Address Book Data"),
200 tr("Comma separated file (*.csv)"));
202 if (filename.isNull()) return;
204 CSVModelWriter writer(filename);
206 // name, column, role
207 writer.setModel(proxyModel);
208 writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole);
209 writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole);
213 QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename),
214 QMessageBox::Abort, QMessageBox::Abort);