trafficgraphwidget.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_TRAFFICGRAPHWIDGET_H
   6  #define BITCOIN_QT_TRAFFICGRAPHWIDGET_H
   7  
   8  #include <QWidget>
   9  #include <QQueue>
  10  
  11  #include <chrono>
  12  
  13  class ClientModel;
  14  
  15  QT_BEGIN_NAMESPACE
  16  class QPaintEvent;
  17  class QTimer;
  18  QT_END_NAMESPACE
  19  
  20  class TrafficGraphWidget : public QWidget
  21  {
  22      Q_OBJECT
  23  
  24  public:
  25      explicit TrafficGraphWidget(QWidget *parent = nullptr);
  26      void setClientModel(ClientModel *model);
  27      std::chrono::minutes getGraphRange() const;
  28  
  29  protected:
  30      void paintEvent(QPaintEvent *) override;
  31  
  32  public Q_SLOTS:
  33      void updateRates();
  34      void setGraphRange(std::chrono::minutes new_range);
  35      void clear();
  36  
  37  private:
  38      void paintPath(QPainterPath &path, QQueue<float> &samples);
  39  
  40      QTimer* timer{nullptr};
  41      float fMax{0.0f};
  42      std::chrono::minutes m_range{0};
  43      QQueue<float> vSamplesIn;
  44      QQueue<float> vSamplesOut;
  45      quint64 nLastBytesIn{0};
  46      quint64 nLastBytesOut{0};
  47      ClientModel* clientModel{nullptr};
  48  };
  49  
  50  #endif // BITCOIN_QT_TRAFFICGRAPHWIDGET_H
  51