bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
/* Add an address to the model.
- Returns true on success, false otherwise.
+ Returns the added address on success, and an empty string otherwise.
*/
- bool addRow(const QString &type, const QString &label, const QString &address);
+ QString addRow(const QString &type, const QString &label, const QString &address);
/* Update address list from core. Invalidates any indices.
*/
#define CLIENTMODEL_H
#include <QObject>
+
class OptionsModel;
+class AddressTableModel;
class ClientModel : public QObject
{
};
OptionsModel *getOptionsModel();
+ AddressTableModel *getAddressTableModel();
qint64 getBalance();
QString getAddress();
/* Send coins */
StatusCode sendCoins(const QString &payTo, qint64 payAmount);
private:
- OptionsModel *options_model;
+ OptionsModel *optionsModel;
+ AddressTableModel *addressTableModel;
signals:
void balanceChanged(qint64 balance);
void setModel(AddressTableModel *model);
void loadRow(int row);
- void saveCurrentRow();
+ QString saveCurrentRow();
private:
Ui::EditAddressDialog *ui;
model(0)
{
ui->setupUi(this);
-
- model = new AddressTableModel(this);
- setModel(model);
}
AddressBookDialog::~AddressBookDialog()
void AddressBookDialog::setModel(AddressTableModel *model)
{
+ /* Refresh list from core */
+ model->updateList();
+
/* Receive filter */
QSortFilterProxyModel *receive_model = new QSortFilterProxyModel(this);
receive_model->setSourceModel(model);
endResetModel();
}
-bool AddressTableModel::addRow(const QString &type, const QString &label, const QString &address)
+QString AddressTableModel::addRow(const QString &type, const QString &label, const QString &address)
{
std::string strLabel = label.toStdString();
std::string strAddress = address.toStdString();
{
if(mapAddressBook.count(strAddress))
{
- return false;
+ return QString();
}
}
} else if(type == Receive)
strAddress = PubKeyToAddress(GetKeyFromKeyPool());
} else
{
- return false;
+ return QString();
}
/* Add entry and update list */
SetAddressBookName(strAddress, strLabel);
updateList();
- return true;
+ return QString::fromStdString(strAddress);
}
bool AddressTableModel::removeRows(int row, int count, const QModelIndex & parent)
#include "aboutdialog.h"
#include "clientmodel.h"
#include "guiutil.h"
+#include "editaddressdialog.h"
#include "main.h"
void BitcoinGUI::addressbookClicked()
{
AddressBookDialog dlg;
+ dlg.setModel(model->getAddressTableModel());
dlg.setTab(AddressBookDialog::SendingTab);
dlg.exec();
}
void BitcoinGUI::receivingAddressesClicked()
{
AddressBookDialog dlg;
+ dlg.setModel(model->getAddressTableModel());
dlg.setTab(AddressBookDialog::ReceivingTab);
dlg.exec();
}
void BitcoinGUI::newAddressClicked()
{
- qDebug() << "New address clicked";
- /* TODO: generate new address */
+ EditAddressDialog dlg(EditAddressDialog::NewReceivingAddress);
+ dlg.setModel(model->getAddressTableModel());
+ if(dlg.exec())
+ {
+ QString newAddress = dlg.saveCurrentRow();
+ /* Set returned address as new default address */
+ if(!newAddress.isEmpty())
+ {
+ model->setAddress(newAddress);
+ }
+ }
}
void BitcoinGUI::copyClipboardClicked()
#include "main.h"
#include "guiconstants.h"
#include "optionsmodel.h"
+#include "addresstablemodel.h"
#include <QTimer>
ClientModel::ClientModel(QObject *parent) :
- QObject(parent), options_model(0)
+ QObject(parent), optionsModel(0), addressTableModel(0)
{
/* Until we build signal notifications into the bitcoin core,
simply update everything using a timer.
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(MODEL_UPDATE_DELAY);
- options_model = new OptionsModel(this);
+ optionsModel = new OptionsModel(this);
+ addressTableModel = new AddressTableModel(this);
}
qint64 ClientModel::getBalance()
OptionsModel *ClientModel::getOptionsModel()
{
- return options_model;
+ return optionsModel;
+}
+
+AddressTableModel *ClientModel::getAddressTableModel()
+{
+ return addressTableModel;
}
mapper->setCurrentIndex(row);
}
-void EditAddressDialog::saveCurrentRow()
+QString EditAddressDialog::saveCurrentRow()
{
+ QString address;
switch(mode)
{
case NewReceivingAddress:
case NewSendingAddress:
- if(!model->addRow(
+ address = model->addRow(
mode == NewSendingAddress ? AddressTableModel::Send : AddressTableModel::Receive,
ui->labelEdit->text(),
- ui->addressEdit->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()),
break;
case EditReceivingAddress:
case EditSendingAddress:
- mapper->submit();
+ if(mapper->submit())
+ {
+ address = ui->addressEdit->text();
+ }
break;
}
+ return address;
}