Public Member Functions

DADMgr Class Reference

This reference page is linked to from the following overview topics: Incremental Improvements.


Search for all occurrences

Detailed Description

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

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 virtual. 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.

#include <custcont.h>

Inheritance diagram for DADMgr:
Inheritance graph
[legend]

List of all members.

Public Member Functions

virtual SClass_ID  GetDragType (HWND hwnd, POINT p)=0
virtual BOOL  IsNew (HWND hwnd, POINT p, SClass_ID type)
virtual BOOL  OkToDrop (ReferenceTarget *dropThis, HWND hfrom, HWND hto, POINT p, SClass_ID type, BOOL isNew=FALSE)=0
virtual HCURSOR  DropCursor (ReferenceTarget *dropThis, HWND hfrom, HWND hto, POINT p, SClass_ID type, BOOL isNew=FALSE)
virtual int  SlotOwner ()
virtual ReferenceTarget GetInstance (HWND hwnd, POINT p, SClass_ID type)=0
virtual ReferenceTarget GetDestinationInstance (HWND hwnd, POINT p, SClass_ID type)
virtual void  Drop (ReferenceTarget *dropThis, HWND hwnd, POINT p, SClass_ID type, DADMgr *srcMgr=NULL, BOOL bSrcClone=FALSE)=0
virtual void  SameWinDragAndDrop (HWND h1, POINT p1, POINT p2)
virtual BOOL  LetMeHandleLocalDAD ()
virtual void  LocalDragAndDrop (HWND h1, HWND h2, POINT p1, POINT p2)
virtual BOOL  AutoTooltip ()
virtual BOOL  CopyOnly (HWND hwnd, POINT p, SClass_ID type)
virtual BOOL  AlwaysSendButtonMsgsOnDrop ()
virtual INT_PTR  Execute (int cmd, ULONG_PTR arg1=0, ULONG_PTR arg2=0, ULONG_PTR arg3=0)
virtual BOOL  OkToDropInstance (ReferenceTarget *dropThis, HWND hfrom, HWND hto, POINT p, SClass_ID type)

Member Function Documentation

virtual SClass_ID GetDragType ( HWND  hwnd,
POINT  p 
) [pure virtual]
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).

Implemented in TexDADMgr, and MtlDADMgr.

virtual BOOL IsNew ( HWND  hwnd,
POINT  p,
SClass_ID  type 
) [inline, virtual]
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; }
{ return FALSE; } 
virtual BOOL OkToDrop ( ReferenceTarget dropThis,
HWND  hfrom,
HWND  hto,
POINT  p,
SClass_ID  type,
BOOL  isNew = FALSE 
) [pure virtual]
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.
Returns:
TRUE if the specified item can be dropped; otherwise FALSE.

Implemented in TexDADMgr, and MtlDADMgr.

virtual HCURSOR DropCursor ( ReferenceTarget dropThis,
HWND  hfrom,
HWND  hto,
POINT  p,
SClass_ID  type,
BOOL  isNew = FALSE 
) [inline, virtual]
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;}
{ return NULL;}
virtual int SlotOwner ( ) [inline, virtual]
Remarks:
Returns a predefined value to indicate the source of the drag.
Returns:
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. OWNER_MATERIAL_EXPLORER

From the material explorer.
Default Implementation:
{ return OWNER_MTL_TEX; }

Reimplemented in TexDADMgr, and MtlDADMgr.

{ return OWNER_MTL_TEX; } 
virtual ReferenceTarget* GetInstance ( HWND  hwnd,
POINT  p,
SClass_ID  type 
) [pure virtual]
Remarks:
Return a pointer to the drag source.
Parameters:
HWND hwnd

The source window where the mouse down occurred.

POINT p

The point to drag from (position within hwnd).

SClass_ID type

The super class ID of the item to create.

Implemented in TexDADMgr, and MtlDADMgr.

virtual ReferenceTarget* GetDestinationInstance ( HWND  hwnd,
POINT  p,
SClass_ID  type 
) [inline, virtual]
Remarks:
Return a pointer to the drag destination. For window which won't scroll automatically during drag and drop, just use the default implementation.
Parameters:
HWND hwnd

The destination window where the mouse up occurred.

POINT p

The point to drop to (position within hwnd).

SClass_ID type

The super class ID of the item.
Default Implementation:
{ return GetInstance(hwnd, p, type); }
        { return GetInstance(hwnd, p, type);}
virtual void Drop ( ReferenceTarget dropThis,
HWND  hwnd,
POINT  p,
SClass_ID  type,
DADMgr srcMgr = NULL,
BOOL  bSrcClone = FALSE 
) [pure virtual]
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.

DADMgr* srcMgr

The source DADMgr pointer. NULL by default.

BOOL bSrcClone

TRUE if the dropThis is a clone of the drag source object, FALSE otherwise. FALSE by default

Implemented in TexDADMgr, and MtlDADMgr.

virtual void SameWinDragAndDrop ( HWND  h1,
POINT  p1,
POINT  p2 
) [inline, virtual]
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:
{}
{}
virtual BOOL LetMeHandleLocalDAD ( ) [inline, virtual]
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; }

Reimplemented in TexDADMgr, and MtlDADMgr.

{ return 0; }
virtual void LocalDragAndDrop ( HWND  h1,
HWND  h2,
POINT  p1,
POINT  p2 
) [inline, virtual]
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:
{}

Reimplemented in TexDADMgr, and MtlDADMgr.

{}
virtual BOOL AutoTooltip ( ) [inline, virtual]
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; }

Reimplemented in TexDADMgr, and MtlDADMgr.

{ return FALSE; }
virtual BOOL CopyOnly ( HWND  hwnd,
POINT  p,
SClass_ID  type 
) [inline, virtual]
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; }
{ return FALSE; } 
virtual BOOL AlwaysSendButtonMsgsOnDrop ( ) [inline, virtual]
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; }
{ return FALSE; }
virtual INT_PTR Execute ( int  cmd,
ULONG_PTR  arg1 = 0,
ULONG_PTR  arg2 = 0,
ULONG_PTR  arg3 = 0 
) [inline, virtual]
Remarks:
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.
Returns:
An integer return value (defined uniquely for each cmd).
Default Implementation:
{ return 0; }
{ return 0; } 
virtual BOOL OkToDropInstance ( ReferenceTarget dropThis,
HWND  hfrom,
HWND  hto,
POINT  p,
SClass_ID  type 
) [inline, virtual]
Remarks:
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; }
{ return TRUE; }

DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr
DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr DADMgr