TreeViewDropTargetObserver::TreeViewDropped
virtual void TreeViewDropped ( const TreeViewDropTargetEvent & ev, DragDrop::Effect * effect );
Parameters
- ev
A reference to the event. - effect
Drag and drop effect can take the following values: DragDrop::Reject, DragDrop::Accept, DragDrop::Copy, DragDrop::Move, DragDrop::Link, DragDrop::Delete.
Description
Example
// Method Example: void DragTab2Observer::TreeViewDropped (const DG::TreeViewDropTargetEvent& ev, DG::DragDrop::Effect* effect) { if (ev.GetSource () == &tabPage->treeView) { long i; long insertPos = ev.GetInsertPosition (); DG::DragDrop::RelativePos relativePos = ev.GetRelativePosition (); char* text; GS::VAArray<char*> textArray; // Array used to memorize list item texts GS::VAArray<long> validSelItems; // Array for treeview elements that are not inherited from each other. if (ev.HasDataFormat ('LBEX')) { DG::ListBox* sourceList = ev.GetListBoxSource (); for (i = 0; i < static_cast<long> (ev.GetItemCount ()); i++) { short listItem = ev.GetListBoxItem (i); ULong size = sourceList->GetTabItemTextLength (listItem, 1); text = BMAllocatePtr (size, ALLOCATE_CLEAR, 0); sourceList->GetTabItemText (listItem, 1, text, size); textArray.Insert (i + 1, text); } if (*effect == DG::DragDrop::Move) { for (long j = ev.GetItemCount () - 1; j >= 0 ; j--) { short listItem = ev.GetListBoxItem (j); sourceList->DeleteItem (listItem); } } tabPage->treeView.DeselectItem (DG::TreeView::AllItems); for (i = 0; i < static_cast<long> (ev.GetItemCount ()); i++) { long insTreeItem; if (relativePos == DG::DragDrop::InsertOn) { insTreeItem = tabPage->treeView.AppendItem (insertPos); } else { if (insertPos != DG::TreeView::RootItem && tabPage->treeView.IsItemExpanded (insertPos)) { insTreeItem = tabPage->treeView.InsertItem (insertPos, DG::TreeView::TopItem); } else { if (insertPos == DG::TreeView::RootItem) { insTreeItem = tabPage->treeView.InsertItem (insertPos, DG::TreeView::TopItem); } else { long parentItem = tabPage->treeView.GetItem (insertPos, DG::TreeView::Parent); insTreeItem = tabPage->treeView.InsertItem (parentItem, insertPos); } } } tabPage->treeView.SetItemText (insTreeItem, textArray[i + 1]); tabPage->treeView.SelectItem (insTreeItem); BMKillPtr (&textArray[i + 1]); } } else if (ev.HasDataFormat ('TVEX')) { DG::MultiSelTreeView* sourceTree = reinterpret_cast<DG::MultiSelTreeView*> (ev.GetTreeViewSource ()); for (i = ev.GetItemCount () - 1; i >= 0 ; i--) { long treeItem = ev.GetTreeViewItem (i); //Getting the selected treeview items from the source InsertItemRecursively (sourceTree, treeItem, insertPos, relativePos); } if (*effect == DG::DragDrop::Move) { for (i = ev.GetItemCount () - 1; i >= 0; i--) { long treeItem = ev.GetTreeViewItem (i); sourceTree->DeleteItem (treeItem); } } } } }
Drop event handling in tree view controls.