/****************************************************************************************/
/*	 CUIKNOTIFICATIONS.H																		*/
/****************************************************************************************/

#ifndef _CUIKNOTIFICATIONS_H_
#define _CUIKNOTIFICATIONS_H_

//CUIK_NOTIFICATION-----------------------------------------------
typedef enum
{
	// refreshes variable manager
	CUIK_NOTIFICATION_REFRESHVARIABLEMANAGER,			
	// *****Private to Virtools Interface*****
	// notify a plugin editor that its fixed size has changed. Used by DllEditorDlg::UpdateEditorSize()
	//param1 : editor dlg HWND
	CUIK_NOTIFICATION_RESIZEDLLEDITOR,					
	// *****Private to Virtools Interface*****
	// ask a plugin editor to close. Used by DllEditorDlg::Close()
	// param1 : editor dlg HWND.
	CUIK_NOTIFICATION_CLOSEDLLEDITOR,					
	// *****Private to Virtools Interface*****
	// ask listening editors (3dLayout & Level View) to add their selection to ScriptInterfaceAction::Context g_ActionContext.
	// param1 : ScriptContextAction*
	CUIK_NOTIFICATION_FILLACTIONCONTEXTWITHSELECTION,
	// *****Private to Virtools Interface*****
	// ask listening editors (3dLayout & Level View) to update their selection from the ScriptInterfaceAction::Context
	// param1 : ScriptContextAction*
	CUIK_NOTIFICATION_UPDATESELECTIONFROMACTIONCONTEXT,
	//  before  a ck file is loaded
	// but before objects are added to scene/place/that kind of stuff.
	// param1 : CKObjectArray* list of object loaded
	CUIK_NOTIFICATION_PRECKFILELOADED,					
	// after a CK file has been loaded and objects have been added to scene/place/level/...
	// this is called after loading file such a .nms ,.nmo  files (BUT NOT CMO files, ),
	// from Virtools Dev's user interface
	// that is, this notification is NOT sent when a file is loaded through a building block
	// such as the ObjectLoad BB.
	// mostly by level view & 3d view
	// note : when loading a cmo file with a level, CUIK_NOTIFICATION_LEVEL_LOADED is called, not this notification
	// param1 : CKObjectArray* : list of loaded objects.
	CUIK_NOTIFICATION_CKFILELOADED,						
	// the field of view of a camera has changed
	// param1 : CK_ID of camera
	CUIK_NOTIFICATION_FOVCHANGED,						
	// the orthographic zoom of a camera has changed
	// param1 : CK_ID of camera
	CUIK_NOTIFICATION_ORTHOZOOMCHANGED,					
	// to attribute a new object to a setup and update the setup
	// param1 : CK_ID of entity
	CUIK_NOTIFICATION_ENTITYSET,						
	// curve was modified so its size changed
	// param1 : CK_ID of curve
	CUIK_NOTIFICATION_CURVELENGTHCHANGED,				
	// current curvepoint changed
	// param1 : CK_ID, 
	CUIK_NOTIFICATION_SELECTEDPOINTCHANGED,				
	// object has been renamed
	// param1 : CK_ID of object
	CUIK_NOTIFICATION_OBJECTRENAMED,					
	// before clear all (new composition)
	CUIK_NOTIFICATION_PRECLEARALL,
	// after clear all (new composition)
	CUIK_NOTIFICATION_POSTCLEARALL,
	// notify the schematic that a script has been added
	// param1 : CKBehavior* beh
	CUIK_NOTIFICATION_ADDSCRIPTBEHAVIOR,				
	// 3D object position has changed
	// param1 : CK_ID of object
	CUIK_NOTIFICATION_OBJECTPOSCHANGED,					
	// 3D object orientation has changed
	// param1 : CK_ID of object
	CUIK_NOTIFICATION_OBJECTROTCHANGED,					
	// 3D object scale has changed
	// param1 : CK_ID of object
	CUIK_NOTIFICATION_OBJECTSCALECHANGED,				
	// before level/objects is/are saved
	// param1 : CKObjectArray* , list of objects to save
	// return value : -1 or negate value to prevent saving
	CUIK_NOTIFICATION_PRESAVELEVEL,						
	// after level/objects has/have been saved
	// param1 : CKObjectArray* , list of objects saved
	CUIK_NOTIFICATION_POSTSAVELEVEL,					
	// trace mode has been activated or deactivated
	// mainly used for schematic, but can be used for other trace purposes
	// Param 1 : BOOL activation
	CUIK_NOTIFICATION_TRACE,
	// send by Virtools Dev main app each behavioral frame, when trace mode is active
	CUIK_NOTIFICATION_DEBUGTRACE,
	// redraws schematic
	// param1 : NULL or VPosition* (object to redraw) (Private to Virtools Interface)
	CUIK_NOTIFICATION_SCHEMATICREDRAW,		
	// update scripts position and size in schematic then redraw
	// to use when some scripts have been added/deleted(/hidden/showed/moved, private to Virtools Interface)
	CUIK_NOTIFICATION_SCHEMATICUPDATESCRIPTS,
	// to send before copying behaviors/scripts, in order for schematic data to be prepared for the copy to come
	// param1 : XObjectArray* , list of CKBehavior*
	CUIK_NOTIFICATION_PRECOPYBEHAVIOR,					
	// to send after copying behaviors, in order for schematic to build the graph associated to the copy 
	// and to clear the data used for building the graph
	// param1 : XObjectArray* , list of CKBehavior*
	CUIK_NOTIFICATION_POSTCOPYBEHAVIOR,					
	// focus script in schematic view
	// param1 : CKBehavior*	(script) or CKBeObject* (then schematic will set the focus on its first script 
	CUIK_NOTIFICATION_FOCUSSCRIPT,						
	// focus object in schematic
	// Param1 : CKBehavior* or CKParameter*
	// Param2 : BOOL, select object if TRUE
	CUIK_NOTIFICATION_FOCUSOBJECT_SCHEMATIC,			
	// focus object in level manager
	// list of object taken into account by level view
	// param1 : CK_ID*
	// param2 : array count
	CUIK_NOTIFICATION_FOCUSOBJECT,						
	// called on reset
	CUIK_NOTIFICATION_REWIND,							
	// called on play
	CUIK_NOTIFICATION_PLAY,								
	// called on pause
	CUIK_NOTIFICATION_PAUSE,							
	// called on play step
	CUIK_NOTIFICATION_STEP,								
	// current selection in 3dLayout has changed
	CUIK_NOTIFICATION_SELECTIONCHANGED,					
	// Schematic Preferences have changed
	CUIK_NOTIFICATION_SCHEMATICPREFERENCESCHANGED,		
	// 3DLayout Preferences changed
	CUIK_NOTIFICATION_3DLAYOUTPREFERENCESCHANGED,		
	// Level Preferences changed
	CUIK_NOTIFICATION_LEVELCONTROLPREFERENCESCHANGED,	
	// Resource Preferences changed
	CUIK_NOTIFICATION_RESOURCEPREFERENCESCHANGED,		
	// current level's scene has changed (=active scene has changed)
	CUIK_NOTIFICATION_BEHAVIORAL_SCENE_CHANGED,
	// when a composition / level is loaded
	// param1 : CKObjectArray* list of object loaded
	CUIK_NOTIFICATION_LEVEL_LOADED,
	// Setups needs update
	// param1 : CK_ID* , array of CK_ID, list of object whose setups must be updated
	// param2 : array size
	//If param==param2==0, then update all setups
	CUIK_NOTIFICATION_UPDATESETUP,						
	// a new attribute has been registered in the CKAttributeManager
	// param1 : int, attribute index
	CUIK_NOTIFICATION_ATTRIBUTE_CREATED,				
	// an attribute has been unregistered from the CKAttributeManager
	// param1 : int, attribute index
	CUIK_NOTIFICATION_ATTRIBUTE_DELETED,				
	// an attribute category has been removed from the CKAttributeManager
	// param1 : const char*, category name
	CUIK_NOTIFICATION_ATTRIBUTE_CAT_DELETED,			
	// an attribute category has been added in the CKAttributeManager
	// param1 : const char*,category name
	CUIK_NOTIFICATION_ATTRIBUTE_CAT_CREATED,			
	// an attribute category has been renamed in the CKAttributeManager
	// param1 : int, category index
	CUIK_NOTIFICATION_ATTRIBUTE_CAT_RENAMED,			
	// an attribute has been renamed in the CKAttributeManager
	// param1 : int, attribute index
	CUIK_NOTIFICATION_ATTRIBUTE_RENAMED,				
	// the selection in the 3dLayout has been locked / unlocked (ie with the spacebar key when focus on 3dLayout)
	// param1 : BOOL, lock status
	CUIK_NOTIFICATION_SELECTIONLOCKCHANGED,				
	// show scripts in the schematic view (if they are hidden)
	// param1 : CKObjectArray*, filled with scripts
	CUIK_NOTIFICATION_SHOW_SCRIPT_IN_SCHEMATIC,			
	// hide scripts in the schematic view (if they are shown)
	// param1 : CKObjectArray*, filled with scripts
	CUIK_NOTIFICATION_HIDE_SCRIPT_IN_SCHEMATIC,			
	// *****Private to Virtools Interface*****
	// send message to debugging window
	// which is opened from the Schematic's toolbar left to the trace button
	// param1 : char *, the message to show
	CUIK_NOTIFICATION_DEBUGMESSAGE,						
	// *****Private to Virtools Interface*****
	// shortcut is removed
	// specific notification for schematic view
	// param1 : VPosition* of shortcut/source, specific notification for schematic view
	CUIK_NOTIFICATION_SCHEMATICSHORTCUTREMOVED,
	// *****Private to Virtools Interface*****
	// mark is removed
	// specific notification for schematic view
	// param1 : VPosition* of shortcut/source, specific notification for schematic view
	CUIK_NOTIFICATION_SCHEMATICMARKREMOVED,			
	// *****Private to Virtools Interface*****
	// breakpoint is removed
	// specific notification for schematic view
	// param1 = CUIK_ID of VPosition* of breakpointed object
	CUIK_NOTIFICATION_SCHEMATICBREAKPOINTREMOVED,		
	// sequence of ck objects is going to be deleted
	// param1 : CK_ID*
	// param2 : array count
	CUIK_NOTIFICATION_PRESEQUENCEDELETED,				
	// sequence of ck objects has been deleted
	// param1 : CK_ID*
	// param2 : array count
	CUIK_NOTIFICATION_POSTSEQUENCEDELETED,				
	// sequence of objects has been added to scene
	// param1 : CK_ID*
	// param2 : array count
	// parem3 : the scene in which objects have been added
	CUIK_NOTIFICATION_SEQUENCEADDEDTOSCENE,				
	// sequence of objects has been removed from scene
	// param1 : CK_ID*
	// param2 : array count
	// parem3 : the scene in which objects have been added
	CUIK_NOTIFICATION_SEQUENCEREMOVEDFROMSCENE,			
	// initial conditions have been added / changed on several objects
	// param1 : CK_ID*
	// param2 : array count
	CUIK_NOTIFICATION_SEQUENCE_IC_CHANGED,				
	// several objects re restored in their initial conditions
	// param1 : CK_ID*
	// param2 : array count
	CUIK_NOTIFICATION_SEQUENCE_IC_RESTORED,			
	// parameters have been modified
	// param1 : CK_ID*
	// param2 : array count
	CUIK_NOTIFICATION_PARAMETERSEQUENCEMODIFIED,		
	// *****Private to Virtools Interface*****
	// the setup is about to loose its object
	// param1 : CK_ID of object
	CUIK_NOTIFICATION_LOOSINGOBJECT,
	// *****Private to Virtools Interface*****
	// some object specific params have changed (camera [with/without target], frame [dummy/not], ...)
	// param1 : CK_ID
	// param2 : DWORD (hints)
	CUIK_NOTIFICATION_OBJECTPARAMSCHANGED,				
	// current camera has changed (ie from the camera combo box in the 3dLayout)
	CUIK_NOTIFICATION_CAMERACHANGED,					
	// *****Private to Virtools Interface*****
	// a view is being closed
	// param 1 : CUIKView*
	CUIK_NOTIFICATION_VIEWISCLOSING,					
	// hierarchy of 3d/2d objects has changed
	// used by hierarchy manager,level view and some setups (Sprite2DSetup) for refresh
	// no parameter
	CUIK_NOTIFICATION_HIERARCHY_CHANGED,				
	// a new scene has been created
	// param1 : CK_ID of CKScene
	CUIK_NOTIFICATION_SCENE_CREATED,					
	// add list of object to 3dLayout selection
	// param1 : XObjectArray*, list of object to add to 3d Layout selection
	// param2 : BOOL, clear selection if TRUE
	CUIK_NOTIFICATION_SCENE_ADDTOSELECTION,				//XObjectArray *, BOOL pour clear selection (true=>clear asked)	
	// *****Private to Virtools Interface*****
	// when user unload or reload a plugin (such as a manager or a Building Block DLL)
	CUIK_NOTIFICATION_PLUGIN_LOAD_UNLOAD,				
	// *****Private to Virtools Interface*****
	// specific vor Virtools Vsl Script Editor
	// when a breakpoint in VSL script code is reached
	// param1 : a VSLEditor order
	// parem2 : data.
	CUIK_NOTIFICATION_VSLSCRIPTSCOMPILED,		
	// *****Private to Virtools Interface*****
	// specific vor Virtools Vsl Script Editor
	// vsl action scripts have just been compiled.
	// param1 : ScriptInterfaceMain**, array of (ScriptInterfaceMain*)
	// param2 : size of array
	CUIK_NOTIFICATION_VSLBREAKNOTIFY,					
	// *****Private to Virtools Interface*****
	// specific vor Virtools Vsl Script Editor
	// new vsl action scripts have been created.
	// param1 : ScriptInterface**, array of (ScriptInterface*)
	// param2 : size of array
	CUIK_NOTIFICATION_VSLINTERFACEACTIONCREATED,		
	// *****Private to Virtools Interface*****
	// specific vor Virtools Vsl Script Editor
	// vsl action scripts are going to be deleted.
	// param1 : ScriptInterface**, array of (ScriptInterface*)
	// param2 : size of array
	CUIK_NOTIFICATION_VSLINTERFACEACTIONDELETED,		
	// *****Private to Virtools Interface*****
	// specific vor Virtools Vsl Script Editor
	// vsl action scripts have been renamed.
	// param1 : ScriptInterface**, array of (ScriptInterface*)
	// param2 : size of array
	CUIK_NOTIFICATION_VSLINTERFACEACTIONRENAMED,		
	// create local parameters attached to the input parameters of a list of behaviors 
	// in the schematic view
	// the local parameters must already exists and must already have their owner set (should be the parent behavior)
	// param1 : CK_ID*, list of beh IDs
	// param2 : size of array
	CUIK_NOTIFICATION_ATTACHLOCALSINSCHEMATIC,			
	// for Virtools Interface Plugin Editors
	// to send to notify Virtools Dev Interface that the icon of the plugin editor has changed
	// param1 : HWND, plugin editor dlg HWND
	CUIK_NOTIFICATION_UPDATEDLLEDITORCUSTOMICON,		
	// render device has changed
	CUIK_NOTIFICATION_RENDERDEVICECHANGED,				
	// *****Specific for the Shader Editor*****
	// shader fx list changed
	CUIK_NOTIFICATION_SHADERLISTCHANGED,				
	// *****Specific for the Shader Editor*****
	// show shader editor and edit a shader
	// param1: CKShader*
	// param2: BOOL, compile shader
	// user want to see shader fx
	CUIK_NOTIFICATION_WANTTOSEESHADER,					
	// *****Specific for the Shader Editor*****
	// user just compiled a shader
	CUIK_NOTIFICATION_SHADERCOMPILED,					
	// *****Specific for the Shader Editor*****
	// user has deleted a shader
	CUIK_NOTIFICATION_SHADERREMOVED,					
	// send by the current Version/Source Control plugin (should be NxN Alienbrain plugin for Virtools Dev)
	// send when the activation state of the source control plugin has changed
	// param1 : BOOL, TRUE  means source control has been enabled, FALSE means disabled
	CUIK_NOTIFICATION_SOURCECONTROLENABLED,
	// send by the current Version/Source Control plugin (should be NxN Alienbrain plugin for Virtools Dev))
	// send when files are checked in
	// param1: const char**, array of filename (may be 0)
	// param2: size of array (may be 0)
	CUIK_NOTIFICATION_SOURCECONTROL_CHECKIN,
	// send by the current Version/Source Control plugin (should be NxN Alienbrain plugin for Virtools Dev))
	// send when files are checked out
	// param1: const char**, array of filename (may be 0)
	// param2: size of array (may be 0)
	CUIK_NOTIFICATION_SOURCECONTROL_CHECKOUT,
	// send by the current Version/Source Control plugin (should be NxN Alienbrain plugin for Virtools Dev))
	// send when files are unchecked out
	// param1: const char**, array of filename (may be 0)
	// param2: size of array (may be 0)
	CUIK_NOTIFICATION_SOURCECONTROL_UNDOCHECKOUT,
	// send by the current Version/Source Control plugin (should be NxN Alienbrain plugin for Virtools Dev))
	// send when files are imported in source control
	// param1: const char**, array of filename (may be 0)
	// param2: size of array (may be 0)
	CUIK_NOTIFICATION_SOURCECONTROL_FILESIMPORTED,
	// send by the current Version/Source Control plugin (should be NxN Alienbrain plugin for Virtools Dev))
	// send when files are removed from source control
	// param1: const char**, array of filename (may be 0)
	// param2: size of array (may be 0)
	CUIK_NOTIFICATION_SOURCECONTROL_FILESREMOVED,
	//send when preference "Show Dynamic objects" changes
	//param1: bool, TRUE if show dynamic objects, FALSE if hide
	CUIK_NOTIFICATION_SHOWDYNAMICOBJECTS,
	//send when a parameter type description is registered or unregisterd(ie user flag/enum)
	//param1: CKGUID*
	//param2: BOOL, TRUE for register, FALSE for unregister
	CUIK_NOTIFICATION_REGISTERPARAMETERGUID,
	//send to vsl editor to refresh its type combo box in the iolist
	CUIK_NOTIFICATION_VSLEDITOR_REFRESHTYPECOMBO,
	// focus object in hierarchy manager
	// list of object taken into account by level view
	// param1 : CK_ID*
	// param2 : array count
	CUIK_NOTIFICATION_FOCUSOBJECT_HIERARCHY,
	//refresh vsl manager tree
	CUIK_NOTIFICATION_VSLEDITOR_REFRESHTREE,
	//refresh level manager
	CUIK_NOTIFICATION_LEVELMANAGER_REFRESH,
	//selection set has been modified (name/priority/options/dependencies/path/source control)
	// if Param1 == 0 , all sets must be refreshed
	// param1 : CK_ID*, array of selection set CK_IDs
	// Param2 : HIWORD = FSetPart, LOWORD = array size
	CUIK_NOTIFICATION_SELECTIONSETS_MODIFIED,
	/* useless
	//selection sets have been changed (created/delete)
	// editor should refresh all informations about sets
	// param1 : CK_ID*, list of created selection groups IDs (optional)
	// param2 : size of array (optional)
	CUIK_NOTIFICATION_SELECTIONSETS_UPDATEALL,
	*/
	CUIK_NOTIFICATION_INTERFACEOBJECTMANAGER_LOADED, // param1 = CK_ID of iom, param2 = BOOL dynamic. Send by objectloaded BB for instance

	CUIK_NOTIFICATION_REQUESTCLEARALL,	//clear all / new composition
	CUIK_NOTIFICATION_REQUESTLOADFILE,	//param1 = const char* filename&path, can be set to NULL to open dialog

	// Added for integration of Lua and Python
	CUIK_NOTIFICATION_SCRIPT_ADDED,
	CUIK_NOTIFICATION_SCRIPT_REMOVED,
	CUIK_NOTIFICATION_SCRIPT_PRINT,
	CUIK_NOTIFICATION_SCRIPT_PRINTERROR,
	CUIK_NOTIFICATION_SCRIPT_STOP_DEBUG,
	CUIK_NOTIFICATION_SCRIPT_START_DEBUG,
	CUIK_NOTIFICATION_GOTO_LINE,
	CUIK_NOTIFICATION_ADD_STACK_TRACE,
	CUIK_NOTIFICATION_CLEAR_CALLSTACK,
	CUIK_NOTIFICATION_WATCH_ADD_VARIABLE,
	CUIK_NOTIFICATION_CLEAR_WATCH,
	CUIK_NOTIFICATION_WATCH_ADD_LEVEL,
	CUIK_NOTIFICATION_WATCH_DEL_LEVEL,
	CUIK_NOTIFICATION_STEP_IN,
	CUIK_NOTIFICATION_SCRIPT_FOCUS, // param1 = char* name of the script on which to focus.
	CUIK_NOTIFICATION_LUA_FORCESTOPDEBUG,
	CUIK_NOTIFICATION_LUA_SCRIPT_FORCEREMOVE,
} CUIK_NOTIFICATION;

// Hints for CUIK_NOTIFICATION_OBJECTPARAMSCHANGED

typedef enum
{	
	CUIK_HINT_POSITION,
	CUIK_HINT_ORIENTATION,
	CUIK_HINT_SCALE,
	CUIK_HINT_TARGET,
	CUIK_HINT_PROJECTION,

} CUIK_NOTIFICATION_HINTS;

#endif


