bantablemodel.h raw
1 // Copyright (c) 2011-present 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_BANTABLEMODEL_H
6 #define BITCOIN_QT_BANTABLEMODEL_H
7
8 #include <addrdb.h>
9 #include <net.h>
10
11 #include <memory>
12
13 #include <QAbstractTableModel>
14 #include <QStringList>
15
16 class BanTablePriv;
17
18 namespace interfaces {
19 class Node;
20 }
21
22 struct CCombinedBan {
23 CSubNet subnet;
24 CBanEntry banEntry;
25 };
26
27 class BannedNodeLessThan
28 {
29 public:
30 BannedNodeLessThan(int nColumn, Qt::SortOrder fOrder) :
31 column(nColumn), order(fOrder) {}
32 bool operator()(const CCombinedBan& left, const CCombinedBan& right) const;
33
34 private:
35 int column;
36 Qt::SortOrder order;
37 };
38
39 /**
40 Qt model providing information about banned peers, similar to the
41 "getpeerinfo" RPC call. Used by the rpc console UI.
42 */
43 class BanTableModel : public QAbstractTableModel
44 {
45 Q_OBJECT
46
47 public:
48 explicit BanTableModel(interfaces::Node& node, QObject* parent);
49 ~BanTableModel();
50 void startAutoRefresh();
51 void stopAutoRefresh();
52
53 enum ColumnIndex {
54 Address = 0,
55 Bantime = 1
56 };
57
58 /** @name Methods overridden from QAbstractTableModel
59 @{*/
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 QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
64 QModelIndex index(int row, int column, const QModelIndex &parent) const override;
65 Qt::ItemFlags flags(const QModelIndex &index) const override;
66 void sort(int column, Qt::SortOrder order) override;
67 /*@}*/
68
69 bool shouldShow();
70
71 bool unban(const QModelIndex& index);
72
73 public Q_SLOTS:
74 void refresh();
75
76 private:
77 interfaces::Node& m_node;
78 QStringList columns;
79 std::unique_ptr<BanTablePriv> priv;
80 };
81
82 #endif // BITCOIN_QT_BANTABLEMODEL_H
83