1 // This may look like C code, but it's really -*- C++ -*-
2 /*
3  * Copyright (C) 2013 Emweb bv, Herent, Belgium.
4  *
5  * See the LICENSE file for terms of use.
6  */
7 
8 #ifndef CHART_WGRIDDATA_H
9 #define CHART_WGRIDDATA_H
10 
11 #include <Wt/Chart/WAbstractGridData.h>
12 #include <Wt/Chart/WCartesian3DChart.h>
13 #include <Wt/WPen.h>
14 
15 namespace Wt {
16 class WAbstractItemModel;
17 class WMemoryResource;
18 
19   namespace Chart {
20   class WCartesian3DChart;
21 
22 /*! \class WGridData
23  *  \brief Class representing grid-based data for a 3D chart.
24  *
25  * General information can be found at WAbstractDataSeries3D. The model for
26  * this dataseries is structured as a table. One of the columns (by default
27  * index 0) contains the x-axis values, one of the rows (by default index 0)
28  * contains the y-axis values. All other values in the table contain the
29  * z-value corresponding to the x- and y-values with the same column- and
30  * row-index.
31  *
32  * \ingroup charts
33  */
34 class WT_API WGridData : public WAbstractGridData {
35 public:
36   /*! \brief Constructor
37    */
38   WGridData(std::shared_ptr<WAbstractItemModel> model);
39 
40   virtual ~WGridData();
41 
42   virtual double minimum(Axis axis) const override;
43 
44   virtual double maximum(Axis axis) const override;
45 
46   /*! \brief Set which column in the model is used as x-axis.
47    *
48    * The default column that is used has index 0.
49    */
50   void setXSeriesColumn(int modelColumn);
51 
52   /*! \brief Returns which column in the model is used as x-axis.
53    *
54    * \sa setXSeriesColumn()
55    */
XSeriesColumn()56   int XSeriesColumn() const { return XAbscisColumn_; }
57 
58   /*! \brief Set which row in the model is used as y-axis.
59    *
60    * The default row that is used has index 0.
61    */
62   void setYSeriesRow(int modelRow);
63 
64   /*! \brief Returns which row in the model is used as y-axis.
65    *
66    * \sa setYSeriesRow()
67    */
YSeriesRow()68   int YSeriesRow() const { return YAbscisRow_; }
69 
70   // below = internal API
71   virtual int nbXPoints() const override;
72   virtual int nbYPoints() const override;
73   virtual WString axisLabel(int u, Axis axis) const override;
74   virtual cpp17::any data(int i, int j) const override;
75 
76 protected:
77   virtual int countSimpleData() const override;
78   virtual void pointDataFromModel(FloatBuffer& simplePtsArray,
79 				  FloatBuffer& simplePtsSize,
80 				  FloatBuffer& coloredPtsArray,
81 				  FloatBuffer& coloredPtsSize,
82 				  FloatBuffer& coloredPtsColor) const override;
83   virtual void surfaceDataFromModel(std::vector<FloatBuffer>& simplePtsArrays) const override;
84   virtual void barDataFromModel(std::vector<FloatBuffer>& simplePtsArrays) const override;
85   virtual void barDataFromModel(std::vector<FloatBuffer>& simplePtsArrays,
86 				std::vector<FloatBuffer>& coloredPtsArrays,
87 				std::vector<FloatBuffer>& coloredPtsColors) const override;
88 
89 private:
90   void findRange() const;
91 
92   int XAbscisColumn_;
93   int YAbscisRow_;
94 };
95 
96   }
97 }
98 
99 #endif
100