File: WidgetGallery.C

package info (click to toggle)
witty 3.1.2-3
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 45,512 kB
  • ctags: 35,832
  • sloc: cpp: 69,469; ansic: 66,945; xml: 4,383; sh: 594; perl: 108; makefile: 106
file content (103 lines) | stat: -rw-r--r-- 3,286 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "WidgetGallery.h"
#include "BasicControls.h"
#include "ChartWidgets.h"
#include "DialogWidgets.h"
#include "EventsDemo.h"
#include "EventDisplayer.h"
#include "ExtWidgets.h"
#include "FormWidgets.h"
#include "GraphicsWidgets.h"
#include "MvcWidgets.h"
#include "Validators.h"
#include "StyleLayout.h"
#include "SpecialPurposeWidgets.h"

#include <Wt/WMenu>
#include <Wt/WSubMenuItem>
#include <Wt/WHBoxLayout>
#include <Wt/WVBoxLayout>
#include <Wt/WStackedWidget>
#include <Wt/WText>

using namespace Wt;

WidgetGallery::WidgetGallery(const WEnvironment& env)
  : WApplication(env)
{
  setTitle("Wt widgets demo");
  setCssTheme("polished");
  // load text bundles (for the tr() function)
  messageResourceBundle().use("text");
  messageResourceBundle().use("charts");
  messageResourceBundle().use("treeview");

  contentsStack_ = new WStackedWidget();
  // Show scrollbars when needed ...
  contentsStack_->setOverflow(WContainerWidget::OverflowAuto);
  // ... and work around a bug in IE (see setOverflow() documentation)
  contentsStack_->setPositionScheme(Relative);
  contentsStack_->setStyleClass("contents");

  EventDisplayer *eventDisplayer = new EventDisplayer(0);

  /*
   * Setup the menu (and submenus)
   */
  WMenu *menu = new WMenu(contentsStack_, Vertical, 0);
  menu->setRenderAsList(true);
  menu->setStyleClass("menu");
  menu->setInternalPathEnabled();
  menu->setInternalBasePath("/");

  addToMenu(menu, "Basics", new BasicControls(eventDisplayer));
  addToMenu(menu, "Form Widgets", new FormWidgets(eventDisplayer));
  addToMenu(menu, "Form Validators", new Validators(eventDisplayer));
  addToMenu(menu, "Ext Widgets", new ExtWidgets(eventDisplayer));
  addToMenu(menu, "Vector Graphics", new GraphicsWidgets(eventDisplayer));
  addToMenu(menu, "Special Purpose", new SpecialPurposeWidgets(eventDisplayer));
  addToMenu(menu, "Dialogs", new DialogWidgets(eventDisplayer));
  addToMenu(menu, "Charts", new ChartWidgets(eventDisplayer));
  addToMenu(menu, "MVC Widgets", new MvcWidgets(eventDisplayer));
  addToMenu(menu, "Events", new EventsDemo(eventDisplayer));
  addToMenu(menu, "Style and Layout", new StyleLayout(eventDisplayer));

  /*
   * Add it all inside a layout
   */
  WHBoxLayout *horizLayout = new WHBoxLayout(root());
  WVBoxLayout *vertLayout = new WVBoxLayout;

  horizLayout->addWidget(menu, 0);
  horizLayout->addLayout(vertLayout, 1);
  vertLayout->addWidget(contentsStack_, 1);
  vertLayout->addWidget(eventDisplayer);

  horizLayout->setResizable(0, true);

  /*
   * Set our style sheet last, so that it loaded after the ext stylesheets.
   */
  useStyleSheet("everywidget.css");
  useStyleSheet("dragdrop.css");
  useStyleSheet("combostyle.css");
}

void WidgetGallery::addToMenu(WMenu *menu, const WString& name,
			      ControlsWidget *controls)
{
  if (controls->hasSubMenu()) {
    WSubMenuItem *smi = new WSubMenuItem(name, controls);
    WMenu *subMenu = new WMenu(contentsStack_, Vertical, 0);
    subMenu->setRenderAsList(true);

    smi->setSubMenu(subMenu);
    menu->addItem(smi);

    subMenu->setInternalPathEnabled();
    subMenu->setInternalBasePath("/" + smi->pathComponent());
    subMenu->setStyleClass("menu submenu");

    controls->populateSubMenu(subMenu);
  } else
    menu->addItem(name, controls);
}