/* * Project: Virtools Interface Plugin SDK * File: VEP_ScriptActionMenu.h * Author: Thomas Vissieres * Last check date: 11/19/2003 * optimized for Tab Size: 4 * Quick file summary: ScriptInterfaceAction class used to execute VSL actions and to fill CMenu with available actions */ /* * class ScriptActionMenu * used to simplify execution of VSL scripts actions * and to fill a popup menu with available actions. * */ #pragma once #include "VEP_DllEditorLibDefines.h" //class CMenu; //class CWnd; class ScriptInterfaceAction; namespace CKControl //---------------------------------------- { class MultiParamEditDlg; class CKVIPopupMenu; } namespace VirtoolsExternalPlugin //----------------------------------------- { class DLLEDITORLIB_CLASS_DECL PluginInterface; class DLLEDITORLIB_CLASS_DECL ScriptActionMenu { public: enum { ACTIONMENU_STARTID = 20000 , }IDS; ScriptActionMenu(); ScriptActionMenu(PluginInterface* pinterface); ~ScriptActionMenu(); //sets the PluginInterface to communicate with Virtools Dev void SetPluginInterface(PluginInterface* pinterface); //return Value: last command id, 0 if failed int UpdateMenu(CMenu* menu,int firstID=ACTIONMENU_STARTID,int insertIndex=-1,const char* actionSubmenuName=NULL); //return Value: nonzero if success, zero if failed int ExecuteAction(int commandID,CWnd* parent=NULL,BOOL editParameter=TRUE); //return Value: nonzero if success, zero if failed. Specify in params an array if you want to keep parameters and to free them later int ExecuteAction(ScriptInterfaceAction* iAction,CWnd* parent=NULL,BOOL editParameter=TRUE,BOOL loopingAction=FALSE); //start looping action int StartLoopingAction(ScriptInterfaceAction* iAction,CWnd* parent=NULL); //looping action edit int EditLoopingAction(ScriptInterfaceAction* iAction,CWnd* parent=NULL); //stop looping action (close dialog & release interface parameters int StopLoopingAction(ScriptInterfaceAction* iAction); //get generated command ids count in menu after a call to UpdateMenu for instance int GetCommandIDsCount(); //first commandID int m_FirstCommandID; //last command id int m_LastCommandID; //hash table of commandid->action script so that when a menu command is called, we can find the action XHashTable m_ScriptActions; protected: //the plugin interface to communicate with Virtools Dev PluginInterface* m_PluginInterface; //struct that contains a looping action (action that is called every milisecond by the interface struct LoopingActionData { HWND dlgHwnd; CKControl::MultiParamEditDlg* dlg; XArray parameters; LoopingActionData() {dlg=NULL;dlgHwnd=NULL;} }; //hash table to retrieve the LoopingData of an action (which is represented by a ScriptInterfaceAction*) XHashTable m_LoopingActionMap; CKControl::CKVIPopupMenu* m_pPopupMenu; }; int DLLEDITORLIB_CLASS_DECL GetScriptActionsArray(XArray& scriptActions,PluginInterface* pinterface); }//namespace VirtoolsExternalPlugin