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