PA_GetDragAndDropInfo

4D - Documentation   Français   English   German   4D Plugin API, Command Theme List   4D Plugin API, Command Alphabetical List   Back   Previous   Next

version 2003


PA_GetDragAndDropInfo (params) PA_DragAndDropInfo

ParameterTypeDescription
paramsPA_PluginParametersParameters received in PluginMain
Function resultPA_DragAndDropInfoInformation on the Drag/Droppped object

Description

The routine PA_GetDragAndDropInfo returns a structure of type PA_DragAndDropInfo, which contains various information on the object being drag/dropped onto the area. This routine must be called when PA_GetAreaEvent returns eAE_Drop or eAE_AllowDrop. If it is called at another time, it does nothing, PA_GetLastError returns eER_BadEventCall, and, most importantly, the returned structure can contain garbage (the returned PA_DragAndDropInfo is not initialized to null values).

When the event is eAE_AllowDrop, the area can check the kind of object being dropped, and then allow or disallow the drop by calling PA_AllowDrop.

If the drag/drop is allowed and the user dropped the object, call PA_GetDragAndDropInfo again to retrieve its value.

The PA_DragAndDropInfo structure is defined in the "PublicTypes.h" header file, and this API contains its the main accessors (PA_GetDragAndDropKind, PA_GetDragAndDropVariable, PA_GetDragAndDropTableField).

typedef struct PA_DragAndDropInfo
{
   char   fReserved1[10];
   long   fToArrayIndice;   // index of element when destination is an array
   long   fReserved2[2];
   long   fFromArrayIndex;   // index of element when source is an array
   short   fFromProcess;
   short   fFromWhereV;   // where user clicks at first
   short   fFromWhereH;
   short   fToWhereV;      // where user release mouse button - _global_ coordinates
   short   fToWhereH;
   long   fReserved3;
   char   fVariableName[32];   // empty string or variable name if user drags a variable
   char   fInterProcess;
   short    fField;
   short   fTable;      // zero or table name if user drags a field from a table
} PA_DragAndDropInfo;

NOTE

The routines "Drag and Drop" are internal to 4th Dimension. The developer cannot use them with other applications.

NOTE

The coordinates included in the structure referring to the screen are global. The area must convert them (ScreenToClient under Windows and GlobalToLocal under MacOS) if those coordinates are used by it later.

Examples

(1) See the sample in Drag and drop with a plug-in area.

(2) Allow drag and drop only if the object is a real array element.

   /* . . . assume we are dispatching a PA_AreaEvent . . . */
      case eAE_AllowDrop:
      {
         char   allow = 0;
         long   index;
      // get the drag-drop info
         PA_GetDragAndDropInfo   ddi = PA_GetDragDropInfo(params);
      // if the object is a variable...
         if( PA_GetDragAndDropKind(ddi) == eDK_DragVariable )
         {
      // ... of type array long integer...
            if( PA_GetVariableKind(PA_GetDragAndDropVariable(params, &index)) == eVK_ArrayLongint )
      // ... we accept it.
               allow = 1;
            
         }
         PA_AllowDrop(params, allow);
      }
         break;

(3) Returns the process number owning the object.

   long GetSourceProcessOfTheObject(PA_PluginParameters params)
   {
      PA_DragAndDropInfo   ddi = PA_GetDragAndDropInfo(params);
      if( PA_GetLastError() == eER_NoErr)
         return ddi.fFromProcess;
      else
         return 0L.
   }

See Also

Drag and drop with a plugin area, PA_AllowDrop, PA_CustomizeDragOver, PA_GetDragPositions.

Error Handling

Use PA_GetLastError to see if an error occurred (eER_BadEventCall)


4D - Documentation   Français   English   German   4D Plugin API, Command Theme List   4D Plugin API, Command Alphabetical List   Back   Previous   Next