Constructor.
78 : WContainerWidget(parent),
80 fill_(MinimumValueFill)
82 chart_->setLegendStyle(
chart_->legendFont(), WPen(black),
83 WBrush(WColor(0xFF, 0xFA, 0xE5)));
87 WIntValidator *sizeValidator =
new WIntValidator(200, 2000,
this);
88 sizeValidator->setMandatory(
true);
98 WStandardItemModel *orientation =
new WStandardItemModel(0, 1,
this);
99 addEntry(orientation,
"Vertical");
100 addEntry(orientation,
"Horizontal");
102 WStandardItemModel *legendLocation =
new WStandardItemModel(0, 1,
this);
103 addEntry(legendLocation,
"Outside");
104 addEntry(legendLocation,
"Inside");
106 WStandardItemModel *legendSide =
new WStandardItemModel(0, 1,
this);
107 addEntry(legendSide,
"Top");
108 addEntry(legendSide,
"Right");
109 addEntry(legendSide,
"Bottom");
110 addEntry(legendSide,
"Left");
112 WStandardItemModel *legendAlignment =
new WStandardItemModel(0, 1,
this);
113 addEntry(legendAlignment,
"AlignLeft");
114 addEntry(legendAlignment,
"AlignCenter");
115 addEntry(legendAlignment,
"AlignRight");
116 addEntry(legendAlignment,
"AlignTop");
117 addEntry(legendAlignment,
"AlignMiddle");
118 addEntry(legendAlignment,
"AlignBottom");
120 WTable *chartConfig =
new WTable();
121 chartConfig->setMargin(WLength::Auto, Left | Right);
124 chartConfig->elementAt(row, 0)->addWidget(
new WText(
"Title:"));
125 titleEdit_ =
new WLineEdit(chartConfig->elementAt(row, 1));
129 chartConfig->elementAt(row, 0)->addWidget(
new WText(
"Width:"));
132 ->setText(WLocale::currentLocale().toString(
chart_->width().value()));
138 chartConfig->elementAt(row, 0)->addWidget(
new WText(
"Height:"));
141 ->setText(WLocale::currentLocale().toString(
chart_->height().value()));
147 chartConfig->elementAt(row, 0)->addWidget(
new WText(
"Orientation:"));
154 chartConfig->elementAt(row, 0)->addWidget(
new WText(
"Legend location:"));
161 chartConfig->elementAt(row, 0)->addWidget(
new WText(
"Legend side:"));
168 chartConfig->elementAt(row, 0)->addWidget(
new WText(
"Legend alignment:"));
175 chartConfig->elementAt(row, 0)->addWidget(
new WText(
"Border:"));
176 borderEdit_ =
new WCheckBox(chartConfig->elementAt(row, 1));
181 for (
int i = 0; i < chartConfig->rowCount(); ++i) {
182 chartConfig->elementAt(i, 0)->setStyleClass(
"tdhead");
183 chartConfig->elementAt(i, 1)->setStyleClass(
"tddata");
186 WPanel *p = list->
addWidget(
"Chart properties", chartConfig);
187 p->setMargin(WLength::Auto, Left | Right);
188 p->resize(1160, WLength::Auto);
189 p->setMargin(20, Top | Bottom);
193 WStandardItemModel *types =
new WStandardItemModel(0, 1,
this);
194 addEntry(types,
"Points");
195 addEntry(types,
"Line");
196 addEntry(types,
"Curve");
197 addEntry(types,
"Bar");
198 addEntry(types,
"Line Area");
199 addEntry(types,
"Curve Area");
200 addEntry(types,
"Stacked Bar");
201 addEntry(types,
"Stacked Line Area");
202 addEntry(types,
"Stacked Curve Area");
204 WStandardItemModel *markers =
new WStandardItemModel(0, 1,
this);
205 addEntry(markers,
"None");
206 addEntry(markers,
"Square");
207 addEntry(markers,
"Circle");
208 addEntry(markers,
"Cross");
209 addEntry(markers,
"X cross");
210 addEntry(markers,
"Triangle");
211 addEntry(markers,
"Pipe");
212 addEntry(markers,
"Star");
213 addEntry(markers,
"Inverted triangle");
214 addEntry(markers,
"Asterisk");
215 addEntry(markers,
"Diamond");
221 WStandardItemModel *labels =
new WStandardItemModel(0, 1,
this);
222 addEntry(labels,
"None");
223 addEntry(labels,
"X");
224 addEntry(labels,
"Y");
225 addEntry(labels,
"X: Y");
227 WTable *seriesConfig =
new WTable();
228 seriesConfig->setMargin(WLength::Auto, Left | Right);
230 ::addHeader(seriesConfig,
"Name");
231 ::addHeader(seriesConfig,
"Enabled");
232 ::addHeader(seriesConfig,
"Type");
233 ::addHeader(seriesConfig,
"Marker");
234 ::addHeader(seriesConfig,
"Y axis");
235 ::addHeader(seriesConfig,
"Legend");
236 ::addHeader(seriesConfig,
"Shadow");
237 ::addHeader(seriesConfig,
"Value labels");
239 seriesConfig->rowAt(0)->setStyleClass(
"trhead");
241 for (
int j = 1; j < chart->model()->columnCount(); ++j) {
244 new WText(chart->model()->headerData(j),
245 seriesConfig->elementAt(j, 0));
247 sc.enabledEdit =
new WCheckBox(seriesConfig->elementAt(j, 1));
250 sc.typeEdit =
new WComboBox(seriesConfig->elementAt(j, 2));
251 sc.typeEdit->setModel(types);
252 sc.typeEdit->setCurrentIndex(0);
255 sc.markerEdit =
new WComboBox(seriesConfig->elementAt(j, 3));
256 sc.markerEdit->setModel(markers);
257 sc.markerEdit->setCurrentIndex(0);
260 sc.axisEdit =
new WComboBox(seriesConfig->elementAt(j, 4));
262 sc.axisEdit->setCurrentIndex(0);
265 sc.legendEdit =
new WCheckBox(seriesConfig->elementAt(j, 5));
268 sc.shadowEdit =
new WCheckBox(seriesConfig->elementAt(j, 6));
271 sc.labelsEdit =
new WComboBox(seriesConfig->elementAt(j, 7));
272 sc.labelsEdit->setModel(labels);
273 sc.labelsEdit->setCurrentIndex(0);
276 int si = seriesIndexOf(chart, j);
279 sc.enabledEdit->setChecked();
280 const WDataSeries& s =
chart_->series(j);
283 sc.typeEdit->setCurrentIndex(0);
break;
285 sc.typeEdit->setCurrentIndex(s.fillRange() != NoFill ?
286 (s.isStacked() ? 7 : 4) : 1);
break;
288 sc.typeEdit->setCurrentIndex(s.fillRange() != NoFill ?
289 (s.isStacked() ? 8 : 5) : 2);
break;
291 sc.typeEdit->setCurrentIndex(s.isStacked() ? 6 : 3);
294 sc.markerEdit->setCurrentIndex((
int)s.marker());
295 sc.legendEdit->setChecked(s.isLegendEnabled());
296 sc.shadowEdit->setChecked(s.shadow() != WShadow());
301 seriesConfig->rowAt(j)->setStyleClass(
"trdata");
304 p = list->
addWidget(
"Series properties", seriesConfig);
306 p->setMargin(WLength::Auto, Left | Right);
307 p->resize(1160, WLength::Auto);
308 p->setMargin(20, Top | Bottom);
312 yScales_ =
new WStandardItemModel(0, 1,
this);
316 xScales_ =
new WStandardItemModel(0, 1,
this);
322 WContainerWidget *axisConfig =
new WContainerWidget();
324 axisConfig_->setMargin(WLength::Auto, Left | Right);
345 WPushButton *addAxisBtn =
346 new WPushButton(Wt::utf8(
"Add Y axis"), axisConfig);
348 WPushButton *clearAxesBtn =
349 new WPushButton(Wt::utf8(
"Clear Y axes"), axisConfig);
352 p = list->
addWidget(
"Axis properties", axisConfig);
353 p->setMargin(WLength::Auto, Left | Right);
354 p->resize(1160, WLength::Auto);
355 p->setMargin(20, Top | Bottom);
361 if (!WApplication::instance()->environment().javaScript()) {
362 WPushButton *b =
new WPushButton(
this);
363 b->setText(
"Update chart");
365 b->setMargin(WLength::Auto, Left | Right);