271 lines
8.4 KiB
C++
271 lines
8.4 KiB
C++
#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:
|
|
<SPAN CLASS=in>On : </SPAN>Activates the Progression Bar.<BR>
|
|
<SPAN CLASS=in>Off : </SPAN>Deactivates the Progression Bar.<BR>
|
|
<SPAN CLASS=in>Pause/Resume : </SPAN>Pause/Resume the Progression Bar.<BR>
|
|
<BR>
|
|
<SPAN CLASS=out>Exit On : </SPAN>This output is activated after entering by 'On'.<BR>
|
|
<SPAN CLASS=out>Exit Off : </SPAN>This output is activated after entering by 'Off'.<BR>
|
|
<SPAN CLASS=out>Exit Off : </SPAN>This output is activated after entering by 'Pause/Resume'.<BR>
|
|
<BR>
|
|
<SPAN CLASS=setting>Size Mode : </SPAN> - <BR>
|
|
<SPAN CLASS=setting>Orientation : </SPAN> - <BR>
|
|
<BR>
|
|
*/
|
|
/* 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;
|
|
}
|