diff options
Diffstat (limited to 'gui/src/addresstablemodel.cpp')
-rw-r--r-- | gui/src/addresstablemodel.cpp | 64 |
1 files changed, 60 insertions, 4 deletions
diff --git a/gui/src/addresstablemodel.cpp b/gui/src/addresstablemodel.cpp index 1cacd08fee..fbb2eb528b 100644 --- a/gui/src/addresstablemodel.cpp +++ b/gui/src/addresstablemodel.cpp @@ -13,6 +13,7 @@ struct AddressTableEntry Sending, Receiving }; + Type type; QString label; QString address; @@ -128,21 +129,31 @@ bool AddressTableModel::setData(const QModelIndex & index, const QVariant & valu { if(!index.isValid()) return false; + AddressTableEntry *rec = static_cast<AddressTableEntry*>(index.internalPointer()); if(role == Qt::EditRole) { switch(index.column()) { case Label: - /* TODO */ + SetAddressBookName(rec->address.toStdString(), value.toString().toStdString()); + rec->label = value.toString(); break; case Address: - /* TODO */ /* Double-check that we're not overwriting receiving address */ - /* Note that changing address changes index in map */ + if(rec->type == AddressTableEntry::Sending) + { + /* Remove old entry */ + CWalletDB().EraseName(rec->address.toStdString()); + /* Add new entry with new address */ + SetAddressBookName(value.toString().toStdString(), rec->label.toStdString()); + + rec->address = value.toString(); + } break; } - /* emit dataChanged(index, index); */ + emit dataChanged(index, index); + return true; } return false; @@ -179,3 +190,48 @@ void AddressTableModel::updateList() priv->refreshAddressTable(); endResetModel(); } + +bool AddressTableModel::addRow(const QString &type, const QString &label, const QString &address) +{ + std::string strLabel = label.toStdString(); + std::string strAddress = address.toStdString(); + + if(type == Send) + { + /* Check for duplicate */ + CRITICAL_BLOCK(cs_mapAddressBook) + { + if(mapAddressBook.count(strAddress)) + { + return false; + } + } + } else if(type == Receive) + { + /* Generate a new address to associate with given label */ + strAddress = PubKeyToAddress(GetKeyFromKeyPool()); + } else + { + return false; + } + /* Add entry and update list */ + SetAddressBookName(strAddress, strLabel); + updateList(); + return true; +} + +bool AddressTableModel::removeRows(int row, int count, const QModelIndex & parent) +{ + Q_UNUSED(parent); + AddressTableEntry *rec = priv->index(row); + if(count != 1 || !rec || rec->type == AddressTableEntry::Receiving) + { + /* Can only remove one row at a time, and cannot remove rows not in model. + Also refuse to remove receiving addresses. + */ + return false; + } + CWalletDB().EraseName(rec->address.toStdString()); + updateList(); + return true; +} |