Add wxBITMAP_PNG() macro similar to wxBITMAP() but for PNG images.
Just as wxBITMAP() provides a portable way of loading bitmaps from either
Windows BMP resources or embedded XPM data depending on the platform,
wxBITMAP_PNG() hides the difference between loading bitmaps from PNG resources
under Windows and embedded PNG data elsewhere.
Also add wxBITMAP_PNG_FROM_DATA() macro which always loads PNG data from
memory: it's needed anyhow as part of wxBITMAP_PNG() implementation and some
people may prefer to always use it under all platforms.
Finally modify the image sample to demonstrate loading PNG images from both
resources and memory. This involved creation of a new Windows .rc file for it
and copying its data files to Resources bundle directory under OS X.
Add wxBitmap::NewFromPNGData() for creating bitmaps from PNG data.
This simple function can be used to create a wxBitmap from the raw image data
in PNG format. It is just a thin wrapper around wxImage load functions under
almost all platforms but has two advantages:
1. It can be implemented natively for some platforms (currently only OS X).
2. It can be used in a single expression as it doesn't require creating a
temporary wxMemoryInputStream and this will be required by wxBITMAP_PNG()
macro that will be added soon.
Don't ignore invalid files entered into wxFileDirPickerCtrlBase.
File/directory picker controls with wxFLP_FILE_MUST_EXIST/wxDIRP_DIR_MUST_EXIST
style simply ignored any value entered by user if it didn't correspond to an
existing file/directory. This meant that the program didn't use the value that
was shown on the screen resulting in very confusing UI -- e.g. a program could
complain that no value was entered when actually it was and just corresponded
to a non-existing file.
As we can't prevent the entry of arbitrary strings in the text field of the
file picker control, stop pretending that we can validate it and just update
the control value, and send the corresponding event, whenever the text control
value changes.
Extract "Close" button creation from wxInfoBarGeneric into new function.
Such buttons may be needed in other places and it's not obvious to create
them, so add a new public wxBitmapButton::NewCloseButton() method to allow
creating them easily.
Change wxMSW-specific wxLoadUserResource() to accept standard RT_XXX types.
Resource types can be either strings for custom types or integers casted to a
TCHAR* for the standard ones. Using wxString for the resource type prevented
us from using the latter as any attempt to initialize wxString for such a
pseudo-string resulted in an immediate crash.
Change wxLoadUserResource() resource type parameter type to wxChar* to avoid
this and allow passing standard resource types, such as RT_RCDATE, to this
function directly.
Don't initialize alpha twice when loading wxImage from resources.
Calling InitAlpha() when we already had loaded alpha from the resource data
results in an assert. Fix this by only initializing alpha if don't have it
yet.
Fix setting colours for the edit control part of wxComboBox.
Recognize this control as part of wxComboBox and so handle WM_CTLCOLOR for it.
To do this, override ContainsHWND() in wxComboBox and use it, on the parent
window, in wxControl::DoMSWControlColor(), if we fail to find the window
directly.
Recent changes (r71308) optimizing away setting the text of the text entry if
it didn't really change completely broke the generic text hints implementation
as e.g. clearing the hint didn't change anything because the entry was already
logically empty anyhow.
Fix this by simply comparing the new value with the real value of the entry
returned by DoGetValue() and not GetValue() that takes hints into account.
libnotify 0.4.5 included in Ubuntu Lucid (10.04) can be used for implementing
wxNotificationMessage too, there is only a minor difference with 0.7 API. So
while we stick check for 0.7 initially, accept lower versions too if 0.7 is
not available.
Simplify and correct setting of initial directory for wxFilePickerCtrl.
Create wxFileDialog with correct initial directory and default file name from
the very beginning instead of updating it later. This makes the code simpler
and also actually makes it work as the initial directory setting was
overwritten by setting the default path later even if it didn't contain any
directory component.
Fix wxKeyEvent::GetKeyCode() descripotion: it doesn't depend on locale.
GetKeyCode() will always return valid key codes for Latin-1 symbols but won't
do it for other non-ASCII Unicode characters even if they are representable in
the current locale.
Do not use wxIsprint() in EVT_CHAR example in the documentation.
This is incorrect as wxIsprint() is locale-dependent and only really works as
expected in UTF-8 locales (which are never used under Windows). Instead, just
test for control characters directly.
Don't try to determine the clicked item ourselves in wxMSW wxListBox.
This doesn't work when the listbox is scrolled as the result of a click to
make the selected item fully visible and results in the index of the item
being off by 1 in the generated event which is a pretty serious problem.
Fix it by simply retrieving the item from the listbox itself, without doing
any hit testing. This seems to give the correct result in all cases and also
makes the code much simpler as we don't have to use 2 different ways of
finding the item depending on whether it was selected using the keyboard or
the mouse and makes it unnecessary to keep track of how the selection was done
completely, i.e. reverts r64498 which is not needed any more.
Don't use StringFormat::GenericTypographic() in MSW wxGraphicsContext.
Using this string format results in very condensed strings when using small
fonts. The results of GDI+ font rendering are still pretty bad even without it
but they are at least slightly better.
Use a single global StringFormat in all wxMSW wxGraphicsContext code.
Instead of creating StringFormat in DrawText() and Get[Partial]TextExtent[s],
create it once and simply use it from both functions.
This might be slightly more efficient as we don't waste time recreating it but
the main advantage is that it ensures that these functions use the same string
format and no discrepancies between them are possible.
Output the values of all USE_XXX options to build.cfg file in MSW builds.
USE_RTTI, USE_AUI, USE_PROPGRID, USE_RIBBON, USE_RICHTEXT, USE_STC and USE_XRC
options were not output to the build configuration file, unlike the rest of
them.
Do output those ones as well now for consistency.
Also sort the options corresponding to different wx libraries alphabetically.
Document wxWindow InheritsBackgroundColour() and UseBgCol() methods.
These functions were present in the interface header but didn't have their own
documentation and somehow inherited the documentation of the first function in
the same section which didn't make any sense for them. Do document them now.
Without it, the hidden faces are shown resulting in wrong display of both the
cube and the penguin, at least with Mesa (but it also seems to be the correct
thing to do according to OpenGL documentation).
Václav Slavík [Sat, 8 Sep 2012 08:58:38 +0000 (08:58 +0000)]
Add wxTranslations::GetBestTranslation().
Implement preferred language selection on modern systems (OS X, Windows
Vista+). User settings for locale (aka "regional settings") and UI
language are independent there and the UI language shouldn't be
determined from the locale.
Moreover, the OS provides a list of preferred languages, not a single
value (as with locale), so we should use the best language given user's
preferences and available translations. A Czech user may prefer Slovak
UI over English, for example, and we should use Slovak translation in
absence of Czech one in that case instead of falling back to English.
On Unix, locale is language and so things remain as before.
Notice that calling wxLocale::Init(wxLANGUAGE_DEFAULT) does the right
thing now: it sets the locale to whatever the user has configured in
regional settings and loads translations corresponding to default
wxTranslations language, which is determined as described above.
Previously, UI would be translated using a language corresponding to the
regional settings.
A newer version of XML Tools has been released (2.9.4) which supports OS X 10.6 and later. As such a link to the beta version of 2.9.4 is not needed anymore.
Václav Slavík [Fri, 7 Sep 2012 09:51:10 +0000 (09:51 +0000)]
wxMSW: Fix incorrect subitem rect calculation in wxListCtrl.
HandleSubItemPrepaint() calls wxGetListCtrlSubItemRect() (a thin
replacement of ListView_GetSubItemRect) with subitem argument
corresponding to MSDN documentation: it should be 0 for the whole item
and 1-based for subitems.
Unfortunately, as pointed out in an explanatory comment for
wxGetListCtrlSubItemRect(), MSDN lies and the index actually is 0-based.
The bug causes wxListCtrl's content to be shifted by one column and
rendered with additional artifacts as soon as custom drawing is used,
e.g. when a custom font is used.
This bug was introduced in r55378; the code correctly accounted for this
before that. This change partially reverts that commit.
This macro can be used with 2 arguments (format and argptr) or 3 (the frame
pointer as an additional first argument), so don't define it as taking 2
arguments but as a macro without arguments, as we already do for
wxVLogSysErrorfor the same reasons.
Vadim Zeitlin [Thu, 30 Aug 2012 20:25:46 +0000 (20:25 +0000)]
Fix opening URLs in new window with recent Firefox under Windows.
Don't fail if we can't replace "-1" in the WWW_OpenURL topic value stored in
the registry with "0", it can be already "0" for the recent Firefox versions.
Vadim Zeitlin [Thu, 30 Aug 2012 20:25:24 +0000 (20:25 +0000)]
Explicitly reject the use of wxTE_PASSWORD in generic wxSpinCtrl.
wxTE_PASSWORD has the same value as wxALIGN_CENTRE_VERTICAL which could be
implicitly specified as part of wxALIGN_CENTRE, but should never be used with
wxSpinCtrl, so explicitly filter it out when creating the associated
wxTextCtrl.
Vadim Zeitlin [Thu, 30 Aug 2012 20:25:01 +0000 (20:25 +0000)]
Generate wxEVT_COMMAND_TEXT_ENTER events for generic wxSpinCtrl.
Pass wxTE_PROCESS_ENTER to wxSpinCtrlTextGeneric if it's specified for
wxSpinCtrl itself and also forward wxEVT_COMMAND_TEXT_ENTER events from it to
wxSpinCtrl itself.
This fixes lack of these events for wxSpinCtrlDouble under MSW and also lack
of them for any kind of wxSpinCtrl in the ports using generic version (notably
wxOSX).
Vadim Zeitlin [Thu, 30 Aug 2012 20:24:38 +0000 (20:24 +0000)]
Add wxSpinCtrl::SetBase() to allow entering hexadecimal numbers.
Add a generic SetBase() API even though right now only bases 10 and 16 are
supported as we might support other ones (e.g. 8?) in the future. Implement it
for MSW, GTK and generic versions.
Add controls allowing to test this feature to the widgets sample.
Add "base" property support to the XRC handler for wxSpinCtrl, document it and
test it in the xrc sample.
Vadim Zeitlin [Thu, 30 Aug 2012 20:24:12 +0000 (20:24 +0000)]
Remove wxOSX implementation of wxSpinCtrl and use the generic one.
wxOSX doesn't provide a native spinner+text control so it used a generic
implementation of wxSpinCtrl but a different one to the version found in
src/generic/spinctlg.cpp.
Just use the real generic version instead, it doesn't make sense to have two
different versions of the same generic control.
Vadim Zeitlin [Thu, 30 Aug 2012 20:23:49 +0000 (20:23 +0000)]
Refactor text to/from double conversion in wxSpinCtrlGenericBase.
The code always used ToDouble() and Format("%g") which was a bit strange for
integer-valued wxSpinCtrl. Move the conversions to their own virtual functions
for clarity, perhaps correctness and, especially, flexibility as they will be
overridden in wxSpinCtrl soon.
Also move wxSpinCtrlGenericBase::m_format to wxSpinCtrlDouble as the base
class really doesn't need it at all.
Vadim Zeitlin [Thu, 30 Aug 2012 20:23:03 +0000 (20:23 +0000)]
Fix position carried in wxSpin{Button,Ctrl} events for 32 bit values in wxMSW.
Don't use WM_VSCROLL message parameter as the position because it's a 16 bit
value and is not enough for the spin controls using 32 bit range. Just use the
current value available from the control itself instead.
This fixes assert failures in the spin page of the widgets sample when
changing the value of a control when it is > SHRT_MAX.
Vadim Zeitlin [Thu, 30 Aug 2012 20:22:40 +0000 (20:22 +0000)]
Use wxSOCKET_WAITALL in wxHTTP to ensure that all data is sent.
POST-ing sufficiently big amounts of data in wxHTTP didn't work because it
couldn't be sent all at once to the server. Use wxSOCKET_WAITALL to ensure
that we do send all of the data.
Vadim Zeitlin [Thu, 30 Aug 2012 20:22:17 +0000 (20:22 +0000)]
Fix bugs in parsing wxLongLong values starting with zeroes.
wxCRT_StrtoullBase(), used by wxString::To[U]LongLong(), didn't handle leading
zeroes nor leading 0x correctly: it never auto-detected base 8; didn't ignore
the leading 0 even if base 8 was specified explicitly; didn't recognize "0X"
prefix at all (only "0x").
Fix all these bugs and add test cases for parsing numbers in other bases to
the unit tests.
Vadim Zeitlin [Thu, 30 Aug 2012 20:21:54 +0000 (20:21 +0000)]
Added wxSimplebook class: a wxBookCtrl without controller.
This new control allows the program to show one of the several pages without
allowing the user to change them (or even see that there are several of them)
himself.
This class is fully inline, so it doesn't add anything to the library and
hence doesn't need neither wxUSE_SIMPLEBOOK nor the corresponding configure
option.
Vadim Zeitlin [Thu, 30 Aug 2012 20:21:29 +0000 (20:21 +0000)]
Virtualize showing/hiding the pages in wxBookCtrlBase.
No real changes, just make it possible to change how the pages are hidden and
shown in the derived classes. This is not used by any of them yet, but will be
used by wxSimplebook soon.
Vadim Zeitlin [Thu, 30 Aug 2012 20:19:57 +0000 (20:19 +0000)]
Use wmain() if supported by the compiler/CRT instead of main().
This avoids a needless conversion from (originally Unicode) command line to
ANSI by the CRT and conversion back by wxWidgets and, especially, ensures that
there is no data loss if the Unicode command line arguments can't be converted
into the current charset.
Vadim Zeitlin [Sun, 26 Aug 2012 16:35:02 +0000 (16:35 +0000)]
Avoid crashes when creating initially hidden MDI child under Unity.
Ignore "hide" signals for the menus without associated shown window. Ubuntu
Unity sends them and we crashed because of a recursive assert in the
corresponding signal handler before.
Now the code doesn't crash any more but the menus still don't behave correctly
when the last MDI child is destroyed.
Václav Slavík [Sat, 25 Aug 2012 11:14:44 +0000 (11:14 +0000)]
Make sure wchar_t CRT functions work on OS X.
In OS X and iOS, wchar_t CRT functions convert to char* and fail under
some locales. The safest fix is to set LC_CTYPE to UTF-8 to ensure that
they can handle any input.
Note that this must be done for any app, Cocoa or console, whether or
not it uses wxLocale.
See http://stackoverflow.com/questions/11713745/why-does-the-printf-family-of-functions-care-about-locale