]>
Commit | Line | Data |
---|---|---|
1 | ------------------------------------------------------------------------------- | |
2 | wxWidgets Change Log | |
3 | ------------------------------------------------------------------------------- | |
4 | ||
5 | INCOMPATIBLE CHANGES SINCE 2.8.x | |
6 | ================================ | |
7 | ||
8 | ||
9 | Notice that these changes are described in more details in | |
10 | the "Changes Since wxWidgets 2.8" section of the manual, | |
11 | please read it if the explanation here is too cryptic. | |
12 | ||
13 | ||
14 | Unicode-related changes | |
15 | ----------------------- | |
16 | ||
17 | The biggest changes in wxWidgets 3.0 are the changes due to the merge of the | |
18 | old ANSI and Unicode build modes in a single build. See the Unicode overview | |
19 | in the manual for more details but here are the most important incompatible | |
20 | changes: | |
21 | ||
22 | - Many wxWidgets functions taking "const wxChar *" have been changed to take | |
23 | either "const wxString&" (so that they accept both Unicode and ANSI strings; | |
24 | the argument can't be NULL anymore in this case) or "const char *" (if the | |
25 | strings are always ANSI; may still be NULL). This change is normally | |
26 | backwards compatible except: | |
27 | ||
28 | a) Virtual functions: derived classes versions must be modified to take | |
29 | "const wxString&" as well to make sure that they continue to override the | |
30 | base class version. | |
31 | ||
32 | b) Passing NULL as argument: as NULL can't be unambiguously converted to | |
33 | wxString, in many cases code using it won't compile any more and NULL | |
34 | should be replaced with an empty string. | |
35 | ||
36 | - Functions returning "const wxChar *" were changed as well. Mostly they now | |
37 | return wxString which is then transparently convertible to either "const char | |
38 | *" or "const wchar_t *" but in some cases, notably wxDateTime::ParseXXX(), | |
39 | the returned string could be NULL and so a separate helper class is used. If | |
40 | you obtain compilation errors because of this, you can always correct them by | |
41 | explicitly assigning the function return value to a variable of wanted type. | |
42 | A slightly more intrusive but better solution is to use ParseXXX() version | |
43 | with wxString::const_iterator output parameter which simply returns bool to | |
44 | indicate the parsing success. | |
45 | ||
46 | - Some structure fields which used to be of type "const wxChar *" (such as | |
47 | wxCmdLineEntryDesc::shortName, longName and description fields) are now of | |
48 | type "const char *", you need to remove wxT() or _T() around the values used | |
49 | to initialize them (which should normally always be ASCII). | |
50 | ||
51 | - wxIPC classes didn't work correctly in Unicode build before, this was fixed | |
52 | but at a price of breaking backwards compatibility: many methods which used | |
53 | to work with "wxChar *" before use "void *" now (some int parameters were | |
54 | also changed to size_t). While wxIPC_TEXT can still be used to transfer 7 | |
55 | bit text, the new wxIPC_UTF8TEXT format is used for transferring wxStrings. | |
56 | Also notice that connection classes should change the parameter types of | |
57 | their overridden OnExecute() or override a more convenient OnExec() instead. | |
58 | ||
59 | ||
60 | wxODBC and contrib libraries removal | |
61 | ------------------------------------ | |
62 | ||
63 | wxODBC library was unmaintained since several years and we couldn't continue | |
64 | supporting it any longer so it was removed. Please use any of the other open | |
65 | source ODBC libraries in the future projects. | |
66 | ||
67 | Also the "applet", "deprecated", "fl", "mmedia" and "plot" contrib libraries | |
68 | were removed as they were unmaintained and broken since several years. | |
69 | The "gizmos", "ogl", "net" and "foldbar" contribs have been moved to | |
70 | wxCode (see http://wxcode.sourceforge.net/complist.php); they are now | |
71 | open for futher development by volunteers. | |
72 | ||
73 | The "stc" and "svg" contribs instead have been moved respectively into a new | |
74 | "official" library stc and in the core lib. | |
75 | ||
76 | ||
77 | Changes in behaviour not resulting in compilation errors, please read this! | |
78 | --------------------------------------------------------------------------- | |
79 | ||
80 | - Default location of wxFileConfig files has changed under Windows, you will | |
81 | need to update your code if you access these files directly. | |
82 | ||
83 | - wxWindow::IsEnabled() now returns false if a window parent (and not | |
84 | necessarily the window itself) is disabled, new function IsThisEnabled() | |
85 | with the same behaviour as old IsEnabled() was added. | |
86 | ||
87 | - Generating wxNavigationKeyEvent events doesn't work any more under wxGTK (and | |
88 | other platforms in the future), use wxWindow::Navigate() or NavigateIn() | |
89 | instead. | |
90 | ||
91 | - Sizers distribute only the extra space between the stretchable items | |
92 | according to their proportions and not all available space. We believe the | |
93 | new behaviour corresponds better to user expectations but if you did rely | |
94 | on the old behaviour you will have to update your code to set the minimal | |
95 | sizes of the sizer items to be in the same proportion as the items | |
96 | proportions to return to the old behaviour. | |
97 | ||
98 | - wxWindow::Freeze/Thaw() are not virtual any more, if you overrode them in | |
99 | your code you need to override DoFreeze/Thaw() instead now. | |
100 | ||
101 | - wxCalendarCtrl has native implementation in wxGTK, but it has less features | |
102 | than the generic one. The native implementation is used by default, but you | |
103 | can still use wxGenericCalendarCtrl instead of wxCalendarCtrl in your code if | |
104 | you need the extra features. | |
105 | ||
106 | - wxDocument::FileHistoryLoad() and wxFileHistory::Load() now take const | |
107 | reference to wxConfigBase argument and not just a reference, please update | |
108 | your code if you overrode these functions and change the functions in the | |
109 | derived classes to use const reference as well. | |
110 | ||
111 | - Under MSW wxExecute() arguments are now always properly quoted, as under | |
112 | Unix, and so shouldn't contain quotes unless they are part of the argument. | |
113 | ||
114 | - wxDocument::OnNewDocument() doesn't call OnCloseDocument() any more. | |
115 | ||
116 | - If you use wxScrolledWindow::SetTargetWindow() you must implement its | |
117 | GetSizeAvailableForScrollTarget() method, please see its documentation for | |
118 | more details. | |
119 | ||
120 | - Processing of pending events now requires a running event loop. | |
121 | Thus initialization code (e.g. showing a dialog) previously done in wxApp::OnRun() | |
122 | or equivalent function should now be done into wxApp::OnEventLoopEnter(). | |
123 | See wxApp::OnEventLoopEnter() and wxApp::OnEventLoopExit() docs for more info. | |
124 | ||
125 | - wxLoadFileSelector() now allows the user to select existing files only. | |
126 | ||
127 | - Erase background events are now not generated at all when background style is | |
128 | changed. See the updated wxWindow::SetBackgroundStyle() description in the | |
129 | manual for more details. | |
130 | ||
131 | ||
132 | Changes in behaviour which may result in compilation errors | |
133 | ----------------------------------------------------------- | |
134 | ||
135 | - WXWIN_COMPATIBILITY_2_4 doesn't exist any more, please update your code if | |
136 | you still relied on features deprecated since version 2.4 | |
137 | ||
138 | - wxDC classes hierarchy has changed, if you derived any classes from wxDC you | |
139 | need to review them as wxDC doesn't have any virtual methods any longer and | |
140 | uses delegation instead of inheritance to present different behaviours. | |
141 | ||
142 | - wxWindow::ProcessEvent() (and other wxEvtHandler methods inherited by wxWindow) | |
143 | has been made protected to prevent wrongly using it instead of correct | |
144 | GetEventHandler()->ProcessEvent(). | |
145 | New ProcessWindowEvent() was added for convenience. | |
146 | ||
147 | - Return type of wxString::operator[] and wxString::iterator::operator* is no | |
148 | longer wxChar (i.e. char or wchar_t), but wxUniChar. This is not a problem | |
149 | in vast majority of cases because of conversion operators, but it can break | |
150 | code that depends on the result being wxChar. | |
151 | ||
152 | - The value returned by wxString::c_str() cannot be casted to non-const char* | |
153 | or wchar_t* anymore. The solution is to use newly added wxString methods | |
154 | char_str() (which returns a buffer convertible to char*) or wchar_str() | |
155 | (which returns a buffer convertible to wchar_t*). These methods are | |
156 | available in wxWidgets 2.8 series beginning with 2.8.4 as well. | |
157 | ||
158 | - The value returned by wxString::operator[] or wxString::iterator cannot be | |
159 | used in switch statements anymore, because it's a class instance. Code like | |
160 | this won't compile: | |
161 | switch (str[i]) { ... } | |
162 | and has to be replaced with this: | |
163 | switch (str[i].GetValue()) { ... } | |
164 | ||
165 | - Return type of wxString::c_str() is now a helper wxCStrData struct and not | |
166 | const wxChar*. wxCStrData is implicitly convertible to both "const char *" | |
167 | and "const wchar_t *", so this only presents a problem if the compiler cannot | |
168 | apply the conversion. This can happen in 2 cases: | |
169 | ||
170 | + There is an ambiguity because the function being called is overloaded to | |
171 | take both "const char *" and "const wchar_t *" as the compiler can't choose | |
172 | between them. In this case you may use s.wx_str() to call the function | |
173 | matching the current build (Unicode or not) or s.mb_str() or s.wc_str() to | |
174 | explicitly select narrow or wide version of it. | |
175 | ||
176 | Notice that such functions are normally not very common but unfortunately | |
177 | Microsoft decided to extend their STL with standard-incompatible overloads | |
178 | of some functions accepting "const wchar_t *" so you may need to replace | |
179 | some occurrences of c_str() with wx_str() when using MSVC 8 or later. | |
180 | ||
181 | + Some compilers, notably Borland C++ and DigitalMars, don't correctly | |
182 | convert operator?: operands to the same type and fail with compilation | |
183 | error instead. This can be worked around by explicitly casting to const | |
184 | wxChar*: wxLogError(_("error: %s"), !err.empty() ? (const wxChar*)err.c_str() : "") | |
185 | ||
186 | - wxCtime() and wxAsctime() return char*; this is incompatible with Unicode | |
187 | build in wxWidgets 2.8 that returned wchar_t*. | |
188 | ||
189 | - DigitalMars compiler has a bug that prevents it from using | |
190 | wxUniChar::operator bool in conditions and it erroneously reports type | |
191 | conversion ambiguity in expressions such as this: | |
192 | for ( wxString::const_iterator p = s.begin(); *p; ++p ) | |
193 | This can be worked around by explicitly casting to bool: | |
194 | for ( wxString::const_iterator p = s.begin(); (bool)*p; ++p ) | |
195 | ||
196 | - Virtual wxHtmlParser::AddText() takes wxString, not wxChar*, argument now. | |
197 | ||
198 | - Functions that took wxChar* arguments that could by NULL in wxWidgets 2.8 | |
199 | are deprecated and passing NULL to them won't compile anymore, wxEmptyString | |
200 | must be used instead. | |
201 | ||
202 | - wxTmemxxx() functions take either wxChar* or char*, not void*: use memxxx() | |
203 | with void pointers. | |
204 | ||
205 | - Removed insecure wxGets() and wxTmpnam() functions. | |
206 | ||
207 | - Removed global GetLine() function from wx/protocol/protocol.h, use | |
208 | wxProtocol::ReadLine() instead. | |
209 | ||
210 | - wxVariant no longer derives from wxObject. wxVariantData also no longer | |
211 | derives from wxObject; instead of using wxDynamicCast with wxVariantData you | |
212 | can use the macro wxDynamicCastVariantData with the same arguments. | |
213 | ||
214 | - wxWindow::Next/PrevControlId() don't exist any more as they couldn't be | |
215 | implemented correctly any longer because automatically generated ids are not | |
216 | necessarily allocated consecutively now. Use GetChildren() to find the | |
217 | next/previous control sibling instead. | |
218 | ||
219 | - Calling wxConfig::Write() with an enum value will fail to compile because | |
220 | wxConfig now tries to convert all unknown types to wxString automatically. | |
221 | The simplest solution is to cast the enum value to int. | |
222 | ||
223 | - Several wxImage methods which previously had "long bitmaptype" parameters | |
224 | have been changed to accept "wxBitmapType bitmaptype", please use enum | |
225 | wxBitmapType in your code. | |
226 | ||
227 | - wxGridCellEditor::EndEdit() signature has changed and it was split in two | |
228 | functions, one still called EndEdit() and ApplyEdit(). See the documentation | |
229 | of the new functions for more details about how grid editors should be | |
230 | written now. | |
231 | ||
232 | - wxEVT_GRID_CELL_CHANGE event renamed to wxEVT_GRID_CELL_CHANGED and shouldn't | |
233 | be vetoed any more, use the new wxEVT_GRID_CELL_CHANGING event to do it. | |
234 | ||
235 | - wxListCtrlCompare function used with wxListCtrl::SortItems() must now declare | |
236 | its third parameter as wxIntPtr and not long (this allows passing pointers | |
237 | to it under 64 bit platforms too). | |
238 | ||
239 | - Global wxPendingEvents and wxPendingEventsLocker objects were removed. | |
240 | You may use wxEventLoopBase::SuspendProcessingOfPendingEvents instead of | |
241 | locking wxPendingEventsLocker now. | |
242 | ||
243 | - wxBitmapButton::GetBitmapXXX() overloads returning non-const wxBitmap | |
244 | references have been removed, modifying the returned bitmaps never worked and | |
245 | now results in compile-time error. | |
246 | ||
247 | ||
248 | Deprecated methods and their replacements | |
249 | ----------------------------------------- | |
250 | ||
251 | - wxCreateGreyedImage() deprecated, use wxImage::ConvertToGreyscale() instead. | |
252 | - wxString::GetWriteBuf() and UngetWriteBuf() deprecated, using wxStringBuffer | |
253 | or wxStringBufferLength instead. | |
254 | - wxDIRCTRL_SHOW_FILTERS style is deprecated, filters are alwsys shown if | |
255 | specified so this style should simply be removed | |
256 | - wxDocManager::MakeDefaultName() replaced by MakeNewDocumentName() and | |
257 | wxDocument::GetPrintableName() with GetUserReadableName() which are simpler | |
258 | to use | |
259 | - wxXmlProperty class was renamed to wxXmlAttribute in order to use standard | |
260 | terminology. Corresponding wxXmlNode methods were renamed to use | |
261 | "Attribute" instead of "Property" or "Prop" in their names. | |
262 | - wxConnection::OnExecute() is not formally deprecated yet but new code should | |
263 | use simpler OnExec() version which is called with wxString argument | |
264 | - Various wxMenuItem methods were deprecated in favour of more consisently | |
265 | named new versions: | |
266 | . GetLabel() is now GetItemLabelText() | |
267 | . GetText() is not GetItemLabel() | |
268 | . GetLabelFromText() is now GetLabelText() | |
269 | . SetText() is now SetItemLabel() | |
270 | - wxBrush's, wxPen's SetStyle() and GetStyle() as well as the wxBrush/wxPen | |
271 | ctor now take respectively a wxBrushStyle and a wxPenStyle value instead of a | |
272 | plain "int style"; use the new wxBrush/wxPen style names (wxBRUSHSTYLE_XXX | |
273 | and wxPENSTYLE_XXX) instead of the old deprecated wxXXX styles. | |
274 | - EVT_GRID_CELL_CHANGE was deprecated, use EVT_GRID_CELL_CHANGED instead if you | |
275 | don't veto the event in its handler and EVT_GRID_CELL_CHANGING if you do. | |
276 | - EVT_CALENDAR_DAY event has been deprecated, use EVT_CALENDAR_SEL_CHANGED. | |
277 | - EVT_CALENDAR_MONTH and EVT_CALENDAR_YEAR events are deprecated, | |
278 | use EVT_CALENDAR_PAGE_CHANGED which replaces both of them. | |
279 | - wxCalendarCtrl::EnableYearChange() and wxCAL_NO_YEAR_CHANGE are deprecated. | |
280 | There is no replacement for this functionality, it is being dropped as it is | |
281 | not available in native wxCalendarCtrl implementations. | |
282 | - wxDC::SetClippingRegion(const wxRegion&) overload is deprecated as it used | |
283 | different convention from the other SetClippingRegion() overloads: wxRegion | |
284 | passed to it was interpreted in physical, not logical, coordinates. Replace | |
285 | it with SetDeviceClippingRegion() if this was the correct thing to do in your | |
286 | code. | |
287 | - wxTE_AUTO_SCROLL style is deprecated as it's always on by default anyhow. | |
288 | - wxThreadHelper::Create() has been renamed to CreateThread which has a better | |
289 | name for a mix-in class, and allows setting the thread type. | |
290 | - wxDos2UnixFilename, wxUnix2DosFilename, wxStripExtension, wxGetTempFileName, | |
291 | wxExpandPath, wxContractPath, wxRealPath, wxCopyAbsolutePath, wxSplitPath | |
292 | were deprecated in favour of wxFileName methods. See docs for more info. | |
293 | - wxEvtHandler::TryValidator/Parent() are deprecated, override the new and | |
294 | documented TryBefore/After() methods if you used to override these ones. | |
295 | - wxGetMultipleChoices() is deprecated, use wxGetSelectedChoices() which has | |
296 | the same signature but returns -1 and not 0 if the dialog was cancelled. | |
297 | - building the windows which are placed inside wxStaticBoxes as siblings of the | |
298 | wxStaticBox is still allowed but it's deprecated as it gives some problems | |
299 | on some ports (e.g. wxGTK). | |
300 | You should now create windows placed inside a wxStaticBox as children of | |
301 | the static box itself. | |
302 | - wxMouseState::{Left,Middle,Right}Down() were renamed to XXXIsDown() for | |
303 | consistency with wxMouseEvent and the old names were deprecated. | |
304 | ||
305 | ||
306 | Major new features in this release | |
307 | ---------------------------------- | |
308 | ||
309 | - wxWidgets is now always built with Unicode support but provides the same | |
310 | simple (i.e. "char *"-tolerant) API as was available in ANSI build in the | |
311 | past. | |
312 | ||
313 | - wxWidgets may now use either wchar_t (UTF-16/32) or UTF-8 internally, | |
314 | depending on what is optimal for the target platform. | |
315 | ||
316 | - New propgrid library containing wxPropertyGrid and related classes. | |
317 | ||
318 | - Many enhancements to wxDataViewCtrl. | |
319 | ||
320 | - Event loops, timers and sockets can now be used in wxBase, without GUI. | |
321 | ||
322 | - Events can now be connected to any functor, not necessarily a method of | |
323 | wxEvtHandler-derived class. The compile-time safety was also improved. | |
324 | ||
325 | - Documentation for wxWidgets has been converted from LaTex to C++ headers | |
326 | with Doxygen comments and significantly improved in the process (screenshots | |
327 | of various controls were added, more identifiers are now linked to their | |
328 | definition &c). Any reports about inaccuracies in the documentation are | |
329 | welcome (and due to using the simple Doxygen syntax it is now easier than | |
330 | ever to submit patches correcting them! :-) | |
331 | ||
332 | - Support for persistent objects automatically saving and restoring their state | |
333 | was added. | |
334 | ||
335 | ||
336 | 2.9.1: | |
337 | ------ | |
338 | ||
339 | All: | |
340 | ||
341 | - Added wxStd{Input,Output}Stream classes (Jonathan Liu). | |
342 | - Include port number in host header in wxHTTP (Marcin 'Malcom' Malich). | |
343 | - Added wxTempFile::Flush(). | |
344 | - Added support for wxLongLong and wxULongLong in wxVariant. | |
345 | ||
346 | All (GUI): | |
347 | ||
348 | - wxWindow::SetAutoLayout() now works for all windows, not just panels. | |
349 | Content-type: text/html ]>