Merge branch 'generic-treectrl-fixes'
Several improvements to generic wxTreeCtrl. See https://github.com/wxWidgets/wxWidgets/pull/1765
This commit is contained in:
@@ -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.
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user