Changing Parameter Types
 
 
 

Parameter types can be changed by deleting and adding a new parameter. To migrate from the old value a post-load callback must be used. The old parameter ids will be used until after the load and all post-load callbacks are completed

The following example demonstrates how you might do this:

IParamBlock* pBlock;
 
class TestClassPLCB
  : public  PostLoadCallback
{
  TestClass* parent;
 
public:
 
  TestClassPLCB( TestClass* p )
    : parent(p) { }
 
  voidproc(ILoad *iload)  {
    parent->PostLoadCallback(iload);
    delete this;
  }
};
 
void TestClass::PostLoadCallback( ILoad* iload )
{
  IParamBlock2PostLoadInfo* postLoadInfo = (IParamBlock2PostLoadInfo*)
    pblock->GetInterface( IPARAMBLOCK2POSTLOADINFO_ID );
 
  // Check for specific obsolete version
  if(postLoadInfo!=NULL && postLoadInfo->GetVersion()==OBSOLETE_VERSION)
  {
    // get the original value
    BOOL onOff = pblock->GetInt(pb_onOff_OBSOLETE, 0, 0);
 
    //set the original value
    pblock->SetValue( pb_onOff, 0, onOff );
 
    // see if it has a controller
    Control* onOffCtrl=pblock->GetController(pb_onOff_OBSOLETE,0);
 
    // if a controller exists add it to the new parameter
    if( onOffCtrl )
      pblock->SetController(pblock->IDtoIndex(pb_onOff),0,onOffCtrl);
 
    // NOTE: not necessary to set obsolete params to NULL,
    // or unlink controllers/references
  }
}
See Also