Somewhat confident now, tested on GNOME+KDE, with all types of transactions. Next...
[novacoin.git] / gui / src / addressbookdialog.cpp
index 71543f1..90950a6 100644 (file)
@@ -5,6 +5,7 @@
 #include "editaddressdialog.h"
 
 #include <QSortFilterProxyModel>
+#include <QClipboard>
 #include <QDebug>
 
 AddressBookDialog::AddressBookDialog(QWidget *parent) :
@@ -13,9 +14,6 @@ AddressBookDialog::AddressBookDialog(QWidget *parent) :
     model(0)
 {
     ui->setupUi(this);
-
-    model = new AddressTableModel(this);
-    setModel(model);
 }
 
 AddressBookDialog::~AddressBookDialog()
@@ -25,12 +23,15 @@ AddressBookDialog::~AddressBookDialog()
 
 void AddressBookDialog::setModel(AddressTableModel *model)
 {
+    this->model = model;
+    /* Refresh list from core */
+    model->updateList();
+
     /* Receive filter */
     QSortFilterProxyModel *receive_model = new QSortFilterProxyModel(this);
     receive_model->setSourceModel(model);
     receive_model->setDynamicSortFilter(true);
-    receive_model->setFilterRole(Qt::UserRole);
-    receive_model->setFilterKeyColumn(AddressTableModel::Type);
+    receive_model->setFilterRole(AddressTableModel::TypeRole);
     receive_model->setFilterFixedString(AddressTableModel::Receive);
     ui->receiveTableView->setModel(receive_model);
 
@@ -38,8 +39,7 @@ void AddressBookDialog::setModel(AddressTableModel *model)
     QSortFilterProxyModel *send_model = new QSortFilterProxyModel(this);
     send_model->setSourceModel(model);
     send_model->setDynamicSortFilter(true);
-    send_model->setFilterRole(Qt::UserRole);
-    send_model->setFilterKeyColumn(AddressTableModel::Type);
+    send_model->setFilterRole(AddressTableModel::TypeRole);
     send_model->setFilterFixedString(AddressTableModel::Send);
     ui->sendTableView->setModel(send_model);
 
@@ -52,10 +52,6 @@ void AddressBookDialog::setModel(AddressTableModel *model)
             AddressTableModel::Address, 320);
     ui->sendTableView->horizontalHeader()->setResizeMode(
             AddressTableModel::Label, QHeaderView::Stretch);
-
-    /* Hide "Type" column in both views as it is only used for filtering */
-    ui->receiveTableView->setColumnHidden(AddressTableModel::Type, true);
-    ui->sendTableView->setColumnHidden(AddressTableModel::Type, true);
 }
 
 void AddressBookDialog::setTab(int tab)
@@ -78,21 +74,54 @@ QTableView *AddressBookDialog::getCurrentTable()
 
 void AddressBookDialog::on_copyToClipboard_clicked()
 {
-    /* Copy currently selected address to clipboard */
+    /* Copy currently selected address to clipboard
+       (or nothing, if nothing selected)
+     */
+    QTableView *table = getCurrentTable();
+    QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
 
+    foreach (QModelIndex index, indexes)
+    {
+        QVariant address = index.data();
+        QApplication::clipboard()->setText(address.toString());
+    }
 }
 
 void AddressBookDialog::on_editButton_clicked()
 {
-    /* Double click should trigger edit button */
-    EditAddressDialog dlg;
-    dlg.exec();
+    QModelIndexList indexes = getCurrentTable()->selectionModel()->selectedRows();
+    if(indexes.isEmpty())
+    {
+        return;
+    }
+    /* Map selected index to source address book model */
+    QAbstractProxyModel *proxy_model = static_cast<QAbstractProxyModel*>(getCurrentTable()->model());
+    QModelIndex selected = proxy_model->mapToSource(indexes.at(0));
+
+    /* Double click also triggers edit button */
+    EditAddressDialog dlg(
+            ui->tabWidget->currentIndex() == SendingTab ?
+            EditAddressDialog::EditSendingAddress :
+            EditAddressDialog::EditReceivingAddress);
+    dlg.setModel(model);
+    dlg.loadRow(selected.row());
+    if(dlg.exec())
+    {
+        dlg.saveCurrentRow();
+    }
 }
 
 void AddressBookDialog::on_newAddressButton_clicked()
 {
-    EditAddressDialog dlg;
-    dlg.exec();
+    EditAddressDialog dlg(
+            ui->tabWidget->currentIndex() == SendingTab ?
+            EditAddressDialog::NewSendingAddress :
+            EditAddressDialog::NewReceivingAddress);
+    dlg.setModel(model);
+    if(dlg.exec())
+    {
+        dlg.saveCurrentRow();
+    }
 }
 
 void AddressBookDialog::on_tabWidget_currentChanged(int index)
@@ -100,10 +129,10 @@ void AddressBookDialog::on_tabWidget_currentChanged(int index)
     switch(index)
     {
     case SendingTab:
-        ui->deleteButton->show();
+        ui->deleteButton->setEnabled(true);
         break;
     case ReceivingTab:
-        ui->deleteButton->hide();
+        ui->deleteButton->setEnabled(false);
         break;
     }
 }
@@ -112,9 +141,9 @@ void AddressBookDialog::on_deleteButton_clicked()
 {
     QTableView *table = getCurrentTable();
     QModelIndexList indexes = table->selectionModel()->selectedRows();
-
-    foreach (QModelIndex index, indexes) {
-        table->model()->removeRow(index.row());
+    if(!indexes.isEmpty())
+    {
+        table->model()->removeRow(indexes.at(0).row());
     }
 }
 
@@ -123,10 +152,17 @@ void AddressBookDialog::on_buttonBox_accepted()
     QTableView *table = getCurrentTable();
     QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
 
-    foreach (QModelIndex index, indexes) {
+    foreach (QModelIndex index, indexes)
+    {
         QVariant address = table->model()->data(index);
         returnValue = address.toString();
     }
-
-    accept();
+    if(!returnValue.isEmpty())
+    {
+        accept();
+    }
+    else
+    {
+        reject();
+    }
 }