Graphisoft®

Dialog ManagerVersion: 2.0

ListBoxDropTargetObserver::ListBoxDropped

Event handler for the drag dropped notification.

virtual void ListBoxDropped (
    const ListBoxDropTargetEvent & 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

When a drop event occurs it is time to insert data into the drop target. If you provided custom feedback, now is the time to erase it.

Example

// Method Example:
void	DragTab2Observer::ListBoxDropped (const DG::ListBoxDropTargetEvent& ev, DG::DragDrop::Effect* effect)
{
	if (ev.GetSource () == &tabPage->listBox) {
		ULong i;
		short insertPos = ev.GetInsertPosition ();
		char* text;
		GS::VAArray<char*> textArray;	//array used to memorize list item texts

		if (ev.HasDataFormat ('FILE')) {
			ULong nLocation = ev.GetLocationCount ();

			char itemText[256];
			sprintf (itemText, "%d ", nLocation);
			tabPage->staticNumber.SetText (itemText);

			tabPage->listBox.DeleteItem (DG::ListBox::AllItems);
			for (ULong m = 0; m < nLocation; m++) {
				IO::Location location;
				if (ev.GetLocation (m, location)) {
					IO::Path filename;
					location.ToPath (&filename);
					tabPage->listBox.AppendItem ();
					tabPage->listBox.SetTabItemText (DG::ListBox::BottomItem, 1, filename);
				}
			}
		} else if (ev.HasDataFormat ('LBEX') || ev.HasDataFormat ('LBDR')) {
			DG::ListBox* sourceList = ev.GetListBoxSource ();			// Getting the source listbox control
			for (i = 0; i < 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);							// Getting the text of the selected items
			}
			if (*effect == DG::DragDrop::Move) {						// If move occurs than delete the selected elements from the source
				for (long j = ev.GetItemCount () - 1; j >= 0 ; j--) {
					short listItem = ev.GetListBoxItem (j);
					sourceList->DeleteItem (listItem);
					if (listItem <= insertPos && sourceList->GetId () == tabPage->listBox.GetId () &&
						sourceList->GetPanelId () == tabPage->listBox.GetPanelId ())
						insertPos--;
				}
			}
			short tempInsPos = static_cast<short> (insertPos + 1);
			tabPage->listBox.DeselectItem (DG::ListBox::AllItems);		// Deselect the original selection
			for (i = 0; i < ev.GetItemCount (); i++) {					// Insert elements in the target list, than select them.
				tabPage->listBox.InsertItem (tempInsPos);
				tabPage->listBox.SelectItem (tempInsPos);
				tabPage->listBox.SetTabItemText (tempInsPos++, 1, textArray[i + 1]);
				BMKillPtr (&textArray[i + 1]);
			}
		}
	}
}

Dropped event handler for list box controls. This example includes file and list box drag source drag and drop operations.