Class DADMgr

3DS Max Plug-In SDK

Class DADMgr

See Also: Class ReferenceTarget, List of Super Class IDs.

class DADMgr : public InterfaceServer

Description:

Drag and drop functionality has been expanded to include all map and material buttons¾including those in the non-standard materials, plus most cases of bitmap buttons. As a result, whenever you see a button representing a material or map you can drag the button over a like button to display the Swap/Copy/Cancel dialog. Likewise, you can drag any materials or maps from the modeless version of the Materials/Maps Browser.

The drag-and-drop functions distinguish between material maps and bitmaps. A bitmap is an image file, such as a .tga, or .jpg. A map is an image used by the Materials Editor. It might consist of an image file, but could just as easily be a parametric image, such as Checkers or Noise, or it could be a map tree consisting of several different types of maps or bitmaps. Users can drag any map slot or button to any other map slot or button¾including the sample slots. Users can drag the Bitmap button in the Bitmap Parameters rollout to the Bitmap button in the Image area of the Displace modifier, and vice-versa.

Users can drag from:

· Sample slots

· Browser lists (text or iconic)

· The sample-sphere preview window in the Browser.

· Material map buttons, including:

· The buttons in the Maps rollout

· The shortcut map buttons

· Any map buttons at any level

· Submaterial buttons, such as those found in the Multi/Subobject material

· Projector light map button

· Environment background map button

· Fog Color and Opacity maps buttons

Users can drag to:

· Objects in the viewports

· The Type button in the Materials Editor from the Browser.

· All of the items in the FROM list, with this exception: You can only drag to the Browser when it displays the material library.

All methods of this class are implemented by the plug-in. For developers of plug-in textures and materials see Class TexDADMgr, Class MtlDADMgr. These classes provide implementations of these methods and the objects can simply be used.

Methods:

Prototype:

virtual SClass_ID GetDragType(HWND hwnd, POINT p)=0;

Remarks:

This method is called on the item that supports drag and drop to see what (if anything) can be dragged from the point p. This method returns a super class id to indicate the type of item that can be dragged away. If it does not support anything being dragged from the specified point a SClass_ID of 0 should be returned.

Parameters:

HWND hwnd

The source window handle

POINT p

The screen point (relative to the window upper left as 0,0).

Prototype:

virtual BOOL IsNew(HWND hwnd, POINT p, SClass_ID type);

Remarks:

If the method GetInstance() creates a new instance every time it is called, then the this method should return TRUE. Otherwise it should return FALSE. This prevents GetInstance() from being called repeatedly as the drag progresses.

Parameters:

HWND hwnd

The source window handle.

POINT p

The point to drag from.

SClass_ID type

The super class ID to create.

Default Implementation:

{ return FALSE; }

Prototype:

virtual ReferenceTarget *GetInstance(HWND hwnd, POINT p, SClass_ID type)=0;

Remarks:

This method should return a pointer to the drag source.

Parameters:

HWND hwnd

The source window where the mouse down occured.

POINT p

The point to drag from (position within hwnd).

SClass_ID type

The super class ID of the item to create.

Prototype:

virtual BOOL OkToDrop(ReferenceTarget *dropThis, HWND hfrom, HWND hto, POINT p, SClass_ID type, BOOL isNew = FALSE)=0;

Remarks:

This method is called on potential dropee to see if can accept the specified type at the specified point.

Parameters:

ReferenceTarget *dropThis

A pointer to the item to check.

HWND hfrom

The window handle of the source.

HWND hto

The window handle of the destination.

POINT p

The point to check.

SClass_ID type

The super class ID of dropThis.

BOOL isNew = FALSE

TRUE if the item is a new instance; otherwise FALSE.

Return Value:

TRUE if the specified item can be dropped; otherwise FALSE.

Prototype:

virtual HCURSOR DropCursor(ReferenceTarget *dropThis, HWND hfrom, HWND hto, POINT p, SClass_ID type, BOOL isNew = FALSE);

Remarks:

This method is called on a potential target to allow it to substitute custom cursors. It returns the handle for the custom cursor to use (or NULL to ignore).

Parameters:

ReferenceTarget *dropThis

The pointer to the item to check.

HWND hfrom

The window handle of the source.

HWND hto

The window handle of the destination.

POINT p

The point to check.

SClass_ID type

The super class ID of dropThis.

BOOL isNew = FALSE

TRUE if the item is a new instance; otherwise FALSE.

Default Implementation:

{ return NULL;}

Prototype:

virtual int SlotOwner();

Remarks:

Returns a predefined value to indicate the source of the drag.

Return Value:

One of the following values:

OWNER_MEDIT_SAMPLE

From a materials editor sample slot.

OWNER_NODE

From a node in the scene.

OWNER_MTL_TEX

From a button in a material or texture.

OWNER_SCENE

From a button in a light, modifier, atmospheric effect, etc.

OWNER_BROWSE_NEW

From the browser in the new category.

OWNER_BROWSE_LIB

From the browser in the library category.

OWNER_BROWSE_MEDIT

From the browser in the materials editor category.

OWNER_BROWSE_SCENE

From the browser in the scene category.

Default Implementation:

{ return OWNER_MTL_TEX; }

Prototype:

virtual void Drop(ReferenceTarget *dropThis, HWND hwnd, POINT p, SClass_ID type)=0;

Remarks:

This is the method called to actually process the drop operation. This routine is called on the target with the pointer returned by the source's GetInstance(), or possibly a clone of it as the dropThis.

Parameters:

ReferenceTarget *dropThis

A pointer to the item to drop.

HWND hwnd

The destination window handle (where the mouse was released).

POINT p

The destination point (within hwnd).

SClass_ID type

The type of object being dropped -- the super class ID of dropThis.

Prototype:

virtual void SameWinDragAndDrop(HWND h1, POINT p1, POINT p2);

Remarks:

This method is called when the source and target WINDOW are the same.

Parameters:

HWND h1

The source/target window handle.

POINT p1

The source point.

POINT p2

The target point.

Default Implementation:

{}

Prototype:

virtual BOOL LetMeHandleLocalDAD();

Remarks:

This lets the manager know whether to call LocalDragAndDrop() if the same DADMgr is handling both the source and target windows, or just ignore this condition. Return TRUE if LocalDragAndDrop() should be called; otherwise FALSE.

Default Implementation:

{ return 0; }

Prototype:

virtual void LocalDragAndDrop(HWND h1, HWND h2, POINT p1, POINT p2);

Remarks:

This is called if the same DADMgr is handling both the source and target windows, if LetMeHandleLocalDAD() returned TRUE.

Parameters:

HWND h1

The window handle.

HWND h2

The window handle.

POINT p1

The drag source point.

POINT p2

The drop destination point.

Default Implementation:

{}

Prototype:

virtual BOOL AutoTooltip();

Remarks:

If this method returns TRUE, then Custom Buttons that use this DAD Manager will automatically support a tooltip that matches the button text. Note that this method will only show a tooltip when the button text is too long and thus exceeds the button size.

Default Implementation:

{ return FALSE; }

Prototype:

virtual BOOL CopyOnly(HWND hwnd, POINT p, SClass_ID type);

Remarks:

If a drag source doesn't want any references being made to the instance returned, then this method should return TRUE: it will force a copy to be made; otherwise return FALSE.

Parameters:

HWND hwnd

The source window handle.

POINT p

The source point (within hwnd).

SClass_ID type

The type of object being dragged.

 

Default Implementation:

{ return FALSE; }

Prototype:

virtual BOOL AlwaysSendButtonMsgsOnDrop();

Remarks:

Normally the mouse down and mouse up messages are not sent to the source window when doing drag and drop, but if you need them, return TRUE.

Default Implementation:

{ return FALSE; }

Prototype:

virtual BOOL OkToDropInstance(ReferenceTarget *dropThis, HWND hfrom, HWND hto, POINT p, SClass_ID type);

Remarks:

This method is available in release 4.0 and later only.

This method is called on potential target to see if can instance "dropThis" at the specified point. Returns TRUE if it is okay to drop the specified item and FALSE if not.

Parameters:

ReferenceTarget *dropThis

The pointer to the item to check.

HWND hfrom

The window handle of the source.

HWND hto

The window handle of the destination.

POINT p

The point to check.

SClass_ID type

The super class ID of dropThis.

Default Implementation:

{ return TRUE; }

Prototype:

virtual INT_PTR Execute(int cmd, ULONG arg1=0, ULONG arg2=0, ULONG arg3=0);

Remarks:

This method is available in release 3.0 and later only.

This is a general purpose function that allows the API to be extended in the future. The 3ds max development team can assign new cmd numbers and continue to add functionality to this class without having to 'break' the API.

This is reserved for future use.

Parameters:

int cmd

The command to execute.

ULONG arg1=0

Optional argument 1 (defined uniquely for each cmd).

ULONG arg2=0

Optional argument 2.

ULONG arg3=0

Optional argument 3.

Return Value:

An integer return value (defined uniquely for each cmd).

Default Implementation:

{ return 0; }