/*! \brief Populate the folders model. */ void populateFolders() { WStandardItem *level1, *level2; folderModel_->appendRow(level1 = createFolderItem("San Fransisco")); level1->appendRow(level2 = createFolderItem("Investors", "sf-investors")); level1->appendRow(level2 = createFolderItem("Fellows", "sf-fellows")); folderModel_->appendRow(level1 = createFolderItem("Sophia Antipolis")); level1->appendRow(level2 = createFolderItem("R&D", "sa-r_d")); level1->appendRow(level2 = createFolderItem("Services", "sa-services")); level1->appendRow(level2 = createFolderItem("Support", "sa-support")); level1->appendRow(level2 = createFolderItem("Billing", "sa-billing")); folderModel_->appendRow(level1 = createFolderItem("New York")); level1->appendRow(level2 = createFolderItem("Marketing", "ny-marketing")); level1->appendRow(level2 = createFolderItem("Sales", "ny-sales")); level1->appendRow(level2 = createFolderItem("Advisors", "ny-advisors")); folderModel_->appendRow(level1 = createFolderItem (WString::fromUTF8("Frankfürt"))); level1->appendRow(level2 = createFolderItem("Sales", "frank-sales")); folderModel_->setHeaderData(0, Horizontal, boost::any(std::string("SandBox"))); }
/*! \brief Setup the user interface. */ void createUI() { WContainerWidget *w = root(); w->setStyleClass("maindiv"); /* * The main layout is a 3x2 grid layout. */ WGridLayout *layout = new WGridLayout(); layout->addWidget(createTitle("Folders"), 0, 0); layout->addWidget(createTitle("Files"), 0, 1); layout->addWidget(folderView(), 1, 0); layout->setColumnResizable(0); // select the first folder folderView_->select(folderModel_->index(0, 0, folderModel_->index(0, 0))); WVBoxLayout *vbox = new WVBoxLayout(); vbox->addWidget(fileView(), 1); vbox->addWidget(pieChart(), 1); vbox->setResizable(0); layout->addLayout(vbox, 1, 1); layout->addWidget(aboutDisplay(), 2, 0, 1, 2); /* * Let row 1 and column 1 take the excess space. */ layout->setRowStretch(1, 1); layout->setColumnStretch(1, 1); w->setLayout(layout); }
WWidget *FormWidgets::wComboBox() { WContainerWidget *result = new WContainerWidget(); topic("WComboBox", result); addText(tr("formwidgets-WComboBox"), result); WComboBox *cb = new WComboBox(result); cb->addItem("Heavy"); cb->addItem("Medium"); cb->addItem("Light"); cb->setCurrentIndex(1); // select 'Medium' ed_->showSignal(cb->sactivated(), "Combo-box 1 activated: "); addText(tr("formwidgets-WComboBox-model"), result); addText(tr("formwidgets-WComboBox-style"), result); WComboBox *colorCb = new WComboBox(result); WStandardItemModel* model = new WStandardItemModel(colorCb); model->insertColumns(0, 3); addColorElement(model, "Red", "combo-red"); addColorElement(model, "Blue", "combo-blue"); addColorElement(model, "Green", "combo-green"); colorCb->setModel(model); colorCb->setCurrentIndex(0); // select 'Red' ed_->showSignal(colorCb->sactivated(), "Combo-box 2 activated: "); return result; }
void gdContainerBar::doCheck() { WStandardItemModel* model = dynamic_cast<WStandardItemModel*>(view()->model()); for (int row = 0; row < model->rowCount(); row++) { WStandardItem* wsi = model->invisibleRootItem()->child(row, 0); wsi->setChecked(m_pWCb->isChecked()); } }
/*! \brief Populate the files model. * * Data (and headers) is read from the CSV file data/files.csv. We * add icons to the first column, resolve the folder id to the * actual folder name, and configure item flags, and parse date * values. */ void populateFiles() { fileModel_->invisibleRootItem()->setRowCount(0); std::ifstream f((appRoot() + "data/files.csv").c_str()); if (!f) throw std::runtime_error("Could not read: data/files.csv"); readFromCsv(f, fileModel_); for (int i = 0; i < fileModel_->rowCount(); ++i) { WStandardItem *item = fileModel_->item(i, 0); item->setFlags(item->flags() | ItemIsDragEnabled); item->setIcon("icons/file.gif"); std::string folderId = item->text().toUTF8(); item->setData(boost::any(folderId), UserRole); item->setText(folderNameMap_[folderId]); convertToDate(fileModel_->item(i, 4)); convertToDate(fileModel_->item(i, 5)); } }
WStandardItemModel *TreeViewExample::createModel(bool useInternalPath, WObject *parent) { /* * Setup a model. * * We use the standard item model, which is a general model * suitable for hierarchical (tree-like) data, but stores all data * in memory. */ WStandardItemModel *result = new WStandardItemModel(0, 4, parent); /* * Headers ... */ result->setHeaderData(0, Horizontal, std::string("Places")); result->setHeaderData(1, Horizontal, std::string("Weather")); result->setHeaderData(2, Horizontal, std::string("Drink")); result->setHeaderData(3, Horizontal, std::string("Visited")); /* * ... and data */ WStandardItem *continent, *country; result->appendRow(continent = continentItem("Europe")); continent->appendRow(country = countryItem("Belgium", "be")); country->appendRow(cityItems("Brussels", Rain, "Beer", useInternalPath, true)); country->appendRow(cityItems("Leuven", Rain, "Beer", useInternalPath, true)); continent->appendRow(country = countryItem("France", "fr")); country->appendRow(cityItems("Paris", Cloud, "Wine", useInternalPath, true)); country->appendRow(cityItems("Bordeaux", SunCloud, "Bordeaux wine", useInternalPath, false)); continent->appendRow(country = countryItem("Spain", "sp")); country->appendRow(cityItems("Barcelona", Sun, "Cava", useInternalPath, true)); country->appendRow(cityItems("Madrid", Sun, "San Miguel", useInternalPath, false)); result->appendRow(continent = continentItem("Africa")); continent->appendRow(country = countryItem("Morocco (المغرب)", "ma")); country->appendRow(cityItems("Casablanca", Sun, "Tea", useInternalPath, false)); return result; }
ScatterPlotExample::ScatterPlotExample(WContainerWidget *parent): WContainerWidget(parent) { new WText(WString::tr("scatter plot 2"), this); WStandardItemModel *model = new WStandardItemModel(40, 2, this); model->setItemPrototype(new NumericItem()); model->setHeaderData(0, WString("X")); model->setHeaderData(1, WString("Y = sin(X)")); for (unsigned i = 0; i < 40; ++i) { double x = (static_cast<double>(i) - 20) / 4; model->setData(i, 0, x); model->setData(i, 1, sin(x)); } /* * Create the scatter plot. */ WCartesianChart *chart = new WCartesianChart(this); 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 // Typically, for mathematical functions, you want the axes to cross // at the 0 mark: chart->axis(XAxis).setLocation(ZeroValue); chart->axis(YAxis).setLocation(ZeroValue); // Automatically layout chart (space for axes, legend, ...) chart->setAutoLayoutEnabled(); // Add the curves WDataSeries s(1, CurveSeries); s.setShadow(WShadow(3, 3, WColor(0, 0, 0, 127), 3)); chart->addSeries(s); chart->resize(800, 300); // WPaintedWidget must be given explicit size chart->setMargin(10, Top | Bottom); // add margin vertically chart->setMargin(WLength::Auto, Left | Right); // center horizontally ChartConfig *config = new ChartConfig(chart, this); config->setValueFill(ZeroValueFill); }
WWidget *TreesTables::proxyModels() { WContainerWidget *result = new WContainerWidget(); topic("WAbstractProxyModel", "WSortFilterProxyModel", result); addText(tr("mvc-proxymodels"), result); WStandardItemModel* cocktails = new WStandardItemModel(result); cocktails->appendRow(new WStandardItem("The Last WordLime Rickey")); cocktails->appendRow(new WStandardItem("Gin pahit")); cocktails->appendRow(new WStandardItem("Alexander")); cocktails->appendRow(new WStandardItem("Montgomery")); cocktails->appendRow(new WStandardItem("Gin Sour")); cocktails->appendRow(new WStandardItem("Hanky-Panky")); cocktails->appendRow(new WStandardItem("Gimlet")); cocktails->appendRow(new WStandardItem("Chocolate Soldier")); cocktails->appendRow(new WStandardItem("Joker")); cocktails->appendRow(new WStandardItem("Mickey Slim")); cocktails->appendRow(new WStandardItem("Long Island Iced Tea")); cocktails->appendRow(new WStandardItem("Old Etonian")); cocktails->appendRow(new WStandardItem("Lorraine")); cocktails->appendRow(new WStandardItem("Bijou")); cocktails->appendRow(new WStandardItem("Bronx")); cocktails->appendRow(new WStandardItem("Gin and tonic")); cocktails->appendRow(new WStandardItem("Pall Mall")); cocktails->appendRow(new WStandardItem("Gin Fizz")); cocktails->appendRow(new WStandardItem("French 75")); cocktails->appendRow(new WStandardItem("Martini")); cocktails->appendRow(new WStandardItem("Negroni")); cocktails->appendRow(new WStandardItem("20th Century")); cocktails->appendRow(new WStandardItem("My Fair Lady")); cocktails->appendRow(new WStandardItem("Gibson")); addText("<b>Filter regular expression: </b>", result); regexpFilter = new WLineEdit(result); regexpFilter->setText("Gi.*"); regexpFilter->enterPressed(). connect(this, &TreesTables::changeRegexp); WPushButton *filter = new WPushButton("Apply", result); filter->clicked(). connect(this, &TreesTables::changeRegexp); std::vector<WAbstractItemModel*> models; std::vector<WString> headers; headers.push_back(WString("<b>Source:</b>")); models.push_back(cocktails); headers.push_back(WString("<b>Sorted proxy:</b>")); WSortFilterProxyModel *sortedCocktails = new WSortFilterProxyModel(this); sortedCocktails->setSourceModel(cocktails); sortedCocktails->setDynamicSortFilter(true); sortedCocktails->sort(0); models.push_back(sortedCocktails); headers.push_back(WString("<b>Filtered proxy:</b>")); filteredCocktails = new WSortFilterProxyModel(this); filteredCocktails->setSourceModel(cocktails); filteredCocktails->setDynamicSortFilter(true); filteredCocktails->setFilterKeyColumn(0); filteredCocktails->setFilterRole(Wt::DisplayRole); filteredCocktails->setFilterRegExp(regexpFilter->text()); models.push_back(filteredCocktails); headers.push_back(WString("<b>Sorted and filtered proxy:</b>")); filteredSortedCocktails = new WSortFilterProxyModel(this); filteredSortedCocktails->setSourceModel(cocktails); filteredSortedCocktails->setDynamicSortFilter(true); filteredSortedCocktails->setFilterKeyColumn(0); filteredSortedCocktails->setFilterRole(Wt::DisplayRole); filteredSortedCocktails->setFilterRegExp(regexpFilter->text()); filteredSortedCocktails->sort(0); models.push_back(filteredSortedCocktails); WTable *layout = new WTable(result); for (unsigned i = 0; i < headers.size(); ++i) { layout->columnAt(i)->setWidth(WLength(25, WLength::Percentage)); layout->elementAt(0, i)->setPadding(4); layout->elementAt(0, i)->setContentAlignment(AlignCenter); addText(headers[i], layout->elementAt(0, i)); new WBreak(layout->elementAt(0, i)); WSelectionBox *view = new WSelectionBox(layout->elementAt(0, i)); view->setModel(models[i]); view->setVerticalSize(cocktails->rowCount()); view->resize(WLength(90, WLength::Percentage), WLength::Auto); } return result; }
PieExample::PieExample(WContainerWidget *parent): WContainerWidget(parent) { new WText(WString::tr("pie chart"), this); WStandardItemModel *model = new WStandardItemModel(this); model->setItemPrototype(new NumericItem()); //headers model->insertColumns(model->columnCount(), 2); model->setHeaderData(0, WString("Item")); model->setHeaderData(1, WString("Sales")); //data model->insertRows(model->rowCount(), 6); int row = 0; model->setData(row, 0, WString("Blueberry")); model->setData(row, 1, 120); // model->setData(row, 1, WString("Blueberry"), ToolTipRole); row++; model->setData(row, 0, WString("Cherry")); model->setData(row, 1, 30); row++; model->setData(row, 0, WString("Apple")); model->setData(row, 1, 260); row++; model->setData(row, 0, WString("Boston Cream")); model->setData(row, 1, 160); row++; model->setData(row, 0, WString("Other")); model->setData(row, 1, 40); row++; model->setData(row, 0, WString("Vanilla Cream")); model->setData(row, 1, 120); row++; //set all items to be editable and selectable for (int row = 0; row < model->rowCount(); ++row) for (int col = 0; col < model->columnCount(); ++col) model->item(row, col)->setFlags(ItemIsSelectable | ItemIsEditable); WContainerWidget *w = new WContainerWidget(this); WTableView* table = new WTableView(w); table->setMargin(10, Top | Bottom); table->setMargin(WLength::Auto, Left | Right); table->setSortingEnabled(true); table->setModel(model); table->setColumnWidth(1, 100); table->setRowHeight(22); if (WApplication::instance()->environment().ajax()) { table->resize(150 + 100 + 14, 20 + 6 * 22); table->setEditTriggers(WAbstractItemView::SingleClicked); } else { table->resize(150 + 100 + 14, WLength::Auto); table->setEditTriggers(WAbstractItemView::NoEditTrigger); } /* * Create the pie chart. */ WPieChart *chart = new WPieChart(this); chart->setModel(model); // set the model chart->setLabelsColumn(0); // set the column that holds the labels chart->setDataColumn(1); // set the column that holds the data // configure location and type of labels chart->setDisplayLabels(Outside | TextLabel | TextPercentage); // enable a 3D and shadow effect chart->setPerspectiveEnabled(true, 0.2); chart->setShadowEnabled(true); // explode the first item chart->setExplode(0, 0.3); chart->resize(800, 300); // WPaintedWidget must be given an explicit size chart->setMargin(10, Top | Bottom); // add margin vertically chart->setMargin(WLength::Auto, Left | Right); // center horizontally }