+
+ /* Delete the selection */
+ if( key == KEY_DELETE )
+ {
+ /* Find first non selected item before m_pLastSelected */
+ VarTree::Iterator it_sel = m_flat ? m_rTree.firstLeaf()
+ : m_rTree.begin();
+ for( it = m_flat ? m_rTree.firstLeaf() : m_rTree.begin();
+ it != m_rTree.end();
+ it = m_flat ? m_rTree.getNextLeaf( it )
+ : m_rTree.getNextVisibleItem( it ) )
+ {
+ if( &*it == m_pLastSelected ) break;
+ if( !it->m_selected ) it_sel = it;
+ }
+
+ /* Delete selected stuff */
+ m_rTree.delSelected();
+
+ /* Select it_sel */
+ it_sel->m_selected = true;
+ m_pLastSelected = &*it_sel;
+ }
+ else if( key == KEY_PAGEDOWN )
+ {
+ it = m_firstPos;
+ int i = (int)(maxItems()*1.5);
+ while( i >= 0 )
+ {
+ VarTree::Iterator it_old = it;
+ it = m_flat ? m_rTree.getNextLeaf( it )
+ : m_rTree.getNextVisibleItem( it );
+ /* End is already visible, dont' scroll */
+ if( it == m_rTree.end() )
+ {
+ it = it_old;
+ break;
+ }
+ needShow = true;
+ i--;
+ }
+ if( needShow )
+ {
+ ensureVisible( it );
+ makeImage();
+ notifyLayout();
+ return;
+ }
+ }
+ else if (key == KEY_PAGEUP )
+ {
+ it = m_firstPos;
+ int i = maxItems();
+ while( i >= maxItems()/2 )
+ {
+ it = m_flat ? m_rTree.getPrevLeaf( it )
+ : m_rTree.getPrevVisibleItem( it );
+ /* End is already visible, dont' scroll */
+ if( it == ( m_flat ? m_rTree.firstLeaf() : m_rTree.begin() ) )
+ {
+ break;
+ }
+ i--;
+ }
+ ensureVisible( it );
+ makeImage();
+ notifyLayout();
+ return;
+ }
+
+
+ for( it = m_flat ? m_rTree.firstLeaf() : m_rTree.begin();
+ it != m_rTree.end();
+ it = m_flat ? m_rTree.getNextLeaf( it )
+ : m_rTree.getNextVisibleItem( it ) )