Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
QmitkChartData.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef QmitkChartData_h
14 #define QmitkChartData_h
15 
16 #include <QmitkChartWidget.h>
17 #include <QVariant>
18 #include <QApplication>
19 #include <QClipboard>
20 #include <QUrl>
21 #include <QFileDialog>
22 #include <boost/algorithm/string.hpp>
23 #include <fstream>
24 
39 class QmitkChartData : public QObject
40 {
41  Q_OBJECT
42 
43  Q_PROPERTY(QVariant m_xAxisLabel READ GetXAxisLabel WRITE SetXAxisLabel NOTIFY SignalXAxisLabelChanged);
44  Q_PROPERTY(QVariant m_yAxisLabel READ GetYAxisLabel WRITE SetYAxisLabel NOTIFY SignalYAxisLabelChanged);
45  Q_PROPERTY(QVariant m_chartTitle READ GetTitle WRITE SetTitle NOTIFY SignalTitleChanged);
46  Q_PROPERTY(QVariant m_themeName READ GetThemeName WRITE SetThemeName NOTIFY SignalThemeNameChanged);
48  Q_PROPERTY(QVariant m_ShowLegend READ GetShowLegend WRITE SetShowLegend NOTIFY SignalShowLegendChanged);
49  Q_PROPERTY(QVariant m_ShowErrorBars READ GetShowErrorBars WRITE SetShowErrorBars NOTIFY SignalShowErrorBarsChanged);
50  Q_PROPERTY(QVariant m_YAxisScale READ GetYAxisScale WRITE SetYAxisScale NOTIFY SignalYAxisScaleChanged);
51  Q_PROPERTY(QVariant m_ShowSubchart READ GetShowSubchart WRITE SetShowSubchart NOTIFY SignalShowSubchartChanged);
53  Q_PROPERTY(QVariant m_DataPointSize READ GetDataPointSize WRITE SetDataPointSize NOTIFY SignalDataPointSizeChanged);
54  Q_PROPERTY(QVariant m_StackedData READ GetStackedData WRITE SetStackedData NOTIFY SignalStackedDataChanged);
55  Q_PROPERTY(QVariant m_MinValueXView READ GetMinValueXView WRITE SetMinValueXView NOTIFY SignalMinValueXViewChanged);
56  Q_PROPERTY(QVariant m_MaxValueXView READ GetMaxValueXView WRITE SetMaxValueXView NOTIFY SignalMaxValueXViewChanged);
57  Q_PROPERTY(QVariant m_MinValueYView READ GetMinValueYView WRITE SetMinValueYView NOTIFY SignalMinValueYViewChanged);
58  Q_PROPERTY(QVariant m_MaxValueYView READ GetMaxValueYView WRITE SetMaxValueYView NOTIFY SignalMaxValueYViewChanged);
59 
60 public:
63 
70  void SetAppearance(bool showSubChart = true, bool usePercentageInPieChart = false);
71 
76  Q_INVOKABLE QVariant GetXAxisLabel() const { return m_xAxisLabel; };
81  Q_INVOKABLE void SetXAxisLabel(const QVariant& label) { m_xAxisLabel = label; emit SignalXAxisLabelChanged(label); };
82 
87  Q_INVOKABLE QVariant GetYAxisLabel() const { return m_yAxisLabel; };
92  Q_INVOKABLE void SetYAxisLabel(const QVariant& label) { m_yAxisLabel = label; emit SignalYAxisLabelChanged(label); };
93 
98  Q_INVOKABLE QVariant GetTitle() const { return m_chartTitle; };
103  Q_INVOKABLE void SetTitle(const QVariant& title) { m_chartTitle = title; emit SignalTitleChanged(title); };
104 
109  Q_INVOKABLE QVariant GetThemeName() const { return m_themeName; };
114  Q_INVOKABLE void SetThemeName(const QVariant &themeName)
115  {
116  m_themeName = themeName;
117  emit SignalThemeNameChanged(themeName);
118  };
119 
124  Q_INVOKABLE QVariant GetLegendPosition() const { return m_LegendPosition; };
129  Q_INVOKABLE void SetLegendPosition(const QVariant& legendPosition) { m_LegendPosition = legendPosition; emit SignalLegendPositionChanged(legendPosition); };
130 
135  Q_INVOKABLE QVariant GetShowLegend() const { return m_ShowLegend; };
140  Q_INVOKABLE void SetShowLegend(const QVariant& show) { m_ShowLegend = show; emit SignalShowLegendChanged(show); };
141 
146  Q_INVOKABLE QVariant GetShowErrorBars() const { return m_ShowErrorBars; };
151  Q_INVOKABLE void SetShowErrorBars(const QVariant &show)
152  {
153  m_ShowErrorBars = show;
154  emit SignalShowErrorBarsChanged(show);
155  };
156 
161  Q_INVOKABLE QVariant GetYAxisScale() const { return m_YAxisScale; };
166  Q_INVOKABLE void SetYAxisScale(const QVariant& YAxisScale) { m_YAxisScale = YAxisScale; emit SignalYAxisScaleChanged(YAxisScale); };
167 
172  Q_INVOKABLE QVariant GetShowSubchart() const { return m_ShowSubchart; };
177  Q_INVOKABLE void SetShowSubchart(const QVariant& showSubchart) { m_ShowSubchart = showSubchart; emit SignalShowSubchartChanged(showSubchart); };
178 
183  Q_INVOKABLE QVariant GetUsePercentageInPieChart() const { return m_UsePercentageInPieChart; };
188  Q_INVOKABLE void SetUsePercentageInPieChart(const QVariant& usePercentageInPieChart) { m_UsePercentageInPieChart = usePercentageInPieChart; emit SignalUsePercentageInPieChartChanged(usePercentageInPieChart); };
189 
194  Q_INVOKABLE QVariant GetDataPointSize() const { return m_DataPointSize; };
199  Q_INVOKABLE void SetDataPointSize(const QVariant& showDataPoints) { m_DataPointSize = showDataPoints; emit SignalDataPointSizeChanged(showDataPoints); };
200 
205  Q_INVOKABLE QVariant GetStackedData() const { return m_StackedData; };
210  Q_INVOKABLE void SetStackedData(const QVariant& stackedData) { m_StackedData = stackedData; emit SignalStackedDataChanged(m_StackedData); };
211 
216  Q_INVOKABLE QVariant GetMinValueXView() const { return m_MinValueXView; };
221  Q_INVOKABLE void SetMinValueXView(const QVariant &minValueXView)
222  {
223  m_MinValueXView = minValueXView;
225  };
226 
231  Q_INVOKABLE QVariant GetMaxValueXView() const { return m_MaxValueXView; };
236  Q_INVOKABLE void SetMaxValueXView(const QVariant &maxValueXView)
237  {
238  m_MaxValueXView = maxValueXView;
240  };
241 
246  Q_INVOKABLE QVariant GetMinValueYView() const { return m_MinValueYView; };
251  Q_INVOKABLE void SetMinValueYView(const QVariant &minValueYView)
252  {
253  m_MinValueYView = minValueYView;
255  };
256 
261  Q_INVOKABLE QVariant GetMaxValueYView() const { return m_MaxValueYView; };
266  Q_INVOKABLE void SetMaxValueYView(const QVariant &maxValueYView)
267  {
268  m_MaxValueYView = maxValueYView;
270  };
271 
276  {
277  emit SignalImageUrl();
278  };
279 
280 signals:
281  void SignalYAxisLabelChanged(const QVariant label);
282  void SignalXAxisLabelChanged(const QVariant label);
283  void SignalLegendPositionChanged(const QVariant legendPosition);
284  void SignalShowLegendChanged(const QVariant show);
285  void SignalShowErrorBarsChanged(const QVariant show);
286  void SignalYAxisScaleChanged(const QVariant YAxisScale);
287  void SignalTitleChanged(const QVariant title);
288  void SignalThemeNameChanged(const QVariant themeName);
289  void SignalShowSubchartChanged(const QVariant showSubchart);
290  void SignalUsePercentageInPieChartChanged(const QVariant usePercentageInPieChart);
291  void SignalDataPointSizeChanged(const QVariant showDataPoints);
292  void SignalStackedDataChanged(const QVariant stackedData);
293  void SignalMinValueXViewChanged(const QVariant minValueXView);
294  void SignalMaxValueXViewChanged(const QVariant maxValueXView);
295  void SignalMinValueYViewChanged(const QVariant minValueYView);
296  void SignalMaxValueYViewChanged(const QVariant maxValueYView);
297  void SignalImageUrl();
298 
299 public slots:
308  void slotImageUrl(const QString &datafromjs)
309  {
310  QString ds = QUrl::fromPercentEncoding(datafromjs.toLatin1());
311 
312  QString filename = QFileDialog::getSaveFileName(
313  0,
314  tr("Save Plot"),
315  "my_plot.svg",
316  tr("Scalable Vector Graphics (*.svg)") );
317  if (filename.isEmpty())
318  return;
319 
320  std::string out_image = ds.toStdString();
321  boost::algorithm::replace_first(out_image, "data:image/svg+xml,", "");
322  std::ofstream outfile(filename.toStdString());
323  outfile.write(out_image.c_str(), out_image.size());
324  outfile.close();
325  }
326 
327 private:
328  QVariant m_xAxisLabel;
329  QVariant m_yAxisLabel;
330  QVariant m_chartTitle;
331  QVariant m_themeName = "dark";
332 
333  QVariant m_ShowLegend = true;
334  QVariant m_ShowErrorBars;
335  QVariant m_LegendPosition = "topRight";
336  QVariant m_ShowSubchart;
337  QVariant m_YAxisScale;
338  QVariant m_UsePercentageInPieChart;
339  QVariant m_numberDatasets;
340  QVariant m_DataPointSize = 0;
341  QVariant m_StackedData;
342  QVariant m_MinValueXView;
343  QVariant m_MaxValueXView;
344  QVariant m_MinValueYView;
345  QVariant m_MaxValueYView;
346 };
347 
348 #endif
Holds global chart properties for chart generation via QWebChannel.
Q_INVOKABLE QVariant GetShowErrorBars() const
Get whether error bars are shown.
void SignalStackedDataChanged(const QVariant stackedData)
Emitted when stacked data mode changes.
Q_INVOKABLE void SetMinValueYView(const QVariant &minValueYView)
Set the minimum Y axis view value for zooming.
Q_INVOKABLE QVariant GetMinValueYView() const
Get the minimum Y axis view value.
void SignalImageUrl()
Emitted to request the chart image URL from JavaScript for SVG export.
Q_INVOKABLE void SetStackedData(const QVariant &stackedData)
Set whether data is displayed in stacked mode.
Q_INVOKABLE QVariant GetShowSubchart() const
Get whether the subchart (overview navigator) is shown.
void SignalXAxisLabelChanged(const QVariant label)
Emitted when the X axis label changes.
Q_INVOKABLE void SetXAxisLabel(const QVariant &label)
Set the X axis label text.
QVariant m_MinValueYView
Q_INVOKABLE void SetMaxValueXView(const QVariant &maxValueXView)
Set the maximum X axis view value for zooming.
QVariant m_MaxValueXView
QVariant m_DataPointSize
void SignalDataPointSizeChanged(const QVariant showDataPoints)
Emitted when data point size changes.
QVariant m_ShowSubchart
Q_INVOKABLE void SetTitle(const QVariant &title)
Set the chart title.
Q_INVOKABLE QVariant GetXAxisLabel() const
Get the X axis label text.
QmitkChartData()
Construct a QmitkChartData with default property values.
void SignalUsePercentageInPieChartChanged(const QVariant usePercentageInPieChart)
Emitted when pie chart percentage mode changes.
void SignalThemeNameChanged(const QVariant themeName)
Emitted when the theme changes.
void SignalLegendPositionChanged(const QVariant legendPosition)
Emitted when the legend position changes.
Q_INVOKABLE QVariant GetYAxisScale() const
Get the Y axis scale type.
void SignalShowSubchartChanged(const QVariant showSubchart)
Emitted when subchart visibility changes.
Q_INVOKABLE void SetYAxisLabel(const QVariant &label)
Set the Y axis label text.
void EmitSignalImageUrl()
Emit the SignalImageUrl signal to trigger SVG export in JavaScript.
void SignalMaxValueXViewChanged(const QVariant maxValueXView)
Emitted when maximum X view value changes.
void slotImageUrl(const QString &datafromjs)
Slot that receives an SVG image URL from JavaScript and saves it to a file.
QVariant m_UsePercentageInPieChart
QVariant m_YAxisScale
Q_INVOKABLE void SetThemeName(const QVariant &themeName)
Set the chart theme name.
Q_INVOKABLE QVariant GetTitle() const
Get the chart title.
Q_INVOKABLE void SetMaxValueYView(const QVariant &maxValueYView)
Set the maximum Y axis view value for zooming.
QVariant m_ShowLegend
void SignalShowLegendChanged(const QVariant show)
Emitted when legend visibility changes.
Q_INVOKABLE void SetShowErrorBars(const QVariant &show)
Set whether error bars are shown.
Q_INVOKABLE QVariant GetYAxisLabel() const
Get the Y axis label text.
Q_INVOKABLE void SetDataPointSize(const QVariant &showDataPoints)
Set the data point marker size.
Q_INVOKABLE void SetMinValueXView(const QVariant &minValueXView)
Set the minimum X axis view value for zooming.
Q_INVOKABLE void SetShowSubchart(const QVariant &showSubchart)
Set whether the subchart (overview navigator) is shown.
Q_INVOKABLE QVariant GetLegendPosition() const
Get the legend position.
void SignalYAxisLabelChanged(const QVariant label)
Emitted when the Y axis label changes.
Q_INVOKABLE void SetShowLegend(const QVariant &show)
Set whether the legend is shown.
Q_INVOKABLE QVariant GetUsePercentageInPieChart() const
Get whether percentages are shown in pie charts.
QVariant m_yAxisLabel
void SetAppearance(bool showSubChart=true, bool usePercentageInPieChart=false)
Configure appearance-related properties in a single call.
void SignalMaxValueYViewChanged(const QVariant maxValueYView)
Emitted when maximum Y view value changes.
Q_INVOKABLE void SetLegendPosition(const QVariant &legendPosition)
Set the legend position.
void SignalShowErrorBarsChanged(const QVariant show)
Emitted when error bar visibility changes.
Q_INVOKABLE void SetUsePercentageInPieChart(const QVariant &usePercentageInPieChart)
Set whether percentages are shown in pie charts.
void SignalTitleChanged(const QVariant title)
Emitted when the chart title changes.
Q_INVOKABLE QVariant GetMinValueXView() const
Get the minimum X axis view value.
void SignalMinValueYViewChanged(const QVariant minValueYView)
Emitted when minimum Y view value changes.
Q_INVOKABLE void SetYAxisScale(const QVariant &YAxisScale)
Set the Y axis scale type.
QVariant m_LegendPosition
QVariant m_chartTitle
void SignalMinValueXViewChanged(const QVariant minValueXView)
Emitted when minimum X view value changes.
Q_INVOKABLE QVariant GetStackedData() const
Get whether data is displayed in stacked mode.
QVariant m_xAxisLabel
QVariant m_themeName
Q_INVOKABLE QVariant GetThemeName() const
Get the current theme name.
Q_INVOKABLE QVariant GetShowLegend() const
Get whether the legend is shown.
QVariant m_StackedData
QVariant m_MaxValueYView
Q_INVOKABLE QVariant GetDataPointSize() const
Get the data point marker size.
QVariant m_MinValueXView
Q_INVOKABLE QVariant GetMaxValueYView() const
Get the maximum Y axis view value.
QVariant m_ShowErrorBars
Q_INVOKABLE QVariant GetMaxValueXView() const
Get the maximum X axis view value.
void SignalYAxisScaleChanged(const QVariant YAxisScale)
Emitted when the Y axis scale changes.