1 /*
2     SPDX-FileCopyrightText: 2007 Krzysztof Kundzicz <athantor@gmail.com>
3     SPDX-License-Identifier: GPL-2.0-or-later
4 */
5 
6 #ifndef ChartDrawerData_H_
7 #define ChartDrawerData_H_
8 
9 #include <QPen>
10 #include <QPointer>
11 #include <QString>
12 #include <QUuid>
13 
14 #include <algorithm>
15 #include <memory>
16 #include <utility>
17 #include <vector>
18 
19 namespace kt
20 {
21 /** \brief „Container” for chart's data, used by ChartDrawer
22 \author Krzysztof Kundzicz <athantor@gmail.com>
23 */
24 
25 class ChartDrawerData
26 {
27     friend class ChartDrawer;
28 
29 public:
30     /// Type storing chart's values
31     typedef std::vector<qreal> val_t;
32 
33 private:
34     /// Name of the set
35     QString pmName;
36     /// Pent of the set
37     QPen pmPen;
38     /// Values
39     val_t pmVals;
40     /// Set's UUID
41     QUuid pmUuid;
42     /// Mark maximum?
43     bool mMax;
44 
45 public:
46     /// Constructor
47     ChartDrawerData();
48     /// Destructor
49     ~ChartDrawerData();
50     /** \brief Copy constructor
51     \param rCdd Source
52     */
53     ChartDrawerData(const ChartDrawerData &rCdd);
54     /** \brief Constructor
55     \param rN Name
56     \param rP Pen
57     \param max Mark maximum?
58     \param rU UUID
59 
60     \note If there is no UUID given, it'll going be generated automagically
61     */
62     ChartDrawerData(const QString &rN, const QPen &rP, const bool max, const QUuid &rU = QUuid::createUuid());
63 
64     /** \brief Resizes set to given size
65     \param size New size
66     \note New values are filled with '0.0'
67     */
68     void setSize(const size_t size);
69 
70     /// Zeros the set
71     void zero();
72 
73     /** \brief Adds value to set
74     \param val Value
75     */
76     void addValue(const qreal val);
77 
78     /** \brief Returns valueset
79     \return Values
80     */
getValues()81     const val_t &getValues() const
82     {
83         return pmVals;
84     }
85 
86     /** \brief Returns set's pen
87     \return Pen
88     */
getPen()89     QPen getPen() const
90     {
91         return pmPen;
92     }
93     /** \brief Sets set's pen
94     \param rP New pen
95     */
setPen(const QPen & rP)96     void setPen(const QPen &rP)
97     {
98         pmPen = rP;
99     }
100 
101     /** \brief Returns set's name
102     \return Name
103     */
getName()104     QString getName() const
105     {
106         return pmName;
107     }
108 
109     /** \brief Sets set's name
110     \param rN New name
111     */
setName(const QString & rN)112     void setName(const QString &rN)
113     {
114         pmName = rN;
115     }
116 
117     /** \brief Returns set's UUID
118     \return UUID
119     */
getUuid()120     const QUuid getUuid() const
121     {
122         return pmUuid;
123     }
124     /** \brief Sets set's UUID
125     \param rU New UUID
126     */
setUuid(const QUuid & rU)127     void setUuid(const QUuid &rU)
128     {
129         pmUuid = rU;
130     }
131 
132     /** \brief Mark set's maximum
133     \return Mark?
134     */
135     bool getMarkMax() const;
136     /** \brief Enable maximum marking?
137     \param max Enable?
138     */
139     void enableMarkMax(const bool max);
140 
141     /** \brief Finds maximum
142      * \return Maximum
143      *
144      * Function returns pair, where:
145      * - First: Maximum value
146      * - Second: Value's position in set
147      */
148     std::pair<qreal, size_t> findMax() const;
149 
150     /// Dummy assignment operator for MSVC
151     bool operator=(const ChartDrawerData & /*rCdd*/)
152     {
153         return true;
154     };
155 };
156 
157 } // NS end
158 
159 #endif
160