Tightened icon and cursor file detection heuristics.
When loading a TGA file that has an image type of uncompressed true colour it would be falsely detected as a cursor file and as an icon file if type is of uncompressed colour mapped. Lower the chance of this happening by also checking the remaining member of an ICO and CUR header which represents the number of images in the file. This member has to be non-zero (checked against all found ICO and CUR files in an XP installation).
Supports saving 24-bit and 32-bit (RGB with alpha).
Updated image unit test to verify the alpha channel of saved TGA images. Also removed a condition skipping a test which only was in place for TGA (formerly its saving handler would do nothing yet say saving was succesful).
Expanded existing image saving test to also verify alpha content of saved images.
Compare the alpha data of saved images (where applicable, currently for PNG only) to a generated alpha channel. Refactored most of ImageTestCase.CompareSavedImage into (static) function CompareImage to easily compare with a 24-bit image and then a 32-bit one.
Added some simple unit tests for verifying pixel content of loaded and saved images.
Compare the data of loaded images in different formats against a reference image (one for 8-bit images, another for 24-bit). Do the same for images saved using SaveFile. Excluded some formats because they are either lossy or don't pass the test right now.
Updated manual regarding image alpha support for BMP, PNG, and TIFF handlers.
For PNG it was mentioned only loading supports alpha, but alpha saving support has been available since r32414. Similarly there was no mention of alpha loading support for TIFF (supported since r47204) as well as BMP (since r54942).
Vadim Zeitlin [Sun, 26 Dec 2010 16:29:22 +0000 (16:29 +0000)]
Increase wxStaticText height in wxMSW to align its text with wxTextCtrl.
The base lines of the text in wxTextCtrl and wxStaticText which were
themselves vertically aligned didn't align, the text in the latter was one
pixel too low. This seems to be happening because we don't give enough
vertical space to the native static control by default and so, while the text
wasn't truncated, it was positioned differently than usual.
Work around this problem by allocating two extra pixels to wxStaticText
height. While the exact explanation of the problem remains mysterious, this
hack does result in correct appearance which seems to be sufficiently
important to apply it.
Vadim Zeitlin [Sat, 25 Dec 2010 14:18:58 +0000 (14:18 +0000)]
Test for wcsftime() in configure as it's not available everywhere.
Contrary to the comment in wx/wxcrtbase.h, wcsftime() doesn't seem to be
available under quite all the systems, notably it doesn't seem to be present
in OpenBSD at all, even in the very latest version.
Add a configure test for this function and fall back to our own implementation
if the system doesn't have it.
Vadim Zeitlin [Sat, 25 Dec 2010 14:18:50 +0000 (14:18 +0000)]
Give an error from configure if wchar_t is not available.
wxWidgets 2.9 doesn't support building without wchar_t any more so always
define wxUSE_WCHAR_T and give an error from configure if wchar_t is really not
available.
Vadim Zeitlin [Sat, 25 Dec 2010 13:46:29 +0000 (13:46 +0000)]
Make the margin between wxSpinCtrlGeneric sub-windows compatible with MSW.
Native MSW wxSpinCtrl uses a single pixel margin between the text part and the
spin button while the generic version used 2 pixels which resulted in a
slightly different appearance (see #12767).
Use the same margin as MSW now in the generic version too, it should be fine
for the other platforms as well and if it isn't we can always tweak them
later.
Vadim Zeitlin [Sat, 25 Dec 2010 13:46:23 +0000 (13:46 +0000)]
Correct bug in the wxSpinCtrlGeneric sub-controls resizing.
The code in DoMoveWindow() didn't account for the margin and made the text
control part of the window too large resulting in the truncation of the spin
button.
Simply remember to take margin into account when computing the text width.
Vadim Zeitlin [Sat, 25 Dec 2010 13:18:52 +0000 (13:18 +0000)]
Minor improvements to wxComboBox documentation.
Mention that wxCB_DROPDOWN is MSW (and Motif...) specific and don't document
the much more often used wxCB_READONLY in its terms, just describe it directly
instead.
Vadim Zeitlin [Wed, 22 Dec 2010 13:57:21 +0000 (13:57 +0000)]
Really fix recently broken accelerators handling in menu items.
As wxAcceleratorEntry::Create() now expects the full menu item label, just
pass GetItemLabel() to it in wxMenuItemBase::GetAccel() instead of half-
parsing it ourselves there.
Vadim Zeitlin [Wed, 22 Dec 2010 13:57:15 +0000 (13:57 +0000)]
Implement proper wxCursor cloning in wxDFB.
wxDFB compilation was broken by recent wxObjectRefData copy ctor-related
changes. Fix it by not using wxCursorRefData copy ctor any more, call
wxCursorRefData::Clone() which does the right thing explicitly instead.
Vadim Zeitlin [Wed, 22 Dec 2010 13:57:08 +0000 (13:57 +0000)]
Use stock ids for menu items in the config sample.
This not only removes some unnecessary code from the sample but also fixes a
problem due to the use of a 0 id under wxOSX (which is unsupported there).
Vadim Zeitlin [Wed, 22 Dec 2010 13:57:03 +0000 (13:57 +0000)]
Compute print preview scale using real DPI values in wxGTK.
Replace hardcoded 72 DPI which was "compensated" for with a 0.8 fudge factor
with the values using the real screen DPI in wxGTK and PostScript print
preview classes.
Vadim Zeitlin [Wed, 22 Dec 2010 13:56:56 +0000 (13:56 +0000)]
Correct and extend wxConfig::Create() documentation.
Replace mentions of the non-existent wxCONFIG_WIN32_NATIVE with
wxUSE_CONFIG_NATIVE. Also explain what does the "best implementation" really
mean and link to wxAppTraitsBase::CreateConfig().
Vadim Zeitlin [Wed, 22 Dec 2010 13:56:49 +0000 (13:56 +0000)]
Use generic wxHyperlinkCtrl under Vista/7 without comtrl32.dll v6.
Replace the test for the OS version with the test for comtrl32.dll version in
HasNativeHyperlinkCtrl() wxMSW function as the native control could be not
available even under Vista/7 if we're not using comtrl32.dll v6 and this can
happen if the program was linked without the appropriate manifest or, possibly
more likely, if a DLL using wxWidgets was loaded by such a program.
Robert Roebling [Tue, 21 Dec 2010 19:27:35 +0000 (19:27 +0000)]
model column and index of column in the dataview can be different, correct this and also make wxGTK and wxMSW report the same thing in the event following wxDataViewModel::SetValue(), fixes #12755: wxDataViewCtrl bug when the column is mapped to different model column. Also commit some older change reseting the cursor under the mouse.
Jaakko Salli [Mon, 20 Dec 2010 13:51:24 +0000 (13:51 +0000)]
Added wxComboPopup::FindItem() to help in deciding how SetValue() should change the value of a read-only wxComboCtrl. This allows wxOwnerDrawnComboBox to have the same behavior as wxComboBox in that respect.
Jaakko Salli [Mon, 20 Dec 2010 11:27:13 +0000 (11:27 +0000)]
Have wxUniv wxComboBox inherit from wxItemContainer instead of wxComboBoxBase, since the latter is derived from wxTextEntry which conflicts with the recent change in wxComboCtrl (fixes #12789)
Vadim Zeitlin [Sun, 19 Dec 2010 15:02:56 +0000 (15:02 +0000)]
Add the possibility to disable invisible wxDataViewCtrl items.
Add new wxDataViewModel::IsEnabled() and wxDataViewListStore::IsEnabledByRow()
methods and implement support for actually disabling the items in wxOSX/Cocoa
native implementation of wxDataViewCtrl and limited support for it in the
generic version.
We need to implement this in wxGTK using GtkCellRenderer "sensitive" propriety
later.
Vadim Zeitlin [Sun, 19 Dec 2010 15:02:45 +0000 (15:02 +0000)]
Store menus titles in menus themselves in wxOSX.
Get rid of wxMenuBar::m_titles array which doesn't seem to be needed and just
store the titles in the menus themselves instead. This makes wxMenu::GetTitle()
work as in the other ports and fixes unit test failures in menu test.
It also makes it unnecessary to duplicate the base class Find[Menu]Item()
methods in wxOSX wxMenuBar so simply remove them entirely.
Vadim Zeitlin [Sun, 19 Dec 2010 15:02:31 +0000 (15:02 +0000)]
Fix initial gradient point calculation in wxOSX.
This fixes the bug introduced in r63879 which used the wrong indices into the
stops array resulting in visual artefacts in wxAUI, for example (and also
possible crashes due to accessing out of bound array elements).
Vadim Zeitlin [Sun, 19 Dec 2010 14:08:42 +0000 (14:08 +0000)]
Preserve wxSlider value when changing its range in wxOSX too.
This fix is similar to r66368 for wxMSW and preserves the slider value when
its range changes. This is necessary because while the underlying native
control value doesn't change when the range is, the logical value of wxSlider
does change if it must be inversed as this depends on the range.
Jaakko Salli [Fri, 17 Dec 2010 11:20:50 +0000 (11:20 +0000)]
Make the wxComboCtrl's wxTextEntry interface more complete and consistent. All text is no longer selected on SetValue(), but only when user selects an item from the drop-down list.
Jaakko Salli [Thu, 16 Dec 2010 17:21:49 +0000 (17:21 +0000)]
Instead of having wxComboCtrl mimic wxTextEntry interface, make it actually inherit from the class and implement functions to redirect to the embedded wxTextCtrl. This allows us to simplify the code and get rid of the dirty trick of directing wxComboCtrl's validator to the embedded wxTextCtrl. Also see #12779, which issue 1 is fixed by this change.
Vadim Zeitlin [Wed, 15 Dec 2010 13:36:44 +0000 (13:36 +0000)]
Initialize wxLogWindow::m_pLogFrame in ctor to avoid (rare) crash.
If the log frame creation itself generates log messages, the code using
wxLogWindow could crash because its m_pLogFrame member variable wasn't
initialized yet at this moment.
Vadim Zeitlin [Wed, 15 Dec 2010 12:04:13 +0000 (12:04 +0000)]
Compilation fixes for wx{X11,GTK1,Motif} after making ref data non copyable.
Don't use wrong compiler-generated copy ctors in the other ports neither (see
r66371..66373 for wxGTK fixes). This fixes compilation after r66374 without
reducing functionality but just making it more clear where it is missing.
Vadim Zeitlin [Wed, 15 Dec 2010 11:18:42 +0000 (11:18 +0000)]
Don't pass strings not containing accelerators to ParseAccel().
Check for the presence of accelerator part in the string passed to
wxAcceleratorEntry::Create() and don't call ParseAccel() at all if it's not
there. This avoids the spurious warnings about unrecognized accelerators when
creating menu items that don't have any accelerators at all.
Also update wxAcceleratorEntry::FromString() documentation to mention that
the new code should pass just the accelerator to this function and that it
only accepts full menu item labels for compatibility.
Vadim Zeitlin [Tue, 14 Dec 2010 18:43:49 +0000 (18:43 +0000)]
Make wxRefCounter non copyable.
wxRefCounter copy ctor was wrong as the new object had the same reference
count as the old one instead of starting its life with reference count set to
1 as any new object should.
While we could fix its copy ctor, it seems to be better to forbid copying
wxRefCounter objects at all because the semantics of doing this is not obvious
and the compiler-generated copy ctor in the derived classes often doesn't do
what the code using it expects it to do, as was discovered by making
wxRefCounter non copyable: see the fixes in the previous commits.
To uncover all such bugs, make wxRefCounter and classes deriving from it non
copyable. If this uncovers more problems, they should be fixed by implementing
copying properly (and explicitly) in the derived classes.
Vadim Zeitlin [Tue, 14 Dec 2010 18:43:39 +0000 (18:43 +0000)]
Fail in CloneGDIRefData() instead of implementing it incorrectly in wxOSX.
wxIcon and wxMetaFile implemented CloneGDIRefData() using copy ctors of the
corresponding ref data classes but the copy ctors were either wrong (for
wxIconRefData as using it would result in messing up IconRef reference count)
or had wrong semantics (wxMetafileRefData copy ctor performed shallow copy
only while CloneGDIRefData() supposes a deep copy is done).
Replace the wrong implementations of these functions with assert that will be
triggered if they are ever used (which doesn't seem to be the case so far).
Vadim Zeitlin [Tue, 14 Dec 2010 18:43:32 +0000 (18:43 +0000)]
Don't use implicit wxBitmapRefData copy ctor in wxGTK code.
wxBitmapRefData didn't have a proper copy ctor but the code in wxGTK wxBitmap
implementation used it nevertheless and then manually patched the newly copied
object to avoid double pointer deletion and other unpleasantness.
Make the code more obviously correct by not using (nor providing) copy ctor at
all. There are no real changes otherwise.
Vadim Zeitlin [Tue, 14 Dec 2010 18:43:25 +0000 (18:43 +0000)]
Fail instead of crashing in wxGTK wxCursor::CloneGDIRefData().
CloneGDIRefData() used wxCursorRefData copy ctor which wasn't implemented
correctly and simply copied its internal m_cursor member without incrementing
its reference count which resulted in a crash when it was then dereferenced
twice.
Unfortunately there doesn't seem to be any simple way to clone GDK cursors but
as this should be something only rarely (if ever?) needed, simply don't
implement CloneGDIRefData() at all for now and just leave an assert in it if
it's ever really called. Also don't define wxCursorRefData copy ctor at all as
it can't be done correctly.
Vadim Zeitlin [Mon, 13 Dec 2010 18:10:02 +0000 (18:10 +0000)]
Preserve value when changing range of inverted wxSlider in wxMSW.
The logical value of wxSlider was changed when its range was changed in wxMSW
if the slider had wxSL_INVERSE style because the logical value was actually
computed using the range and the actual physical control value and we forgot
to update the latter when changing the range.
Do update it now in SetRange() to fix this.
Also add unit tests checking for this and, more generally, for other
operations with inversed sliders.
Jaakko Salli [Mon, 13 Dec 2010 16:07:49 +0000 (16:07 +0000)]
Have wxPropertyGrid::DoubleToString() to also take comma into account as a decimal separator. In addition, the function now returns target wxString (makes writing tests easier).
Vadim Zeitlin [Fri, 3 Dec 2010 14:00:31 +0000 (14:00 +0000)]
Set the window in focus event sent by wxComboCtrl correctly.
The window parameter wasn't copied correctly in the forwarded event. Fix this
and avoid future problems of the same kind by using the copy ctor for creating
the new event and then override the fields that we need to change from the
original event instead of recreating the new event from bits and pieces of the
original one.
Vadim Zeitlin [Fri, 3 Dec 2010 12:40:28 +0000 (12:40 +0000)]
Update AUI bitmaps when its colours change.
Extract the bitmaps initialization in wxAuiDefaultDockArt::InitBitmaps() and
call it from SetColour() to ensure that the bitmaps are updated when the
colour scheme changes.
Vadim Zeitlin [Fri, 3 Dec 2010 12:40:15 +0000 (12:40 +0000)]
Update the directory icon in wxGenericDirCtrl::ExpandDir().
Calling ExpandDir() to notify the control that a new item was added in a
previously empty directory didn't work as wxTreeCtrl::SetItemHasChildren()
wasn't called.
Fix this by moving SetItemHasChildren() to ExpandDir() from OnExpandItem(), it
must be always done and not just in response to an interactive action.