Somewhat confident now, tested on GNOME+KDE, with all types of transactions. Next...
[novacoin.git] / gui / src / editaddressdialog.cpp
index bd55597..dd05417 100644 (file)
@@ -1,14 +1,84 @@
 #include "editaddressdialog.h"
 #include "ui_editaddressdialog.h"
+#include "addresstablemodel.h"
+#include "guiutil.h"
 
-EditAddressDialog::EditAddressDialog(QWidget *parent) :
+#include <QDataWidgetMapper>
+#include <QMessageBox>
+
+EditAddressDialog::EditAddressDialog(Mode mode, QWidget *parent) :
     QDialog(parent),
-    ui(new Ui::EditAddressDialog)
+    ui(new Ui::EditAddressDialog), mapper(0), mode(mode), model(0)
 {
     ui->setupUi(this);
+
+    GUIUtil::setupAddressWidget(ui->addressEdit, this);
+
+    switch(mode)
+    {
+    case NewReceivingAddress:
+        setWindowTitle(tr("New receiving address"));
+        ui->addressEdit->setEnabled(false);
+        break;
+    case NewSendingAddress:
+        setWindowTitle(tr("New sending address"));
+        break;
+    case EditReceivingAddress:
+        setWindowTitle(tr("Edit receiving address"));
+        ui->addressEdit->setReadOnly(true);
+        break;
+    case EditSendingAddress:
+        setWindowTitle(tr("Edit sending address"));
+        break;
+    }
+
+    mapper = new QDataWidgetMapper(this);
+    mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
 }
 
 EditAddressDialog::~EditAddressDialog()
 {
     delete ui;
 }
+
+void EditAddressDialog::setModel(AddressTableModel *model)
+{
+    this->model = model;
+    mapper->setModel(model);
+    mapper->addMapping(ui->labelEdit, AddressTableModel::Label);
+    mapper->addMapping(ui->addressEdit, AddressTableModel::Address);
+}
+
+void EditAddressDialog::loadRow(int row)
+{
+    mapper->setCurrentIndex(row);
+}
+
+QString EditAddressDialog::saveCurrentRow()
+{
+    QString address;
+    switch(mode)
+    {
+    case NewReceivingAddress:
+    case NewSendingAddress:
+        address = model->addRow(
+                mode == NewSendingAddress ? AddressTableModel::Send : AddressTableModel::Receive,
+                ui->labelEdit->text(),
+                ui->addressEdit->text());
+        if(address.isEmpty())
+        {
+            QMessageBox::warning(this, windowTitle(),
+                tr("The address %1 is already in the address book.").arg(ui->addressEdit->text()),
+                QMessageBox::Ok, QMessageBox::Ok);
+        }
+        break;
+    case EditReceivingAddress:
+    case EditSendingAddress:
+        if(mapper->submit())
+        {
+            address = ui->addressEdit->text();
+        }
+        break;
+    }
+    return address;
+}