##// END OF EJS Templates
Refactoring handling of axes properties (1)...
Alexandre Leroux -
r916:b92a8e838f6e
parent child
Show More
@@ -0,0 +1,31
1 #ifndef SCIQLOP_AXISRENDERINGUTILS_H
2 #define SCIQLOP_AXISRENDERINGUTILS_H
3
4 #include <memory>
5
6 #include <QtCore/QString>
7
8 class IDataSeries;
9 class QCPAxis;
10 class QCPColorScale;
11 class QCustomPlot;
12
13 /**
14 * Helper used to handle axes rendering
15 */
16 struct IAxisHelper {
17 virtual ~IAxisHelper() noexcept = default;
18
19 /// Set properties of the plot's axes and the color scale associated to plot passed as
20 /// parameters
21 /// @param plot the plot for which to set axe properties
22 /// @param colorScale the color scale for which to set properties
23 virtual void setProperties(QCustomPlot &plot, QCPColorScale &colorScale) = 0;
24 };
25
26 struct IAxisHelperFactory {
27 /// Creates IAxisHelper according to a data series
28 static std::unique_ptr<IAxisHelper> create(std::shared_ptr<IDataSeries> dataSeries) noexcept;
29 };
30
31 #endif // SCIQLOP_AXISRENDERINGUTILS_H
@@ -0,0 +1,65
1 #include "Visualization/AxisRenderingUtils.h"
2
3 #include <Data/ScalarSeries.h>
4 #include <Data/VectorSeries.h>
5
6 #include <Visualization/qcustomplot.h>
7
8 namespace {
9
10 /**
11 * Delegate used to set axes properties
12 */
13 template <typename T, typename Enabled = void>
14 struct AxisSetter {
15 static void setProperties(T &, QCustomPlot &, QCPColorScale &)
16 {
17 // Default implementation does nothing
18 }
19 };
20
21 /**
22 * Specialization of AxisSetter for scalars and vectors
23 * @sa ScalarSeries
24 * @sa VectorSeries
25 */
26 template <typename T>
27 struct AxisSetter<T, typename std::enable_if_t<std::is_base_of<ScalarSeries, T>::value
28 or std::is_base_of<VectorSeries, T>::value> > {
29 static void setProperties(T &dataSeries, QCustomPlot &plot, QCPColorScale &)
30 {
31 /// @todo ALX
32 }
33 };
34
35 /**
36 * Default implementation of IAxisHelper, which takes data series to set axes properties
37 * @tparam T the data series' type
38 */
39 template <typename T>
40 struct AxisHelper : public IAxisHelper {
41 explicit AxisHelper(T &dataSeries) : m_DataSeries{dataSeries} {}
42
43 void setProperties(QCustomPlot &plot, QCPColorScale &colorScale) override
44 {
45 AxisSetter<T>::setProperties(m_DataSeries, plot, colorScale);
46 }
47
48 T &m_DataSeries;
49 };
50
51 } // namespace
52
53 std::unique_ptr<IAxisHelper>
54 IAxisHelperFactory::create(std::shared_ptr<IDataSeries> dataSeries) noexcept
55 {
56 if (auto scalarSeries = std::dynamic_pointer_cast<ScalarSeries>(dataSeries)) {
57 return std::make_unique<AxisHelper<ScalarSeries> >(*scalarSeries);
58 }
59 else if (auto vectorSeries = std::dynamic_pointer_cast<VectorSeries>(dataSeries)) {
60 return std::make_unique<AxisHelper<VectorSeries> >(*vectorSeries);
61 }
62 else {
63 return std::make_unique<AxisHelper<IDataSeries> >(*dataSeries);
64 }
65 }
@@ -1,95 +1,96
1 1
2 2 gui_moc_headers = [
3 3 'include/DataSource/DataSourceWidget.h',
4 4 'include/DataSource/DataSourceTreeWidget.h',
5 5 'include/Settings/SqpSettingsDialog.h',
6 6 'include/Settings/SqpSettingsGeneralWidget.h',
7 7 'include/SidePane/SqpSidePane.h',
8 8 'include/SqpApplication.h',
9 9 'include/DragAndDrop/DragDropHelper.h',
10 10 'include/DragAndDrop/DragDropScroller.h',
11 11 'include/DragAndDrop/DragDropTabSwitcher.h',
12 12 'include/TimeWidget/TimeWidget.h',
13 13 'include/Variable/VariableInspectorWidget.h',
14 14 'include/Variable/VariableInspectorTableView.h',
15 15 'include/Variable/RenameVariableDialog.h',
16 16 'include/Visualization/qcustomplot.h',
17 17 'include/Visualization/VisualizationGraphWidget.h',
18 18 'include/Visualization/VisualizationTabWidget.h',
19 19 'include/Visualization/VisualizationWidget.h',
20 20 'include/Visualization/VisualizationZoneWidget.h',
21 21 'include/Visualization/VisualizationDragDropContainer.h',
22 22 'include/Visualization/VisualizationDragWidget.h'
23 23 ]
24 24
25 25 gui_ui_files = [
26 26 'ui/DataSource/DataSourceWidget.ui',
27 27 'ui/Settings/SqpSettingsDialog.ui',
28 28 'ui/Settings/SqpSettingsGeneralWidget.ui',
29 29 'ui/SidePane/SqpSidePane.ui',
30 30 'ui/TimeWidget/TimeWidget.ui',
31 31 'ui/Variable/VariableInspectorWidget.ui',
32 32 'ui/Variable/RenameVariableDialog.ui',
33 33 'ui/Variable/VariableMenuHeaderWidget.ui',
34 34 'ui/Visualization/VisualizationGraphWidget.ui',
35 35 'ui/Visualization/VisualizationTabWidget.ui',
36 36 'ui/Visualization/VisualizationWidget.ui',
37 37 'ui/Visualization/VisualizationZoneWidget.ui'
38 38 ]
39 39
40 40 gui_qresources = ['resources/sqpguiresources.qrc']
41 41
42 42 gui_moc_files = qt5.preprocess(moc_headers : gui_moc_headers,
43 43 ui_files : gui_ui_files,
44 44 qresources : gui_qresources)
45 45
46 46 gui_sources = [
47 47 'src/SqpApplication.cpp',
48 48 'src/DragAndDrop/DragDropHelper.cpp',
49 49 'src/DragAndDrop/DragDropScroller.cpp',
50 50 'src/DragAndDrop/DragDropTabSwitcher.cpp',
51 51 'src/Common/ColorUtils.cpp',
52 52 'src/Common/VisualizationDef.cpp',
53 53 'src/DataSource/DataSourceTreeWidgetItem.cpp',
54 54 'src/DataSource/DataSourceTreeWidgetHelper.cpp',
55 55 'src/DataSource/DataSourceWidget.cpp',
56 56 'src/DataSource/DataSourceTreeWidget.cpp',
57 57 'src/Settings/SqpSettingsDialog.cpp',
58 58 'src/Settings/SqpSettingsGeneralWidget.cpp',
59 59 'src/SidePane/SqpSidePane.cpp',
60 60 'src/TimeWidget/TimeWidget.cpp',
61 61 'src/Variable/VariableInspectorWidget.cpp',
62 62 'src/Variable/VariableInspectorTableView.cpp',
63 63 'src/Variable/VariableMenuHeaderWidget.cpp',
64 64 'src/Variable/RenameVariableDialog.cpp',
65 65 'src/Visualization/VisualizationGraphHelper.cpp',
66 66 'src/Visualization/VisualizationGraphRenderingDelegate.cpp',
67 67 'src/Visualization/VisualizationGraphWidget.cpp',
68 68 'src/Visualization/VisualizationTabWidget.cpp',
69 69 'src/Visualization/VisualizationWidget.cpp',
70 70 'src/Visualization/VisualizationZoneWidget.cpp',
71 71 'src/Visualization/qcustomplot.cpp',
72 72 'src/Visualization/QCustomPlotSynchronizer.cpp',
73 73 'src/Visualization/operations/FindVariableOperation.cpp',
74 74 'src/Visualization/operations/GenerateVariableMenuOperation.cpp',
75 75 'src/Visualization/operations/MenuBuilder.cpp',
76 76 'src/Visualization/operations/RemoveVariableOperation.cpp',
77 77 'src/Visualization/operations/RescaleAxeOperation.cpp',
78 78 'src/Visualization/VisualizationDragDropContainer.cpp',
79 79 'src/Visualization/VisualizationDragWidget.cpp'
80 'src/Visualization/AxisRenderingUtils.cpp',
80 81 ]
81 82
82 83 gui_inc = include_directories(['include'])
83 84
84 85 sciqlop_gui_lib = library('sciqlopgui',
85 86 gui_sources,
86 87 gui_moc_files,
87 88 include_directories : [gui_inc],
88 89 dependencies : [ qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core],
89 90 install : true
90 91 )
91 92
92 93 sciqlop_gui = declare_dependency(link_with : sciqlop_gui_lib,
93 94 include_directories : gui_inc,
94 95 dependencies : [qt5printsupport, qt5gui, qt5widgets, qt5svg, sciqlop_core])
95 96
General Comments 0
You need to be logged in to leave comments. Login now