EVT_CHAR (wxGenericTreeCtrl::OnChar)
EVT_SET_FOCUS (wxGenericTreeCtrl::OnSetFocus)
EVT_KILL_FOCUS (wxGenericTreeCtrl::OnKillFocus)
- EVT_IDLE (wxGenericTreeCtrl::OnIdle)
END_EVENT_TABLE()
#if !defined(__WXMSW__) || defined(__WIN16__) || defined(__WXUNIVERSAL__)
le.m_item = (long) item;
le.SetEventObject( this );
le.m_label = wxEmptyString;
- le.m_editCancelled = FALSE;
+ le.m_editCancelled = TRUE;
GetEventHandler()->ProcessEvent( le );
}
}
else if ( event.LeftUp() )
{
+ // this facilitates multiple-item drag-and-drop
+
+ if (item && HasFlag(wxTR_MULTIPLE))
+ {
+ wxArrayTreeItemIds selections;
+ size_t count = GetSelections(selections);
+
+ if (count > 1 &&
+ !event.ControlDown() &&
+ !event.ShiftDown())
+ {
+ SelectItem(item, true, false);
+ }
+ }
+
if ( m_lastOnSame )
{
if ( (item == m_current) &&
return;
}
- // how should the selection work for this event?
- bool is_multiple, extended_select, unselect_others;
- EventFlagsToSelType(GetWindowStyleFlag(),
- event.ShiftDown(),
- event.ControlDown(),
- is_multiple, extended_select, unselect_others);
- SelectItem(item, unselect_others, extended_select);
+ // clear the previously selected items, if the
+ // user clicked outside of the present selection.
+ // otherwise, perform the deselection on mouse-up.
+ // this allows multiple drag and drop to work.
+
+ if (!IsSelected(item))
+ {
+ // how should the selection work for this event?
+ bool is_multiple, extended_select, unselect_others;
+ EventFlagsToSelType(GetWindowStyleFlag(),
+ event.ShiftDown(),
+ event.ControlDown(),
+ is_multiple, extended_select, unselect_others);
+
+ SelectItem(item, unselect_others, extended_select);
+ }
+
// For some reason, Windows isn't recognizing a left double-click,
// so we need to simulate it here. Allow 200 milliseconds for now.
}
}
-void wxGenericTreeCtrl::OnIdle( wxIdleEvent &WXUNUSED(event) )
+void wxGenericTreeCtrl::OnInternalIdle()
{
+ wxWindow::OnInternalIdle();
+
// Check if we need to select the root item
// because nothing else has been selected.
// Delaying it means that we can invoke event handlers