Dooble
dooble_charts.h
1 /*
2 ** Copyright (c) 2008 - present, Alexis Megas.
3 ** All rights reserved.
4 **
5 ** Redistribution and use in source and binary forms, with or without
6 ** modification, are permitted provided that the following conditions
7 ** are met:
8 ** 1. Redistributions of source code must retain the above copyright
9 ** notice, this list of conditions and the following disclaimer.
10 ** 2. Redistributions in binary form must reproduce the above copyright
11 ** notice, this list of conditions and the following disclaimer in the
12 ** documentation and/or other materials provided with the distribution.
13 ** 3. The name of the author may not be used to endorse or promote products
14 ** derived from Dooble without specific prior written permission.
15 **
16 ** DOOBLE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 ** DOOBLE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27 
28 #ifndef dooble_charts_h
29 #define dooble_charts_h
30 
31 #ifdef DOOBLE_QTCHARTS_PRESENT
32 #include <QtCharts>
33 #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
34 using namespace QtCharts;
35 #endif
36 #endif
37 
38 #include <QMap>
39 #include <QPointer>
40 
41 #include "ui_dooble_charts.h"
42 
43 class QPrinter;
44 class QStandardItem;
47 
48 class dooble_charts: public QWidget
49 {
50  Q_OBJECT
51 
52  public:
53  enum Properties
54  {
55  /*
56  ** Chart Properties
57  */
58 
59  CHART_ANIMATION_DURATION = 0,
60  CHART_ANIMATION_OPTIONS,
61  CHART_BACKGROUND_COLOR,
62  CHART_BACKGROUND_ROUNDNESS,
63  CHART_BACKGROUND_VISIBLE,
64  CHART_CHART_TYPE,
65  CHART_DROP_SHADOW_ENABLED,
66  CHART_LOCALE,
67  CHART_LOCALIZE_NUMBERS,
68  CHART_MARGINS,
69  CHART_MARGINS_BOTTOM,
70  CHART_MARGINS_LEFT,
71  CHART_MARGINS_RIGHT,
72  CHART_MARGINS_TOP,
73  CHART_NAME,
74  CHART_PLOT_AREA_BACKGROUND_VISIBLE,
75  CHART_THEME,
76  CHART_TITLE,
77  CHART_TITLE_COLOR,
78  CHART_TITLE_FONT,
79 
80  /*
81  ** Chart Axis Properties
82  */
83 
84  CHART_AXIS_X_ALIGNMENT_HORIZONTAL,
85  CHART_AXIS_X_ALIGNMENT_VERTICAL,
86  CHART_AXIS_X_COLOR,
87  CHART_AXIS_X_GRID_LINE_COLOR,
88  CHART_AXIS_X_GRID_VISIBLE,
89  CHART_AXIS_X_LABELS_ANGLE,
90  CHART_AXIS_X_LABELS_COLOR,
91  CHART_AXIS_X_LABELS_FONT,
92  CHART_AXIS_X_LABELS_VISIBLE,
93  CHART_AXIS_X_LINE_VISIBLE,
94  CHART_AXIS_X_MINOR_GRID_LINE_COLOR,
95  CHART_AXIS_X_MINOR_GRID_LINE_VISIBLE,
96  CHART_AXIS_X_ORIENTATION,
97  CHART_AXIS_X_REVERSE,
98  CHART_AXIS_X_SHADES_BORDER_COLOR,
99  CHART_AXIS_X_SHADES_COLOR,
100  CHART_AXIS_X_SHADES_VISIBLE,
101  CHART_AXIS_X_TITLE_COLOR,
102  CHART_AXIS_X_TITLE_FONT,
103  CHART_AXIS_X_TITLE_TEXT,
104  CHART_AXIS_X_TITLE_VISIBLE,
105  CHART_AXIS_X_VISIBLE,
106  CHART_AXIS_Y_ALIGNMENT_HORIZONTAL,
107  CHART_AXIS_Y_ALIGNMENT_VERTICAL,
108  CHART_AXIS_Y_COLOR,
109  CHART_AXIS_Y_GRID_LINE_COLOR,
110  CHART_AXIS_Y_GRID_VISIBLE,
111  CHART_AXIS_Y_LABELS_ANGLE,
112  CHART_AXIS_Y_LABELS_COLOR,
113  CHART_AXIS_Y_LABELS_FONT,
114  CHART_AXIS_Y_LABELS_VISIBLE,
115  CHART_AXIS_Y_LINE_VISIBLE,
116  CHART_AXIS_Y_MINOR_GRID_LINE_COLOR,
117  CHART_AXIS_Y_MINOR_GRID_LINE_VISIBLE,
118  CHART_AXIS_Y_ORIENTATION,
119  CHART_AXIS_Y_REVERSE,
120  CHART_AXIS_Y_SHADES_BORDER_COLOR,
121  CHART_AXIS_Y_SHADES_COLOR,
122  CHART_AXIS_Y_SHADES_VISIBLE,
123  CHART_AXIS_Y_TITLE_COLOR,
124  CHART_AXIS_Y_TITLE_FONT,
125  CHART_AXIS_Y_TITLE_TEXT,
126  CHART_AXIS_Y_TITLE_VISIBLE,
127  CHART_AXIS_Y_VISIBLE,
128 
129  /*
130  ** Data Properties
131  */
132 
133  DATA_EXTRACTION_SCRIPT,
134  DATA_SOURCE_ADDRESS,
135  DATA_SOURCE_READ_BUFFER_SIZE,
136  DATA_SOURCE_READ_RATE,
137  DATA_SOURCE_TYPE,
138 
139  /*
140  ** Legend Properties
141  */
142 
143  LEGEND_ALIGNMENT,
144  LEGEND_BACKGROUND_VISIBLE,
145  LEGEND_BORDER_COLOR,
146  LEGEND_COLOR,
147  LEGEND_FONT,
148  LEGEND_LABEL_COLOR,
149  LEGEND_MARKER_SHAPE,
150  LEGEND_REVERSE_MARKERS,
151  LEGEND_SHOW_TOOL_TIPS,
152  LEGEND_VISIBLE,
153 
154  /*
155  ** XY Series Properties
156  */
157 
158  XY_SERIES_COLOR,
159  XY_SERIES_NAME,
160  XY_SERIES_OPACITY,
161  XY_SERIES_POINTS_VISIBLE,
162  XY_SERIES_POINT_LABELS_CLIPPING,
163  XY_SERIES_POINT_LABELS_COLOR,
164  XY_SERIES_POINT_LABELS_FONT,
165  XY_SERIES_POINT_LABELS_FORMAT,
166  XY_SERIES_POINT_LABELS_VISIBLE,
167  XY_SERIES_USE_OPENGL,
168  XY_SERIES_VISIBLE,
169  XY_SERIES_X_AXIS,
170  XY_SERIES_X_AXIS_LABEL_FORMAT,
171  XY_SERIES_X_AXIS_MAX,
172  XY_SERIES_X_AXIS_MIN,
173  XY_SERIES_X_AXIS_MINOR_TICK_COUNT,
174  XY_SERIES_X_AXIS_TICK_ANCHOR,
175  XY_SERIES_X_AXIS_TICK_COUNT,
176  XY_SERIES_X_AXIS_TICK_INTERVAL,
177  XY_SERIES_X_AXIS_TICK_TYPE,
178  XY_SERIES_Y_AXIS,
179  XY_SERIES_Y_AXIS_LABEL_FORMAT,
180  XY_SERIES_Y_AXIS_MAX,
181  XY_SERIES_Y_AXIS_MIN,
182  XY_SERIES_Y_AXIS_MINOR_TICK_COUNT,
183  XY_SERIES_Y_AXIS_TICK_ANCHOR,
184  XY_SERIES_Y_AXIS_TICK_COUNT,
185  XY_SERIES_Y_AXIS_TICK_INTERVAL,
186  XY_SERIES_Y_AXIS_TICK_TYPE,
187  };
188 
189  dooble_charts(QWidget *parent);
190  virtual ~dooble_charts();
191  static const QString s_axis_properties_strings[];
192  static const QString s_chart_properties_strings[];
193  static const QString s_data_properties_strings[];
194  static const QString s_legend_properties_strings[];
195  QHash<dooble_charts::Properties, QVariant> data_properties(void) const;
196  QHash<dooble_charts::Properties, QVariant> legend_properties(void) const;
197  QHash<dooble_charts::Properties, QVariant> x_axis_properties(void) const;
198  QHash<dooble_charts::Properties, QVariant> y_axis_properties(void) const;
199  QMenu *menu(void);
200  QPixmap pixmap(void) const;
201  QString name(void) const;
202  QWidget *frame(void) const;
203  QWidget *view(void) const;
204 #ifdef DOOBLE_QTCHARTS_PRESENT
205  static QChart::AnimationOptions string_to_chart_animation_options
206  (const QString &t);
207  static QChart::ChartTheme string_to_chart_theme(const QString &t);
208  static QLegend::MarkerShape string_to_legend_marker_shape(const QString &t);
209  static QString chart_animation_option_to_string
210  (const QChart::AnimationOptions chart_animation_options);
211  static QString chart_theme_to_string(const QChart::ChartTheme chart_theme);
212  static QString chart_type_to_string(const QChart::ChartType chart_type);
213  static QString legend_marker_shape_to_string
214  (const QLegend::MarkerShape marker_shape);
215 #endif
216  static QString property_to_name(const dooble_charts::Properties property);
217  static QString type_from_database(const QString &name);
218  static void purge(void);
219  virtual QHash<dooble_charts::Properties, QVariant> properties(void) const;
220  virtual void decouple(void);
221  virtual void open(const QString &name);
222  virtual void save(QString &error);
223 
224  private:
225  QHash<QString, QVariant> data_properties_for_database(void) const;
226  QHash<QString, QVariant> legend_properties_for_database(void) const;
227  QHash<QString, QVariant> properties_for_database(void) const;
228  QHash<QString, QVariant> x_axis_properties_for_database(void) const;
229  QHash<QString, QVariant> y_axis_properties_for_database(void) const;
230  QMultiHash<dooble_charts::Properties, QVariant> all_properties(void) const;
231  virtual void create_default_device(void);
232 
233  protected:
234 #ifdef DOOBLE_QTCHARTS_PRESENT
235  QChart *m_chart;
236  QChartView *m_chart_view;
237  QLegend *m_legend;
238 #endif
239 #ifdef DOOBLE_QTCHARTS_PRESENT
240  QMap<int, QPointer<QAbstractSeries> > m_series;
241 #endif
242  QMap<int, QPointer<dooble_charts_iodevice> > m_iodevices;
243  QMenu *m_menu;
244 #ifdef DOOBLE_QTCHARTS_PRESENT
245  QPointer<QAbstractAxis> m_x_axis;
246  QPointer<QAbstractAxis> m_y_axis;
247 #endif
248  Ui_dooble_charts m_ui;
249  bool m_print_preview;
250  dooble_charts_property_editor *m_property_editor;
251 
252  protected slots:
253  virtual void slot_clear(void);
254  virtual void slot_data_ready(const QVector<double> &vector,
255  const int index) = 0;
256  virtual void slot_item_changed(QStandardItem *item);
257  virtual void slot_play(void);
258  virtual void slot_pause(void);
259  virtual void slot_print(void);
260  virtual void slot_print_preview(QPrinter *printer);
261  virtual void slot_print_preview(void);
262  virtual void slot_save(void);
263  virtual void slot_stop(void);
264  void slot_apply_properties_after_theme_changed(void);
265 };
266 
267 #endif
Definition: dooble_charts_iodevice.h:37
Definition: dooble_charts_property_editor.h:93
Definition: dooble_charts.h:49