Vadim Zeitlin [Sat, 17 Oct 2009 01:04:26 +0000 (01:04 +0000)]
Rewrite handling cell value changes in wxOSX/Cocoa wxDVC.
Instead of using a chain of dynamic_cast<>s to find the right type of the
value, construct a wxVariant corresponding to the type of the object we
receive in NSOutlineView:setObjectValue:forTableColumn:byItem and pass it to a
wxDataViewRenderer virtual function.
This fixes assert and allows to edit icon text items under OS X.
Vadim Zeitlin [Sat, 17 Oct 2009 01:04:13 +0000 (01:04 +0000)]
Fix crash when editing wxDVC items in place in wxOSX/Cocoa.
NSOutlineView::editedColumn: and editedRow: return -1 when they are called
from textDidEndEditing so we need to store their values in textDidBeginEditing
and reuse them later.
This fixes the crash in the sample with out-of-range array index exception
which happened whenever a cell was edited.
Vadim Zeitlin [Fri, 16 Oct 2009 21:35:26 +0000 (21:35 +0000)]
Add ellipsization support to wxDataViewCtrl.
Implemented ellipsization in the generic, GTK and both OS X Carbon and Cocoa
versions but it currently doesn't work well in GTK as it changes the item
alignment unconditionally, this will need to be fixed later.
The behaviour for the columns is currently inconsistent between ports too:
under MSW they (natively) use wxELLIPSIZE_END, under GTK -- wxELLIPSIZE_NONE
and under OS X the same ellipsization mode as the column contents, i.e.
wxELLIPSIZE_MIDDLE by default.
Vadim Zeitlin [Fri, 16 Oct 2009 21:32:51 +0000 (21:32 +0000)]
Rename wxEllipsizeFlags elements to avoid confusion with wxEllipsizeMode.
We shouldn't use the same "wxELLIPSIZE_" prefix for two different enums, so
use wxELLIPSIZE_FLAGS one for wxEllipsizeFlags (they should be used less often
than wxEllipsizeMode so it's better to keep the short prefix for the latter).
Vadim Zeitlin [Fri, 16 Oct 2009 16:25:43 +0000 (16:25 +0000)]
Improve wxCollapsiblePane appearance under OS X.
By default, don't use border in wxDisclosureTriangle because the native
applications do not. However do honour wxBORDER_XXX style if specified in case
this becomes useful in the future (this required no effort as the code was
already there for bitmap buttons and just had to be extracted into a reusable
function).
Don't expand the disclosure triangle in wxCollapsiblePane sizer, as this
resulted in the text being centered instead of remaining left-aligned.
Vadim Zeitlin [Fri, 16 Oct 2009 16:25:37 +0000 (16:25 +0000)]
Don't use sunken border for the list control in log dialog.
There doesn't seem to be any reason to use a heavy border here as there is
nothing much to separate the list control from. In particular this looks
rather horrible under OS X.
Vadim Zeitlin [Fri, 16 Oct 2009 14:35:21 +0000 (14:35 +0000)]
Make assert in wxMSW wxListCtrl::InsertItem() more informative.
Assert if inserting an item failed (this is really unexpected and must be a
programmer error) instead of asserting about items number mismatch -- which
might be true but only indirectly helpful.
Vadim Zeitlin [Fri, 16 Oct 2009 01:29:06 +0000 (01:29 +0000)]
Implement icon text column using native GTK renderers in wxDVC.
This has a possible advantage of a more native look and feel (although it's
hard to tell the difference between drawing the icon ourselves and how the
default GTK+ renderer does it to be honest) and a very real advantage of
allowing to edit in place cells with icons. It also reduces code duplication
in GTK implementation.
Modify the sample to make the icon-text column in the list model editable to
show that it works. This required storing the values of the second column as
well, so do it in its own array and to avoid calling it "m_array2", rename the
existing m_array to m_textColValues (which accounts for most of the diff in
the sample) and call the new one m_iconColValues.
Vadim Zeitlin [Thu, 15 Oct 2009 16:53:52 +0000 (16:53 +0000)]
Correct cell alignment computation for too small column sizes.
Actually the column size might not even be too small but the size returned by
renderers GetSize() could be too large -- as is the case for spin renderer
currently. And trusting it results in drawing outside of the cell boundary
even when there is enough space inside it, so don't do this and fall back to
left alignment if there is not enough space.
This fixes display of the year column in the dataview sample broken by the
recent changes.
Vadim Zeitlin [Thu, 15 Oct 2009 16:53:45 +0000 (16:53 +0000)]
Use correct colour for selected items in generic wxDVC.
wxDataViewCustomRenderer::RenderText() taking attributes must use correct
colour for the selected items if no attribute is specified as it can be (and
is) called directly and not only via the compatibility overload.
This fixes the display of the selected items in the dataview sample broken by
recent changes.
Jaakko Salli [Thu, 15 Oct 2009 16:39:19 +0000 (16:39 +0000)]
Changed 'bool recursively' to 'int flags' argument (with default value of wxPG_RECURSE) in wxPropertyGrid Set(Property)BackgroundColour() and Set(Property)TextColour() member functions.
Vadim Zeitlin [Thu, 15 Oct 2009 14:44:22 +0000 (14:44 +0000)]
Replace wxValidator::SetBellOnError() with SuppressBellOnError().
SetBellOnError() erroneously inversed the value of its parameter. Fixing it to
behave correctly could silently break the existing code which might work
around this bug already because it always behaved like this (ever since it was
added 10.5 years ago). So instead simply deprecate this function and add a new
SuppressBellOnError() one which behaves as expected.
Vadim Zeitlin [Wed, 14 Oct 2009 22:49:38 +0000 (22:49 +0000)]
Test whether GTK+ is 2.18 or newer in configure.
We need to define __WXGTK218__ symbol in configure instead of simply checking
if we are compiled with 2.18 in wx/infobar.h because GTK_CHECK_VERSION() can't
be used when compiling user code which can't even include gtk/gtkversion.h
defining it because it doesn't necessarily use `pkg-config --cflags gtk+-2.0`
at all in its CFLAGS.
Vadim Zeitlin [Wed, 14 Oct 2009 17:00:28 +0000 (17:00 +0000)]
Fixes to comparison operators for wxDVC classes.
Comparison operators for wxDataViewItem and wxDataViewIconText were not inline
and not exported, resulting in linking errors for any code using them in
shared wx build. Fix this by making them inline.
Also correct wxDataViewIconText operator==() implementation to compare icons
as well and to return true when comparing the object with itself.
Finally add operator!=() matching existing operator==() as a class having one
of these operators is supposed to have the other one as well and it costs
nothing to define it.
Vadim Zeitlin [Mon, 12 Oct 2009 22:44:23 +0000 (22:44 +0000)]
Fix conversion from wxColour to NSColor in wxOSX/Cocoa wxDVC.
wxColour components are in 0.255 range while NSColor ones are in 0..1 one. The
old code compiled just fine but didn't work correctly for any colours which
had any channel with value different from 0 and 255 (unsurprisingly, my tests
only used wxRED, wxGREEN and wxBLUE which all passed...).
Vadim Zeitlin [Mon, 12 Oct 2009 22:44:09 +0000 (22:44 +0000)]
Make generic wxDataViewProgressRenderer fill the entire cell.
After the fixes in the previous commit it is finally possibly to make the
progress renderer expand to the entire cell area instead of taking a
fixed width, it is enough to simply override RenderWithAttr() instead of
Render() and ignore the alignment as this avoids the use of (arbitrary and
hardcoded) wxDataViewProgressRenderer::GetSize().
Vadim Zeitlin [Mon, 12 Oct 2009 22:44:03 +0000 (22:44 +0000)]
Handle cell alignment in the renderer itself in generic wxDVC.
Instead of using wxDataViewRenderer::GetSize() and rendering the cell into the
appropriate part of the rectangle, pass the full rectangle and the alignment
of the cell contents in it to the renderer itself.
This fixes the bug with bold text being truncated in the "attributes" column
of the dataview sample and is also generally more flexible as the renderer may
decide itself what to do with the extra space.
It also somewhat reduces the code duplication between CreateItemBitmap() and
OnPaint().
Vadim Zeitlin [Mon, 12 Oct 2009 22:43:57 +0000 (22:43 +0000)]
Correct bug with items without attributes in wxGTK wxDVC.
After the change to the sample in r62390 it turned out that wxGTK version
didn't handle items without attributes in a column where other items did have
attributes neither -- they inherited the last used attribute.
Fix this by remembering whether we are using any non-default attributes or not
and resetting them if we do.
Vadim Zeitlin [Mon, 12 Oct 2009 17:30:48 +0000 (17:30 +0000)]
Fix display of items without attributes in Cocoa wxDVC.
The attribute used for the last item was reused for the next item in the same
column unless it was overridden in the attribute of this item, fix this by
remembering the original attribute and using it if no attributes are
explicitly specified.
Also change the sample to show the items without attributes in a column with
attributes and make the label correspond to the attribute of the item.
Vadim Zeitlin [Mon, 12 Oct 2009 17:30:35 +0000 (17:30 +0000)]
Use Cocoa methods instead of wx ones in wxDVC font setting code.
Use NSFontManager to create bold or italic version of the font instead of
using wxFont. This works better for the bold attribute, but setting the italic
one still doesn't do anything.
Vadim Zeitlin [Mon, 12 Oct 2009 13:59:39 +0000 (13:59 +0000)]
Make the colours in the demo a bit more logical.
Make the colours of the items in the "attributes" column blue/green/red in
order instead of making all odd items blue and all even and divisible by 3
ones green while making the rest of them red -- it was a bit difficult to
figure out how it worked before.
Also correct wxDataViewItemAttr::SetItalic() check: comparing the remainder of
the division by 2 with 5 didn't risk to work.
Vadim Zeitlin [Mon, 12 Oct 2009 13:59:32 +0000 (13:59 +0000)]
No real changes, just minor cleanup in Cocoa wxDataViewCtrl.
Start cleaning up Cocoa wxDataViewCtrl implementation:
- Don't use "this->" which is not used anywhere else in wx code.
- Use "()" instead of "(void)" as per wx coding standards.
- Don't use end of function comments, this is inconsistent and
unmaintainable.
Vadim Zeitlin [Mon, 12 Oct 2009 13:59:25 +0000 (13:59 +0000)]
Remove wxDataViewTextRendererAttr by merging it with wxDataViewTextRenderer.
There is no reason to have a separate class for rendering the text honouring
the attributes defined for it, wxDataViewTextRenderer itself already does this
perfectly well.
Vadim Zeitlin [Mon, 12 Oct 2009 13:59:13 +0000 (13:59 +0000)]
Added wxDCFontChanger ctor not changing font.
This is similar to the existing wxDCTextColourChanger ctor not changing colour
and is useful in the same kind of situations: when the font may or not be
changed.
Jaakko Salli [Sun, 11 Oct 2009 15:30:03 +0000 (15:30 +0000)]
Have page-specific splitter setup flags in order to fix bug that caused splitter change in one page to affect others. Also fixed a regression in splitter auto-centering.
Vadim Zeitlin [Sat, 10 Oct 2009 18:28:28 +0000 (18:28 +0000)]
Don't use vendor name by default in wxStandardPaths.
The changes in r50025 made the behaviour of wxStandardPaths silently
incompatible with the previous versions under MSW and OS X as it now used the
vendor name in the paths it returned, unlike before. The benefits of doing
this don't justify silently breaking the existing programs so revert this
change and continue to use the application name only by default.
It is, of course, still possible to explicitly ask for the vendor name to be
used with wxStandardPaths::UseAppInfo().
Vadim Zeitlin [Fri, 9 Oct 2009 13:05:38 +0000 (13:05 +0000)]
Define __WXOSX__ and __WXMAC__ on compiler command line.
Although __WXMAC__ and __WXMAC__ were already defined in wx/platform.h if
__WXOSX_XXX__ was defined, they couldn't be used for checks done before
including this header, which was surprising and, in case of __WXMAC__,
backwards incompatible. Define them now on the compiler command line to ensure
that they are always defined.
Vadim Zeitlin [Fri, 9 Oct 2009 13:05:20 +0000 (13:05 +0000)]
Append default extension before showing file save dialog, not after.
Appending the extension after the dialog was hidden is a bad idea as it
misleads the user by using a different file name from the one shown in the
dialog. It is also dangerous as it bypassed wxFD_OVERWRITE_PROMPT check.
So just append the default extension to the initial file name if it doesn't
have any but don't modify the file name once it was accepted by user.
Vadim Zeitlin [Fri, 9 Oct 2009 13:05:10 +0000 (13:05 +0000)]
Don't add default extension in wxDocument::SaveAs().
wxFileSelector() takes care of the default extension itself and if it returned
a file name without one, it means that the user really wants to create a file
without an extension. Adding the default extension here is at best useless and
at worst actively dangerous because it may silently overwrite an existing file
(although this bug is due to a different problem, see #11256 for a scenario in
which this can happen).
Vadim Zeitlin [Fri, 9 Oct 2009 13:04:44 +0000 (13:04 +0000)]
Mention log components in wxLogTrace() documentation.
Using different log components for different logging statements provides a
better (because more general and efficient) way to do the same thing that
wxLogTrace() does, so mention them when describing wxLogTrace().
Julian Smart [Fri, 9 Oct 2009 07:26:54 +0000 (07:26 +0000)]
Revert a workaround for Windows native border side-effect since latter is now fixed
and former causes a positioning problem when the scrollbar is not at the home position and
the grid is resized.
Vadim Zeitlin [Thu, 8 Oct 2009 22:38:03 +0000 (22:38 +0000)]
Add a WX_APPNAME_DATA_DIR hack for wxStandardPaths::GetDataDir().
Applications using wxStandardPaths::GetDataDir() to find their files under
Unix can't be ran without being installed as they look for their data files
under $prefix/share/appname. Make it possible to override this location by
setting WX_APPNAME_DATA_DIR environment variable to allow running them without
installation.
Notice that this shouldn't present any security risk unless the application is
SUID (which would be a very bad idea anyhow).
Jaakko Salli [Thu, 8 Oct 2009 15:33:30 +0000 (15:33 +0000)]
Fixed regression: in wxPropertyGrid::PerformValidation(), wxPGProperty::ValidateValue() was only called when value was variant list, which was exactly the opposite condition under which the function was supposed to be called (fixes #11299).
Vadim Zeitlin [Wed, 7 Oct 2009 10:50:45 +0000 (10:50 +0000)]
Honour COMPILER_PREFIX in wx presets too.
If a non-default COMPILER_PREFIX was specified when building wxWidgets, we
should also be able to use the same prefix when building applications using
this build, so use COMPILER_PREFIX instead of just COMPILER in the project/
makefiles generated using wx presets.
Vadim Zeitlin [Tue, 6 Oct 2009 00:08:15 +0000 (00:08 +0000)]
Create an NSAutoreleasePool in wxMacWakeUp().
An auto-release pool is needed in this function because it can be called from
another thread which has no reason to have a pre-existing pool, but it does
allocate NSEvent object which is auto-released, resulting in warnings if no
pool available.
Vadim Zeitlin [Tue, 6 Oct 2009 00:08:10 +0000 (00:08 +0000)]
Ensure that an event loop exists in ShowViewOrWindowWithEffect().
We may not have an event loop yet if wxWindow::ShowWithEffect() is called
during the application startup, create a temporary event loop instead of
crashing in this case.
Vadim Zeitlin [Mon, 5 Oct 2009 22:58:26 +0000 (22:58 +0000)]
Rebake using pre-release version of bakefile 0.2.7.
They should fix the problem with monolithic build of wx (see #11231).
Notice that trivial changes to VC9 project files are not being committed so
the makefiles are currently not quite consistent but it shouldn't matter as
they will be all regenerated soon when bakefile 0.2.7 is really released.
Vadim Zeitlin [Mon, 5 Oct 2009 22:58:15 +0000 (22:58 +0000)]
Refactor initialization code in wxTopLevelWindowMSW::Create().
No real changes as the old code was, in fact, correct (although Create()
didn't initialize m_parent explicitly, it was still done in AddChild() if the
parent was not NUL) but just make it more explicit and clear.
Add a new helper wxWindowBase::CreateBase() overload for top level windows,
not taking the validator parameter which doesn't apply to them.
Also make CreateBase() protected as it is only meant to be called from derived
classes Create().
Vadim Zeitlin [Mon, 5 Oct 2009 22:58:10 +0000 (22:58 +0000)]
Don't use the current size in DoGetBestSize() by default.
Doing this means that a window which was made initially large because no other
windows were present or shown will refuse to shrink to make space for them
later even if it doesn't need to be that large. The issue was masked under MSW
and GTK because the first size event under these ports is sent so early that
the top level parent window is not realized yet and has default size of 20*20
pixels meaning that its children will cache their initial (very small) size as
their best size, but it was very visible under OS X where the initial layout
is done using the real top level window size and broke wxInfoBar showing in
the dialogs sample, for example.
Vadim Zeitlin [Mon, 5 Oct 2009 22:58:05 +0000 (22:58 +0000)]
Make wxWindow::ShowWithEffect() synchronous under wxOSX/Cocoa.
As explained in the previous commit, while Cocoa support asynchronous
animation, wx API doesn't really, so block in Cocoa implementation of
ShowWithEffect() until the animation terminates for compatibility with
wxMSW and hence expectations of the existing code.
Vadim Zeitlin [Mon, 5 Oct 2009 22:57:59 +0000 (22:57 +0000)]
Implement wxWindow::ShowWithEffect() for wxOSX/Cocoa.
This version animates the window asynchronously and is being checked in just
to preserve it in svn if we later decide to return to this semantics. It will
be replaced by synchronous animation in the next commit.
Vadim Zeitlin [Mon, 5 Oct 2009 22:57:39 +0000 (22:57 +0000)]
Remove the hack with changing the parent background colour in wxInfoBar.
Finding the closest info bar to copy the background colour from only worked
for very simple layouts and failed for more complicated ones with nested
sizers so don't try to change the colour automatically, it's easy enough to do
it manually as shown in the updated dialogs sample.
Vadim Zeitlin [Mon, 5 Oct 2009 22:57:24 +0000 (22:57 +0000)]
Return smaller images for wxART_MENU/BUTTON under OS X.
Requesting images with client id of wxART_MENU/BUTTON used to return the large
32*32 icons because GetNativeSizeHint() wasn't implemented for these client
ids.
Moreover, under Mac some icons (notably message box ones) are created from the
corresponding icon bundle and the code in wxArtProvider::GetBitmap() didn't
resize them correctly in this case, fix this.