Commit Graph

436 Commits

Author SHA1 Message Date
Václav Slavík
a2a4e18c10 Make generic wxDataViewCtrl rows a bit taller.
They now use the same height that Windows 7's Explorer uses. This makes
more inline editor controls fit comfortably.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69800 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-11-23 13:43:04 +00:00
Václav Slavík
0fff3dfcbb Use Enter and Space for cell editing in generic wxDVC too.
If the normal Enter or Space processing (sending activate event or doing
activatable editing respectively) isn't handled by the control, use
these keys to trigger inline editing too, as F2 does.

This makes the Windows control more similar to OS X and GTK+ ones and
makes discovering editability easier.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69695 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-11-08 10:53:49 +00:00
Václav Slavík
5bb82ad49f Fix incorrect handling of ItemsAdded() in wxDataViewCtrl.
When adding items to the model in bulk and then calling ItemsAdded(),
internal representation in both the generic and GTK+ versions wasn't
updated correctly if the order of the notifications was such that an
item would be inserted after other new, but not yet inserted, items.

Fixes bug #13587.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69547 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-10-26 17:10:27 +00:00
Václav Slavík
dc73d7f5d4 Cleanup of wxDataViewCtrl cell activation code.
Fix confusion of what cell activation is and inconsistence with native
handling in GTK+. Document the distinction between activating (~
editing) a cell and activating (double-clicking) the whole item.

Deprecate wxDataViewCustomRenderer::LeftClick() and Activate() methods,
replace them with single ActivateCell() that is called for both kinds of
activation.

Fix implementations so that ActivateCell() is not called on
double-click, when it shouldn't, and vice versa: don't send
wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED for cell activation.

Partially reverts r67099 -- restores old 2.9 signatures of compatibility
LeftClick() and Activate() methods.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69473 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-10-19 16:20:17 +00:00
Václav Slavík
1d3a930e82 Use wxDatePickerCtrl in wxDataViewDateRenderer.
Inline editor is more in line with the behavior of other editors,
requiring double click to edit values was unexpected.

Also merge the two almost-but-not-quite identical implementations in
generic and GTK+ versions.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69471 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-10-19 16:20:06 +00:00
Václav Slavík
28fefd45f9 Return true from wxDataViewMainWindow::ItemDeleted().
Presumably, 'false' indicates failure, but there's no failure here: if
an item is not visible, because its parent wasn't expanded yet, it's
perfectly OK that we don't need to do anything.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69344 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-10-09 13:07:10 +00:00
Václav Slavík
a67e6b86f6 Handle inline editing in generic wxDataViewCtrl as Windows 7 does.
Mimic the behavior of Windows 7's Explorer: edit the item that has focus
if it is selected or the first selected item if focus is out of
selection.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69323 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-10-07 17:24:06 +00:00
Václav Slavík
1c8e71c92d Add columns focus and keyboard navigation to generic wxDataViewCtrl.
The UI tries to mimic Windows 7's Explorer's approach as much as
possible, taking inspiration in the GTK+ implementation when
appropriate. In particular, as long as the user doesn't use horizontal
navigation keys, everything looks as before and the user isn't bothered
with the existence of per-cell focus.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69322 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-10-07 15:03:02 +00:00
Vadim Zeitlin
fb5f677b6a Fix harmless gcc initialization order warning.
Put the initializes in wxDataViewTreeNode constructor initialization list in
order of their declaration.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69282 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-10-02 11:28:32 +00:00
Vadim Zeitlin
7ed24cb652 Send EVT_DATAVIEW_ITEM_CONTEXT_MENU events even when not clicking on an item.
Always send this event, even if the user right clicked outside of the client
area. This is useful for showing item-independent commands in the context
menu.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69177 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-21 15:07:56 +00:00
Vadim Zeitlin
15b8afdcb8 Reset previous sort column in generic wxDataViewColumn::SetSortOrder().
The sort indicator on the column previously used for sorting was only reset
when the user clicked on the column header (by wxDataViewHeaderWindow code
that explicitly called wxDataViewCtrl::SetSortingColumnIndex()) but not when
wxDataViewCtrl::SetSortOrder() was called directly.

Fix this and take care of updating everything in SetSortOrder() itself. This
makes the code simpler and also means that calling SetSortOrder() from the
program now works as expected (it resulted in having sort indicators in two
columns at once before).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69175 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-21 15:07:49 +00:00
Vadim Zeitlin
aadbdd1699 Remove wxHeaderColumn::SetAsSortKey() and only use SetSortOrder().
The two member functions, SetAsSortKey() and SetSortOrder(), were doing almost
the same thing but differently and the former was only used in the generic
wxDataViewCtrl implementation and not implemented in the native GTK/OS X one.

Remove SetAsSortKey() entirely and only keep UnsetAsSortKey() which is still
needed by generic/MSW wxDataViewCtrl. But only SetSortOrder() should now be
called to indicate that the column is used for sorting.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69174 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-21 15:07:46 +00:00
Vadim Zeitlin
1841f0790d Add GetExpanderColumnOrFirstOne() to avoid code duplication in generic wxDVC.
There were two strictly identical code snippets setting the expander column to
be the first one if it hadn't been set before, replace both of them with a
call to GetExpanderColumnOrFirstOne() function.

Also use this function instead of just GetExpanderColumn() (which might return
NULL) in a couple of places.

Notice that there are still a lot of places in the code where the column 0 is
hard coded as being the expander column, this would need to be fixed to really
support non-first expander column.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69166 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-20 18:37:11 +00:00
Vadim Zeitlin
42cbde5162 Reset the expander column when clearing columns in generic wxDVC.
The expander column becomes invalid when all columns are cleared, don't keep
a dangling pointer.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69165 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-20 18:37:08 +00:00
Václav Slavík
76b92fa5c7 Fix crash in wxDataViewCtrl::UpdateColWidths().
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69003 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-05 15:40:56 +00:00
Václav Slavík
a027a36f2c wxDataViewCtrl: enable F2 editing with multiple selection too.
This matches the native (and thus expected) behavior of Windows
Explorer: edit the first item in selection. It's also better than
ignoring user's key presses.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69002 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-05 14:25:31 +00:00
Václav Slavík
857f05e1bf Use ProcessWindowEvent() in generic wxDataViewCtrl code.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68996 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-03 13:14:31 +00:00
Václav Slavík
cfc2188189 Extracted wxDataViewMainWindow left/right keys handling into separate methods.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68995 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-03 13:14:28 +00:00
Václav Slavík
1dc779fc6c Rename wxDataViewMainWindow::OnArrowChar to OnVerticalNavigation.
The method handled much more than just arrow characters and it didn't
handle all arrow characters.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68994 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-03 13:14:25 +00:00
Václav Slavík
2c336e249e Slightly more efficient wxDataViewCtrl::StartEditor().
Don't compute item rect until we know for sure that the item actually is
editable.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68993 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-03 13:14:23 +00:00
Václav Slavík
c2efa4b48a Fix generic wxDataViewCtrl Enter handling to conform to Windows UI.
Spacebar is used to activate columns (e.g. toggle a checkbox).  Enter
activates the item, i.e. sends wxEVT_COMMAND_ITEM_ACTIVATED. If that
event isn't handled, Enter acts the same as Space.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68992 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-09-03 13:14:20 +00:00
Václav Slavík
35219832c9 Add items to correct position in wxDataViewCtrl:ItemAdded.
In both the generic and GTK+ versions, ItemAdded() always appended the
new item, regardless of its position among its siblings  in the model.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68965 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-31 09:36:27 +00:00
Václav Slavík
bed74e488f Generic wxDataViewCtrl: resize autosized columns at idle time.
This is much more efficient than doing it immediately when adding large
number of items into a control with lots of them.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68964 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-31 09:04:41 +00:00
Vadim Zeitlin
c46ecbe3b5 Fix computation of the item offset in generic wxDataViewCtrl code.
We need to account for the expander even for the items that don't have
children when computing their offset as their parent still does have it,
contributing to the total offset.

This corrects the fixes of r68836 to also work for the leaf items.

Also rename expanderOffset variable to more clear itemOffset.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68960 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-30 13:40:40 +00:00
Václav Slavík
77b555c2a4 Send wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED if WXOnActivate() returned false too.
This is consistent with wxGTK implementation and generally makes sense:
when the renderer cannot handle activation, whole-item activation should
be tried next.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68954 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-29 17:25:38 +00:00
Václav Slavík
297e2532b1 Make generic wxDataViewToggleRenderer react to activation.
Previously it only responded to single-clicks, which was to avoid the
need to double-click checkboxes. Fixed to react to activation via
double-click or keyboard too.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68953 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-29 17:25:33 +00:00
Václav Slavík
276227fcbb Activate cells from keyboard too in generic wxDataViewCtrl.
wxDataViewCtrl only called WXOnActivate() in reaction to double-click.
When Enter/Spacebar was pressed, only
wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED was sent, without calling
OnActivate() even if it was possible.

Fixed to handle both kinds of input identically.

Because there's currently no way to change current focus to a particular
column (as GtkTreeView can do), call WXOnActivate() on the first
activatable column.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68952 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-29 17:25:25 +00:00
Václav Slavík
d54f0605a9 More understandable symbolic constants in generic wxDVC's DoJob class.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68932 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 16:44:47 +00:00
Václav Slavík
e1f30123c9 Use spacebar to activate items in generic wxDataViewCtrl too.
Pressing Spacebar now behaves the same as Enter in the generic control,
for consistency with the GTK+ control and native Windows list controls.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68931 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 16:44:45 +00:00
Václav Slavík
a2d3c415d7 Remove DestroyTreeHelper(), make GetChildNodes() const, add RemoveChild().
There's no reason for DestroyTreeHelper() code, that's what destructors
are for.  On a related note, make removal of children from a node more
explicit too.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68930 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 16:44:42 +00:00
Václav Slavík
c2c89730e2 Add wxDataViewMainWindow::GetModel() helper.
It's slightly less verbose than GetOwner()->GetModel() used all
over the place.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68929 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 16:44:39 +00:00
Václav Slavík
ff3c5ad3d3 Better names in wxDataViewTreeNode.
GetChildNodes() instead of GetNodes(), AddChild() instead of AddNode().

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68928 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 16:44:36 +00:00
Václav Slavík
dd90475f71 Use wxTE_PROCESS_ENTER with wxDataViewCtrl text controls.
wxDVC code depends on wxEVT_COMMAND_TEXT_ENTER to hide the
inline editing controls.

Fixes #13412.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68927 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 15:23:43 +00:00
Václav Slavík
d0cfefc4e0 Save memory in wxDataViewTreeNode.
Put data that are meaningful only for non-leaf nodes into a separate
struct that is only allocated for branch nodes. This makes branch
nodes larger by sizeof(void*), but leaf nodes save >50% of memory.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68914 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 13:24:22 +00:00
Václav Slavík
422aa8ecfe Simplified generic wxDataViewCtrl's tree structure.
Use just one type, wxDataViewTreeNode, to represent any kind of node.
Previously a complicated structure that represented leaves and non-leaf
nodes differently was used. This make the code way too complicated and
caused some smaller bugs (see e.g. #13256).

As a side effect, this change makes the control react correctly to
changes in IsContainer() return values.

Also fixes #13256.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68913 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-27 13:24:19 +00:00
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