1 /*
2     SPDX-FileCopyrightText: 2007 Krzysztof Kundzicz <athantor@gmail.com>
3     SPDX-License-Identifier: GPL-2.0-or-later
4 */
5 
6 #ifndef KPlotWgtDrawer_H_
7 #define KPlotWgtDrawer_H_
8 
9 #include <algorithm>
10 #include <cstdint>
11 #include <list>
12 #include <memory>
13 #include <utility>
14 #include <vector>
15 
16 #include <QEvent>
17 #include <QHelpEvent>
18 #include <QImage>
19 #include <QList>
20 #include <QMenu>
21 #include <QPalette>
22 #include <QToolTip>
23 #include <QUuid>
24 #include <QWidget>
25 
26 #include <KPlotAxis>
27 #include <KPlotObject>
28 #include <KPlotPoint>
29 #include <KPlotWidget>
30 
31 #include <drawer/ChartDrawer.h>
32 
33 namespace kt
34 {
35 /** \brief Drawer class based on KPlotWidget
36 \author Krzysztof Kundzicz <athantor@gmail.com>
37 */
38 
39 class KPlotWgtDrawer : public KPlotWidget, public ChartDrawer
40 {
41     Q_OBJECT
42 
43 public:
44     /// Type used as buffer
45     typedef std::list<std::pair<size_t, wgtunit_t>> buff_t;
46     typedef QList<KPlotObject *> val_t;
47 
48 private:
49     /// Uuids of plotObjects
50     std::vector<QUuid> pmUuids;
51     /// Buffer where new values are stored between GUI updates
52     buff_t pmBuff;
53     /// Descriptions of plotObjects
54     std::vector<QString> pmDescs;
55     /// Context menu
56     QMenu *pmCtxMenu;
57 
58     /// Makes a context menu for widget
59     void MakeCtxMenu();
60     /** \brief Converts ChartDrawerData to KPlotObject
61     \param rC ChartDrawerData object to convert
62     \return Converted object
63     */
64     KPlotObject *cdd2kpo(const ChartDrawerData &rC) const;
65     /// Adds points to chart from buffer
66     void AddPointsFromBuffer();
67     /// Marks max
68     void MarkMax();
69 
70 public:
71     /// Constructor
72     KPlotWgtDrawer(QWidget *p);
73 
74     void paintEvent(QPaintEvent *pPevt) override;
75     QUuid getUuid(const size_t idx) const override;
76 
77     bool event(QEvent *) override;
78 
79 public Q_SLOTS:
80     void addValue(const size_t idx, const wgtunit_t val, const bool upd = false) override;
81     void addDataSet(ChartDrawerData Cdd) override;
82     void insertDataSet(const size_t idx, ChartDrawerData Cdd) override;
83     void removeDataSet(const size_t idx) override;
84     void zero(const size_t idx) override;
85     void zeroAll() override;
86     void setUnitName(const QString &rN) override;
87     void setPen(const size_t idx, const QPen &rP) override;
88     void setXMax(const wgtunit_t x) override;
89     void setYMax(const wgtunit_t y) override;
90     void findSetMax() override;
91     void setUuid(const size_t idx, const QUuid &rQ) override;
92     int16_t findUuidInSet(const QUuid &rQ) const override;
93     void setMaxMode(const MaxMode mm) override;
94     void update() override;
95     void setLegend(const QString &rL) override;
96     QString makeLegendString() override;
97 
98     void enableAntiAlias(bool aa) override;
99     void enableBackgroundGrid(bool bg) override;
100 
101     void showContextMenu(const QPoint &rP) override;
102     void renderToImage() override;
103 
104 Q_SIGNALS:
105     void Zeroed(ChartDrawer *);
106 };
107 
108 } // ns end
109 
110 #endif
111