osr-mono/packages/osr-registry/ref/CKParameterOut.h
2025-02-14 20:11:16 +01:00

129 lines
4.9 KiB
C++

/*************************************************************************/
/* File : CKParameterOut.h */
/* Author : Nicolas Galinotti */
/* */
/* Virtools SDK */
/* Copyright (c) Virtools 2000, All Rights Reserved. */
/*************************************************************************/
#ifndef CKPARAMETEROUT_H
#define CKPARAMETEROUT_H
#include "CKParameter.h"
/**************************************************************************
Name: CKParameterOut
Summary: Output parameter providing a value
Remarks:
{Image:ParameterOut}
+ The type of the parameter defines the type of the data provided. These types are maintained by
the parameter manager. It defines the size of the buffer to use, and also decides what can be plugged
onto the output parameter. To have the list and definition of predefined parameter types see CKParameterManager.
+ An output parameter may have destinations to which it pushes the data each time it is changed.
These destinations are other output parameters, which for example provide their value out of the enclosing
behavior, or local parameters which provide values to other parts of the graph of sub-behaviors.
These destinations are managed using the AddDestination and related methods.
When the data of the output parameter changes, it pushes the new value down to
its destinations.
+ An output parameter will probably also be plugged into input parameters. These input parameters will pull the
value from the output parameter when needed.
+ An output parameter usually knows how to write its data from and to a string. This is useful for display
and debugging purposes. When you define a new type of parameter, you can specify the function that converts
to and from strings.
+ An output parameter can also have an edition window. When you define a new type of parameter, you can specify the
function that will create the edition window when needed by the interface.
+ A CKParameterOut is created with CKBehavior::CreateOutputParameter or CKContext::CreateCKParameterOut.
+ The class id of CKParameterOut is CKCID_PARAMETEROUT.
See also: CKBehavior, CKParameterIn, CKParameterOperation
**********************************************************************************/
class CKParameterOut : public CKParameter {
friend class CKParameterIn;
friend class CKParameter;
friend class CKParameterFS;
friend class CKParameterLocalFS;
friend class CKParameterManager;
public :
//--------------------------------------------
// Value
virtual CKERROR GetValue(void *buf, CKBOOL update = TRUE);
virtual CKERROR SetValue(const void *buf,int size = 0);
virtual CKERROR CopyValue(CKParameter *param,CKBOOL UpdateParam=TRUE);
virtual void* GetReadDataPtr(CKBOOL update = TRUE);
virtual int GetStringValue(CKSTRING Value,CKBOOL update = TRUE);
void CheckClass(CKParameterTypeDesc* iType);
//--------------------------------------------
// Destinations
void DataChanged();
CKERROR AddDestination(CKParameter* param,CKBOOL CheckType=TRUE);
void RemoveDestination(CKParameter* param);
int GetDestinationCount();
CKParameter* GetDestination(int pos);
void RemoveAllDestinations();
//-------------------------------------------------------------------
// Internal functions
#ifdef DOCJETDUMMY // Docjet secret macro
#else
//--------------------------------------------
// Virtual functions
CKParameterOut(CKContext *Context,CKSTRING name = NULL);
virtual ~CKParameterOut();
virtual CK_CLASSID GetClassID();
virtual void PreSave(CKFile *file,CKDWORD flags);
virtual CKStateChunk *Save(CKFile *file,CKDWORD flags);
virtual CKERROR Load(CKStateChunk *chunk,CKFile* file);
virtual void PreDelete();
virtual void CheckPreDeletion();
virtual int GetMemoryOccupation();
virtual int IsObjectUsed(CKObject* o,CK_CLASSID cid);
//--------------------------------------------
// Dependencies Functions
virtual CKERROR RemapDependencies(CKDependenciesContext& context);
virtual CKERROR Copy(CKObject& o,CKDependenciesContext& context);
//--------------------------------------------
// Class Registering
static CKSTRING GetClassName();
static int GetDependenciesCount(int mode);
static CKSTRING GetDependencies(int i,int mode);
static void Register();
static CKParameterOut* CreateInstance(CKContext *Context);
static void ReleaseInstance(CKContext* iContext,CKParameterOut*);
static CK_CLASSID m_ClassID;
// Dynamic Cast method (returns NULL if the object can't be casted)
static CKParameterOut* Cast(CKObject* iO)
{
return CKIsChildClassOf(iO,CKCID_PARAMETEROUT)?(CKParameterOut*)iO:NULL;
}
void Update();
protected:
XSObjectPointerArray m_Destinations;
#endif // docjet secret macro
};
#endif