Merge branch 'generic-treectrl-fixes'

Several improvements to generic wxTreeCtrl.

See https://github.com/wxWidgets/wxWidgets/pull/1765
This commit is contained in:
Vadim Zeitlin
2020-03-19 01:13:49 +01:00
2 changed files with 55 additions and 24 deletions

View File

@@ -357,6 +357,7 @@ void wxTreeCtrlBase::OnCharHook(wxKeyEvent& event)
wxFALLTHROUGH;
case WXK_RETURN:
case WXK_NUMPAD_ENTER:
EndEditLabel(GetFocusedItem(), discardChanges);
// Do not call Skip() below.

View File

@@ -3081,8 +3081,8 @@ void wxGenericTreeCtrl::OnChar( wxKeyEvent &event )
// ' ' | return : activate
// up : go up (not last children!)
// down : go down
// left : go to parent
// right : open if parent and go next
// left : collapse or go to parent
// right : expand or go to first child
// home : go to root
// end : go to last item without opening parents
// alnum : start or continue searching for the item with this prefix
@@ -3210,28 +3210,57 @@ void wxGenericTreeCtrl::OnChar( wxKeyEvent &event )
}
break;
// left arrow goes to the parent
// left arrow collapses or goes to the parent if it's not expanded
case WXK_LEFT:
{
wxTreeItemId prev = GetItemParent( m_current );
if ((prev == GetRootItem()) && HasFlag(wxTR_HIDE_ROOT))
if (m_current == GetRootItem().m_pItem && HasFlag(wxTR_HIDE_ROOT))
{
// don't go to root if it is hidden
prev = GetPrevSibling( m_current );
// don't try to collapse hidden root item
// (which can be the current one when the tree is empty)
break;
}
if (prev)
if (IsExpanded(m_current))
{
DoSelectItem( prev, unselect_others, extended_select );
Collapse(m_current);
}
else
{
// select parent unless it's the hidden root
wxTreeItemId parent = GetItemParent(m_current);
if (parent && (parent != GetRootItem() || !HasFlag(wxTR_HIDE_ROOT)))
{
DoSelectItem(parent, unselect_others, extended_select);
}
}
}
break;
// right arrow expands or goes to first child if it's already expanded
case WXK_RIGHT:
// right arrow just expand the item will be fine
if (m_current != GetRootItem().m_pItem || !HasFlag(wxTR_HIDE_ROOT))
Expand(m_current);
//else: don't try to expand hidden root item (which can be the
// current one when the tree is empty)
{
if (m_current == GetRootItem().m_pItem && HasFlag(wxTR_HIDE_ROOT))
{
// don't try to expand hidden root item
// (which can be the current one when the tree is empty)
break;
}
if (HasChildren(m_current))
{
if (IsExpanded(m_current))
{
wxTreeItemIdValue cookie;
wxTreeItemId child = GetFirstChild(m_current, cookie);
if (child)
{
DoSelectItem(child, unselect_others, extended_select);
}
}
else
{
Expand(m_current);
}
}
}
break;
case WXK_DOWN:
@@ -3789,18 +3818,19 @@ void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event )
GetEventHandler()->ProcessEvent(nevent);
}
// this facilitates multiple-item drag-and-drop
if ( /* item && */ HasFlag(wxTR_MULTIPLE))
// Don't deselect anything if we're just collapsing or expanding
// the item.
if ( !(flags & wxTREE_HITTEST_ONITEMBUTTON) )
{
wxArrayTreeItemIds selections;
size_t count = GetSelections(selections);
if (count > 1 &&
!event.CmdDown() &&
!event.ShiftDown())
// this facilitates multiple-item drag-and-drop
if ( HasFlag(wxTR_MULTIPLE) &&
!(event.CmdDown() || event.ShiftDown()) )
{
DoSelectItem(item, true, false);
wxArrayTreeItemIds selections;
if ( GetSelections(selections) > 1 )
{
DoSelectItem(item, true, false);
}
}
}