|
Wt examples
3.3.5
|
A widget that demonstrates a times series chart. More...
#include <ChartsExample.h>
Public Member Functions | |
| TimeSeriesExample (Wt::WContainerWidget *parent) | |
| Creates the time series scatter plot example. | |
A widget that demonstrates a times series chart.
Definition at line 29 of file ChartsExample.h.
| TimeSeriesExample::TimeSeriesExample | ( | Wt::WContainerWidget * | parent | ) |
Creates the time series scatter plot example.
Definition at line 193 of file ChartsExample.C.
:
WContainerWidget(parent)
{
new WText(WString::tr("scatter plot"), this);
WAbstractItemModel *model = readCsvFile(
WApplication::appRoot() + "timeseries.csv", this);
if (!model)
return;
/*
* Parses the first column as dates, to be able to use a date scale
*/
for (int i = 0; i < model->rowCount(); ++i) {
WString s = asString(model->data(i, 0));
WDate d = WDate::fromString(s, "dd/MM/yy");
model->setData(i, 0, d);
}
// Show a view that allows editing of the model.
WContainerWidget *w = new WContainerWidget(this);
WTableView *table = new WTableView(w);
table->setMargin(10, Top | Bottom);
table->setMargin(WLength::Auto, Left | Right);
table->setModel(model);
table->setSortingEnabled(false); // Does not make much sense for time series
table->setColumnResizeEnabled(true);
table->setSelectionMode(NoSelection);
table->setAlternatingRowColors(true);
table->setColumnAlignment(0, AlignCenter);
table->setHeaderAlignment(0, AlignCenter);
table->setRowHeight(22);
// Editing does not really work without Ajax, it would require an
// additional button somewhere to confirm the edited value.
if (WApplication::instance()->environment().ajax()) {
table->resize(800, 20 + 5*22);
table->setEditTriggers(WAbstractItemView::SingleClicked);
} else {
table->resize(800, 20 + 5*22 + 25);
table->setEditTriggers(WAbstractItemView::NoEditTrigger);
}
WItemDelegate *delegate = new WItemDelegate(this);
delegate->setTextFormat("%.1f");
table->setItemDelegate(delegate);
table->setItemDelegateForColumn(0, new WItemDelegate(this));
table->setColumnWidth(0, 80);
for (int i = 1; i < model->columnCount(); ++i)
table->setColumnWidth(i, 90);
/*
* Create the scatter plot.
*/
WCartesianChart *chart = new WCartesianChart(this);
//chart->setPreferredMethod(WPaintedWidget::PngImage);
//chart->setBackground(gray);
chart->setModel(model); // set the model
chart->setXSeriesColumn(0); // set the column that holds the X data
chart->setLegendEnabled(true); // enable the legend
chart->setZoomEnabled(true);
chart->setPanEnabled(true);
chart->setType(ScatterPlot); // set type to ScatterPlot
chart->axis(XAxis).setScale(DateScale); // set scale of X axis to DateScale
// Automatically layout chart (space for axes, legend, ...)
chart->setAutoLayoutEnabled();
chart->setBackground(WColor(200,200,200));
/*
* Add first two columns as line series
*/
for (int i = 1; i < 3; ++i) {
WDataSeries s(i, LineSeries);
s.setShadow(WShadow(3, 3, WColor(0, 0, 0, 127), 3));
chart->addSeries(s);
}
chart->resize(800, 400); // WPaintedWidget must be given explicit size
chart->setMargin(10, Top | Bottom); // add margin vertically
chart->setMargin(WLength::Auto, Left | Right); // center horizontally
new ChartConfig(chart, this);
}
1.7.6.1