11#include <boost/date_time/gregorian/greg_year.hpp>
13#include <Wt/WAbstractItemModel>
14#include <Wt/WApplication>
15#include <Wt/WCheckBox>
16#include <Wt/WComboBox>
17#include <Wt/WDoubleValidator>
19#include <Wt/WEnvironment>
20#include <Wt/WIntValidator>
21#include <Wt/WLineEdit>
24#include <Wt/WPushButton>
25#include <Wt/WStandardItemModel>
28#include <Wt/WPainterPath>
30#include <Wt/Chart/WCartesianChart>
36 void addHeader(
WTable *t,
const char *value) {
50 bool getDouble(
WLineEdit *edit,
double& value) {
60 for (
unsigned i = 0; i < chart->
series().size(); ++i)
70 return Wt::utf8(
"X Axis");
72 return Wt::utf8(
"Y axis {1}").arg(yAxis + 1);
99 addEntry(orientation,
"Vertical");
100 addEntry(orientation,
"Horizontal");
103 addEntry(legendLocation,
"Outside");
104 addEntry(legendLocation,
"Inside");
107 addEntry(legendSide,
"Top");
108 addEntry(legendSide,
"Right");
109 addEntry(legendSide,
"Bottom");
110 addEntry(legendSide,
"Left");
113 addEntry(legendAlignment,
"AlignLeft");
114 addEntry(legendAlignment,
"AlignCenter");
115 addEntry(legendAlignment,
"AlignRight");
116 addEntry(legendAlignment,
"AlignTop");
117 addEntry(legendAlignment,
"AlignMiddle");
118 addEntry(legendAlignment,
"AlignBottom");
181 for (
int i = 0; i < chartConfig->
rowCount(); ++i) {
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");
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");
222 addEntry(labels,
"None");
223 addEntry(labels,
"X");
224 addEntry(labels,
"Y");
225 addEntry(labels,
"X: Y");
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");
241 for (
int j = 1; j < chart->
model()->columnCount(); ++j) {
276 int si = seriesIndexOf(chart, j);
304 p = list->
addWidget(
"Series properties", seriesConfig);
346 new WPushButton(Wt::utf8(
"Add Y axis"), axisConfig);
349 new WPushButton(Wt::utf8(
"Clear Y axes"), axisConfig);
352 p = list->
addWidget(
"Axis properties", axisConfig);
361 if (!WApplication::instance()->environment().javaScript()) {
377 bool haveLegend =
false;
378 std::vector<WDataSeries *> series;
380 for (
int i = 1; i <
chart_->
model()->columnCount(); ++i) {
519 bool greg_year_validation =
520 (min > gregDaysMin &&
525 if(!greg_year_validation){
594 case 0: side =
Top;
break;
595 case 1: side =
Right;
break;
596 case 2: side =
Bottom;
break;
597 case 3: side =
Left;
break;
612 case 3: alignment =
AlignTop;
break;
632 bool valid = w->
validate() == WValidator::Valid;
634 if (!WApplication::instance()->environment().javaScript()) {
660 int j = ax ==
XAxis ? 1 : yAxis + 2;
760 for (std::size_t i = 0; i <
chart_->
series().size(); ++i) {
776 for (std::size_t i = 0; i <
chart_->
series().size(); ++i) {
std::vector< SeriesControl > seriesControls_
Controls for series.
Wt::WComboBox * legendAlignmentEdit_
ChartConfig(Wt::Chart::WCartesianChart *chart, Wt::WContainerWidget *parent)
Constructor.
Wt::WComboBox * legendLocationEdit_
Wt::WComboBox * legendSideEdit_
void addAxis(Wt::Chart::Axis axis, int yAxis)
Wt::WStandardItemModel * yScales_
void setValueFill(Wt::Chart::FillRangeType fill)
Wt::WLineEdit * chartWidthEdit_
Wt::WLineEdit * titleEdit_
void removeYAxis(const Wt::Chart::WAxis *axis)
static bool validate(Wt::WFormWidget *w)
Wt::WStandardItemModel * xScales_
void connectSignals(Wt::WFormWidget *w)
Wt::WValidator * angleValidator_
Wt::Chart::WCartesianChart * chart_
std::vector< AxisControl > axisControls_
Controls for axes.
Wt::Chart::FillRangeType fill_
Wt::WValidator * anyNumberValidator_
Wt::WCheckBox * borderEdit_
Wt::WLineEdit * chartHeightEdit_
Wt::WComboBox * chartOrientationEdit_
Wt::WStandardItemModel * yAxesModel_
Wt::WPanel * addWidget(const Wt::WString &text, Wt::WWidget *w)
virtual WString headerData(int column) const
WAbstractChartModel * model() const
void setTitle(const WString &title)
WFlags< AxisValue > autoLimits() const
void setAutoLimits(WFlags< AxisValue > locations)
void setVisible(bool visible)
void setLocation(AxisValue value)
void setGridLinesEnabled(bool enabled)
void setRange(double minimum, double maximum)
void setScale(AxisScale scale)
void setTickDirection(TickDirection direction)
AxisValue location() const
void setTitleOrientation(const Orientation &orientation)
void setTitle(const WString &title)
void setLabelAngle(double angle)
void setType(ChartType type)
void setLegendEnabled(bool enabled)
void removeYAxis(int yAxisId)
void setSeries(const std::vector< WDataSeries > &series)
int addYAxis(WAxis *waxis)
void setLegendStyle(const WFont &font, const WPen &border, const WBrush &background)
WDataSeries & series(int modelColumn)
void setLegendColumns(int columns, const WLength &width)
void setOrientation(Orientation orientation)
void setBorderPen(const WPen &pen)
void setLegendLocation(LegendLocation location, Side side, AlignmentFlag alignment)
void setLabelsEnabled(Axis axis, bool enabled=true)
MarkerType marker() const
void setStacked(bool stacked)
const WShadow & shadow() const
void setShadow(const WShadow &shadow)
void setType(SeriesType t)
void setFillRange(FillRangeType fillRange)
void setCustomMarker(const WPainterPath &path)
FillRangeType fillRange() const
void setMarker(MarkerType marker)
void setLegendEnabled(bool enabled)
void bindToYAxis(int yAxis)
bool isLegendEnabled() const
Wt::Signals::connection connect(const F &function)
virtual bool setData(const WModelIndex &index, const boost::any &value, int role=EditRole)
virtual int rowCount(const WModelIndex &parent=WModelIndex()) const=0
virtual bool insertRows(int row, int count, const WModelIndex &parent=WModelIndex())
bool removeRow(int row, const WModelIndex &parent=WModelIndex())
void setModel(WAbstractItemModel *model)
void setCurrentIndex(int index)
void addItem(const WString &text)
const WString & text() const
void setMaxLength(int length)
virtual void setText(const WString &text)
double toDouble(const WString &value) const
static const WLocale & currentLocale()
void moveTo(const WPointF &point)
void lineTo(const WPointF &point)
void setStyleClass(const WString &style)
virtual void deleteRow(int row)
WTableCell * elementAt(int row, int column)
WTableRow * rowAt(int row)
void setMandatory(bool how)
Struct that holds the controls for one axis.
Wt::WLineEdit * maximumEdit
Wt::WComboBox * tickDirectionEdit
Wt::WLineEdit * titleEdit
Wt::WLineEdit * labelAngleEdit
Wt::WComboBox * titleOrientationEdit
Wt::WCheckBox * gridLinesEdit
Wt::WLineEdit * minimumEdit
Wt::WComboBox * locationEdit
Wt::WComboBox * scaleEdit
Wt::WCheckBox * visibleEdit
Struct that holds the controls for one series.
Wt::WComboBox * markerEdit
Wt::WComboBox * labelsEdit
Wt::WCheckBox * enabledEdit
Wt::WCheckBox * legendEdit
Wt::WCheckBox * shadowEdit