DADMgr Class Reference

#include <custcont.h>

Class Description

See also
Class ReferenceTarget
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.
+ Inheritance diagram for DADMgr:

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 ReferenceTargetGetInstance (HWND hwnd, POINT p, SClass_ID type)=0
 
virtual ReferenceTargetGetDestinationInstance (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)
 
- Public Member Functions inherited from InterfaceServer
virtual UtilExport ~InterfaceServer ()
 Destructor. More...
 
virtual UtilExport BaseInterfaceGetInterface (Interface_ID id)
 

Additional Inherited Members

- Static Public Member Functions inherited from MaxHeapOperators
static UtilExport voidoperator new (size_t size)
 Standard new operator used to allocate objects If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e)
 Standard new operator used to allocate objects if there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new (size_t size, const char *filename, int line)
 New operator used to allocate objects that takes the filename and line number where the new was called If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, int block_type, const char *filename, int line)
 New operator used to allocate objects that takes the type of memory, filename and line number where the new was called If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e, const char *filename, int line)
 New operator used to allocate objects that takes the filename and line number where the new was called If there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new (size_t size, unsigned long flags)
 New operator used to allocate objects that takes extra flags to specify special operations If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e, unsigned long flags)
 New operator used to allocate objects that takes extra flags to specify special operations If there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new[] (size_t size)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new[] (size_t size, const char *filename, int line)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new[] (size_t size, int block_type, const char *filename, int line)
 New operator used to allocate arrays of objects. More...
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e, const char *filename, int line)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new[] (size_t size, unsigned long flags)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e, unsigned long flags)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned. More...
 
static UtilExport void operator delete (void *ptr)
 Standard delete operator used to deallocate an object If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e)
 Standard delete operator used to deallocate an object If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete (void *ptr, const char *filename, int line)
 Delete operator used to deallocate an object that takes the filename and line number where the delete was called If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete (void *ptr, int block_type, const char *filename, int line)
 Delete operator used to deallocate an object that takes the type of memory, filename and line number where the delete was called If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e, const char *filename, int line)
 Delete operator used to deallocate an object that takes the filename and line number where the delete was called If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete (void *ptr, unsigned long flags)
 Delete operator used to deallocate an object that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e, unsigned long flags)
 Delete operator used to deallocate an object that takes extra flags to specify special operations If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete[] (void *ptr)
 Standard delete operator used to deallocate an array of objects If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e)
 Standard delete operator used to deallocate an array of objects If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete[] (void *ptr, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the filename and line number where the delete was called If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete[] (void *ptr, int block_type, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the type of memory, filename and line number where the delete was called If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the filename and line number where the delete was called If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete[] (void *ptr, unsigned long flags)
 Delete operator used to deallocate an array of objects that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e, unsigned long flags)
 Delete operator used to deallocate an array of objects that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, void *placement_ptr)
 Placement new operator. More...
 
static UtilExport void operator delete (void *ptr, void *placement_ptr)
 Placement delete operator. More...
 
static UtilExport voidaligned_malloc (size_t size, size_t alignment)
 Allocates memory on a specified alignment boundary. More...
 
static UtilExport voidaligned_realloc (void *ptr, size_t size, size_t alignment)
 Reallocates memory on a specified alignment boundary. More...
 
static UtilExport void aligned_free (void *ptr)
 Frees a block of memory that was allocated with aligned_malloc/aligned_realloc. More...
 

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 MtlDADMgr, and TexDADMgr.

virtual BOOL IsNew ( HWND  hwnd,
POINT  p,
SClass_ID  type 
)
inlinevirtual
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; }
144 { 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 MtlDADMgr, and TexDADMgr.

virtual HCURSOR DropCursor ( ReferenceTarget dropThis,
HWND  hfrom,
HWND  hto,
POINT  p,
SClass_ID  type,
BOOL  isNew = FALSE 
)
inlinevirtual
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;}
182 { return NULL;}
#define NULL
Definition: autoptr.h:18
virtual int SlotOwner ( )
inlinevirtual
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 MtlDADMgr, and TexDADMgr.

207 { return OWNER_MTL_TEX; }
#define OWNER_MTL_TEX
Definition: custcont.h:59
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 MtlDADMgr, and TexDADMgr.

virtual ReferenceTarget* GetDestinationInstance ( HWND  hwnd,
POINT  p,
SClass_ID  type 
)
inlinevirtual
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); }
231  { return GetInstance(hwnd, p, type);}
virtual ReferenceTarget * GetInstance(HWND hwnd, POINT p, SClass_ID type)=0
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 MtlDADMgr, and TexDADMgr.

virtual void SameWinDragAndDrop ( HWND  h1,
POINT  p1,
POINT  p2 
)
inlinevirtual
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:
{}
264 {}
virtual BOOL LetMeHandleLocalDAD ( )
inlinevirtual
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 MtlDADMgr, and TexDADMgr.

272 { return 0; }
virtual void LocalDragAndDrop ( HWND  h1,
HWND  h2,
POINT  p1,
POINT  p2 
)
inlinevirtual
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 MtlDADMgr, and TexDADMgr.

288 {}
virtual BOOL AutoTooltip ( )
inlinevirtual
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 MtlDADMgr, and TexDADMgr.

296 { return FALSE; }
virtual BOOL CopyOnly ( HWND  hwnd,
POINT  p,
SClass_ID  type 
)
inlinevirtual
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; }
311 { return FALSE; }
virtual BOOL AlwaysSendButtonMsgsOnDrop ( )
inlinevirtual
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; }
318 { return FALSE; }
virtual INT_PTR Execute ( int  cmd,
ULONG_PTR  arg1 = 0,
ULONG_PTR  arg2 = 0,
ULONG_PTR  arg3 = 0 
)
inlinevirtual
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; }
337 { return 0; }
virtual BOOL OkToDropInstance ( ReferenceTarget dropThis,
HWND  hfrom,
HWND  hto,
POINT  p,
SClass_ID  type 
)
inlinevirtual
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; }
355 { return TRUE; }