]> git.saurik.com Git - wxWidgets.git/blame - docs/doxygen/overviews/windowids.h
compilation fix for pch-less build
[wxWidgets.git] / docs / doxygen / overviews / windowids.h
CommitLineData
15b6757b
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: windowids
3// Purpose: topic overview
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
9/*!
36c9828f 10
75b31b23 11 @page overview_windowids Window IDs overview
36c9828f 12
984daa2a 13 @seealso
15b6757b
FM
14 #wxIdManager
15 wxWindow::NewControlId
16 wxWindow::UnreserveControlId
36c9828f 17
984daa2a
SC
18 @li @ref introduction
19 @li @ref overview_windowidstypes
20 @li @ref overview_windowidsusing
36c9828f 21
984daa2a
SC
22
23 @section introduction Introduction
36c9828f 24
15b6757b
FM
25 Various contols and other parts of wxWidgets need an ID. Sometimes the
26 ID may be directly provided by the use or have a predefined value, such as
27 @c wxID_OPEN. Often, however, the value of the ID is unimportant and is
36c9828f 28 created automatically by calling wxWindow::NewControlId
15b6757b 29 or by passing @c wxID_ANY as the ID of an object.
984daa2a 30
15b6757b
FM
31 There are two ways to generate an ID. One way, is to start at a negative number,
32 and for each new ID, return the next smallest number. This is fine for systems
33 that can used the full range of negative numbers for an ID, as this provides
34 more than enough IDs and it would take a very very long time to run out and
35 wrap around. However, some systems can not use the full range of the ID value.
36 Windows, for example, can only use 16 bit IDs, and only has about 32000 possible
37 automatic IDs that can be generated by wxWindow::NewControlId.
38 If the program runs long enough, depending on the program itself, using this first
39 method would cause the IDs to wrap around into the positive ID range and cause possible
40 clashes with any directly specified ID values.
984daa2a 41
15b6757b
FM
42 The other way is to keep track of the IDs returned by wxWindow::NewControlId
43 and don't return them again until the ID is completely free and not being used by
44 any other objects. This will make sure that the ID values do not clash with one
45 another. This is accomplished by keeping a reference count for each of the IDs
46 that can possibly be returned by wxWindow::NewControlId.
47 Other IDs are not reference counted.
36c9828f 48
984daa2a 49 @section overview_windowidstypes Data types
36c9828f 50
15b6757b
FM
51 A wxWindowID is just the integer type for a window ID. It should be used almost
52 everywhere. To help keep track of the count for the automatically generated IDs,
53 a new type, wxWindowIDRef exists, that can take the place of wxWindowID where needed.
54 When an ID is first created, it is marked as reserved. When assigning it to a
55 wxWindowIDRef, the usage count of the ID is increased, or set to 1 if it is currently
56 reserved. Assigning the same ID to several wxWindowIDRefs will keep track of the count.
57 As the wxWindowIDRef gets destroyed or its value changes, it will decrease the count
58 of the used ID. When there are no more wxWindowIDRef types with the created ID, the
59 ID is considered free and can then be used again by wxWindow::NewControlId.
984daa2a 60
15b6757b
FM
61 If a created ID is not assigned to a wxWindowIDRef, then it remains reserved until it
62 is unreserved manually with wxWindow::UnreserveControlId.
63 However, if it is assigned to a wxWindowIDRef, then it will be unreserved automatically
64 and will be considered free when the count is 0, and should NOT be manually unreserved.
984daa2a 65
15b6757b
FM
66 wxWindowIDRef can store both automatic IDs from wxWindow::NewControlId
67 as well as normal IDs. Reference counting is only done for the automatic IDs. Also,
68 wxWindowIDRef has conversion operators that allow it to be treated just like a wxWindowID.
36c9828f 69
984daa2a 70 @section overview_windowidsusing Using wxWindowIDRef
36c9828f 71
15b6757b
FM
72 A wxWindowIDRef should be used in place of a wxWindowID where you want to make sure the
73 ID is not created again by wxWindow::NewControlId
74 at least until the wxWindowIDRef is destroyed, usually when the associated object is destroyed.
75 This is done already for windows, menu items, and tool bar items.
76 It should only be used in the main thread, as it is not thread safe.
36c9828f 77
15b6757b 78 */
36c9828f
FM
79
80