99#include < qt/walletmodel.h>
1010
1111#include < key_io.h>
12-
12+ # include < wallet/types.h >
1313#include < algorithm>
1414
1515#include < QFont>
@@ -52,17 +52,16 @@ struct AddressTableEntryLessThan
5252};
5353
5454/* Determine address type from address purpose */
55- static AddressTableEntry::Type translateTransactionType (const QString &strPurpose , bool isMine)
55+ static AddressTableEntry::Type translateTransactionType (wallet::AddressPurpose purpose , bool isMine)
5656{
57- AddressTableEntry::Type addressType = AddressTableEntry::Hidden;
5857 // "refund" addresses aren't shown, and change addresses aren't returned by getAddresses at all.
59- if (strPurpose == " send " )
60- addressType = AddressTableEntry::Sending;
61- else if (strPurpose == " receive " )
62- addressType = AddressTableEntry::Receiving ;
63- else if (strPurpose == " unknown " || strPurpose == " " ) // if purpose not set, guess
64- addressType = (isMine ? AddressTableEntry::Receiving : AddressTableEntry::Sending);
65- return addressType ;
58+ switch (purpose) {
59+ case wallet::AddressPurpose::SEND: return AddressTableEntry::Sending;
60+ case wallet::AddressPurpose::RECEIVE: return AddressTableEntry::Receiving;
61+ case wallet::AddressPurpose::REFUND: return AddressTableEntry::Hidden ;
62+ // No default case to allow for compiler to warn
63+ }
64+ assert ( false ) ;
6665}
6766
6867// Private implementation
@@ -82,7 +81,7 @@ class AddressTablePriv
8281 for (const auto & address : wallet.getAddresses ())
8382 {
8483 AddressTableEntry::Type addressType = translateTransactionType (
85- QString::fromStdString ( address.purpose ) , address.is_mine );
84+ address.purpose , address.is_mine );
8685 cachedAddressTable.append (AddressTableEntry (addressType,
8786 QString::fromStdString (address.name ),
8887 QString::fromStdString (EncodeDestination (address.dest ))));
@@ -94,7 +93,7 @@ class AddressTablePriv
9493 std::sort (cachedAddressTable.begin (), cachedAddressTable.end (), AddressTableEntryLessThan ());
9594 }
9695
97- void updateEntry (const QString &address, const QString &label, bool isMine, const QString & purpose, int status)
96+ void updateEntry (const QString &address, const QString &label, bool isMine, wallet::AddressPurpose purpose, int status)
9897 {
9998 // Find address / label in model
10099 QList<AddressTableEntry>::iterator lower = std::lower_bound (
@@ -236,7 +235,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
236235 if (!index.isValid ())
237236 return false ;
238237 AddressTableEntry *rec = static_cast <AddressTableEntry*>(index.internalPointer ());
239- std::string strPurpose = ( rec->type == AddressTableEntry::Sending ? " send " : " receive " ) ;
238+ wallet::AddressPurpose purpose = rec->type == AddressTableEntry::Sending ? wallet::AddressPurpose::SEND : wallet::AddressPurpose::RECEIVE ;
240239 editStatus = OK;
241240
242241 if (role == Qt::EditRole)
@@ -250,7 +249,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
250249 editStatus = NO_CHANGES;
251250 return false ;
252251 }
253- walletModel->wallet ().setAddressBook (curAddress, value.toString ().toStdString (), strPurpose );
252+ walletModel->wallet ().setAddressBook (curAddress, value.toString ().toStdString (), purpose );
254253 } else if (index.column () == Address) {
255254 CTxDestination newAddress = DecodeDestination (value.toString ().toStdString ());
256255 // Refuse to set invalid address, set error status and return false
@@ -279,7 +278,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
279278 // Remove old entry
280279 walletModel->wallet ().delAddressBook (curAddress);
281280 // Add new entry with new address
282- walletModel->wallet ().setAddressBook (newAddress, value.toString ().toStdString (), strPurpose );
281+ walletModel->wallet ().setAddressBook (newAddress, value.toString ().toStdString (), purpose );
283282 }
284283 }
285284 return true ;
@@ -331,7 +330,7 @@ QModelIndex AddressTableModel::index(int row, int column, const QModelIndex &par
331330}
332331
333332void AddressTableModel::updateEntry (const QString &address,
334- const QString &label, bool isMine, const QString & purpose, int status)
333+ const QString &label, bool isMine, wallet::AddressPurpose purpose, int status)
335334{
336335 // Update address book model from Dash core
337336 priv->updateEntry (address, label, isMine, purpose, status);
@@ -361,7 +360,7 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con
361360 }
362361 }
363362 // Add entry
364- walletModel->wallet ().setAddressBook (DecodeDestination (strAddress), strLabel, " send " );
363+ walletModel->wallet ().setAddressBook (DecodeDestination (strAddress), strLabel, wallet::AddressPurpose::SEND );
365364 }
366365 else if (type == Receive)
367366 {
@@ -414,18 +413,18 @@ QString AddressTableModel::labelForAddress(const QString &address) const
414413 return QString ();
415414}
416415
417- QString AddressTableModel::purposeForAddress (const QString &address) const
416+ std::optional<wallet::AddressPurpose> AddressTableModel::purposeForAddress (const QString &address) const
418417{
419- std::string purpose;
418+ wallet::AddressPurpose purpose;
420419 if (getAddressData (address, /* name= */ nullptr , &purpose)) {
421- return QString::fromStdString ( purpose) ;
420+ return purpose;
422421 }
423- return QString () ;
422+ return std:: nullopt ;
424423}
425424
426425bool AddressTableModel::getAddressData (const QString &address,
427426 std::string* name,
428- std::string * purpose) const {
427+ wallet::AddressPurpose * purpose) const {
429428 CTxDestination destination = DecodeDestination (address.toStdString ());
430429 return walletModel->wallet ().getAddress (destination, name, /* is_mine= */ nullptr , purpose);
431430}
0 commit comments