Bitcoin Core  26.1.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
QVariant data(const QModelIndex &index, int role) const override
Generating a new public key for a receiving address failed.
int lookupAddress(const QString &address) const
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
Address already in address book.
int rowCount(const QModelIndex &parent) const override
OutputType
Definition: outputtype.h:17
QString addRow(const QString &type, const QString &label, const QString &address, const OutputType address_type)
static const QString Send
Specifies send address.
int columnCount(const QModelIndex &parent) const override
bool setData(const QModelIndex &index, const QVariant &value, int role) override
AddressPurpose
Address purpose field that has been been stored with wallet sending and receiving addresses since BIP...
Definition: types.h:60
Wallet could not be unlocked to create new receiving address.
Qt::ItemFlags flags(const QModelIndex &index) const override
const char * name
Definition: rest.cpp:45
EditStatus
Return status of edit/insert operation.
QString labelForAddress(const QString &address) const
Look up label for address in address book, if not found return empty string.
bool removeRows(int row, int count, const QModelIndex &parent=QModelIndex()) override
WalletModel *const walletModel
std::optional< wallet::AddressPurpose > purposeForAddress(const QString &address) const
Look up purpose for address in address book, if not found return empty string.
Qt model of the address book in the core.
void updateEntry(const QString &address, const QString &label, bool isMine, wallet::AddressPurpose purpose, int status)
OutputType GetDefaultAddressType() const
QString GetWalletDisplayName() const
AddressTablePriv * priv
Interface to Bitcoin wallet from Qt view code.
Definition: walletmodel.h:51
static const QString Receive
Specifies receive address.
void emitDataChanged(int index)
Notify listeners that data changed.
bool getAddressData(const QString &address, std::string *name, wallet::AddressPurpose *purpose) const
Look up address book data given an address string.
static int count
No changes were made during edit operation.
EditStatus getEditStatus() const
User specified label.
QModelIndex index(int row, int column, const QModelIndex &parent) const override
AddressTableModel(WalletModel *parent=nullptr, bool pk_hash_only=false)
Type of address (Send or Receive)