/// // Load button clicked [slot] // void ProjectChooser::loadClicked() { if (mProjectSelectionBox->currentIndex() < 0) return; WAbstractItemModel *model = mProjectSelectionBox->model(); boost::any userData = model->data(model->index(mProjectSelectionBox->currentIndex(), 0), DisplayRole); std::string result; if (!userData.empty()) { result = boost::any_cast<WString>(userData).toUTF8(); } mProjectChosen.emit(result); }
TimeSeriesExample::TimeSeriesExample(Wt::WContainerWidget *parent): 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->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(); /* * 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); }