Skip to content

Commit 97767bb

Browse files
author
Koen Deforche
committed
several fixes for recent boost libs, adopt boost::random_device by default, and WPopupMenu API improvements
1 parent 5ce2de9 commit 97767bb

File tree

14 files changed

+156
-31
lines changed

14 files changed

+156
-31
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ OPTION(ENABLE_POSTGRES "Build PostgreSQL backend for Wt::Dbo" ON)
9595
OPTION(ENABLE_QT4 "Build Qt4 interworking library (libwtwithqt" ON)
9696
OPTION(WT_NO_STD_LOCALE "Build Wt to run on a system without std::locale support" OFF)
9797
OPTION(WT_NO_STD_WSTRING "Build Wt to run on a system without std::wstring support" OFF)
98+
OPTION(WT_NO_BOOST_RANDOM "For compatibility with some really old boost versions. Do not enable for boost > 1.45" OFF)
9899

99100
IF(APPLE)
100101
OPTION(USE_BOOST_FRAMEWORK "Uses a Boost framework" OFF)

Changelog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
25-07-2011:
2+
* WPopupMenu, WPopupMenuItem: improved triggered() signal API and
3+
added setSelectable() signals
4+
15
18-07-2011:
26
* WMenuItem: fix takeContents() (#897)
37

WConfig.h.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#cmakedefine WT_HAS_WPDFIMAGE
3131

3232
#cmakedefine WT_NO_BOOST_INTRUSIVE
33+
#cmakedefine WT_NO_BOOST_RANDOM
3334
#cmakedefine WT_NO_STD_LOCALE
3435
#cmakedefine WT_NO_STD_WSTRING
3536

cmake/WtFindBoost-cmake.txt

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,31 @@ ENDIF(WIN32)
5252

5353
SET(Boost_DEBUG ON)
5454

55-
FIND_PACKAGE(Boost 1.35
56-
COMPONENTS
57-
date_time
58-
regex
59-
program_options
60-
signals
61-
system
62-
filesystem
63-
thread
64-
REQUIRED)
55+
IF(WT_NO_BOOST_RANDOM)
56+
FIND_PACKAGE(Boost 1.35
57+
COMPONENTS
58+
date_time
59+
regex
60+
program_options
61+
signals
62+
system
63+
filesystem
64+
thread
65+
REQUIRED)
66+
ELSE(WT_NO_BOOST_RANDOM)
67+
FIND_PACKAGE(Boost 1.35
68+
COMPONENTS
69+
date_time
70+
regex
71+
program_options
72+
random
73+
signals
74+
system
75+
filesystem
76+
thread
77+
REQUIRED)
78+
ENDIF(WT_NO_BOOST_RANDOM)
79+
6580
IF (Boost_FOUND)
6681
# Translate variables from official cmake names to internally used names
6782
SET(BOOST_INCLUDE_DIRS ${Boost_INCLUDE_DIRS})
@@ -73,6 +88,7 @@ IF (Boost_FOUND)
7388
SET(BOOST_SIGNALS_LIB ${Boost_SIGNALS_LIBRARY})
7489
SET(BOOST_SYSTEM_LIB ${Boost_SYSTEM_LIBRARY})
7590
SET(BOOST_THREAD_LIB ${Boost_THREAD_LIBRARY})
91+
SET(BOOST_RANDOM_LIB ${Boost_RANDOM_LIBRARY})
7692

7793
SET(BOOST_WT_MT_FOUND TRUE)
7894
SET(BOOST_WT_FOUND TRUE)
@@ -86,6 +102,7 @@ IF (Boost_FOUND)
86102
ELSE(MSVC)
87103
SET(BOOST_WT_LIBRARIES
88104
${Boost_THREAD_LIBRARY}
105+
${Boost_RANDOM_LIBRARY}
89106
${Boost_REGEX_LIBRARY}
90107
${Boost_SIGNALS_LIBRARY}
91108
${Boost_SYSTEM_LIBRARY}

cmake/WtFindBoost-vintage.txt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# Separate compiled boost libraries are also discovered:
1111
# - BOOST_DT_LIB
1212
# - BOOST_FS_LIB
13+
# - BOOST_RANDOM_LIB
1314
# - BOOST_REGEX_LIB
1415
# - BOOST_PO_LIB
1516
# - BOOST_SIGNALS_LIB
@@ -51,6 +52,11 @@ ELSE(MSVC)
5152

5253
SET(BOOST_THREAD_LIB ${BOOST_FRAMEWORK_LIB})
5354
SET(BOOST_REGEX_LIB ${BOOST_FRAMEWORK_LIB})
55+
IF(NOT WT_NO_BOOST_RANDOM)
56+
SET(BOOST_RANDOM_LIB ${BOOST_FRAMEWORK_LIB})
57+
ELSE(NOT WT_NO_BOOST_RANDOM)
58+
SET(BOOST_RANDOM_LIB "")
59+
ENDIF(NOT WT_NO_BOOST_RANDOM)
5460
SET(BOOST_PO_LIB ${BOOST_FRAMEWORK_LIB})
5561
SET(BOOST_DT_LIB ${BOOST_FRAMEWORK_LIB})
5662
SET(BOOST_SIGNALS_LIB ${BOOST_FRAMEWORK_LIB})
@@ -75,6 +81,26 @@ ELSE(MSVC)
7581
NO_DEFAULT_PATH
7682
)
7783

84+
IF(NOT WT_NO_BOOST_RANDOM)
85+
FIND_LIBRARY(BOOST_RANDOM_LIB
86+
NAMES
87+
boost_random-${BOOST_COMPILER}-mt-${BOOST_FLAGS}-${BOOST_VERSION}
88+
boost_random-${BOOST_COMPILER}-mt-${BOOST_VERSION}
89+
boost_random-${BOOST_COMPILER}-mt
90+
boost_random-${BOOST_VERSION}
91+
boost_random-mt
92+
boost_random-${BOOST_COMPILER}-${BOOST_VERSION}
93+
boost_random-${BOOST_COMPILER}
94+
boost_random-${BOOST_VERSION}
95+
boost_random
96+
PATHS
97+
${BOOST_LIB_DIRS}
98+
NO_DEFAULT_PATH
99+
)
100+
ELSE(NOT WT_NO_BOOST_RANDOM)
101+
SET(BOOST_RANDOM_LIB "")
102+
ENDIF(NOT WT_NO_BOOST_RANDOM)
103+
78104
FIND_LIBRARY(BOOST_REGEX_LIB
79105
NAMES
80106
boost_regex-${BOOST_COMPILER}-mt-${BOOST_FLAGS}-${BOOST_VERSION}
@@ -208,6 +234,7 @@ IF(BOOST_INCLUDE_DIRS)
208234
IF(NOT BOOST_WT_FOUND
209235
AND MULTI_THREADED
210236
AND BOOST_THREAD_LIB
237+
AND (WT_NO_BOOST_RANDOM OR BOOST_RANDOM_LIB)
211238
AND BOOST_REGEX_LIB
212239
AND BOOST_SIGNALS_LIB
213240
AND BOOST_SYSTEM_LIB
@@ -218,12 +245,14 @@ IF(BOOST_INCLUDE_DIRS)
218245

219246
SET(BOOST_WT_LIBRARIES
220247
${BOOST_THREAD_LIB}
248+
${BOOST_RANDOM_LIB}
221249
${BOOST_REGEX_LIB}
222250
${BOOST_SIGNALS_LIB}
223251
${BOOST_SYSTEM_LIB}
224252
${BOOST_DT_LIB})
225253

226254
SET(BOOST_WT_THREAD_LIBRARY ${BOOST_THREAD_LIB})
255+
SET(BOOST_WT_RANDOM_LIBRARY ${BOOST_RANDOM_LIB})
227256
SET(BOOST_WT_REGEX_LIBRARY ${BOOST_REGEX_LIB})
228257
SET(BOOST_WT_SIGNALS_LIBRARY ${BOOST_SIGNALS_LIB})
229258
SET(BOOST_WT_SYSTEM_LIBRARY ${BOOST_SYSTEM_LIB})
@@ -232,12 +261,14 @@ IF(BOOST_INCLUDE_DIRS)
232261
ENDIF(NOT BOOST_WT_FOUND
233262
AND MULTI_THREADED
234263
AND BOOST_THREAD_LIB
264+
AND (WT_NO_BOOST_RANDOM OR BOOST_RANDOM_LIB)
235265
AND BOOST_REGEX_LIB
236266
AND BOOST_SIGNALS_LIB
237267
AND BOOST_SYSTEM_LIB
238268
AND BOOST_DT_LIB)
239269

240270
IF(NOT BOOST_WT_FOUND
271+
AND (WT_NO_BOOST_RANDOM OR BOOST_RANDOM_LIB)
241272
AND BOOST_REGEX_LIB
242273
AND BOOST_SIGNALS_LIB
243274
AND BOOST_SYSTEM_LIB
@@ -248,17 +279,20 @@ IF(BOOST_INCLUDE_DIRS)
248279
SET(BOOST_WT_FOUND TRUE)
249280

250281
SET(BOOST_WT_LIBRARIES
282+
${BOOST_RANDOM_LIB}
251283
${BOOST_REGEX_LIB}
252284
${BOOST_SIGNALS_LIB}
253285
${BOOST_SYSTEM_LIB}
254286
${BOOST_DT_LIB})
255287

288+
SET(BOOST_WT_RANDOM_LIBRARY ${BOOST_RANDOM_LIB})
256289
SET(BOOST_WT_REGEX_LIBRARY ${BOOST_REGEX_LIB})
257290
SET(BOOST_WT_SIGNALS_LIBRARY ${BOOST_SIGNALS_LIB})
258291
SET(BOOST_WT_SYSTEM_LIBRARY ${BOOST_SYSTEM_LIB})
259292
SET(BOOST_WT_DT_LIBRARY ${BOOST_DT_LIB})
260293

261294
ENDIF(NOT BOOST_WT_FOUND
295+
AND (WT_NO_BOOST_RANDOM OR BOOST_RANDOM_LIB)
262296
AND BOOST_REGEX_LIB
263297
AND BOOST_SIGNALS_LIB
264298
AND BOOST_SYSTEM_LIB

src/Wt/WPopupMenu

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,11 +289,21 @@ public:
289289
*/
290290
Signal<>& aboutToHide() { return aboutToHide_; }
291291

292+
/*! \brief %Signal emitted when an item is activated.
293+
*
294+
* Passes the activated item as argument. This signal is only emitted
295+
* for the toplevel menu.
296+
*
297+
* \sa WPopupMenuItem::triggered()
298+
*/
299+
Signal<WPopupMenuItem *>& triggered() { return triggered_; }
300+
292301
private:
293302
WTemplate *impl_;
294303
WPopupMenuItem *parentItem_, *result_;
295304

296305
Signal<> aboutToHide_;
306+
Signal<WPopupMenuItem *> triggered_;
297307

298308
boost::signals::connection globalClickConnection_, globalEscapeConnection_;
299309
bool recursiveEventLoop_;

src/Wt/WPopupMenu.C

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ WPopupMenu::WPopupMenu()
2323
parentItem_(0),
2424
result_(0),
2525
aboutToHide_(this),
26+
triggered_(this),
2627
recursiveEventLoop_(false)
2728
{
2829
const char *TEMPLATE =
@@ -143,6 +144,8 @@ void WPopupMenu::done(WPopupMenuItem *result)
143144

144145
recursiveEventLoop_ = false;
145146

147+
triggered_.emit(result_);
148+
146149
aboutToHide_.emit();
147150
}
148151

src/Wt/WPopupMenuItem

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public:
8282
*
8383
* \sa setChecked(), isChecked()
8484
*/
85-
void setCheckable(bool how);
85+
void setCheckable(bool checkable);
8686

8787
/*! \brief Returns whether the item is checkable.
8888
*
@@ -111,7 +111,7 @@ public:
111111
*
112112
* \sa setCheckable(bool), isCheckable()
113113
*/
114-
void setChecked(bool how);
114+
void setChecked(bool checked);
115115

116116
/*! \brief Returns the checked state.
117117
*
@@ -121,6 +121,25 @@ public:
121121
*/
122122
bool isChecked() const;
123123

124+
/*! \brief Sets whether the menu item can be selected.
125+
*
126+
* Only a menu item that can be selected can be the result of a
127+
* popup menu selection.
128+
*
129+
* The default value is \c true for a normal menu item, and \c false
130+
* for a menu item that has a submenu.
131+
*
132+
* An item that is selectable but is disabled can still not be
133+
* selected.
134+
*/
135+
void setSelectable(bool selectable);
136+
137+
/*! \brief Returns whether the menu item can be selected.
138+
*
139+
* \sa setSelectable()
140+
*/
141+
bool isSelectable() const { return selectable_; }
142+
124143
/*! \brief Sets associated additional data with the item.
125144
*/
126145
void setData(void *data) { data_ = data; }
@@ -132,12 +151,19 @@ public:
132151
WCheckBox *checkBox() const { return checkBox_; }
133152

134153
/*! \brief %Signal emitted when an item is activated.
154+
*
155+
* Returns this item as argument.
156+
*
157+
* \sa WPopupMenu::triggered()
135158
*/
136-
Signal<>& triggered() { return triggered_; }
159+
Signal<WPopupMenuItem *>& triggered() { return triggered_; }
137160

138161
virtual void load();
139162
virtual void setDisabled(bool disabled);
140163

164+
protected:
165+
virtual void render(WFlags<RenderFlag> flags);
166+
141167
private:
142168
// Constructs a separator
143169
WPopupMenuItem(bool);
@@ -147,9 +173,9 @@ private:
147173
WCheckBox *checkBox_;
148174
WPopupMenu *subMenu_;
149175
void *data_;
150-
bool separator_;
176+
bool separator_, selectable_;
151177

152-
Signal<> triggered_;
178+
Signal<WPopupMenuItem *> triggered_;
153179

154180
void create();
155181
void renderOver();

0 commit comments

Comments
 (0)