moving forward
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52048 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -69,10 +69,10 @@
|
|||||||
one bitmap for each tool, because the toolbar generates all three images (normal,
|
one bitmap for each tool, because the toolbar generates all three images (normal,
|
||||||
depressed and checked) from the single bitmap you give it.
|
depressed and checked) from the single bitmap you give it.
|
||||||
|
|
||||||
@ref usingtoolbarlibrary
|
@ref overview_usingtoolbarlibrary
|
||||||
|
|
||||||
|
|
||||||
@section usingtoolbarlibrary Using the toolbar library
|
@section overview_usingtoolbarlibrary Using the toolbar library
|
||||||
|
|
||||||
Include @c "wx/toolbar.h", or if using a class directly, one of:
|
Include @c "wx/toolbar.h", or if using a class directly, one of:
|
||||||
|
|
||||||
|
@@ -11,12 +11,14 @@
|
|||||||
@page overview_treectrl wxTreeCtrl overview
|
@page overview_treectrl wxTreeCtrl overview
|
||||||
|
|
||||||
Classes: #wxTreeCtrl, #wxImageList
|
Classes: #wxTreeCtrl, #wxImageList
|
||||||
|
|
||||||
The tree control displays its items in a tree like structure. Each item has its
|
The tree control displays its items in a tree like structure. Each item has its
|
||||||
own (optional) icon and a label. An item may be either collapsed (meaning that
|
own (optional) icon and a label. An item may be either collapsed (meaning that
|
||||||
its children are not visible) or expanded (meaning that its children are
|
its children are not visible) or expanded (meaning that its children are
|
||||||
shown). Each item in the tree is identified by its @e itemId which is of
|
shown). Each item in the tree is identified by its @e itemId which is of
|
||||||
opaque data type @e wxTreeItemId. You can test whether an item is valid
|
opaque data type @e wxTreeItemId. You can test whether an item is valid
|
||||||
by calling wxTreeItemId::IsOk.
|
by calling wxTreeItemId::IsOk.
|
||||||
|
|
||||||
The items text and image may be retrieved and changed with
|
The items text and image may be retrieved and changed with
|
||||||
#GetItemText/#SetItemText
|
#GetItemText/#SetItemText
|
||||||
and
|
and
|
||||||
@@ -25,6 +27,7 @@
|
|||||||
and another one for selected state which is set/retrieved with
|
and another one for selected state which is set/retrieved with
|
||||||
#SetItemSelectedImage/#GetItemSelectedImage
|
#SetItemSelectedImage/#GetItemSelectedImage
|
||||||
functions, but this functionality might be unavailable on some platforms.
|
functions, but this functionality might be unavailable on some platforms.
|
||||||
|
|
||||||
Tree items have several attributes: an item may be selected or not, visible or
|
Tree items have several attributes: an item may be selected or not, visible or
|
||||||
not, bold or not. It may also be expanded or collapsed. All these attributes
|
not, bold or not. It may also be expanded or collapsed. All these attributes
|
||||||
may be retrieved with the corresponding functions:
|
may be retrieved with the corresponding functions:
|
||||||
@@ -34,6 +37,7 @@
|
|||||||
selected, selecting another one (with
|
selected, selecting another one (with
|
||||||
#SelectItem) automatically unselects the
|
#SelectItem) automatically unselects the
|
||||||
previously selected one.
|
previously selected one.
|
||||||
|
|
||||||
In addition to its icon and label, a user-specific data structure may be associated
|
In addition to its icon and label, a user-specific data structure may be associated
|
||||||
with all tree items. If you wish to do it, you should derive a class from @e wxTreeItemData which is a very simple class having only one function @e GetId() which returns the id of the item this data is associated with. This
|
with all tree items. If you wish to do it, you should derive a class from @e wxTreeItemData which is a very simple class having only one function @e GetId() which returns the id of the item this data is associated with. This
|
||||||
data will be freed by the control itself when the associated item is deleted
|
data will be freed by the control itself when the associated item is deleted
|
||||||
@@ -42,6 +46,7 @@
|
|||||||
#SetItemData(@NULL) to prevent the tree from
|
#SetItemData(@NULL) to prevent the tree from
|
||||||
deleting the pointer second time). The associated data may be retrieved with
|
deleting the pointer second time). The associated data may be retrieved with
|
||||||
#GetItemData() function.
|
#GetItemData() function.
|
||||||
|
|
||||||
Working with trees is relatively straightforward if all the items are added to
|
Working with trees is relatively straightforward if all the items are added to
|
||||||
the tree at the moment of its creation. However, for large trees it may be
|
the tree at the moment of its creation. However, for large trees it may be
|
||||||
very inefficient. To improve the performance you may want to delay adding the
|
very inefficient. To improve the performance you may want to delay adding the
|
||||||
@@ -52,6 +57,7 @@
|
|||||||
under the item being expanded should be added, but, of course, only when this
|
under the item being expanded should be added, but, of course, only when this
|
||||||
event is received for the first time for this item - otherwise, the items would
|
event is received for the first time for this item - otherwise, the items would
|
||||||
be added twice if the user expands/collapses/re-expands the branch.
|
be added twice if the user expands/collapses/re-expands the branch.
|
||||||
|
|
||||||
The tree control provides functions for enumerating its items. There are 3
|
The tree control provides functions for enumerating its items. There are 3
|
||||||
groups of enumeration functions: for the children of a given item, for the
|
groups of enumeration functions: for the children of a given item, for the
|
||||||
sibling of the given item and for the visible items (those which are currently
|
sibling of the given item and for the visible items (those which are currently
|
||||||
@@ -64,6 +70,7 @@
|
|||||||
#GetFirstChild and to
|
#GetFirstChild and to
|
||||||
#GetNextChild should be the same variable (and
|
#GetNextChild should be the same variable (and
|
||||||
that nothing should be done with it by the user code).
|
that nothing should be done with it by the user code).
|
||||||
|
|
||||||
Among other features of the tree control are: item sorting with
|
Among other features of the tree control are: item sorting with
|
||||||
#SortChildren which uses the user-defined comparison
|
#SortChildren which uses the user-defined comparison
|
||||||
function #OnCompareItems (by default the
|
function #OnCompareItems (by default the
|
||||||
@@ -72,6 +79,7 @@
|
|||||||
for implementing drag-and-drop in the tree) with
|
for implementing drag-and-drop in the tree) with
|
||||||
#HitTest and editing of the tree item labels in
|
#HitTest and editing of the tree item labels in
|
||||||
place (see #EditLabel).
|
place (see #EditLabel).
|
||||||
|
|
||||||
Finally, the tree control has a keyboard interface: the cursor navigation (arrow) keys
|
Finally, the tree control has a keyboard interface: the cursor navigation (arrow) keys
|
||||||
may be used to change the current selection. HOME and END are used to go to
|
may be used to change the current selection. HOME and END are used to go to
|
||||||
the first/last sibling of the current item. '+', '-' and '*' expand, collapse
|
the first/last sibling of the current item. '+', '-' and '*' expand, collapse
|
||||||
|
@@ -13,15 +13,16 @@
|
|||||||
This section briefly describes the state of the Unicode support in wxWidgets.
|
This section briefly describes the state of the Unicode support in wxWidgets.
|
||||||
Read it if you want to know more about how to write programs able to work with
|
Read it if you want to know more about how to write programs able to work with
|
||||||
characters from languages other than English.
|
characters from languages other than English.
|
||||||
@ref whatisunicode_overview
|
|
||||||
@ref unicodeandansi_overview
|
@li @ref overview_whatisunicode
|
||||||
@ref unicodeinsidewxw_overview
|
@li @ref overview_unicodeandansi
|
||||||
@ref unicodeoutsidewxw_overview
|
@li @ref overview_unicodeinsidewxw
|
||||||
@ref unicodesettings_overview
|
@li @ref overview_unicodeoutsidewxw
|
||||||
@ref topic8_overview
|
@li @ref overview_unicodesettings
|
||||||
|
@li @ref overview_topic8
|
||||||
|
|
||||||
|
|
||||||
@section whatisunicode What is Unicode?
|
@section overview_whatisunicode What is Unicode?
|
||||||
|
|
||||||
wxWidgets has support for compiling in Unicode mode
|
wxWidgets has support for compiling in Unicode mode
|
||||||
on the platforms which support it. Unicode is a standard for character
|
on the platforms which support it. Unicode is a standard for character
|
||||||
@@ -31,10 +32,12 @@
|
|||||||
multilingual plane) and possible 2^32 of them instead of the usual 256 and
|
multilingual plane) and possible 2^32 of them instead of the usual 256 and
|
||||||
is sufficient to encode all of the world languages at once. More details about
|
is sufficient to encode all of the world languages at once. More details about
|
||||||
Unicode may be found at #http://www.unicode.org.
|
Unicode may be found at #http://www.unicode.org.
|
||||||
|
|
||||||
As this solution is obviously preferable to the previous ones (think of
|
As this solution is obviously preferable to the previous ones (think of
|
||||||
incompatible encodings for the same language, locale chaos and so on), many
|
incompatible encodings for the same language, locale chaos and so on), many
|
||||||
modern operating systems support it. The probably first example is Windows NT
|
modern operating systems support it. The probably first example is Windows NT
|
||||||
which uses only Unicode internally since its very first version.
|
which uses only Unicode internally since its very first version.
|
||||||
|
|
||||||
Writing internationalized programs is much easier with Unicode and, as the
|
Writing internationalized programs is much easier with Unicode and, as the
|
||||||
support for it improves, it should become more and more so. Moreover, in the
|
support for it improves, it should become more and more so. Moreover, in the
|
||||||
Windows NT/2000 case, even the program which uses only standard ASCII can profit
|
Windows NT/2000 case, even the program which uses only standard ASCII can profit
|
||||||
@@ -42,20 +45,21 @@
|
|||||||
need for the system to convert all strings the program uses to/from Unicode
|
need for the system to convert all strings the program uses to/from Unicode
|
||||||
each time a system call is made.
|
each time a system call is made.
|
||||||
|
|
||||||
@section unicodeandansi Unicode and ANSI modes
|
@section overview_unicodeandansi Unicode and ANSI modes
|
||||||
|
|
||||||
As not all platforms supported by wxWidgets support Unicode (fully) yet, in
|
As not all platforms supported by wxWidgets support Unicode (fully) yet, in
|
||||||
many cases it is unwise to write a program which can only work in Unicode
|
many cases it is unwise to write a program which can only work in Unicode
|
||||||
environment. A better solution is to write programs in such way that they may
|
environment. A better solution is to write programs in such way that they may
|
||||||
be compiled either in ANSI (traditional) mode or in the Unicode one.
|
be compiled either in ANSI (traditional) mode or in the Unicode one.
|
||||||
|
|
||||||
This can be achieved quite simply by using the means provided by wxWidgets.
|
This can be achieved quite simply by using the means provided by wxWidgets.
|
||||||
Basically, there are only a few things to watch out for:
|
Basically, there are only a few things to watch out for:
|
||||||
|
|
||||||
|
|
||||||
Character type (@c char or @c wchar_t)
|
- Character type (@c char or @c wchar_t)
|
||||||
Literal strings (i.e. @c "Hello, world!" or @c '*')
|
- Literal strings (i.e. @c "Hello, world!" or @c '*')
|
||||||
String functions (@c strlen(), @c strcpy(), ...)
|
- String functions (@c strlen(), @c strcpy(), ...)
|
||||||
Special preprocessor tokens (@c __FILE__, @c __DATE__
|
- Special preprocessor tokens (@c __FILE__, @c __DATE__
|
||||||
and @c __TIME__)
|
and @c __TIME__)
|
||||||
|
|
||||||
|
|
||||||
@@ -63,6 +67,7 @@
|
|||||||
program takes 2 bytes instead of usual one, so another type should be used to
|
program takes 2 bytes instead of usual one, so another type should be used to
|
||||||
store the characters (@c char only holds 1 byte usually). This type is
|
store the characters (@c char only holds 1 byte usually). This type is
|
||||||
called @c wchar_t which stands for @e wide-character type.
|
called @c wchar_t which stands for @e wide-character type.
|
||||||
|
|
||||||
Also, the string and character constants should be encoded using wide
|
Also, the string and character constants should be encoded using wide
|
||||||
characters (@c wchar_t type) which typically take 2 or 4 bytes instead
|
characters (@c wchar_t type) which typically take 2 or 4 bytes instead
|
||||||
of @c char which only takes one. This is achieved by using the standard C
|
of @c char which only takes one. This is achieved by using the standard C
|
||||||
@@ -70,6 +75,7 @@
|
|||||||
becomes a @e long constant, i.e. a wide character one. To make things a bit
|
becomes a @e long constant, i.e. a wide character one. To make things a bit
|
||||||
more readable, you are also allowed to prefix the constant with @c 'L'
|
more readable, you are also allowed to prefix the constant with @c 'L'
|
||||||
instead of putting it after it.
|
instead of putting it after it.
|
||||||
|
|
||||||
Of course, the usual standard C functions don't work with @c wchar_t
|
Of course, the usual standard C functions don't work with @c wchar_t
|
||||||
strings, so another set of functions exists which do the same thing but accept
|
strings, so another set of functions exists which do the same thing but accept
|
||||||
@c wchar_t * instead of @c char *. For example, a function to get the
|
@c wchar_t * instead of @c char *. For example, a function to get the
|
||||||
@@ -77,11 +83,13 @@
|
|||||||
@c strlen() - you see that the only difference is that the "str" prefix
|
@c strlen() - you see that the only difference is that the "str" prefix
|
||||||
standing for "string" has been replaced with "wcs" standing for "wide-character
|
standing for "string" has been replaced with "wcs" standing for "wide-character
|
||||||
string").
|
string").
|
||||||
|
|
||||||
And finally, the standard preprocessor tokens enumerated above expand to ANSI
|
And finally, the standard preprocessor tokens enumerated above expand to ANSI
|
||||||
strings but it is more likely that Unicode strings are wanted in the Unicode
|
strings but it is more likely that Unicode strings are wanted in the Unicode
|
||||||
build. wxWidgets provides the macros @c __TFILE__, @c __TDATE__
|
build. wxWidgets provides the macros @c __TFILE__, @c __TDATE__
|
||||||
and @c __TTIME__ which behave exactly as the standard ones except that
|
and @c __TTIME__ which behave exactly as the standard ones except that
|
||||||
they produce ANSI strings in ANSI build and Unicode ones in the Unicode build.
|
they produce ANSI strings in ANSI build and Unicode ones in the Unicode build.
|
||||||
|
|
||||||
To summarize, here is a brief example of how a program which can be compiled
|
To summarize, here is a brief example of how a program which can be compiled
|
||||||
in both ANSI and Unicode modes could look like:
|
in both ANSI and Unicode modes could look like:
|
||||||
|
|
||||||
@@ -106,7 +114,7 @@
|
|||||||
program would have had!). Luckily, there is another way - see the next
|
program would have had!). Luckily, there is another way - see the next
|
||||||
section.
|
section.
|
||||||
|
|
||||||
@section unicodeinsidewxw Unicode support in wxWidgets
|
@section overview_unicodeinsidewxw Unicode support in wxWidgets
|
||||||
|
|
||||||
In wxWidgets, the code fragment from above should be written instead:
|
In wxWidgets, the code fragment from above should be written instead:
|
||||||
|
|
||||||
@@ -120,33 +128,34 @@
|
|||||||
at all. Instead, we define some types and macros which behave differently in
|
at all. Instead, we define some types and macros which behave differently in
|
||||||
the Unicode and ANSI builds and allow us to avoid using conditional
|
the Unicode and ANSI builds and allow us to avoid using conditional
|
||||||
compilation in the program itself.
|
compilation in the program itself.
|
||||||
|
|
||||||
We have a @c wxChar type which maps either on @c char or @c wchar_t
|
We have a @c wxChar type which maps either on @c char or @c wchar_t
|
||||||
depending on the mode in which program is being compiled. There is no need for
|
depending on the mode in which program is being compiled. There is no need for
|
||||||
a separate type for strings though, because the standard
|
a separate type for strings though, because the standard
|
||||||
#wxString supports Unicode, i.e. it stores either ANSI or
|
#wxString supports Unicode, i.e. it stores either ANSI or
|
||||||
Unicode strings depending on the compile mode.
|
Unicode strings depending on the compile mode.
|
||||||
|
|
||||||
Finally, there is a special #wxT() macro which should enclose all
|
Finally, there is a special #wxT() macro which should enclose all
|
||||||
literal strings in the program. As it is easy to see comparing the last
|
literal strings in the program. As it is easy to see comparing the last
|
||||||
fragment with the one above, this macro expands to nothing in the (usual) ANSI
|
fragment with the one above, this macro expands to nothing in the (usual) ANSI
|
||||||
mode and prefixes @c 'L' to its argument in the Unicode mode.
|
mode and prefixes @c 'L' to its argument in the Unicode mode.
|
||||||
|
|
||||||
The important conclusion is that if you use @c wxChar instead of
|
The important conclusion is that if you use @c wxChar instead of
|
||||||
@c char, avoid using C style strings and use @c wxString instead and
|
@c char, avoid using C style strings and use @c wxString instead and
|
||||||
don't forget to enclose all string literals inside #wxT() macro, your
|
don't forget to enclose all string literals inside #wxT() macro, your
|
||||||
program automatically becomes (almost) Unicode compliant!
|
program automatically becomes (almost) Unicode compliant!
|
||||||
|
|
||||||
Just let us state once again the rules:
|
Just let us state once again the rules:
|
||||||
|
|
||||||
|
- Always use @c wxChar instead of @c char
|
||||||
Always use @c wxChar instead of @c char
|
- Always enclose literal string constants in #wxT() macro
|
||||||
Always enclose literal string constants in #wxT() macro
|
|
||||||
unless they're already converted to the right representation (another standard
|
unless they're already converted to the right representation (another standard
|
||||||
wxWidgets macro #_() does it, for example, so there is no
|
wxWidgets macro #_() does it, for example, so there is no
|
||||||
need for @c wxT() in this case) or you intend to pass the constant directly
|
need for @c wxT() in this case) or you intend to pass the constant directly
|
||||||
to an external function which doesn't accept wide-character strings.
|
to an external function which doesn't accept wide-character strings.
|
||||||
Use @c wxString instead of C style strings.
|
- Use @c wxString instead of C style strings.
|
||||||
|
|
||||||
|
@section overview_unicodeoutsidewxw Unicode and the outside world
|
||||||
|
|
||||||
@section unicodeoutsidewxw Unicode and the outside world
|
|
||||||
|
|
||||||
We have seen that it was easy to write Unicode programs using wxWidgets types
|
We have seen that it was easy to write Unicode programs using wxWidgets types
|
||||||
and macros, but it has been also mentioned that it isn't quite enough.
|
and macros, but it has been also mentioned that it isn't quite enough.
|
||||||
@@ -155,6 +164,7 @@
|
|||||||
ANSI strings (a notable exception is the entire Win32 API which accepts either
|
ANSI strings (a notable exception is the entire Win32 API which accepts either
|
||||||
Unicode or ANSI strings and which thus makes it unnecessary to ever perform
|
Unicode or ANSI strings and which thus makes it unnecessary to ever perform
|
||||||
any conversions in the program). GTK 2.0 only accepts UTF-8 strings.
|
any conversions in the program). GTK 2.0 only accepts UTF-8 strings.
|
||||||
|
|
||||||
To get an ANSI string from a wxString, you may use the
|
To get an ANSI string from a wxString, you may use the
|
||||||
mb_str() function which always returns an ANSI
|
mb_str() function which always returns an ANSI
|
||||||
string (independently of the mode - while the usual
|
string (independently of the mode - while the usual
|
||||||
@@ -162,6 +172,7 @@
|
|||||||
representation which is either ASCII or Unicode). More rarely used, but still
|
representation which is either ASCII or Unicode). More rarely used, but still
|
||||||
useful, is wc_str() function which always returns
|
useful, is wc_str() function which always returns
|
||||||
the Unicode string.
|
the Unicode string.
|
||||||
|
|
||||||
Sometimes it is also necessary to go from ANSI strings to wxStrings.
|
Sometimes it is also necessary to go from ANSI strings to wxStrings.
|
||||||
In this case, you can use the converter-constructor, as follows:
|
In this case, you can use the converter-constructor, as follows:
|
||||||
|
|
||||||
@@ -173,26 +184,26 @@
|
|||||||
|
|
||||||
This code also compiles fine under a non-Unicode build of wxWidgets,
|
This code also compiles fine under a non-Unicode build of wxWidgets,
|
||||||
but in that case the converter is ignored.
|
but in that case the converter is ignored.
|
||||||
For more information about converters and Unicode see
|
|
||||||
the @ref mbconvclasses_overview.
|
|
||||||
|
|
||||||
@section unicodesettings Unicode-related compilation settings
|
For more information about converters and Unicode see
|
||||||
|
the @ref overview_mbconvclasses.
|
||||||
|
|
||||||
|
@section overview_unicodesettings Unicode-related compilation settings
|
||||||
|
|
||||||
You should define @c wxUSE_UNICODE to 1 to compile your program in
|
You should define @c wxUSE_UNICODE to 1 to compile your program in
|
||||||
Unicode mode. This currently works for wxMSW, wxGTK, wxMac and wxX11. If you
|
Unicode mode. This currently works for wxMSW, wxGTK, wxMac and wxX11. If you
|
||||||
compile your program in ANSI mode you can still define @c wxUSE_WCHAR_T
|
compile your program in ANSI mode you can still define @c wxUSE_WCHAR_T
|
||||||
to get some limited support for @c wchar_t type.
|
to get some limited support for @c wchar_t type.
|
||||||
|
|
||||||
This will allow your program to perform conversions between Unicode strings and
|
This will allow your program to perform conversions between Unicode strings and
|
||||||
ANSI ones (using @ref mbconvclasses_overview)
|
ANSI ones (using @ref overview_mbconvclasses)
|
||||||
and construct wxString objects from Unicode strings (presumably read
|
and construct wxString objects from Unicode strings (presumably read
|
||||||
from some external file or elsewhere).
|
from some external file or elsewhere).
|
||||||
|
|
||||||
@section topic8 Traps for the unwary
|
@section overview_topic8 Traps for the unwary
|
||||||
|
|
||||||
|
- Casting c_str() to void* is now char*, not wxChar*
|
||||||
|
- Passing c_str(), mb_str() or wc_str() to variadic functions
|
||||||
Casting c_str() to void* is now char*, not wxChar*
|
|
||||||
Passing c_str(), mb_str() or wc_str() to variadic functions
|
|
||||||
doesn't work
|
doesn't work
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user