/ src / qt / trafficgraphwidget.h
trafficgraphwidget.h
 1  // Copyright (c) 2011-2022 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