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.