+ if (m_current == 0)
+ {
+ event.Skip();
+ return;
+ }
+
+ switch (event.KeyCode())
+ {
+ case '+':
+ case WXK_ADD:
+ {
+ if (HasChildren(m_current) && !IsExpanded(m_current))
+ {
+ Expand(m_current);
+ }
+ return;
+ }
+ case '-':
+ case WXK_SUBTRACT:
+ {
+ if (IsExpanded(m_current))
+ {
+ Collapse(m_current);
+ }
+ return;
+ }
+ case ' ':
+ case WXK_RETURN:
+ {
+ wxTreeEvent event( wxEVT_COMMAND_TREE_KEY_DOWN, GetId() );
+ event.m_item = m_current;
+ event.m_code = 0;
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( event );
+ return;
+ }
+ case WXK_UP:
+ {
+ wxTreeItemId prev = GetPrevSibling( m_current );
+ if (prev != 0)
+ {
+ SelectItem( prev );
+ EnsureVisible( prev );
+ }
+ else
+ {
+ prev = GetParent( m_current );
+ if (prev)
+ {
+ EnsureVisible( prev );
+ SelectItem( prev );
+ }
+ }
+ return;
+ }
+ case WXK_DOWN:
+ {
+ if (IsExpanded(m_current))
+ {
+ long cookie = 0;
+ wxTreeItemId child = GetFirstChild( m_current, cookie );
+ SelectItem( child );
+ EnsureVisible( child );
+ }
+ else
+ {
+ wxTreeItemId next = GetNextSibling( m_current );
+ if (next == 0)
+ {
+ wxTreeItemId current = m_current;
+ while (current && !next)
+ {
+ current = GetParent( current );
+ if (current) next = GetNextSibling( current );
+ }
+ }
+ if (next != 0)
+ {
+ SelectItem( next );
+ EnsureVisible( next );
+ }
+ }
+ return;
+ }
+ }