Bitcoin Core  27.99.0
P2P Digital Currency
addresstablemodel.h
Go to the documentation of this file.
1 // Copyright (c) 2011-2020 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_QT_ADDRESSTABLEMODEL_H
6 #define BITCOIN_QT_ADDRESSTABLEMODEL_H
7 
8 #include <optional>
9 
10 #include <QAbstractTableModel>
11 #include <QStringList>
12 
13 enum class OutputType;
14 
15 class AddressTablePriv;
16 class WalletModel;
17 
18 namespace interfaces {
19 class Wallet;
20 }
21 namespace wallet {
22 enum class AddressPurpose;
23 } // namespace wallet
24 
28 class AddressTableModel : public QAbstractTableModel
29 {
30  Q_OBJECT
31 
32 public:
33  explicit AddressTableModel(WalletModel *parent = nullptr, bool pk_hash_only = false);
35 
36  enum ColumnIndex {
37  Label = 0,
38  Address = 1
39  };
40 
41  enum RoleIndex {
42  TypeRole = Qt::UserRole
43  };
44 
46  enum EditStatus {
47  OK,
53  };
54 
55  static const QString Send;
56  static const QString Receive;
60  int rowCount(const QModelIndex &parent) const override;
61  int columnCount(const QModelIndex &parent) const override;
62  QVariant data(const QModelIndex &index, int role) const override;
63  bool setData(const QModelIndex &index, const QVariant &value, int role) override;
64  QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
65  QModelIndex index(int row, int column, const QModelIndex &parent) const override;
66  bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
67  Qt::ItemFlags flags(const QModelIndex &index) const override;
70  /* Add an address to the model.
71  Returns the added address on success, and an empty string otherwise.
72  */
73  QString addRow(const QString &type, const QString &label, const QString &address, const OutputType address_type);
74 
76  QString labelForAddress(const QString &address) const;
77 
79  std::optional<wallet::AddressPurpose> purposeForAddress(const QString &address) const;
80 
81  /* Look up row index of an address in the model.
82  Return -1 if not found.
83  */
84  int lookupAddress(const QString &address) const;
85 
86  EditStatus getEditStatus() const { return editStatus; }
87 
89 
90  QString GetWalletDisplayName() const;
91 
92 private:
94  AddressTablePriv *priv = nullptr;
95  QStringList columns;
97 
99  bool getAddressData(const QString &address, std::string* name, wallet::AddressPurpose* purpose) const;
100 
102  void emitDataChanged(int index);
103 
104 public Q_SLOTS:
105  /* Update address list from core.
106  */
107  void updateEntry(const QString &address, const QString &label, bool isMine, wallet::AddressPurpose purpose, int status);
108 
109  friend class AddressTablePriv;
110 };
111 
112 #endif // BITCOIN_QT_ADDRESSTABLEMODEL_H
Qt model of the address book in the core.
bool removeRows(int row, int count, const QModelIndex &parent=QModelIndex()) override
@ TypeRole
Type of address (Send or Receive)
int lookupAddress(const QString &address) const
AddressTablePriv * priv
OutputType GetDefaultAddressType() const
EditStatus getEditStatus() const
EditStatus
Return status of edit/insert operation.
@ WALLET_UNLOCK_FAILURE
Wallet could not be unlocked to create new receiving address.
@ NO_CHANGES
No changes were made during edit operation.
@ INVALID_ADDRESS
Unparseable address.
@ KEY_GENERATION_FAILURE
Generating a new public key for a receiving address failed.
@ OK
Everything ok.
@ DUPLICATE_ADDRESS
Address already in address book.
void emitDataChanged(int index)
Notify listeners that data changed.
@ Address
Bitcoin address.
@ Label
User specified label.
QVariant data(const QModelIndex &index, int role) const override
QModelIndex index(int row, int column, const QModelIndex &parent) const override
std::optional< wallet::AddressPurpose > purposeForAddress(const QString &address) const
Look up purpose for address in address book, if not found return empty string.
AddressTableModel(WalletModel *parent=nullptr, bool pk_hash_only=false)
bool getAddressData(const QString &address, std::string *name, wallet::AddressPurpose *purpose) const
Look up address book data given an address string.
int columnCount(const QModelIndex &parent) const override
bool setData(const QModelIndex &index, const QVariant &value, int role) override
static const QString Send
Specifies send address.
void updateEntry(const QString &address, const QString &label, bool isMine, wallet::AddressPurpose purpose, int status)
QString addRow(const QString &type, const QString &label, const QString &address, const OutputType address_type)
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
QString GetWalletDisplayName() const
Qt::ItemFlags flags(const QModelIndex &index) const override
static const QString Receive
Specifies receive address.
int rowCount(const QModelIndex &parent) const override
WalletModel *const walletModel
QString labelForAddress(const QString &address) const
Look up label for address in address book, if not found return empty string.
Interface to Bitcoin wallet from Qt view code.
Definition: walletmodel.h:48
AddressPurpose
Address purpose field that has been been stored with wallet sending and receiving addresses since BIP...
Definition: types.h:60
OutputType
Definition: outputtype.h:17
const char * name
Definition: rest.cpp:48
static int count