mention the problem with writing enums to wxConfig (see #8656)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53843 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2008-05-30 13:49:12 +00:00
parent 5cfbef2a69
commit 500b128d0e
2 changed files with 49 additions and 0 deletions

View File

@ -5,6 +5,12 @@
INCOMPATIBLE CHANGES SINCE 2.8.x
================================
Notice that these changes are described in more details in
the "Changes Since wxWidgets 2.8" section of the manual,
please read it if the explanation here is too cryptic.
Unicode-related changes
-----------------------
@ -176,6 +182,9 @@ Changes in behaviour which may result in compilation errors
necessarily allocated consecutively any more. Use GetChildren() to find the
next/previous control sibling instead.
- Calling wxConfig::Write() with an enum value will fail to compile because
wxConfig now tries to convert all unknown types to wxString automatically.
The simplest solution is to cast the enum value to int.
Deprecated methods and their replacements
-----------------------------------------

View File

@ -109,5 +109,45 @@ Finally, a few structure fields, notable @c wxCmdLineEntryDesc::shortName,
your code if you overrode these functions and change the functions in the
derived classes to use const reference as well.
- Calling wxConfig::Write() with an enum value will fail to compile because
wxConfig now tries to convert all unknown types to wxString automatically
using wxToString() function.
The simplest solution is to cast the enum value to int, e.g.
@code
enum Colour { Red, Green, Blue };
wxConfig conf;
conf.Write("MyFavouriteColour", Red); // ERROR: no match
conf.Write("MyFavouriteColour", int(Red)); // OK
@endcode
Another possibility which exists now is to provide an overload of
wxToString() (and wxFromString()) for your own type, e.g.
@code
wxString wxToString(Colour col)
{
return col == Red ? "R" : col == Green ? "G" : "B";
}
bool wxFromString(const wxString& s, Colour* col)
{
if ( s.length() != 1 )
return false;
switch ( s[0].GetValue() )
{
case 'R': *col = Red; return true;
case 'G': *col = Green; return true;
case 'B': *col = Blue; return true;
}
return false;
}
@endcode
Of course, this will change the format of the wxConfig output which may be
undesirable.
*/