#include "StdAfx.h" //////////////////////////////////////////////////////////////////////////////// // functions prototypes //////////////////////////////////////////////////////////////////////////////// CKERROR CreateSetSelectionSetPropertiesProto(CKBehaviorPrototype **pproto); int SetSelectionSetPropertiesBB(const CKBehaviorContext& behcontext); CKERROR SetSelectionSetPropertiesBBCallBack(const CKBehaviorContext& behcontext); //////////////////////////////////////////////////////////////////////////////// // enums //////////////////////////////////////////////////////////////////////////////// enum INS { eINS_IN, }; enum OUTS { eOUTS_SUCCESS, eOUTS_FAILED, }; enum PINS { ePINS_NAME, ePIN_PRIORITY, ePIN_EXTERNAL, ePIN_LOADED, ePIN_HIERARCHYREBUILD, ePIN_PATH, ePIN_LOADWITHCMO, ePIN_SAVEWITHCMO, #ifdef ENABLE_REPLACE_AND_SHARE ePIN_LOADMODE, #endif }; enum POUTS { ePOUT_GROUP, }; enum PSETTINGS { //ePSETTINGS_TARGETBYNAME, //use group instead of name ePSETTINGS_FLAGS, }; enum PROPERTIESFLAGS { ePF_GROUP = 0, ePF_PRIORITY = 1, ePF_EXTERNAL = 2, ePF_LOADED = 4, ePF_HIERARCHYREBUILD = 8, ePF_PATH = 16, ePF_LOADWITHCMO = 32, ePF_SAVEWITHCMO = 64, #ifdef ENABLE_REPLACE_AND_SHARE ePF_LOADMODE = 128, #endif }; //////////////////////////////////////////////////////////////////////////////// // behavior //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// CKObjectDeclaration* FillBehaviorSetSelectionSetProperties() { CKObjectDeclaration *od = CreateCKObjectDeclaration(NAME_SETSELECTIONSETPROPERTIES); od->SetDescription("Set a Selection Set's Properties."); /* rem: On : Activates the Progression Bar.
Off : Deactivates the Progression Bar.
Pause/Resume : Pause/Resume the Progression Bar.

Exit On : This output is activated after entering by 'On'.
Exit Off : This output is activated after entering by 'Off'.
Exit Off : This output is activated after entering by 'Pause/Resume'.

Size Mode : -
Orientation : -

*/ /* Note: Activate the "on" entry each time the target of the behavior is modified. */ od->SetType( CKDLL_BEHAVIORPROTOTYPE); od->SetGuid(BBGUID_SETSELECTIONSETPROPERTIES); od->SetAuthorGuid(VIRTOOLS_GUID); od->SetAuthorName("Virtools"); od->SetVersion(0x00010000); od->SetCreationFunction(CreateSetSelectionSetPropertiesProto); od->SetCompatibleClassId(CKCID_BEOBJECT); od->SetCategory("Selection Set"); return od; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// CKERROR CreateSetSelectionSetPropertiesProto(CKBehaviorPrototype **pproto) { CKBehaviorPrototype *proto = CreateCKBehaviorPrototype(NAME_SETSELECTIONSETPROPERTIES); if(!proto) return CKERR_OUTOFMEMORY; proto->DeclareInput("Save"); proto->DeclareOutput("Success"); proto->DeclareOutput("Failed"); proto->DeclareInParameter(STR_SELECTIONSET, CKPGUID_SELECTIONSET,0); proto->DeclareInParameter("Priority",CKPGUID_INT,0); proto->DeclareInParameter("External",CKPGUID_BOOL,0); proto->DeclareInParameter("Loaded",CKPGUID_BOOL,0); proto->DeclareInParameter("Hierarchy Rebuild",CKPGUID_BOOL,0); proto->DeclareInParameter("Path",CKPGUID_STRING,0); proto->DeclareInParameter("Load with cmo",CKPGUID_BOOL,0); proto->DeclareInParameter("Save with cmo",CKPGUID_BOOL,0); #ifdef ENABLE_REPLACE_AND_SHARE proto->DeclareInParameter("Replace&Share",CKPGUID_BOOL,0); #endif proto->DeclareOutParameter("Group",CKPGUID_GROUP,0); //proto->DeclareSetting(STR_BYNAME,CKPGUID_BOOL,FALSE); proto->DeclareSetting("Properties",PARAMGUID_SETPROPERTIES,"External,Loaded,Path,Load with cmo,Save with cmo"); proto->SetFunction(SetSelectionSetPropertiesBB); proto->SetBehaviorCallbackFct(SetSelectionSetPropertiesBBCallBack); proto->SetBehaviorFlags(BBFLAGS); *pproto = proto; return CK_OK; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// int SetSelectionSetPropertiesBB(const CKBehaviorContext& behcontext) { CKBehavior* beh = behcontext.Behavior; SelectionSetManager* setmgr = (SelectionSetManager*)behcontext.Context->GetManagerByGuid(SELECTIONSETMANAGER_GUID); if(beh->IsInputActive(eINS_IN)) { //BOOL byname=FALSE; CKGroup* set = GetSetTarget();//(beh,setmgr,byname); beh->SetOutputParameterObject(ePOUT_GROUP,set); SelectionSetData* data = setmgr->GetSelectionSetData(set); BOOL setpropertiesok = FALSE; if (data) { setpropertiesok = TRUE; DWORD flags; beh->GetLocalParameterValue(ePSETTINGS_FLAGS,&flags); if (flags & ePF_PRIORITY) beh->GetInputParameterValue(ePIN_PRIORITY,&data->m_Priority); if (flags & ePF_EXTERNAL) { BOOL external = data->CheckSaveExternal(setmgr); BOOL external2 = external; beh->GetInputParameterValue(ePIN_EXTERNAL,&external2); if (external2!=external) { if (external2) data->ModifyFlags(SelectionSetData::fSetFlags_ForceSaveAsExternal,SelectionSetData::fSetFlags_ForceSaveAsInternal); else data->ModifyFlags(SelectionSetData::fSetFlags_ForceSaveAsInternal,SelectionSetData::fSetFlags_ForceSaveAsExternal); } } if (flags & ePF_LOADED) { BOOL loaded; beh->GetInputParameterValue(ePIN_LOADED,&loaded); if (loaded) data->ModifyFlags(SelectionSetData::fSetFlags_Loaded); else data->ModifyFlags(0,SelectionSetData::fSetFlags_Loaded); } if (flags & ePF_HIERARCHYREBUILD) { BOOL hierarchy; beh->GetInputParameterValue(ePIN_HIERARCHYREBUILD,&hierarchy); if (hierarchy) data->ModifyFlags(SelectionSetData::fSetFlags_RebuildHierarchy); else data->ModifyFlags(0,SelectionSetData::fSetFlags_RebuildHierarchy); } if (flags & ePF_PATH) { char* path = (char*)beh->GetInputParameterReadDataPtr(ePIN_PATH); setpropertiesok &= setmgr->SetSelectionSetPath(set,path); } if (flags & ePF_LOADWITHCMO) { BOOL loadwithcmo; beh->GetInputParameterValue(ePIN_LOADWITHCMO,&loadwithcmo); if (loadwithcmo) data->ModifyFlags(SelectionSetData::fSetFlags_LoadWithCmo); else data->ModifyFlags(0,SelectionSetData::fSetFlags_LoadWithCmo); } if (flags & ePF_SAVEWITHCMO) { BOOL savewithcmo; beh->GetInputParameterValue(ePIN_SAVEWITHCMO,&savewithcmo); if (savewithcmo) data->ModifyFlags(SelectionSetData::fSetFlags_SaveWithCmo); else data->ModifyFlags(0,SelectionSetData::fSetFlags_SaveWithCmo); } #ifdef ENABLE_REPLACE_AND_SHARE if (flags & ePF_LOADMODE) { BOOL replaceshare; beh->GetInputParameterValue(ePIN_LOADMODE,&replaceshare); if (replaceshare) data->ModifyFlags(SelectionSetData::fSetFlags_ReplaceAndShare); else data->ModifyFlags(0,SelectionSetData::fSetFlags_ReplaceAndShare); } #endif } if (setpropertiesok) beh->ActivateOutput(eOUTS_SUCCESS); //success else beh->ActivateOutput(eOUTS_FAILED); //something failed } return CKBR_OK; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// CKERROR SetSelectionSetPropertiesBBCallBack(const CKBehaviorContext& behcontext) { CKBehavior *beh = behcontext.Behavior; switch(behcontext.CallbackMessage) { case CKM_BEHAVIORLOAD: case CKM_BEHAVIORSETTINGSEDITED: { DWORD flags; beh->GetLocalParameterValue(ePSETTINGS_FLAGS,&flags); beh->EnableInputParameter(ePIN_PRIORITY ,flags & ePF_PRIORITY); beh->EnableInputParameter(ePIN_EXTERNAL ,flags & ePF_EXTERNAL); beh->EnableInputParameter(ePIN_LOADED ,flags & ePF_LOADED); beh->EnableInputParameter(ePIN_HIERARCHYREBUILD ,flags & ePF_HIERARCHYREBUILD); beh->EnableInputParameter(ePIN_PATH ,flags & ePF_PATH); beh->EnableInputParameter(ePIN_LOADWITHCMO ,flags & ePF_LOADWITHCMO); beh->EnableInputParameter(ePIN_SAVEWITHCMO ,flags & ePF_SAVEWITHCMO); #ifdef ENABLE_REPLACE_AND_SHARE beh->EnableInputParameter(ePIN_LOADMODE ,flags & ePF_LOADMODE); #endif //TargetableSelectionSetBBCallBack(behcontext); } break; } return CKBR_OK; }