1 /*
2  * Copyright (C) 2016 Emweb bv, Herent, Belgium.
3  *
4  * See the LICENSE file for terms of use.
5  */
6 #include "Wt/WAbstractItemModel.h"
7 #include "Wt/Chart/WStandardChartProxyModel.h"
8 
9 namespace Wt {
10   namespace Chart {
11 
12 WStandardChartProxyModel
WStandardChartProxyModel(const std::shared_ptr<WAbstractItemModel> & sourceModel)13 ::WStandardChartProxyModel(const std::shared_ptr<WAbstractItemModel>&
14 			   sourceModel)
15   : sourceModel_(sourceModel)
16 #ifndef WT_TARGET_JAVA
17     ,
18     markerType_(MarkerType::None),
19     markerScaleFactor_(0.0)
20 #endif // WT_TARGET_JAVA
21 {
22   sourceModel->columnsInserted().connect(
23 	this, &WStandardChartProxyModel::sourceModelModified);
24   sourceModel->columnsRemoved().connect(
25 	this, &WStandardChartProxyModel::sourceModelModified);
26   sourceModel->rowsInserted().connect(
27 	this, &WStandardChartProxyModel::sourceModelModified);
28   sourceModel->rowsRemoved().connect(
29 	this, &WStandardChartProxyModel::sourceModelModified);
30   sourceModel->dataChanged().connect(
31 	this, &WStandardChartProxyModel::sourceModelModified);
32   sourceModel->headerDataChanged().connect(
33 	this, &WStandardChartProxyModel::sourceModelModified);
34   sourceModel->layoutChanged().connect(
35 	this, &WStandardChartProxyModel::sourceModelModified);
36   sourceModel->modelReset().connect(
37 	this, &WStandardChartProxyModel::sourceModelModified);
38 }
39 
~WStandardChartProxyModel()40 WStandardChartProxyModel::~WStandardChartProxyModel()
41 { }
42 
data(int row,int column)43 double WStandardChartProxyModel::data(int row, int column) const
44 {
45   return asNumber(sourceModel_->data(row, column, ItemDataRole::Display));
46 }
47 
displayData(int row,int column)48 WString WStandardChartProxyModel::displayData(int row, int column) const
49 {
50   return asString(sourceModel_->data(row, column, ItemDataRole::Display));
51 }
52 
headerData(int column)53 WString WStandardChartProxyModel::headerData(int column) const
54 {
55   return asString(sourceModel_->headerData(column,
56 					   Orientation::Horizontal,
57 					   ItemDataRole::Display));
58 }
59 
toolTip(int row,int column)60 WString WStandardChartProxyModel::toolTip(int row, int column) const
61 {
62   return asString(sourceModel_->data(row, column, ItemDataRole::ToolTip));
63 }
64 
flags(int row,int column)65 WFlags<ItemFlag> WStandardChartProxyModel::flags(int row, int column) const
66 {
67   return sourceModel_->index(row, column).flags();
68 }
69 
link(int row,int column)70 WLink *WStandardChartProxyModel::link(int row, int column) const
71 {
72   cpp17::any result = sourceModel_->data(row, column, ItemDataRole::Link);
73 
74   if (!cpp17::any_has_value(result))
75     return 0;
76   else {
77 #ifndef WT_TARGET_JAVA
78     link_ = cpp17::any_cast<WLink>(result);
79     return &link_;
80 #else
81     WLink c = cpp17::any_cast<WLink>(result);
82     return &c;
83 #endif
84   }
85 }
86 
87 
color(int row,int column,ItemDataRole colorDataRole)88 const WColor *WStandardChartProxyModel::color(int row, int column, ItemDataRole colorDataRole) const
89 {
90   cpp17::any result = sourceModel_->data(row, column, colorDataRole);
91 
92   if (!cpp17::any_has_value(result))
93     return nullptr;
94   else {
95 #ifndef WT_TARGET_JAVA
96     color_ = cpp17::any_cast<WColor>(result);
97     return &color_;
98 #else
99     WColor c = cpp17::any_cast<WColor>(result);
100     return &c;
101 #endif
102   }
103 }
104 
markerPenColor(int row,int column)105 const WColor *WStandardChartProxyModel::markerPenColor(int row, int column) const
106 {
107   return color(row, column, ItemDataRole::MarkerPenColor);
108 }
109 
markerBrushColor(int row,int column)110 const WColor *WStandardChartProxyModel::markerBrushColor(int row, int column) const
111 {
112   return color(row, column, ItemDataRole::MarkerBrushColor);
113 }
114 
markerType(int row,int column)115 const MarkerType *WStandardChartProxyModel::markerType(int row, int column) const
116 {
117   cpp17::any result = sourceModel_->data(row, column, ItemDataRole::MarkerType);
118 
119   if (!cpp17::any_has_value(result))
120     return 0;
121   else {
122 #ifndef WT_TARGET_JAVA
123     markerType_ = cpp17::any_cast<MarkerType>(result);
124     return &markerType_;
125 #else
126     MarkerType t = cpp17::any_cast<MarkerType>(result);
127     return &t;
128 #endif
129   }
130 }
131 
barPenColor(int row,int column)132 const WColor *WStandardChartProxyModel::barPenColor(int row, int column) const
133 {
134   return color(row, column, ItemDataRole::BarPenColor);
135 }
136 
barBrushColor(int row,int column)137 const WColor *WStandardChartProxyModel::barBrushColor(int row, int column) const
138 {
139   return color(row, column, ItemDataRole::BarBrushColor);
140 }
141 
markerScaleFactor(int row,int column)142 const double *WStandardChartProxyModel::markerScaleFactor(int row, int column) const
143 {
144   cpp17::any result = sourceModel_->data(row, column,
145 				      ItemDataRole::MarkerScaleFactor);
146 
147   if (!cpp17::any_has_value(result)) {
148     return WAbstractChartModel::markerScaleFactor(row, column);
149   } else {
150 #ifndef WT_TARGET_JAVA
151     markerScaleFactor_ = asNumber(result);
152     return &markerScaleFactor_;
153 #else
154     double scale = asNumber(result);
155     return &scale;
156 #endif
157   }
158 }
159 
columnCount()160 int WStandardChartProxyModel::columnCount() const
161 {
162   return sourceModel_->columnCount();
163 }
164 
rowCount()165 int WStandardChartProxyModel::rowCount() const
166 {
167   return sourceModel_->rowCount();
168 }
169 
sourceModelModified()170 void WStandardChartProxyModel::sourceModelModified()
171 {
172   changed().emit();
173 }
174 
175   }
176 }
177