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 <QMessageBox>
12 AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
14 ui(new Ui::AddressBookPage),
21 #ifdef Q_WS_MAC // Icons on push buttons are very uncommon on Mac
22 ui->newAddressButton->setIcon(QIcon());
23 ui->copyToClipboard->setIcon(QIcon());
24 ui->deleteButton->setIcon(QIcon());
30 connect(ui->tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept()));
31 ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
32 ui->tableView->setFocus();
35 ui->buttonBox->hide();
41 ui->labelExplanation->hide();
46 ui->tableView->setTabKeyNavigation(false);
48 connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
51 AddressBookPage::~AddressBookPage()
56 void AddressBookPage::setModel(AddressTableModel *model)
61 // Refresh list from core
64 proxyModel = new QSortFilterProxyModel(this);
65 proxyModel->setSourceModel(model);
66 proxyModel->setDynamicSortFilter(true);
71 proxyModel->setFilterRole(AddressTableModel::TypeRole);
72 proxyModel->setFilterFixedString(AddressTableModel::Receive);
76 proxyModel->setFilterRole(AddressTableModel::TypeRole);
77 proxyModel->setFilterFixedString(AddressTableModel::Send);
80 ui->tableView->setModel(proxyModel);
81 ui->tableView->sortByColumn(0, Qt::AscendingOrder);
84 ui->tableView->horizontalHeader()->resizeSection(
85 AddressTableModel::Address, 320);
86 ui->tableView->horizontalHeader()->setResizeMode(
87 AddressTableModel::Label, QHeaderView::Stretch);
89 connect(ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
90 this, SLOT(selectionChanged()));
92 if(mode == ForSending)
94 // Auto-select first row when in sending mode
95 ui->tableView->selectRow(0);
100 void AddressBookPage::on_copyToClipboard_clicked()
102 // Copy currently selected address to clipboard
103 // (or nothing, if nothing selected)
104 QTableView *table = ui->tableView;
105 if(!table->selectionModel())
107 QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
109 foreach (QModelIndex index, indexes)
111 QVariant address = index.data();
112 QApplication::clipboard()->setText(address.toString());
116 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 = ui->tableView;
143 if(!table->selectionModel())
145 QModelIndexList indexes = table->selectionModel()->selectedRows();
146 if(!indexes.isEmpty())
148 table->model()->removeRow(indexes.at(0).row());
152 void AddressBookPage::selectionChanged()
154 // Set button states based on selected tab and selection
155 QTableView *table = ui->tableView;
156 if(!table->selectionModel())
159 if(table->selectionModel()->hasSelection())
164 ui->deleteButton->setEnabled(true);
167 ui->deleteButton->setEnabled(false);
170 ui->copyToClipboard->setEnabled(true);
174 ui->deleteButton->setEnabled(false);
175 ui->copyToClipboard->setEnabled(false);
179 void AddressBookPage::done(int retval)
181 QTableView *table = ui->tableView;
182 if(!table->selectionModel() || !table->model())
184 // When this is a tab/widget and not a model dialog, ignore "done"
185 if(mode == ForEditing)
188 // Figure out which address was selected, and return it
189 QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
191 foreach (QModelIndex index, indexes)
193 QVariant address = table->model()->data(index);
194 returnValue = address.toString();
197 if(returnValue.isEmpty())
202 QDialog::done(retval);
205 void AddressBookPage::exportClicked()
207 // CSV is currently the only supported format
208 QString filename = GUIUtil::getSaveFileName(
210 tr("Export Address Book Data"), QString(),
211 tr("Comma separated file (*.csv)"));
213 if (filename.isNull()) return;
215 CSVModelWriter writer(filename);
217 // name, column, role
218 writer.setModel(proxyModel);
219 writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole);
220 writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole);
224 QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename),
225 QMessageBox::Abort, QMessageBox::Abort);