Skip to content

Commit 666fa56

Browse files
author
Koen Deforche
committed
fix WMenuItem::takeContents() deleting contents, simplify internal path handling with submenus
1 parent dc4f483 commit 666fa56

21 files changed

+267
-245
lines changed

Changelog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
18-07-2011:
2+
* WMenuItem: fix takeContents() (#897)
3+
4+
* WMenu, WMenuItem, WSubMenuItem: simplifiy internal path handling with submenus
5+
16
14-07-2011:
27
* fix min-width being ignored in layout managers
38

examples/widgetgallery/BasicControls.C

Lines changed: 73 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ using namespace Wt;
3232
BasicControls::BasicControls(EventDisplayer *ed)
3333
: ControlsWidget(ed, true)
3434
{
35-
new WText(tr("basics-intro"), this);
35+
addText(tr("basics-intro"), this);
3636
}
3737

3838
void BasicControls::populateSubMenu(WMenu *menu)
@@ -58,37 +58,37 @@ WWidget *BasicControls::wText()
5858
{
5959
WContainerWidget *result = new WContainerWidget();
6060
topic("WText", result);
61-
new WText(tr("basics-WText"), result);
61+
addText(tr("basics-WText"), result);
6262

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

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

73-
new WText(tr("basics-WText-events"), result);
73+
addText(tr("basics-WText-events"), result);
7474

7575
WText *text;
7676

77-
text = new WText("This text reacts to <tt>clicked()</tt><br/>",
77+
text = addText("This text reacts to <tt>clicked()</tt><br/>",
7878
result);
7979
text->setStyleClass("reactive");
8080
ed_->showSignal(text->clicked(), "Text was clicked");
8181

82-
text = new WText("This text reacts to <tt>doubleClicked()</tt><br/>",
82+
text = addText("This text reacts to <tt>doubleClicked()</tt><br/>",
8383
result);
8484
text->setStyleClass("reactive");
8585
ed_->showSignal(text->doubleClicked(), "Text was double clicked");
8686

87-
text = new WText("This text reacts to <tt>mouseWentOver()</tt><br/>", result);
87+
text = addText("This text reacts to <tt>mouseWentOver()</tt><br/>", result);
8888
text->setStyleClass("reactive");
8989
ed_->showSignal(text->mouseWentOver(), "Mouse went over text");
9090

91-
text = new WText("This text reacts to <tt>mouseWentOut()</tt><br/>", result);
91+
text = addText("This text reacts to <tt>mouseWentOut()</tt><br/>", result);
9292
text->setStyleClass("reactive");
9393
ed_->showSignal(text->mouseWentOut(), "Mouse went out text");
9494

@@ -100,12 +100,12 @@ WWidget *BasicControls::wTemplate()
100100
WContainerWidget *result = new WContainerWidget();
101101
topic("WTemplate", result);
102102

103-
new WText(tr("basics-WTemplate"), result);
103+
addText(tr("basics-WTemplate"), result);
104104

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

108-
new WText(tr("basics-WTemplate2"), result);
108+
addText(tr("basics-WTemplate2"), result);
109109

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

@@ -122,7 +122,7 @@ WWidget *BasicControls::wBreak()
122122

123123
topic("WBreak", result);
124124

125-
new WText(tr("basics-WBreak"), result);
125+
addText(tr("basics-WBreak"), result);
126126

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

@@ -135,19 +135,19 @@ WWidget *BasicControls::wAnchor()
135135

136136
topic("WAnchor", result);
137137

138-
new WText(tr("basics-WAnchor"), result);
138+
addText(tr("basics-WAnchor"), result);
139139

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

144-
new WText(tr("basics-WAnchor-more"), result);
144+
addText(tr("basics-WAnchor-more"), result);
145145

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

150-
new WText(tr("basics-WAnchor-related"), result);
150+
addText(tr("basics-WAnchor-related"), result);
151151

152152
return result;
153153
}
@@ -158,12 +158,12 @@ WWidget *BasicControls::wImage()
158158

159159
topic("WImage", result);
160160

161-
new WText(tr("basics-WImage"), result);
161+
addText(tr("basics-WImage"), result);
162162

163-
new WText("An image: ", result);
163+
addText("An image: ", result);
164164
new WImage("icons/wt_powered.jpg", result);
165165

166-
new WText(tr("basics-WImage-more"), result);
166+
addText(tr("basics-WImage-more"), result);
167167

168168
return result;
169169
}
@@ -174,29 +174,29 @@ WWidget *BasicControls::wTable()
174174

175175
topic("WTable", result);
176176

177-
new WText(tr("basics-WTable"), result);
177+
addText(tr("basics-WTable"), result);
178178

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

182-
new WText("First warning signal", table->elementAt(0, 0));
183-
new WText("09:25am", table->elementAt(0, 1));
182+
addText("First warning signal", table->elementAt(0, 0));
183+
addText("09:25am", table->elementAt(0, 1));
184184
WImage *img = new WImage("icons/Pennant_One.png", table->elementAt(0, 2));
185185
img->resize(WLength::Auto, WLength(30, WLength::Pixel));
186-
new WText("First perparatory signal", table->elementAt(1, 0));
187-
new WText("09:26am", table->elementAt(1, 1));
186+
addText("First perparatory signal", table->elementAt(1, 0));
187+
addText("09:26am", table->elementAt(1, 1));
188188
img = new WImage("icons/Pennant_One.png", table->elementAt(1, 2));
189189
img->resize(WLength::Auto, WLength(30, WLength::Pixel));
190190
img = new WImage("icons/Papa.png", table->elementAt(1, 2));
191191
img->resize(WLength::Auto, WLength(30, WLength::Pixel));
192-
new WText("Second perparatory signal", table->elementAt(2, 0));
193-
new WText("09:29am", table->elementAt(2, 1));
192+
addText("Second perparatory signal", table->elementAt(2, 0));
193+
addText("09:29am", table->elementAt(2, 1));
194194
img = new WImage("icons/Pennant_One.png", table->elementAt(2, 2));
195195
img->resize(WLength::Auto, WLength(30, WLength::Pixel));
196-
new WText("Start", table->elementAt(3, 0));
197-
new WText("09:30am", table->elementAt(3, 1));
196+
addText("Start", table->elementAt(3, 0));
197+
addText("09:30am", table->elementAt(3, 1));
198198

199-
new WText(tr("basics-WTable-more"), result);
199+
addText(tr("basics-WTable-more"), result);
200200

201201
return result;
202202
}
@@ -208,7 +208,7 @@ WWidget *BasicControls::wTree()
208208

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

211-
new WText(tr("basics-WTree"), result);
211+
addText(tr("basics-WTree"), result);
212212

213213
WIconPair *folderIcon = new WIconPair("icons/yellow-folder-closed.png",
214214
"icons/yellow-folder-open.png", false);
@@ -235,7 +235,7 @@ WWidget *BasicControls::wTree()
235235
three->addChildNode(new WTreeNode("Bashful"));
236236
three->addChildNode(new WTreeNode("Sleepy"));
237237

238-
new WText(tr("basics-WTree-more"), result);
238+
addText(tr("basics-WTree-more"), result);
239239

240240
return result;
241241
}
@@ -245,7 +245,7 @@ WWidget *BasicControls::wTreeTable()
245245
WContainerWidget *result = new WContainerWidget();
246246

247247
topic("WTreeTable","WTreeTableNode", result);
248-
new WText(tr("basics-WTreeTable"), result);
248+
addText(tr("basics-WTreeTable"), result);
249249

250250
WTreeTable *tt = new WTreeTable(result);
251251
tt->resize(650, 200);
@@ -259,39 +259,39 @@ WWidget *BasicControls::wTreeTable()
259259
WTreeTableNode *ttr1 = new WTreeTableNode("Upper Management", 0, ttr);
260260
WTreeTableNode *ttn;
261261
ttn = new WTreeTableNode("Chief Anything Officer", 0, ttr1);
262-
ttn->setColumnWidget(1, new WText("-2.8"));
263-
ttn->setColumnWidget(2, new WText("20"));
264-
ttn->setColumnWidget(3, new WText("Scepter"));
262+
ttn->setColumnWidget(1, addText("-2.8"));
263+
ttn->setColumnWidget(2, addText("20"));
264+
ttn->setColumnWidget(3, addText("Scepter"));
265265
ttn = new WTreeTableNode("Vice President of Parties", 0, ttr1);
266-
ttn->setColumnWidget(1, new WText("13.57"));
267-
ttn->setColumnWidget(2, new WText("365"));
268-
ttn->setColumnWidget(3, new WText("Flag"));
266+
ttn->setColumnWidget(1, addText("13.57"));
267+
ttn->setColumnWidget(2, addText("365"));
268+
ttn->setColumnWidget(3, addText("Flag"));
269269
ttn = new WTreeTableNode("Vice President of Staplery", 0, ttr1);
270-
ttn->setColumnWidget(1, new WText("3.42"));
271-
ttn->setColumnWidget(2, new WText("27"));
272-
ttn->setColumnWidget(3, new WText("Perforator"));
270+
ttn->setColumnWidget(1, addText("3.42"));
271+
ttn->setColumnWidget(2, addText("27"));
272+
ttn->setColumnWidget(3, addText("Perforator"));
273273
ttr1 = new WTreeTableNode("Middle management", 0, ttr);
274274
ttn = new WTreeTableNode("Boss of the house", 0, ttr1);
275-
ttn->setColumnWidget(1, new WText("9.78"));
276-
ttn->setColumnWidget(2, new WText("35"));
277-
ttn->setColumnWidget(3, new WText("Happy Animals"));
275+
ttn->setColumnWidget(1, addText("9.78"));
276+
ttn->setColumnWidget(2, addText("35"));
277+
ttn->setColumnWidget(3, addText("Happy Animals"));
278278
ttn = new WTreeTableNode("Xena caretaker", 0, ttr1);
279-
ttn->setColumnWidget(1, new WText("8.66"));
280-
ttn->setColumnWidget(2, new WText("10"));
281-
ttn->setColumnWidget(3, new WText("Yellow bag"));
279+
ttn->setColumnWidget(1, addText("8.66"));
280+
ttn->setColumnWidget(2, addText("10"));
281+
ttn->setColumnWidget(3, addText("Yellow bag"));
282282
ttr1 = new WTreeTableNode("Actual Workforce", 0, ttr);
283283
ttn = new WTreeTableNode("The Dork", 0, ttr1);
284-
ttn->setColumnWidget(1, new WText("9.78"));
285-
ttn->setColumnWidget(2, new WText("22"));
286-
ttn->setColumnWidget(3, new WText("Mojito"));
284+
ttn->setColumnWidget(1, addText("9.78"));
285+
ttn->setColumnWidget(2, addText("22"));
286+
ttn->setColumnWidget(3, addText("Mojito"));
287287
ttn = new WTreeTableNode("The Stud", 0, ttr1);
288-
ttn->setColumnWidget(1, new WText("8.66"));
289-
ttn->setColumnWidget(2, new WText("46"));
290-
ttn->setColumnWidget(3, new WText("Toothbrush"));
288+
ttn->setColumnWidget(1, addText("8.66"));
289+
ttn->setColumnWidget(2, addText("46"));
290+
ttn->setColumnWidget(3, addText("Toothbrush"));
291291
ttn = new WTreeTableNode("The Ugly", 0, ttr1);
292-
ttn->setColumnWidget(1, new WText("13.0"));
293-
ttn->setColumnWidget(2, new WText("25"));
294-
ttn->setColumnWidget(3, new WText("Paper bag"));
292+
ttn->setColumnWidget(1, addText("13.0"));
293+
ttn->setColumnWidget(2, addText("25"));
294+
ttn->setColumnWidget(3, addText("Paper bag"));
295295
ttr->expand();
296296

297297
return result;
@@ -303,23 +303,23 @@ WWidget *BasicControls::wPanel()
303303

304304
topic("WPanel", result);
305305

306-
new WText(tr("basics-WPanel"), result);
306+
addText(tr("basics-WPanel"), result);
307307
WPanel *panel = new WPanel(result);
308-
panel->setCentralWidget(new WText("This is a default panel"));
308+
panel->setCentralWidget(addText("This is a default panel"));
309309
new WBreak(result);
310310
panel = new WPanel(result);
311311
panel->setTitle("My second WPanel.");
312-
panel->setCentralWidget(new WText("This is a panel with a title"));
312+
panel->setCentralWidget(addText("This is a panel with a title"));
313313
new WBreak(result);
314314
panel = new WPanel(result);
315315
panel->setAnimation(WAnimation(WAnimation::SlideInFromTop | WAnimation::Fade,
316316
WAnimation::EaseOut, 100));
317317
panel->setTitle("My third WPanel");
318-
panel->setCentralWidget(new WText("This is a collapsible panel with "
318+
panel->setCentralWidget(addText("This is a collapsible panel with "
319319
"a title"));
320320
panel->setCollapsible(true);
321321

322-
new WText(tr("basics-WPanel-related"), result);
322+
addText(tr("basics-WPanel-related"), result);
323323

324324
return result;
325325
}
@@ -329,23 +329,23 @@ WWidget *BasicControls::wTabWidget()
329329
WContainerWidget *result = new WContainerWidget();
330330

331331
topic("WTabWidget", result);
332-
new WText(tr("basics-WTabWidget"), result);
332+
addText(tr("basics-WTabWidget"), result);
333333
WTabWidget *tw = new WTabWidget(result);
334-
tw->addTab(new WText("These are the contents of the first tab"),
334+
tw->addTab(addText("These are the contents of the first tab"),
335335
"Picadilly", WTabWidget::PreLoading);
336-
tw->addTab(new WText("The contents of these tabs are pre-loaded in "
336+
tw->addTab(addText("The contents of these tabs are pre-loaded in "
337337
"the browser to ensure swift switching."),
338338
"Waterloo", WTabWidget::PreLoading);
339-
tw->addTab(new WText("This is yet another pre-loaded tab. "
339+
tw->addTab(addText("This is yet another pre-loaded tab. "
340340
"Look how good this works."),
341341
"Victoria", WTabWidget::PreLoading);
342-
tw->addTab(new WText("The colors of the tab widget can be changed by "
342+
tw->addTab(addText("The colors of the tab widget can be changed by "
343343
"modifying some images."),
344344
"Tottenham");
345345

346346
tw->setStyleClass("tabwidget");
347347

348-
new WText(tr("basics-WTabWidget-more"), result);
348+
addText(tr("basics-WTabWidget-more"), result);
349349

350350
return result;
351351
}
@@ -356,7 +356,7 @@ WWidget *BasicControls::wContainerWidget()
356356

357357
topic("WContainerWidget", result);
358358

359-
new WText(tr("basics-WContainerWidget"), result);
359+
addText(tr("basics-WContainerWidget"), result);
360360

361361
return result;
362362
}
@@ -366,7 +366,7 @@ WWidget *BasicControls::wMenu()
366366
WContainerWidget *result = new WContainerWidget();
367367

368368
topic("WMenu", result);
369-
new WText(tr("basics-WMenu"), result);
369+
addText(tr("basics-WMenu"), result);
370370

371371
return result;
372372
}
@@ -376,12 +376,12 @@ WWidget *BasicControls::wGroupBox()
376376
WContainerWidget *result = new WContainerWidget();
377377

378378
topic("WGroupBox", result);
379-
new WText(tr("basics-WGroupBox"), result);
379+
addText(tr("basics-WGroupBox"), result);
380380

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

384-
new WText(tr("basics-WGroupBox-related"), result);
384+
addText(tr("basics-WGroupBox-related"), result);
385385

386386
return result;
387387
}
@@ -391,7 +391,7 @@ WWidget *BasicControls::wStackedWidget()
391391
WContainerWidget *result = new WContainerWidget();
392392

393393
topic("WStackedWidget", result);
394-
new WText(tr("basics-WStackedWidget"), result);
394+
addText(tr("basics-WStackedWidget"), result);
395395

396396
return result;
397397
}
@@ -402,7 +402,7 @@ WWidget *BasicControls::wProgressBar()
402402

403403
topic("WProgressBar", result);
404404

405-
result->addWidget(new WText(tr("basics-WProgressBar")));
405+
result->addWidget(addText(tr("basics-WProgressBar")));
406406
WProgressBar *pb = new WProgressBar(result);
407407
pb->setValue(27);
408408

examples/widgetgallery/ChartWidgets.C

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ using namespace Wt;
1616
ChartWidgets::ChartWidgets(EventDisplayer *ed)
1717
: ControlsWidget(ed, true)
1818
{
19-
new WText(tr("charts-intro"), this);
20-
new WText(tr("charts-introduction"), this);
19+
addText(tr("charts-intro"), this);
20+
addText(tr("charts-introduction"), this);
2121
}
2222

2323
void ChartWidgets::populateSubMenu(Wt::WMenu *menu)

examples/widgetgallery/ControlsWidget.C

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,11 @@ void ControlsWidget::topic(const std::string &classname1,
102102
+ title(classname3) + " and " + title(classname4) + "<br/>",
103103
parent);
104104
}
105+
106+
WText *ControlsWidget::addText(const WString& s, WContainerWidget *parent)
107+
{
108+
WText *text = new WText(s, parent);
109+
if (!s.literal())
110+
text->setInternalPathEncoding(true);
111+
return text;
112+
}

0 commit comments

Comments
 (0)