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);
122 void AddressBookPage::on_deleteButton_clicked()
124 QTableView *table = getCurrentTable();
125 QModelIndexList indexes = table->selectionModel()->selectedRows();
126 if(!indexes.isEmpty())
128 table->model()->removeRow(indexes.at(0).row());
132 void AddressBookPage::selectionChanged()
134 // Set button states based on selected tab and selection
135 QTableView *table = getCurrentTable();
137 if(table->selectionModel()->hasSelection())
142 ui->deleteButton->setEnabled(true);
145 ui->deleteButton->setEnabled(false);
148 ui->copyToClipboard->setEnabled(true);
152 ui->deleteButton->setEnabled(false);
153 ui->copyToClipboard->setEnabled(false);
157 void AddressBookPage::done(int retval)
159 // When this is a tab/widget and not a model dialog, ignore "done"
160 if(mode == ForEditing)
163 // Figure out which address was selected, and return it
164 QTableView *table = getCurrentTable();
165 QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
167 foreach (QModelIndex index, indexes)
169 QVariant address = table->model()->data(index);
170 returnValue = address.toString();
173 if(returnValue.isEmpty())
178 QDialog::done(retval);
181 void AddressBookPage::exportClicked()
183 // CSV is currently the only supported format
184 QString filename = QFileDialog::getSaveFileName(
186 tr("Export Address Book Data"),
188 tr("Comma separated file (*.csv)"));
190 if (filename.isNull()) return;
192 CSVModelWriter writer(filename);
194 // name, column, role
195 writer.setModel(proxyModel);
196 writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole);
197 writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole);
201 QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename),
202 QMessageBox::Abort, QMessageBox::Abort);