Commit Graph

501 Commits

Author SHA1 Message Date
Václav Slavík
b632efe0d6 No real change, use more descriptive variable names in wxDataViewMainWindow::ItemDeleted().
Call the node object corresponding to 'parent' 'parentNode' instead
of just the more vague 'node'. Also, 'nodes' instead of 'nds'.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68912 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 13:24:07 +00:00
Vadim Zeitlin
fd48fe892c Simplify checks for event vetoing in generic wxDataViewCtrl code.
Don't return the whole event object from SendExpanderEvent() just to check if
it wasn't vetoed, simply return a boolean value indicating if this was the
case from this function itself.

This makes it both more efficient and easier to use.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68867 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-23 15:11:25 +00:00
Vadim Zeitlin
d1a92cf322 Fix completely wrong logic for veto checking in generic wxDVC.
The code sending the event must check whether the event was vetoed or not, not
whether it was skipped or not. This is the minimal change resulting in correct
behaviour even if an event handler does skip the event.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68866 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-23 15:11:22 +00:00
Václav Slavík
f6410588cf Don't iterate over selection twice needlessly in wxDataViewMainWindow::ItemDeleted().
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68846 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-22 14:14:53 +00:00
Václav Slavík
b23de238c8 No change, improve wxDataViewMainWindow::ItemDeleted() readability.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68845 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-22 14:14:50 +00:00
Vadim Zeitlin
fa93d732e2 Harmonize wxDataViewCtrl::GetSelection() behaviour in all ports.
wxDataViewCtrl::GetSelection() now always returns invalid item if more than
a single item is selected in a multi-selection control.

Also add HasSelection() and GetSelectedItemsCount() to allow checking if any
items are selected.

Updated the documentation, all ports and added a test for all these functions.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68844 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-22 12:41:19 +00:00
Vadim Zeitlin
902334c8fa Fix the coordinates in wxDataViewCustomRenderer::LeftClick() in generic wxDVC.
The code in generic wxDataViewCtrl implementation didn't take the space taken
by tree expander button nor the indentation of child nodes into account, so
the coordinates passed to LeftClick() could be completely wrong.

Fix this by offsetting them to ensure that click coordinates are always
relative to the cell client area.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68836 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-22 12:13:39 +00:00
Václav Slavík
9489ebf0f1 Rename wxDataViewCtrl::InvalidateColBestWidth* to UpdateColBestWidth*.
The new names make it more clear that the functions don't just set an
invalidated flag, but that they actually do some recalculations.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68807 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-21 09:07:06 +00:00
Václav Slavík
ac0981084b Fix autosize columns width calculation in generic wxDataViewCtrl.
Column widths were recomputed too soon -- after the model changed, but
before the control's own data structures were updated to reflect the
change. This could lead to incorrect calculations or worse, crashes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68806 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-21 09:07:02 +00:00
Václav Slavík
0b93babdc0 Reorganize wxDataViewMainWindow::ItemAdded() for better readability.
Reuse common code. No real changes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68792 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-19 18:25:28 +00:00
Vadim Zeitlin
f23b8c0d85 No changes, just remove gratuitous inefficiency from generic wxDVC.
Don't return wxDataViewMainWindow::m_selection array by value, returning a
const reference to it is enough and avoids completely unnecessary memory
allocations and copying of potentially large amounts of data.

Also make wxDataViewMainWindow::GetSelections() const.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68652 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-12 14:09:41 +00:00
Vadim Zeitlin
3823a15e2c Fix compilation of generic wxDVC code when not using STL containers.
wx sorted containers don't implement iterators so use indices to iterate over
wxDataViewMainWindow::m_selection, just as r68613 already did in another place.

Closes #13388.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68651 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-12 14:09:37 +00:00
Václav Slavík
57ab45460d Fix selection handling wxDataViewMainWindow::ItemDeleted().
The code to update m_selection was too aggressive in the virtual list
case, when it simply cleared it, and broken for single-item selection in
the general case.
Fixed to recompute selection properly.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68622 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-10 15:24:19 +00:00
Václav Slavík
d5c4a81f2e Make the wxDataViewItem(void*) constructor explicit.
Not having this as an implicit one made it possible to create
wxDataViewItem from any pointer without realizing it, leading to hard to
debug crashes later.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68621 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-10 15:21:22 +00:00
Václav Slavík
eceb6af158 Don't use iterators with wxDataViewSelection.
They aren't implemented when using wx's homegrown sorted containers
and adding support is probably more trouble than it's worth.

Fixes #13388.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68613 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-09 11:35:32 +00:00
Václav Slavík
373a4816d4 Check for invalid items in generic wxDataViewCtrl::GetSelections().
This shouldn't normally happen, but if some bug causes it, detect it.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68598 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-08 10:23:19 +00:00
Václav Slavík
04675edfb1 Remove selection methods taking int from generic wxDataViewCtrl.
Current public API uses wxDataViewItem, this code dated back to 2.8.
They were now protected instead of public, the code wasn't used
anywhere and wasn't portable, it existed only in the generic version.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68597 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-08 10:11:04 +00:00
Václav Slavík
8c7b871156 Use ChangeCurrentRow() in wxDataViewMainWindow::ItemDeleted().
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68583 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-07 17:29:50 +00:00
Václav Slavík
b625294905 Clean up wxDataViewMainWindow::ItemDeleted() a bit.
Reuse shared code instead of duplicating it. No real changes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68582 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-07 17:29:47 +00:00
Václav Slavík
c3b0247de1 wxDataViewSelection private type doesn't need to be exported.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68581 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-07 17:29:44 +00:00
Václav Slavík
43d2d359ce Remove unused ItemList type from datavgen.cpp.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68580 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-07 17:29:41 +00:00
Vadim Zeitlin
ff7bc95e6f Send wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED for generic version too.
Send this event when the column used for sorting changed in the generic
implementation of wxDataViewCtrl too.

Closes #13005.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68322 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-07-21 13:50:17 +00:00
Vadim Zeitlin
311c4a7a85 Fix drawing of expander columns not at 0 position in generic wxDVC.
The drawing code in the generic version of wxDataViewCtrl incorrectly supposed
that the expander column was always at position 0. This resulted in the
expander column not being drawn at all if it was not really the first one.

Fix the test to use wxDataViewCtrl::GetExpanderColumn() to correct this.

Closes #12870.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68321 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-07-21 13:50:14 +00:00
Vadim Zeitlin
4385e70296 Correct test for maximal row index in generic wxDataViewCtrl.
The comparison in EVT_CHAR handler was incorrect for an empty control without
any rows as it subtracting 1 from 0 resulted in UINT_MAX and not -1 as all the
values were unsigned.

Fix this by checking that the new row is valid instead, this is correct for
both signed and unsigned values.

Closes #13356.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68320 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-07-21 13:50:10 +00:00
Vadim Zeitlin
a09da78b03 Refresh the old current row when right clicking in wxDataViewCtrl.
the generic implementation of wxDataViewCtrl left the old current still
focused after selecting another row as current when it was right clicked.
Fix this by refreshing the previously current row after unfocusing it.

Closes #13330.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68308 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-07-19 22:35:57 +00:00
Vadim Zeitlin
cd9b34ef83 Refresh the generic wxDataViewCtrl header if it was made too small.
Although normally the control header is not supposed to be resized below its
minimal vertical size, sometimes this can still happen and in this case ugly
artefacts were displayed because it wasn't refreshed properly. Do refresh it
to avoid them.

Closes #13313.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68212 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-07-09 23:36:55 +00:00
Vadim Zeitlin
99ef43728a Change the loop condition to avoid comparing unsigned value with 0.
This resulted in (useful) g++ warning and didn't make any sense in any case.

Check for the loop variable value being 0 at the end of the loop instead now.
If the old code was correct it shouldn't change its behaviour and if not, this
might fix a bug.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68100 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-06-29 17:50:32 +00:00
Vadim Zeitlin
bbfd454841 Add wxDataViewCtrl::SetRowHeight() and provide its generic implementation.
Allow changing the (fixed) row height without using wxDV_VARIABLE_LINE_HEIGHT
which may slow down the control display too much.

The new method is not implemented for the native GTK and OS X implementations
yet but should be simple to implement there.

See #12749.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67885 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-06-07 22:49:56 +00:00
Dimitri Schoolwerth
a1b806b982 Replaced Ok() occurrences with IsOk() throughout trunk.
Additionally renamed wxOSX' private wxNativePrinterDC::Ok() function to IsOk().

Didn't deprecate the various Ok() functions: given the amount of changes already introduced in 3.0 a trivial one like this seems more suitable for after 3.0.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67681 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-05-03 16:29:04 +00:00
Vadim Zeitlin
da87ce5a36 Don't generate wxEVT_COMMAND_DATAVIEW_CACHE_HINT for empty control.
Don't send any cache hint events for empty wxDataViewCtrl. Sending them was
unnecessary, inconsistent with wxListCtrl (which doesn't send them when it's
empty) and the events also had incorrect range. Just don't create them at all
to avoid all these problems at once.

Closes #13132.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67591 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-23 18:01:36 +00:00
Václav Slavík
64c70359a7 Return wxWindow* from wxDataViewCustomRenderer::CreateEditorCtrl().
There's no reason to limit custom editor controls to wxControl, which
would rule out e.g. composite controls or any custom widgets.
Make appropriate changes to related functions and code too.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67576 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-04-22 18:25:32 +00:00
Václav Slavík
fce2dc61c3 Only react to clicks on the checkbox in wxDataViewToggleRenderer.
Previously, left click anywhere in the cell toggled the checkbox.
This was unexpected when the cursor was far from the checkbox
in a wide column. With this change, one has to be over the
checkbox to toggle it.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67295 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-03-23 13:57:52 +00:00
Vadim Zeitlin
99f44d9704 Send wxEVT_COMMAND_DATAVIEW_CACHE_HINT to proper window.
The event was sent to wxDataViewCtrl parent instead of the control itself for
some reason, fix this.

Closes #13020.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67158 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-03-09 09:44:03 +00:00
Václav Slavík
548fa9c1eb Pass wxRect/wxPoint arguments to wxDataViewCustomRenderer by reference.
Instead of passing them by value, use const reference. This change
is safe to do, because these methods' signatures were different in 2.8
anyhow.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67099 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-03-01 12:16:49 +00:00
Václav Slavík
d2425a43ec Toggle checkboxes in generic wxDataViewCtrl with single click.
Both GTK+ and OS X native controls use single click to toggle
checkboxes, instead of double-click activation used by the generic
version. So does wxCheckListBox on Windows, so make wxDVC
behave the same way.

See #11185.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67094 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-02-28 21:23:10 +00:00
Václav Slavík
dbc3aec19a Get rid of WXGetAsCustom().
Instead, have WXOnActivate() and WXOnLeftClick() with same signatures as
their public API counterparts and just call Activate/LeftClick() from
them for wxDataViewCustomRenderer.

This accomplishes the same thing, but makes it easier to override
behaviour in wx's internal implementations of renderers.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67093 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-02-28 21:23:04 +00:00
Václav Slavík
1852bf0db5 wxDataViewCtrl: Fully prepare renderer for Activate() call.
Instead of just setting the value in the generic implementation, do full
preparation (incl. attributes etc.) as everywhere else.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67092 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-02-28 21:23:00 +00:00
Václav Slavík
3999336cb9 Fix vertical rules rendering in generic wxDataViewCtrl.
Vertical rules are now drawn in the last pixel of a column instead of in
the first, so that they align perfectly with native MSW wxHeaderCtrl as
well as for consistency with MSW native list control.  There's no
vertical rule at the most-left side of the control anymore.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66821 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-01-31 16:54:03 +00:00
Václav Slavík
c6b223ca49 Remove incorrect comment.
UpdateColumnWidthToFit() is in fact used when double-clicking columns separators.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66739 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-01-24 14:35:30 +00:00
Václav Slavík
3d825e0613 wxDataViewCtrl: fix autosized columns recalculation.
The code and its assumptions were correct only for generic wxHeaderCtrl,
it didn't work for MSW implementation. Fixed by updating all columns
every time.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66729 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-01-22 19:02:02 +00:00
Václav Slavík
40fc5b2f71 Fix typo and a leftover.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66610 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-01-06 14:33:19 +00:00
Robert Roebling
b9293331c6 Don't let anything, such as pressing F2, start editing an entry if the renderer is set to wxDATAVIEW_CELL_INERT
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66424 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-12-21 19:38:52 +00:00
Robert Roebling
d93cc83080 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.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66423 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-12-21 19:27:35 +00:00
Vadim Zeitlin
98f8e6666b 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.

Closes #12686.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-12-19 15:02:56 +00:00
Vadim Zeitlin
737883f20a Skip mouse events outside of item area in wxDataViewCtrl.
Don't consume mouse events outside of the area occupied by the items in the
generic implementation of wxDataViewCtrl as this prevented wxEVT_CONTEXT_MENU
events from being generated.

Closes #12706.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66250 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-11-24 00:42:19 +00:00
Vadim Zeitlin
ca81b52e62 Set column field of wxDVC ITEM_{ACTIVATED,CONTEXT_MENU} events.
Add missing calls to wxDataViewEvent::SetColumn() and SetDataViewColumn().

In the future it would be nice to refactor the code to have a common event
object initialization function that would make it impossible to forget to do
this.

Closes #12649.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66006 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-11-03 16:29:36 +00:00
Vadim Zeitlin
10875c13e9 Optimize wxDataViewMainWindow::FindNode() in generic wxDataViewCtrl.
Avoid unnecessary heap allocations and extra indirections and just use the
items pointers directly.

Also avoid copying the (potentially huge) nodes arrays.

Closes #12647.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66004 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-11-03 16:29:23 +00:00
Vadim Zeitlin
5ca9771ff3 Don't copy potentially big arrays in generic wxDataViewCtrl.
Use reference to hold the array of nodes instead of copying it.

(Really) closes #12587.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66003 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-11-03 16:29:18 +00:00
Václav Slavík
0645bd388c For large dataview controls, don't use all items to calculate best column width.
Instead, use just top and bottom N/2 items for some large enough value
of N. N is determined dynamically so that column best width calculation
doesn't take more than 50ms.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65951 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-10-30 15:57:59 +00:00
Václav Slavík
f0ccd2cbfa Add wxDataViewRendererBase::PrepareForItem() helper.
For calling SetValue() and SetAttr() consistently, instead of having the
same code duplicated all over the place.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65950 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-10-30 15:57:55 +00:00