506 lines
17 KiB
C++
506 lines
17 KiB
C++
/*
|
|
* Project: Virtools Interface Plugin SDK
|
|
* File: VEP_PluginInterface.h
|
|
* Author: Thomas Vissieres
|
|
* Last check date: 11/19/2003
|
|
* optimized for Tab Size: 4
|
|
* Quick file summary: class used for communication between Virtools Interface Plugins, and Virtools Dev
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
#include "VEP_DllEditorLibDefines.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace VirtoolsExternalPlugin //-----------------------------------------
|
|
{
|
|
|
|
class KeyboardShortcutManager;
|
|
|
|
|
|
|
|
/*
|
|
* PluginInterface
|
|
* this structure is send to Virtools External Plugin with
|
|
* PluginInfo::m_PluginCallback callback
|
|
* and can be accessed from DllEditorDlg and DllToolbarDlg (see VEP_DllEditorDlg.h)
|
|
* It can be used to interact with Virtools Interface. You have acces to :
|
|
*
|
|
* -rendering functions
|
|
* -manipulation of selection in 3DEditor
|
|
* -launch object setups / know if an object is edited
|
|
* -Status Bar tools functions
|
|
* -CK centralized functions for copy and deletion (you should use them instead of using directly CK
|
|
* in order to Virtools Interface being aware of your action
|
|
* -an interface parameter pool: for better memory management, and instead of creating your own CKParameters,
|
|
* just ask for a parameter and free it when you want, or even forget about it, it will be deleted when you
|
|
* leave Virtools
|
|
* -Virtools Directories
|
|
* -Project Modified Flags Access
|
|
* -Drag and Drop
|
|
* -user menu added to Virtools main menu with user menu callback
|
|
* -Virtools Load and save functionalities
|
|
* -Exiting function
|
|
* -last notification send by Virtools Interface
|
|
* -a CKContext for CK access (see CK SDK)
|
|
* -a VersionControlInfo structure if a version control plugin is loaded and available.
|
|
* Thus you can use some Version Control in your plugin too
|
|
*
|
|
*/
|
|
class DLLEDITORLIB_CLASS_DECL PluginInterface
|
|
{
|
|
public:
|
|
|
|
enum DELETION_MODE {
|
|
DELETECKOBJECT_ASK = 1,
|
|
DELETECKOBJECT_CURRENT = 2,
|
|
DELETECKOBJECT_DEFAULT = 3,
|
|
DELETECKOBJECT_NODEP = 4,
|
|
DELETECKOBJECT_FULLDEP = 5,
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//UTILITIES FUNCTION FOR INTERFACE
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//rendering functions
|
|
|
|
//Render the 3d content in the 3dLayout at the next timer tic (internal to Virtools Dev)
|
|
void DoOneRender();
|
|
//Render the 3d content in the 3dLayout immediatly
|
|
void DoOneRenderNow();
|
|
//Blits the back buffer to the front bufferRender in the 3dLayout at the next timer tic (internal to Virtools Dev)
|
|
void DoOneBlit();
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//manipulation of selection in 3DEditor
|
|
|
|
//Clears 3dLayout selection
|
|
void Clear3dSelection(BOOL messages=TRUE,BOOL force=FALSE);
|
|
//Gets the number of selected items in the 3dLayout
|
|
int Get3dSelectionCount();
|
|
//Gets the selection in the 3dLayout
|
|
CKObjectArray* Get3dSelection();
|
|
|
|
//Adds an object
|
|
void AddTo3dSelection(CKObject* o,BOOL force=FALSE);
|
|
void AddTo3dSelection(CKObjectArray* o,BOOL force=FALSE);
|
|
|
|
void RemoveFrom3dSelection(CKObject* o,BOOL force=FALSE);
|
|
|
|
void Lock3dSelection(BOOL lock);
|
|
BOOL Is3dSelectionLocked();
|
|
|
|
void Notify3dSelectionChanged(void* sender=NULL); //set sender to DllEditorDlg::m_InterfaceOwner
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//object setups & editors
|
|
|
|
void OpenEditor(DWORD* guid,void* data); //param1 = & DWORD[2], param2 = optional data
|
|
void LaunchObjectSetup(CKObject* o);
|
|
BOOL IsObjectBeingEdited(CKObject* o);
|
|
void CuikShowInLevelManager(CK_ID* iIds,int iCount);
|
|
void CuikShowInHierarchyView(CK_ID* iIds,int iCount);
|
|
void CuikShowIn3DLayout(CK_ID* iIds,int iCount);
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Status Bar tools functions
|
|
|
|
void ShowLog();
|
|
void FlashBomb();
|
|
|
|
void SetSBSelectionInfo(const char* text);
|
|
void SetSBSBActionInfo(const char* text);
|
|
void SetSBXInfo(const char* text);
|
|
void SetSBYInfo(const char* text);
|
|
void SetSBZInfo(const char* text);
|
|
void SetSBErrorInfo(const char* text,BOOL beep=TRUE);
|
|
void SetSBInfoBar(const char* text);
|
|
void SetSBFpsInfo(const char* text);
|
|
void SetSBPlayCheck(BOOL check);
|
|
void SetSBRewindCheck(BOOL check);
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//CK centralized functions
|
|
|
|
BOOL DeleteCKObject(CK_ID id,DELETION_MODE mode,DWORD flags=0);
|
|
BOOL DeleteCKObject(CKObject* obj,DELETION_MODE mode,DWORD flags=0);
|
|
BOOL DeleteCKObjects(CKObjectArray* array,DELETION_MODE mode,DWORD flags=0);
|
|
BOOL DeleteCKObjects(XObjectArray* array,DELETION_MODE mode,DWORD flags=0);
|
|
|
|
void CopyCKObjects(XObjectArray* ToCopy, XObjectArray* Copy);
|
|
void CopyCKObjects(CKObjectArray* ToCopy, CKObjectArray* Copy);
|
|
void CopyCKObject(CKObject* ToCopy, CKObjectArray* Copy);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//INTERFACE PARAMETER : management of a pool of parameter to prevent ck_id overuse
|
|
|
|
CKParameterIn* GetInterfaceParameterIn(char* name=NULL,CKGUID guid=CKPGUID_NONE);
|
|
CKParameter* GetInterfaceParameter(char* name=NULL,CKGUID guid=CKPGUID_NONE);
|
|
CKParameterOut* GetInterfaceParameterOut(char* name=NULL,CKGUID guid=CKPGUID_NONE);
|
|
void FreeInterfaceParameterIn(CK_ID id);
|
|
void FreeInterfaceParameterOut(CK_ID id);
|
|
void FreeInterfaceParameter(CK_ID id);
|
|
void FreeInterfaceParameterIn(CKParameterIn * pin);
|
|
void FreeInterfaceParameterOut(CKParameterOut * pout);
|
|
void FreeInterfaceParameter(CKParameter * pout);
|
|
BOOL IsInterfaceParameter(CK_ID id);
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Virtools Directories
|
|
|
|
const char* GetImportDirectory();
|
|
const char* GetImportPlaceDirectory();
|
|
const char* GetImportCharacterDirectory();
|
|
const char* GetImportSceneDirectory();
|
|
const char* GetBehaviorSaveLoadDirectory();
|
|
const char* GetLevelSaveLoadDirectory();
|
|
const char* GetBitmapSaveLoadDirectory();
|
|
const char* GetVirtoolsDirectory();
|
|
const char* GetNMODirectory();
|
|
const char* GetVMODirectory();
|
|
const char* GetVSLDirectory();
|
|
|
|
void SetImportDirectory(char * n);
|
|
void SetImportPlaceDirectory(char * n);
|
|
void SetImportCharacterDirectory(char * n);
|
|
void SetImportSceneDirectory(char * n);
|
|
void SetBehaviorSaveLoadDirectory(char * n);
|
|
void SetLevelSaveLoadDirectory(char * n);
|
|
void SetBitmapSaveLoadDirectory(char * n);
|
|
void SetNMODirectory(char * n);
|
|
void SetVMODirectory(char * n);
|
|
void SetVSLDirectory(char * n);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Project Modified Flags Access
|
|
|
|
BOOL SetProjectModified(BOOL b);
|
|
BOOL IsProjectModified();
|
|
BOOL TestProjectModified();
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//DRAG & DROP
|
|
|
|
void BeginDrag(CUIKEntitySet * set,CImageList * img,POINT* hotspot,void *ownerfrom);
|
|
void DragStop();
|
|
void DragCont();
|
|
BOOL IsDragActive();
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//MENU MODIFICATION & USER MENU CALLBACK
|
|
|
|
CMenu* AddPluginMenu(LPCTSTR name,int maxIDs,HWND callbackHWND,VoidFunc1Param callback=NULL);
|
|
void RemovePluginMenu(CMenu* menu);
|
|
void ClearPluginMenu(CMenu* menu);
|
|
|
|
CMenu* AddPluginMenuItem(CMenu* menu,int commandID,LPCTSTR name,BOOL sep=FALSE,BOOL sub=FALSE);
|
|
void RemovePluginMenuItem(CMenu* menu,int commandID,BOOL bypos=FALSE);
|
|
|
|
void UpdatePluginMenu(CMenu* menu);
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//LOAD & SAVE
|
|
enum {
|
|
LOADAS_NORMAL = 1,
|
|
LOADAS_PLACE = 2,
|
|
LOADAS_CHARACTER = 3,
|
|
LOADAS_SCENE = 4,
|
|
}LOADAS;
|
|
|
|
BOOL NewComposition();
|
|
BOOL LoadComposition(const char* filename);
|
|
BOOL ImportFile(const char* filename,DWORD loadas=LOADAS_NORMAL);
|
|
BOOL SaveCurrentComposition();
|
|
BOOL SaveCurrentCompositionAs(const char* filename);
|
|
BOOL SaveCurrentCompositionAsVersion();
|
|
BOOL SaveFile(const char* filename,XObjectArray* array);
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//PAUSE
|
|
|
|
void Pause(BOOL b = TRUE);
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//NOTIFICATIONS
|
|
|
|
//call this function to be able to receive a notification from main Virtools Dev Interface
|
|
//works only after the call of OnInterfaceInit
|
|
void ObserveNotification(int notification,void* owner);
|
|
//send notification to interface
|
|
//works only after the call of OnInterfaceInit
|
|
HRESULT SendNotification(void* owner,UINT MsgID,DWORD Param1=0,DWORD Param2=0,CKScene* Context=NULL);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Data Resource control
|
|
|
|
//get opened data resource count
|
|
int GetOpenedDataResourceCount();
|
|
//get data resource path
|
|
BOOL GetDataResourcePath(int iPos,XString* oPath);
|
|
//close data resource
|
|
BOOL CloseDataResource(int iPos);
|
|
//open data resource
|
|
BOOL OpenDataResource(XString* iPath);
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Get last notification message
|
|
|
|
struct Notification
|
|
{
|
|
int messageID;
|
|
DWORD param1;
|
|
DWORD param2;
|
|
CKScene* scene;
|
|
};
|
|
|
|
const Notification* GetLastNotification() const;
|
|
const char* GetLastCompositionName();
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//CKContext
|
|
|
|
CKContext* GetCKContext();
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Version control
|
|
|
|
VersionControlInfo* GetVersionControlInfo();
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Keyboard shortcut manager
|
|
KeyboardShortcutManager* GetKeyboardShortcutManager();
|
|
void EditKeyboardShortcuts(const char* registeredCategoryName=NULL,const char* registeredShortcutName=NULL);
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// functions ptrs
|
|
private:
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//rendering functions
|
|
|
|
VoidFunc0Param m_CuikDoOneRender;
|
|
VoidFunc0Param m_CuikDoOneRenderNow;
|
|
VoidFunc0Param m_CuikDoOneBlit;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//manipulation of selection in 3DEditor
|
|
|
|
VoidFunc2Param m_CuikClearSelection;
|
|
DWORDFunc0Param m_CuikGetSelectionCount;
|
|
DWORDFunc0Param m_CuikGetSelection;
|
|
VoidFunc2Param m_CuikAddToSelection;
|
|
VoidFunc2Param m_CuikAddToSelection2;
|
|
VoidFunc2Param m_CuikRemoveFromSelection;
|
|
VoidFunc1Param m_CuikLockSelection;
|
|
DWORDFunc0Param m_CuikIsSelectionLocked;
|
|
VoidFunc1Param m_CuikNotifySelectionChanged;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//object setups
|
|
|
|
DWORDFunc1Param m_CuikIsObjectBeingEdited;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Status Bar tools functions
|
|
|
|
VoidFunc0Param m_CUIKShowLog;
|
|
VoidFunc0Param m_CUIKFlashBomb;
|
|
|
|
VoidFunc1Param m_SetSBSelectionInfo;
|
|
VoidFunc1Param m_SetSBSBActionInfo;
|
|
VoidFunc1Param m_SetSBXInfo;
|
|
VoidFunc1Param m_SetSBYInfo;
|
|
VoidFunc1Param m_SetSBZInfo;
|
|
VoidFunc2Param m_SetSBErrorInfo;
|
|
VoidFunc1Param m_SetSBInfoBar;
|
|
VoidFunc1Param m_SetSBFpsInfo;
|
|
VoidFunc1Param m_SetSBPlayCheck;
|
|
VoidFunc1Param m_SetSBRewindCheck;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//CK centralized functions
|
|
|
|
DWORDFunc3Param m_CUIKDeleteCKObject1;
|
|
DWORDFunc3Param m_CUIKDeleteCKObject2;
|
|
DWORDFunc3Param m_CUIKDeleteCKObject3;
|
|
DWORDFunc3Param m_CUIKDeleteCKObject4;
|
|
|
|
VoidFunc2Param m_CUIKCopyCKObject1;
|
|
VoidFunc2Param m_CUIKCopyCKObject2;
|
|
VoidFunc2Param m_CUIKCopyCKObject3;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//INTERFACE PARAMETER : management of a pool of parameter to prevent ck_id overuse
|
|
|
|
GetInterfaceParameterFunc m_GetInterfaceParameterIn;
|
|
GetInterfaceParameterFunc m_GetInterfaceParameter;
|
|
GetInterfaceParameterFunc m_GetInterfaceParameterOut;
|
|
VoidFunc1Param m_FreeInterfaceParameterIn;
|
|
VoidFunc1Param m_FreeInterfaceParameterOut;
|
|
VoidFunc1Param m_FreeInterfaceParameter;
|
|
VoidFunc1Param m_FreeInterfaceParameterIn2;
|
|
VoidFunc1Param m_FreeInterfaceParameterOut2;
|
|
VoidFunc1Param m_FreeInterfaceParameter2;
|
|
DWORDFunc1Param m_IsInterfaceParameter;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//IMPORT DIRECTORIES
|
|
|
|
GetPathFunc m_GetImportDirectory;
|
|
GetPathFunc m_GetImportPlaceDirectory;
|
|
GetPathFunc m_GetImportCharacterDirectory;
|
|
GetPathFunc m_GetImportSceneDirectory;
|
|
GetPathFunc m_GetBehaviorSaveLoadDirectory;
|
|
GetPathFunc m_GetLevelSaveLoadDirectory;
|
|
GetPathFunc m_GetBitmapSaveLoadDirectory;
|
|
GetPathFunc m_GetVirtoolsDirectory;
|
|
GetPathFunc m_GetNMODirectory;
|
|
GetPathFunc m_GetVMODirectory;
|
|
GetPathFunc m_GetVSLDirectory;
|
|
|
|
SetPathFunc m_SetImportDirectory;
|
|
SetPathFunc m_SetImportPlaceDirectory;
|
|
SetPathFunc m_SetImportCharacterDirectory;
|
|
SetPathFunc m_SetImportSceneDirectory;
|
|
SetPathFunc m_SetBehaviorSaveLoadDirectory;
|
|
SetPathFunc m_SetLevelSaveLoadDirectory;
|
|
SetPathFunc m_SetBitmapSaveLoadDirectory;
|
|
SetPathFunc m_SetNMODirectory;
|
|
SetPathFunc m_SetVMODirectory;
|
|
SetPathFunc m_SetVSLDirectory;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//PROJECT MODIFIED
|
|
|
|
DWORDFunc1Param m_SetProjectModified;
|
|
DWORDFunc0Param m_IsProjectModified;
|
|
DWORDFunc0Param m_TestProjectModified;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//DRAG & DROP
|
|
|
|
VoidFunc4Param m_BeginDrag;
|
|
VoidFunc0Param m_DragStop;
|
|
VoidFunc0Param m_DragCont;
|
|
DWORDFunc0Param m_IsDragActive;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//MENU MODIFICATION & USER MENU CALLBACK
|
|
|
|
DWORDFunc4Param m_AddPluginMenu;
|
|
VoidFunc1Param m_RemovePluginMenu;
|
|
VoidFunc1Param m_ClearPluginMenu;
|
|
|
|
DWORDFunc5Param m_AddPluginMenuItem;
|
|
VoidFunc3Param m_RemovePluginMenuItem;
|
|
|
|
VoidFunc1Param m_UpdatePluginMenu;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//LOAD & SAVE
|
|
|
|
DWORDFunc0Param m_NewComposition;
|
|
DWORDFunc1Param m_LoadComposition;
|
|
DWORDFunc2Param m_ImportFile;
|
|
DWORDFunc0Param m_SaveCurrentComposition;
|
|
DWORDFunc1Param m_SaveCurrentCompositionAs;
|
|
DWORDFunc0Param m_SaveCurrentCompositionAsVersion;
|
|
DWORDFunc2Param m_SaveFile;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//CK PAUSE
|
|
|
|
VoidFunc1Param m_CuikPause;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//NOTIFICATIONS
|
|
|
|
SendNotificationFunc m_NotificationFunc; //send notification callback func ptr from Virtools
|
|
ObserveNotificationFunc m_ObserveNotificationFunc; //Observe notification callback func ptr from Virtools
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Data Resource control
|
|
DWORDFunc0Param m_GetOpenedDataResourceCount;
|
|
DWORDFunc2Param m_GetDataResourcePath;
|
|
DWORDFunc1Param m_CloseDataResource;
|
|
DWORDFunc1Param m_OpenDataResource;
|
|
|
|
|
|
//Get last notification message
|
|
Notification m_LastNotification; //last notification send by Virtools Interface
|
|
XString* m_LastCompositionName; //last composition name in Virtools Interface
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//CKContext
|
|
CKContext* m_CKContext; //ckcontext
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Version control
|
|
VersionControlInfo* m_VersionControl; //version control struct of source control access
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Keyboard Manager
|
|
KeyboardShortcutManager* m_KeyboardShortcutManager;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//Private function for Virtools Only, do not use !!
|
|
public:
|
|
PluginInterface();
|
|
BOOL SetFunctions(void** buffer,int count);
|
|
void SetLastNotification(int message,DWORD param1,DWORD param2,CKScene* scene);
|
|
void SetLastCompositionName(XString* iLastCmoStr);
|
|
void SetCKContext(CKContext* context);
|
|
void SetVersionControlInfo(VersionControlInfo* vc);
|
|
void SetKeyboardShortcutManager(KeyboardShortcutManager* km);
|
|
|
|
//this function is call when leaving dev, so that windows & some interface related functions are set
|
|
//to null and become
|
|
//non usable, since plugins receive a CR_UNLOAD on exit, and may try to use these function
|
|
//which may result in a crash if there wasn't this prevention
|
|
void ClearFunctionsOnExit();
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}//namespace VirtoolsExternalPlugin
|