Source code of the Widget gallery example

Browse below the source code for Wt's Widget gallery example.

widgetgallery
class BasicControls
BasicControls.C
BasicControls.h
class ChartWidgets
class ControlsWidget
class DialogWidgets
class EmwebLoadingIndicator
class EventDisplayer
class EventsDemo
class ExtWidgets
class FormWidgets
class GraphicsWidgets
class MvcWidgets
class PaintBrush
class SpecialPurposeWidgets
class StyleLayout
class Validators
class WidgetGallery
DeferredWidget.h
category.csv
charts.xml
main.C
pie.csv
text.xml
timeseries.csv
treeview.xml
wt_config.xml
style
sounds
pics
icons
/*
* Copyright (C) 2008 Emweb bvba
*
* See the LICENSE file for terms of use.
*/

#include "BasicControls.h"
#include "EventDisplayer.h"

#include <Wt/WAnchor>
#include <Wt/WBreak>
#include <Wt/WCssDecorationStyle>
#include <Wt/WGroupBox>
#include <Wt/WImage>
#include <Wt/WIconPair>
#include <Wt/WLineEdit>
#include <Wt/WLength>
#include <Wt/WPanel>
#include <Wt/WProgressBar>
#include <Wt/WPushButton>
#include <Wt/WTable>
#include <Wt/WTabWidget>
#include <Wt/WTemplate>
#include <Wt/WText>
#include <Wt/WTree>
#include <Wt/WTreeNode>
#include <Wt/WTreeTable>
#include <Wt/WTreeTableNode>

using namespace Wt;

BasicControls::BasicControls(EventDisplayer *ed)
: ControlsWidget(ed, true)
{
addText(tr("basics-intro"), this);
}

void BasicControls::populateSubMenu(WMenu *menu)
{
menu->addItem("WContainerWidget", wContainerWidget());
menu->addItem("WTemplate", wTemplate());
menu->addItem("WText", wText());
menu->addItem("WAnchor", wAnchor());
menu->addItem("WBreak", wBreak());
menu->addItem("WImage", wImage());
menu->addItem("WGroupBox", wGroupBox());
menu->addItem("WStackedWidget", wStackedWidget());
menu->addItem("WTable", wTable());
menu->addItem("WMenu", wMenu());
menu->addItem("WTree", wTree());
menu->addItem("WTreeTable", wTreeTable());
menu->addItem("WPanel", wPanel());
menu->addItem("WTabWidget", wTabWidget());
menu->addItem("WProgressBar", wProgressBar());
}

WWidget *BasicControls::wText()
{
WContainerWidget *result = new WContainerWidget();
topic("WText", result);
addText(tr("basics-WText"), result);

addText("<p>This WText unexpectedly contains JavaScript, wich the "
"XSS attack preventer detects and disables. "
"<script>alert(\"You are under attack\");</script>"
"A warning is printed in Wt's log messages.</p>",
result);

addText("<p>This WText contains malformed XML <h1></h2>."
"It will be turned into a PlainText formatted string.</p>",
result);

addText(tr("basics-WText-events"), result);

WText *text;

text = addText("This text reacts to <tt>clicked()</tt><br/>",
result);
text->setStyleClass("reactive");
ed_->showSignal(text->clicked(), "Text was clicked");

text = addText("This text reacts to <tt>doubleClicked()</tt><br/>",
result);
text->setStyleClass("reactive");
ed_->showSignal(text->doubleClicked(), "Text was double clicked");

text = addText("This text reacts to <tt>mouseWentOver()</tt><br/>", result);
text->setStyleClass("reactive");
ed_->showSignal(text->mouseWentOver(), "Mouse went over text");

text = addText("This text reacts to <tt>mouseWentOut()</tt><br/>", result);
text->setStyleClass("reactive");
ed_->showSignal(text->mouseWentOut(), "Mouse went out text");

return result;
}

WWidget *BasicControls::wTemplate()
{
WContainerWidget *result = new WContainerWidget();
topic("WTemplate", result);

addText(tr("basics-WTemplate"), result);

WTemplate *pre = new WTemplate("<pre>${text}</pre>", result);
pre->bindString("text", tr("basics-WTemplate-example"), PlainText);

addText(tr("basics-WTemplate2"), result);

WTemplate *temp = new WTemplate(tr("basics-WTemplate-example"), result);

temp->bindWidget("name-edit", new WLineEdit());
temp->bindWidget("save-button", new WPushButton("Save"));
temp->bindWidget("cancel-button", new WPushButton("Cancel"));

return result;
}

WWidget *BasicControls::wBreak()
{
WContainerWidget *result = new WContainerWidget();

topic("WBreak", result);

addText(tr("basics-WBreak"), result);

new WBreak(result); // does not really do anything useful :-)

return result;
}

WWidget *BasicControls::wAnchor()
{
WContainerWidget *result = new WContainerWidget();

topic("WAnchor", result);

addText(tr("basics-WAnchor"), result);

WAnchor *a1 = new WAnchor(WLink("http://www.webtoolkit.eu/"),
"Wt homepage (in a new window)", result);
a1->setTarget(TargetNewWindow);

addText(tr("basics-WAnchor-more"), result);

WAnchor *a2 = new WAnchor(WLink("http://www.emweb.be/"), result);
a2->setTarget(TargetNewWindow);
new WImage(WLink("pics/emweb_small.jpg"), a2);

addText(tr("basics-WAnchor-related"), result);

return result;
}

WWidget *BasicControls::wImage()
{
WContainerWidget *result = new WContainerWidget();

topic("WImage", result);

addText(tr("basics-WImage"), result);

addText("An image: ", result);
(new WImage(WLink("icons/wt_powered.jpg"), result))
->setVerticalAlignment(AlignMiddle);

addText(tr("basics-WImage-more"), result);

return result;
}

WWidget *BasicControls::wTable()
{
WContainerWidget *result = new WContainerWidget();

topic("WTable", result);

addText(tr("basics-WTable"), result);

WTable *table = new WTable(result);
table->setStyleClass("example-table");

addText("First warning signal", table->elementAt(0, 0));
addText("09:25am", table->elementAt(0, 1));
WImage *img
= new WImage(WLink("icons/Pennant_One.png"), table->elementAt(0, 2));
img->resize(WLength::Auto, WLength(30, WLength::Pixel));
addText("First perparatory signal", table->elementAt(1, 0));
addText("09:26am", table->elementAt(1, 1));
img = new WImage(WLink("icons/Pennant_One.png"), table->elementAt(1, 2));
img->resize(WLength::Auto, WLength(30, WLength::Pixel));
img = new WImage(WLink("icons/Papa.png"), table->elementAt(1, 2));
img->resize(WLength::Auto, WLength(30, WLength::Pixel));
addText("Second perparatory signal", table->elementAt(2, 0));
addText("09:29am", table->elementAt(2, 1));
img = new WImage(WLink("icons/Pennant_One.png"), table->elementAt(2, 2));
img->resize(WLength::Auto, WLength(30, WLength::Pixel));
addText("Start", table->elementAt(3, 0));
addText("09:30am", table->elementAt(3, 1));

addText(tr("basics-WTable-more"), result);

return result;
}


WWidget *BasicControls::wTree()
{
WContainerWidget *result = new WContainerWidget();

topic("WTree", "WTreeNode", result);

addText(tr("basics-WTree"), result);

WIconPair *folderIcon = new WIconPair("icons/yellow-folder-closed.png",
"icons/yellow-folder-open.png", false);

WTree *tree = new WTree(result);
tree->setSelectionMode(ExtendedSelection);

WTreeNode *node = new WTreeNode("Furniture", folderIcon);
tree->setTreeRoot(node);
node->label()->setTextFormat(PlainText);
node->setLoadPolicy(WTreeNode::NextLevelLoading);
node->addChildNode(new WTreeNode("Table"));
node->addChildNode(new WTreeNode("Cupboard"));

WTreeNode *three = new WTreeNode("Chair");
node->addChildNode(three);
node->addChildNode(new WTreeNode("Coach"));
node->expand();
three->addChildNode(new WTreeNode("Doc"));
three->addChildNode(new WTreeNode("Grumpy"));
three->addChildNode(new WTreeNode("Happy"));
three->addChildNode(new WTreeNode("Sneezy"));
three->addChildNode(new WTreeNode("Dopey"));
three->addChildNode(new WTreeNode("Bashful"));
three->addChildNode(new WTreeNode("Sleepy"));

addText(tr("basics-WTree-more"), result);

return result;
}

WWidget *BasicControls::wTreeTable()
{
WContainerWidget *result = new WContainerWidget();

topic("WTreeTable","WTreeTableNode", result);
addText(tr("basics-WTreeTable"), result);

WTreeTable *tt = new WTreeTable(result);
tt->resize(650, 200);
tt->tree()->setSelectionMode(ExtendedSelection);
tt->addColumn("Yuppie Factor", 125);
tt->addColumn("# Holidays", 125);
tt->addColumn("Favorite Item", 125);
WTreeTableNode *ttr = new WTreeTableNode("All Personnel");
ttr->setImagePack("resources/");
tt->setTreeRoot(ttr, "Emweb Organigram");
WTreeTableNode *ttr1 = new WTreeTableNode("Upper Management", 0, ttr);
WTreeTableNode *ttn;
ttn = new WTreeTableNode("Chief Anything Officer", 0, ttr1);
ttn->setColumnWidget(1, addText("-2.8"));
ttn->setColumnWidget(2, addText("20"));
ttn->setColumnWidget(3, addText("Scepter"));
ttn = new WTreeTableNode("Vice President of Parties", 0, ttr1);
ttn->setColumnWidget(1, addText("13.57"));
ttn->setColumnWidget(2, addText("365"));
ttn->setColumnWidget(3, addText("Flag"));
ttn = new WTreeTableNode("Vice President of Staplery", 0, ttr1);
ttn->setColumnWidget(1, addText("3.42"));
ttn->setColumnWidget(2, addText("27"));
ttn->setColumnWidget(3, addText("Perforator"));
ttr1 = new WTreeTableNode("Middle management", 0, ttr);
ttn = new WTreeTableNode("Boss of the house", 0, ttr1);
ttn->setColumnWidget(1, addText("9.78"));
ttn->setColumnWidget(2, addText("35"));
ttn->setColumnWidget(3, addText("Happy Animals"));
ttn = new WTreeTableNode("Xena caretaker", 0, ttr1);
ttn->setColumnWidget(1, addText("8.66"));
ttn->setColumnWidget(2, addText("10"));
ttn->setColumnWidget(3, addText("Yellow bag"));
ttr1 = new WTreeTableNode("Actual Workforce", 0, ttr);
ttn = new WTreeTableNode("The Dork", 0, ttr1);
ttn->setColumnWidget(1, addText("9.78"));
ttn->setColumnWidget(2, addText("22"));
ttn->setColumnWidget(3, addText("Mojito"));
ttn = new WTreeTableNode("The Stud", 0, ttr1);
ttn->setColumnWidget(1, addText("8.66"));
ttn->setColumnWidget(2, addText("46"));
ttn->setColumnWidget(3, addText("Toothbrush"));
ttn = new WTreeTableNode("The Ugly", 0, ttr1);
ttn->setColumnWidget(1, addText("13.0"));
ttn->setColumnWidget(2, addText("25"));
ttn->setColumnWidget(3, addText("Paper bag"));
ttr->expand();

return result;
}

WWidget *BasicControls::wPanel()
{
WContainerWidget *result = new WContainerWidget();

topic("WPanel", result);

addText(tr("basics-WPanel"), result);
WPanel *panel = new WPanel(result);
panel->setCentralWidget(addText("This is a default panel"));
new WBreak(result);
panel = new WPanel(result);
panel->setTitle("My second WPanel.");
panel->setCentralWidget(addText("This is a panel with a title"));
new WBreak(result);
panel = new WPanel(result);
panel->setAnimation(WAnimation(WAnimation::SlideInFromTop | WAnimation::Fade,
WAnimation::EaseOut, 100));
panel->setTitle("My third WPanel");
panel->setCentralWidget(addText("This is a collapsible panel with "
"a title"));
panel->setCollapsible(true);

addText(tr("basics-WPanel-related"), result);

return result;
}

WWidget *BasicControls::wTabWidget()
{
WContainerWidget *result = new WContainerWidget();

topic("WTabWidget", result);
addText(tr("basics-WTabWidget"), result);
WTabWidget *tw = new WTabWidget(result);
tw->addTab(addText("These are the contents of the first tab"),
"Picadilly", WTabWidget::PreLoading);
tw->addTab(addText("The contents of these tabs are pre-loaded in "
"the browser to ensure swift switching."),
"Waterloo", WTabWidget::PreLoading);
tw->addTab(addText("This is yet another pre-loaded tab. "
"Look how good this works."),
"Victoria", WTabWidget::PreLoading);

WMenuItem * tab
= tw->addTab(addText("The colors of the tab widget can be changed by "
"modifying some images."
"You can close this tab by clicking on the close "
"icon"),
"Tottenham");
tab->setCloseable(true);

tw->setStyleClass("tabwidget");

addText(tr("basics-WTabWidget-more"), result);

return result;
}

WWidget *BasicControls::wContainerWidget()
{
WContainerWidget *result = new WContainerWidget();

topic("WContainerWidget", result);

addText(tr("basics-WContainerWidget"), result);

return result;
}

WWidget *BasicControls::wMenu()
{
WContainerWidget *result = new WContainerWidget();

topic("WMenu", result);
addText(tr("basics-WMenu"), result);

return result;
}

WWidget *BasicControls::wGroupBox()
{
WContainerWidget *result = new WContainerWidget();

topic("WGroupBox", result);
addText(tr("basics-WGroupBox"), result);

WGroupBox *gb = new WGroupBox("A group box", result);
gb->addWidget(addText(tr("basics-WGroupBox-contents")));

addText(tr("basics-WGroupBox-related"), result);

return result;
}

WWidget *BasicControls::wStackedWidget()
{
WContainerWidget *result = new WContainerWidget();

topic("WStackedWidget", result);
addText(tr("basics-WStackedWidget"), result);

return result;
}

WWidget *BasicControls::wProgressBar()
{
WContainerWidget *result = new WContainerWidget();

topic("WProgressBar", result);

result->addWidget(addText(tr("basics-WProgressBar")));
WProgressBar *pb = new WProgressBar(result);
pb->setValue(27);

return result;
}