File indexing completed on 2024-05-19 05:44:23

0001 /*
0002     SPDX-FileCopyrightText: 2015-2017 Milian Wolff <mail@milianw.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #ifndef CHARTWIDGET_H
0008 #define CHARTWIDGET_H
0009 
0010 #include <QWidget>
0011 
0012 #include "summarydata.h"
0013 
0014 class QRubberBand;
0015 class QAbstractItemModel;
0016 class QSpinBox;
0017 
0018 class ChartModel;
0019 
0020 namespace KChart {
0021 class Chart;
0022 class CartesianAxis;
0023 class Legend;
0024 class Plotter;
0025 }
0026 
0027 class ChartWidget : public QWidget
0028 {
0029     Q_OBJECT
0030 public:
0031     explicit ChartWidget(QWidget* parent = nullptr);
0032     virtual ~ChartWidget();
0033 
0034     void setModel(ChartModel* model, bool minimalMode = false);
0035 
0036     QSize sizeHint() const override;
0037 
0038     struct Range
0039     {
0040         float start = -1;
0041         float end = -1;
0042 
0043         bool operator==(const Range& rhs) const
0044         {
0045             return start == rhs.start && end == rhs.end;
0046         }
0047 
0048         explicit operator bool() const
0049         {
0050             return start != end;
0051         }
0052     };
0053     void setSelection(const Range& range);
0054     Range selection() const
0055     {
0056         return m_selection;
0057     }
0058 
0059     void setSummaryData(const SummaryData& summaryData);
0060 
0061 signals:
0062     void selectionChanged(const Range& range);
0063     void filterRequested(int64_t minTime, int64_t maxTime);
0064 
0065 public slots:
0066     void saveAs();
0067 
0068 private:
0069     void updateToolTip();
0070     void updateStatusTip(qint64 time);
0071     void updateAxesTitle();
0072     void updateRubberBand();
0073     bool eventFilter(QObject* watched, QEvent* event) override;
0074 
0075     KChart::Plotter* m_totalPlotter = nullptr;
0076     KChart::Plotter* m_detailedPlotter = nullptr;
0077     QSpinBox* m_stackedDiagrams = nullptr;
0078     KChart::Chart* m_chart = nullptr;
0079     KChart::Legend* m_legend = nullptr;
0080     KChart::CartesianAxis* m_bottomAxis = nullptr;
0081     KChart::CartesianAxis* m_rightAxis = nullptr;
0082     ChartModel* m_model = nullptr;
0083     QRubberBand* m_rubberBand = nullptr;
0084     Range m_selection;
0085     SummaryData m_summaryData;
0086     QPixmap m_cachedChart;
0087 };
0088 
0089 #endif // CHARTWIDGET_H