Constructor.
86 std::shared_ptr<WIntValidator> sizeValidator
87 = std::make_shared<WIntValidator>(200,2000);
88 sizeValidator->setMandatory(
true);
98 std::shared_ptr<WStandardItemModel> orientation
99 = std::make_shared<WStandardItemModel>(0,1);
100 addEntry(orientation,
"Vertical");
101 addEntry(orientation,
"Horizontal");
103 std::shared_ptr<WStandardItemModel> legendLocation
104 = std::make_shared<WStandardItemModel>(0,1);
105 addEntry(legendLocation,
"Outside");
106 addEntry(legendLocation,
"Inside");
108 std::shared_ptr<WStandardItemModel> legendSide
109 = std::make_shared<WStandardItemModel>(0,1);
110 addEntry(legendSide,
"Top");
111 addEntry(legendSide,
"Right");
112 addEntry(legendSide,
"Bottom");
113 addEntry(legendSide,
"Left");
115 std::shared_ptr<WStandardItemModel> legendAlignment
116 = std::make_shared<WStandardItemModel>(0,1);
117 addEntry(legendAlignment,
"AlignLeft");
118 addEntry(legendAlignment,
"AlignCenter");
119 addEntry(legendAlignment,
"AlignRight");
120 addEntry(legendAlignment,
"AlignTop");
121 addEntry(legendAlignment,
"AlignMiddle");
122 addEntry(legendAlignment,
"AlignBottom");
124 std::unique_ptr<WTable> chartConfig
125 = cpp14::make_unique<WTable>();
126 chartConfig->setMargin(WLength::Auto, Side::Left | Side::Right);
129 chartConfig->elementAt(row, 0)->addWidget(cpp14::make_unique<WText>(
"Title:"));
130 titleEdit_ = chartConfig->elementAt(row,1)->addWidget(cpp14::make_unique<WLineEdit>());
134 chartConfig->elementAt(row, 0)->addWidget(cpp14::make_unique<WText>(
"Width:"));
135 chartWidthEdit_ = chartConfig->elementAt(row,1)->addWidget(cpp14::make_unique<WLineEdit>());
143 chartConfig->elementAt(row, 0)->addWidget(cpp14::make_unique<WText>(
"Height:"));
144 chartHeightEdit_ = chartConfig->elementAt(row,1)->addWidget(cpp14::make_unique<WLineEdit>());
152 chartConfig->elementAt(row, 0)->addWidget(cpp14::make_unique<WText>(
"Orientation:"));
159 chartConfig->elementAt(row, 0)->addWidget(cpp14::make_unique<WText>(
"Legend location:"));
160 legendLocationEdit_ = chartConfig->elementAt(row,1)->addWidget(cpp14::make_unique<WComboBox>());
166 chartConfig->elementAt(row, 0)->addWidget(cpp14::make_unique<WText>(
"Legend side:"));
167 legendSideEdit_ = chartConfig->elementAt(row,1)->addWidget(cpp14::make_unique<WComboBox>());
173 chartConfig->elementAt(row, 0)->addWidget(cpp14::make_unique<WText>(
"Legend alignment:"));
174 legendAlignmentEdit_ = chartConfig->elementAt(row,1)->addWidget(cpp14::make_unique<WComboBox>());
180 chartConfig->elementAt(row, 0)->addWidget(cpp14::make_unique<WText>(
"Border:"));
181 borderEdit_ = chartConfig->elementAt(row,1)->addWidget(cpp14::make_unique<WCheckBox>());
186 for (
int i = 0; i < chartConfig->rowCount(); ++i) {
187 chartConfig->elementAt(i, 0)->setStyleClass(
"tdhead");
188 chartConfig->elementAt(i, 1)->setStyleClass(
"tddata");
191 WPanel *p = list->
addWidget(
"Chart properties", std::move(chartConfig));
192 p->
setMargin(WLength::Auto, Side::Left | Side::Right);
193 p->
resize(1160, WLength::Auto);
194 p->
setMargin(20, Side::Top | Side::Bottom);
198 std::shared_ptr<WStandardItemModel> types
199 = std::make_shared<WStandardItemModel>(0,1);
200 addEntry(types,
"Points");
201 addEntry(types,
"Line");
202 addEntry(types,
"Curve");
203 addEntry(types,
"Bar");
204 addEntry(types,
"Line Area");
205 addEntry(types,
"Curve Area");
206 addEntry(types,
"Stacked Bar");
207 addEntry(types,
"Stacked Line Area");
208 addEntry(types,
"Stacked Curve Area");
210 std::shared_ptr<WStandardItemModel> markers
211 = std::make_shared<WStandardItemModel>(0,1);
212 addEntry(markers,
"None");
213 addEntry(markers,
"Square");
214 addEntry(markers,
"Circle");
215 addEntry(markers,
"Cross");
216 addEntry(markers,
"X cross");
217 addEntry(markers,
"Triangle");
218 addEntry(markers,
"Pipe");
219 addEntry(markers,
"Star");
220 addEntry(markers,
"Inverted triangle");
221 addEntry(markers,
"Asterisk");
222 addEntry(markers,
"Diamond");
224 yAxesModel_ = std::make_shared<WStandardItemModel>(0, 1);
228 std::shared_ptr<WStandardItemModel> labels
229 = std::make_shared<WStandardItemModel>(0,1);
230 addEntry(labels,
"None");
231 addEntry(labels,
"X");
232 addEntry(labels,
"Y");
233 addEntry(labels,
"X: Y");
235 std::unique_ptr<WTable> seriesConfig
236 = cpp14::make_unique<WTable>();
237 WTable *seriesConfigPtr = seriesConfig.get();
238 seriesConfig->
setMargin(WLength::Auto, Side::Left | Side::Right);
239 ::addHeader(seriesConfigPtr,
"Name");
240 ::addHeader(seriesConfigPtr,
"Enabled");
241 ::addHeader(seriesConfigPtr,
"Type");
242 ::addHeader(seriesConfigPtr,
"Marker");
243 ::addHeader(seriesConfigPtr,
"Y axis");
244 ::addHeader(seriesConfigPtr,
"Legend");
245 ::addHeader(seriesConfigPtr,
"Shadow");
246 ::addHeader(seriesConfigPtr,
"Value labels");
248 seriesConfig->rowAt(0)->setStyleClass(
"trhead");
250 for (
int j = 1; j < chart->
model()->columnCount(); ++j) {
253 seriesConfig->elementAt(j,0)->addWidget(cpp14::make_unique<WText>(chart->
model()->headerData(j)));
255 sc.enabledEdit = seriesConfig->elementAt(j,1)->addWidget(cpp14::make_unique<WCheckBox>());
258 sc.typeEdit = seriesConfig->elementAt(j,2)->addWidget(cpp14::make_unique<WComboBox>());
259 sc.typeEdit->setModel(types);
260 sc.typeEdit->setCurrentIndex(0);
263 sc.markerEdit = seriesConfig->elementAt(j,3)->addWidget(cpp14::make_unique<WComboBox>());
264 sc.markerEdit->setModel(markers);
265 sc.markerEdit->setCurrentIndex(0);
268 sc.axisEdit = seriesConfig->elementAt(j,4)->addNew<
WComboBox>();
270 sc.axisEdit->setCurrentIndex(0);
273 sc.legendEdit = seriesConfig->elementAt(j, 5)->addWidget(cpp14::make_unique<WCheckBox>());
276 sc.shadowEdit = seriesConfig->elementAt(j,6)->addWidget(cpp14::make_unique<WCheckBox>());
279 sc.labelsEdit = seriesConfig->elementAt(j,7)->addWidget(cpp14::make_unique<WComboBox>());
280 sc.labelsEdit->setModel(labels);
281 sc.labelsEdit->setCurrentIndex(0);
284 int si = seriesIndexOf(chart, j);
287 sc.enabledEdit->setChecked();
291 sc.typeEdit->setCurrentIndex(0);
break;
299 sc.typeEdit->setCurrentIndex(s.
isStacked() ? 6 : 3);
302 sc.markerEdit->setCurrentIndex((
int)s.
marker());
309 seriesConfig->rowAt(j)->setStyleClass(
"trdata");
312 p = list->
addWidget(
"Series properties", std::move(seriesConfig));
314 p->
setMargin(WLength::Auto, Side::Left | Side::Right);
315 p->
resize(1160, WLength::Auto);
316 p->
setMargin(20, Side::Top | Side::Bottom);
320 yScales_ = std::make_shared<WStandardItemModel>(0, 1);
324 xScales_ = std::make_shared<WStandardItemModel>(0, 1);
330 auto axisConfig = cpp14::make_unique<WContainerWidget>();
354 axisConfig->addNew<
WPushButton>(utf8(
"Add Y axis"));
357 axisConfig->addNew<
WPushButton>(utf8(
"Clear Y axes"));
360 p = list->
addWidget(
"Axis properties", std::move(axisConfig));
361 p->
setMargin(WLength::Auto, Side::Left | Side::Right);
362 p->
resize(1160, WLength::Auto);
363 p->
setMargin(20, Side::Top | Side::Bottom);
369 if (!WApplication::instance()->environment().javaScript()) {
370 auto *b = this->
addWidget(cpp14::make_unique<WPushButton>());
371 b->setText(
"Update chart");
373 b->setMargin(WLength::Auto, Side::Left | Side::Right);
Wt::WCheckBox * borderEdit_
MarkerType marker() const
virtual void setText(const WString &text)
std::shared_ptr< Wt::WStandardItemModel > xScales_
std::shared_ptr< Wt::WValidator > angleValidator_
Wt::Chart::FillRangeType fill_
Wt::WLineEdit * titleEdit_
Wt::Chart::WCartesianChart * chart_
FillRangeType fillRange() const
void connectSignals(Wt::WFormWidget *w)
void setLegendStyle(const WFont &font, const WPen &border, const WBrush &background)
void setModel(const std::shared_ptr< WAbstractItemModel > model)
bool isLegendEnabled() const
Wt::WLineEdit * chartWidthEdit_
Wt::WPanel * addWidget(const Wt::WString &text, std::unique_ptr< Wt::WWidget > w)
Wt::WComboBox * chartOrientationEdit_
Wt::WComboBox * legendLocationEdit_
std::vector< SeriesControl > seriesControls_
Controls for series.
void setCurrentIndex(int index)
void setStyleClass(const WString &style)
WDataSeries & series(int modelColumn)
void setMaxLength(int length)
Wt::WComboBox * legendSideEdit_
std::shared_ptr< WAbstractChartModel > model() const
std::shared_ptr< Wt::WStandardItemModel > yScales_
std::shared_ptr< Wt::WValidator > anyNumberValidator_
Wt::WComboBox * legendAlignmentEdit_
Wt::Signals::connection connect(F function)
void addAxis(Wt::Chart::Axis axis, int yAxis)
WTableRow * rowAt(int row)
std::shared_ptr< Wt::WStandardItemModel > yAxesModel_
const WShadow & shadow() const
Wt::WLineEdit * chartHeightEdit_