1.10
chart.h
1/*
2 * Copyright (C) 2018 Microchip Technology Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6#ifndef EGT_CHART_H
7#define EGT_CHART_H
8
14#include <deque>
15#include <egt/widget.h>
16
17namespace egt
18{
19inline namespace v1
20{
21
22namespace detail
23{
24class PlPlotImpl;
25class PlPlotPieChart;
26}
27
29{
30public:
33
34 using DataArray = std::deque<std::pair<double, double>>;
35
36 using StringDataArray = std::deque<std::pair<double, std::string>>;
37
38 bool add(const double& data, const double& data1)
39 {
43 if (m_sdata.empty())
44 {
45 m_data.emplace_back(std::make_pair(data, data1));
46 return true;
47 }
48 return false;
49 }
50
51 bool add(const double& data, const std::string& data1)
52 {
56 if (m_data.empty())
57 {
58 m_sdata.emplace_back(std::make_pair(data, data1));
59 return true;
60 }
61 return false;
62 }
63
65 {
66 m_data = data;
67 }
68
70 {
71 m_sdata = data;
72 }
73
75 {
76 return m_data;
77 }
78
80 {
81 return m_sdata;
82 }
83
85 {
86 return m_data;
87 }
88
90 {
91 return m_sdata;
92 }
93
94 EGT_NODISCARD bool IsStringArray() const
95 {
96 if (!m_sdata.empty())
97 return true;
98
99 return false;
100 }
101
102 void clear()
103 {
104 m_data.clear();
105 m_sdata.clear();
106 }
107
108 ~ChartItemArray() = default;
109
110private:
111 DataArray m_data;
112 StringDataArray m_sdata;
113};
114
118class EGT_API ChartBase: public Widget
119{
120public:
121
122 using Widget::Widget;
123
127 enum class GridFlag
128 {
130 none = -2,
132 box = -1,
134 box_ticks = 0,
136 box_ticks_coord = 1,
138 box_major_ticks_coord = 2,
140 box_minor_ticks_coord = 3,
141 };
142
143 void draw(Painter& painter, const Rect& rect) override;
144
145 virtual void create_impl() = 0;
146
152 void data(const ChartItemArray& data);
153
159 void add_data(const ChartItemArray& data);
160
167
171 size_t data_size() const;
172
178 void remove_data(uint32_t count);
179
183 void clear();
184
189
196
202 void grid_width(const int val);
203
209 int grid_width() const;
210
218 void label(const std::string& xlabel, const std::string& ylabel, const std::string& title);
219
223 std::string xlabel() const;
227 std::string ylabel() const;
228
232 std::string title() const;
233
237 void xlabel(const std::string& xlabel);
241 void ylabel(const std::string& ylabel);
242
246 void title(const std::string& title);
247
255 void resize(const Size& size) override;
256
260 void bank(float bank);
261
265 float bank() const;
266
267 void serialize(Serializer& serializer) const;
268
270
271protected:
273 std::unique_ptr<detail::PlPlotImpl> m_impl;
274};
275
282class EGT_API LineChart: public ChartBase
283{
284public:
285
288 {
289 solid = 1,
292 };
293
299 explicit LineChart(const Rect& rect = {});
300
307 : LineChart(props, false)
308 {
309 }
310
311 LineChart(const LineChart&) = delete;
312 LineChart& operator=(const LineChart&) = delete;
313 LineChart(LineChart&&) noexcept = default;
314 LineChart& operator=(LineChart&&) noexcept = default;
315
316 void create_impl() override;
317
323 void line_width(const int val);
324
330 int line_width() const;
331
337 void line_style(LinePattern pattern);
338
344 LinePattern line_style() const;
345
346 void serialize(Serializer& serializer) const override;
347
348 ~LineChart() override;
349
350protected:
351
352 LineChart(Serializer::Properties& props, bool is_derived);
353
354private:
355
356 void deserialize(Serializer::Properties& props);
357};
358
365class EGT_API PointChart: public ChartBase
366{
367public:
368
371 {
372 star = 3,
375 dot = 17,
376 };
377
383 explicit PointChart(const Rect& rect = {});
384
391 : PointChart(props, false)
392 {
393 }
394
395 PointChart(const PointChart&) = delete;
396 PointChart& operator=(const PointChart&) = delete;
397 PointChart(PointChart&&) noexcept = default;
398 PointChart& operator=(PointChart&&) noexcept = default;
399
400 void create_impl() override;
401
407 void point_type(PointType ptype);
408
414 EGT_NODISCARD PointChart::PointType point_type() const;
415
416 void serialize(Serializer& serializer) const override;
417
418 ~PointChart() override;
419
420protected:
421
422 PointChart(Serializer::Properties& props, bool is_derived);
423
424private:
425
426 void deserialize(Serializer::Properties& props);
427};
428
435class EGT_API BarChart: public ChartBase
436{
437public:
438
440 enum class BarPattern
441 {
442 solid = 0,
443 horizontal_line = 1,
444 vertical_line = 2,
445 boxes = 7,
446 };
447
453 explicit BarChart(const Rect& rect = {});
454
461 : BarChart(props, false)
462 {
463 }
464
465public:
466
467 BarChart(const BarChart&) = delete;
468 BarChart& operator=(const BarChart&) = delete;
469 BarChart(BarChart&&) noexcept = default;
470 BarChart& operator=(BarChart&&) noexcept = default;
471
472 void create_impl() override;
473
479 void bar_style(BarPattern pattern);
480
486 EGT_NODISCARD BarPattern bar_style() const;
487
488 void serialize(Serializer& serializer) const override;
489
490 ~BarChart() override;
491
492protected:
493
494 BarChart(Serializer::Properties& props, bool is_derived);
495
497 BarChart(const Rect& rect, std::unique_ptr<detail::PlPlotImpl>&& impl);
498
500 BarChart(Serializer::Properties& props, std::unique_ptr<detail::PlPlotImpl>&& impl);
501
502private:
503
504 void deserialize(Serializer::Properties& props);
505};
506
507
514class EGT_API HorizontalBarChart: public BarChart
515{
516public:
517
523 explicit HorizontalBarChart(const Rect& rect = {});
524
531 : HorizontalBarChart(props, false)
532 {
533 }
534
535protected:
536
538
539public:
540
544 HorizontalBarChart& operator=(HorizontalBarChart&&) noexcept = default;
545
547};
548
555class EGT_API PieChart: public Widget
556{
557public:
563 explicit PieChart(const Rect& rect = {});
564
571 : PieChart(props, false)
572 {
573 }
574
575 PieChart(const PieChart&) = delete;
576 PieChart& operator=(const PieChart&) = delete;
577 PieChart(PieChart&&) noexcept = default;
578 PieChart& operator=(PieChart&&) noexcept = default;
579
580 void draw(Painter& painter, const Rect& rect) override;
581
587 void title(const std::string& title);
588
592 EGT_NODISCARD std::string title() const;
593
599 void data(const ChartItemArray& data);
600
606 ChartItemArray data() const;
607
611 EGT_NODISCARD size_t data_size() const;
612
618 void add_data(const ChartItemArray& data);
619
625 void remove_data(uint32_t count);
626
630 void clear();
631
639 void resize(const Size& size) override;
640
641 void serialize(Serializer& serializer) const override;
642
643 ~PieChart() override;
644
645protected:
646 PieChart(Serializer::Properties& props, bool is_derived);
647
649 std::unique_ptr<detail::PlPlotPieChart> m_impl;
650
651private:
652
653 void deserialize(Serializer::Properties& props);
654};
655
656}
657
658}
659
660#endif
Vertical BarChart Widget is used for displaying a set of categorical data.
Definition chart.h:436
BarChart(const BarChart &)=delete
BarPattern
Bar pattern styles.
Definition chart.h:441
BarChart(Serializer::Properties &props)
Construct a Barchart.
Definition chart.h:460
BarChart & operator=(const BarChart &)=delete
BarChart(BarChart &&) noexcept=default
BarChart(const Rect &rect={})
Construct a BarChart with the specified size.
Abstract base chart class.
Definition chart.h:119
void remove_data(uint32_t count)
Remove data items from top in an array.
float bank() const
Get bank percent set beyond min and maximum values.
std::string xlabel() const
Get chart x-axis label.
void data(const ChartItemArray &data)
Set a new set of data to Chart.
void serialize(Serializer &serializer) const
Serialize the widget to the specified serializer.
void title(const std::string &title)
Set chart title.
void draw(Painter &painter, const Rect &rect) override
Draw the widget.
void deserialize(Serializer::Properties &props)
void grid_style(GridFlag flag)
Set the grid style.
void label(const std::string &xlabel, const std::string &ylabel, const std::string &title)
Set chart labels.
size_t data_size() const
Get the number of data points.
std::string ylabel() const
Get chart y-axis label.
void resize(const Size &size) override
Resize the Chart.
void grid_width(const int val)
Set grid width.
virtual void create_impl()=0
GridFlag grid_style() const
Get chart grid style.
void ylabel(const std::string &ylabel)
Set chart y-axis label.
void xlabel(const std::string &xlabel)
Set chart x-axis label.
std::string title() const
Get chart title.
ChartItemArray data() const
Get the data points set for Chart.
GridFlag
Flags used to control how a chart grid is drawn.
Definition chart.h:128
void clear()
Remove all data items.
int grid_width() const
Get chart grid width.
void bank(float bank)
Add a percent bank beyond the min and maximum values.
void add_data(const ChartItemArray &data)
Add data items to an existing array.
Definition chart.h:29
void data(StringDataArray &data)
Definition chart.h:69
EGT_NODISCARD bool IsStringArray() const
Definition chart.h:94
ChartItemArray()
Definition chart.h:31
bool add(const double &data, const std::string &data1)
Definition chart.h:51
std::deque< std::pair< double, std::string > > StringDataArray
Definition chart.h:36
std::deque< std::pair< double, double > > DataArray
Definition chart.h:34
DataArray get_data()
Definition chart.h:74
StringDataArray get_sdata() const
Definition chart.h:89
DataArray get_data() const
Definition chart.h:84
bool add(const double &data, const double &data1)
Definition chart.h:38
void data(DataArray &data)
Definition chart.h:64
void clear()
Definition chart.h:102
StringDataArray get_sdata()
Definition chart.h:79
Horizontal BarChart Widget is used for displaying a set of categorical data.
Definition chart.h:515
HorizontalBarChart & operator=(const HorizontalBarChart &)=delete
HorizontalBarChart(const Rect &rect={})
Construct a HorizontalBarChart with the specified size.
HorizontalBarChart(const HorizontalBarChart &)=delete
HorizontalBarChart(HorizontalBarChart &&) noexcept=default
HorizontalBarChart(Serializer::Properties &props, bool is_derived)
HorizontalBarChart(Serializer::Properties &props)
Construct a HorizontalBarchart.
Definition chart.h:530
LineChart Widget is used for displaying information as a series of data points.
Definition chart.h:283
LineChart(LineChart &&) noexcept=default
LineChart & operator=(const LineChart &)=delete
LineChart(const Rect &rect={})
Construct a LineChart with the specified size.
LineChart(Serializer::Properties &props)
Construct a Linechart.
Definition chart.h:306
LineChart(const LineChart &)=delete
LinePattern
Line style patterns.
Definition chart.h:288
@ dotted
Definition chart.h:290
@ dashes
Definition chart.h:291
Drawing interface for 2D graphics.
Definition painter.h:45
PieChart Widget is a circular statistical graphic, which is divided into slices to illustrate numeric...
Definition chart.h:556
PieChart(Serializer::Properties &props)
Construct a Piechart.
Definition chart.h:570
PieChart(const Rect &rect={})
Construct a PieChart with the specified size.
PieChart & operator=(const PieChart &)=delete
PieChart(const PieChart &)=delete
PieChart(PieChart &&) noexcept=default
PointChart Widget is used for displaying information as a series of data points.
Definition chart.h:366
PointType
Point styles.
Definition chart.h:371
@ circle
Definition chart.h:373
@ cross
Definition chart.h:374
PointChart(const PointChart &)=delete
PointChart(PointChart &&) noexcept=default
PointChart(const Rect &rect={})
Construct a PointChart with the specified size.
PointChart & operator=(const PointChart &)=delete
PointChart(Serializer::Properties &props)
Construct a Pointchart.
Definition chart.h:390
Abstract base serializer class.
Definition serialize.h:34
std::list< std::tuple< std::string, std::string, Serializer::Attributes > > Properties
Definition serialize.h:47
Base Widget class.
Definition widget.h:53
EGT framework namespace.
Definition animation.h:24