netscape-revival
lib/mac/VText/V_PowerPlant_Mods/LModelObject.h
// ===========================================================================
// LModelObject.h ©1993-1996 Metrowerks Inc. All rights reserved.
// ===========================================================================
#ifndef _H_LModelObject
#define _H_LModelObject
#pragma once
#include <LList.h>
#ifndef __APPLEEVENTS__
#include <AppleEvents.h>
#endif
class LModelObject {
public:
LModelObject();
LModelObject(
LModelObject *inSuperModel,
DescType inKind = typeNull);
virtual ~LModelObject();
virtual void SuperDeleted(void);
LModelObject* GetSuperModel() const { return mSuperModel; }
virtual void SetSuperModel(
LModelObject *inSuperModel);
DescType GetModelKind() const { return mModelKind; }
void SetModelKind(
DescType inModelKind);
virtual Boolean IsLazy() const;
virtual void SetLaziness(
Boolean inLaziness);
virtual void SetUseSubModelList(
Boolean inUseSubModelList);
virtual void AddSubModel(
LModelObject *inSubModel);
virtual void RemoveSubModel(
LModelObject *inSubModel);
virtual Boolean IsSubModelOf(
const LModelObject *inSuperModel) const;
virtual LModelObject* GetDefaultSubModel() const;
virtual void SetDefaultSubModel(
LModelObject *inSubModel);
virtual Boolean IsDefaultSubModel() const;
virtual void GetModelToken(
DescType inModelID,
DescType inKeyForm,
const AEDesc &inKeyData,
AEDesc &outToken) const;
virtual void GetModelTokenSelf(
DescType inModelID,
DescType inKeyForm,
const AEDesc &inKeyData,
AEDesc &outToken) const;
virtual Int32 CountSubModels(DescType inModelID) const;
virtual void GetSubModelByPosition(
DescType inModelID,
Int32 inPosition,
AEDesc &outToken) const;
virtual void GetSubModelByName(
DescType inModelID,
Str255 inName,
AEDesc &outToken) const;
virtual void GetSubModelByUniqueID(
DescType inModelID,
const AEDesc &inKeyData,
AEDesc &outToken) const;
virtual void GetModelByRelativePosition(
DescType inModelID,
OSType inRelativePosition,
AEDesc &outToken) const;
virtual void GetSubModelByComplexKey(
DescType inModelID,
DescType inKeyForm,
const AEDesc &inKeyData,
AEDesc &outToken) const;
virtual void GetAllSubModels(
DescType inModelID,
AEDesc &outToken) const;
virtual Int32 GetPositionOfSubModel(
DescType inModelID,
const LModelObject *inSubModel) const;
virtual LModelObject* GetInsertionTarget(
DescType inInsertPosition) const;
virtual LModelObject* GetInsertionContainer(
DescType inInsertPosition) const;
virtual LModelObject* GetInsertionElement(
DescType inInsertPosition) const;
virtual const StringPtr GetModelNamePtr() const;
virtual Boolean CompareToModel(
DescType inComparisonOperator,
LModelObject *inCompareModel) const;
virtual Boolean CompareToDescriptor(
DescType inComparisonOperator,
const AEDesc &inCompareDesc) const;
virtual Boolean CompareToUniqueID(
DescType inComparisonOperator,
const AEDesc &inCompareDesc) const;
virtual Boolean CompareProperty(
DescType inPropertyID,
DescType inComparisonOperator,
const AEDesc &inCompareObjectOrDesc)
const;
virtual LModelObject* GetModelPropertyAll(
DescType inProperty) const;
virtual void MakeSpecifier(AEDesc &outSpecifier) const;
virtual void HandleAppleEventAll(
const AppleEvent &inAppleEvent,
AppleEvent &outAEReply,
AEDesc &outResult,
Int32 inAENumber);
virtual LModelObject* HandleCreateElementEventAll(
DescType inElemClass,
DescType inInsertPosition,
LModelObject* inTargetObject,
const AppleEvent &inAppleEvent,
AppleEvent &outAEReply);
virtual void HandleAppleEvent(
const AppleEvent &inAppleEvent,
AppleEvent &outAEReply,
AEDesc &outResult,
Int32 inAENumber);
virtual LModelObject* HandleCreateElementEvent(
DescType inElemClass,
DescType inInsertPosition,
LModelObject* inTargetObject,
const AppleEvent &inAppleEvent,
AppleEvent &outAEReply);
virtual void HandleCount(
DescType inModelID,
AppleEvent &outResult);
virtual void HandleDelete(
AppleEvent &outAEReply,
AEDesc &outResult);
virtual void HandleClone(
const AppleEvent &inAppleEvent,
AppleEvent &outAEReply,
AEDesc &outResult);
virtual void HandleMove(
const AppleEvent &inAppleEvent,
AppleEvent &outAEReply,
AEDesc &outResult);
virtual void Finalize();
virtual void GetAEProperty(
DescType inProperty,
const AEDesc &inRequestedType,
AEDesc &outPropertyDesc) const;
virtual void SetAEProperty(
DescType inProperty,
const AEDesc &inValue,
AEDesc &outAEReply);
virtual void GetImportantAEProperties(AERecord &outRecord) const;
virtual void SendSelfAE(
AEEventClass inEventClass,
AEEventID inEventID,
Boolean inExecute);
static LModelObject* GetDefaultModel();
static void SetDefaultModel(
LModelObject *inModel);
static void PutInToken(
LModelObject *inModel,
AEDesc &outToken);
static LModelObject* GetModelFromToken(
const AEDesc &inToken);
static void FinalizeLazies();
static LModelObject* GetStreamingModel();
static void SetStreamingModel(
LModelObject *inModel);
static LModelObject* GetTellTarget();
static void SetTellTarget(
LModelObject *inModel);
static void DoAESwitchTellTarget(
LModelObject *inModel);
static void InitLazyList()
{ sLazyModels = new LList; }
static void DestroyLazyList()
{ delete sLazyModels; }
protected:
static LModelObject* sDefaultModel;
static LModelObject* sStreamingModel;
static LList* sLazyModels;
LModelObject* mSuperModel;
LList* mSubModels;
LModelObject* mDefaultSubModel;
LModelObject* mDefaultSuperModel;
DescType mModelKind;
Boolean mLaziness;
static void AddLazy(
LModelObject *inModel);
static void RemoveLazy(
LModelObject *inModel);
virtual void MakeSelfSpecifier(
AEDesc &inSuperSpecifier,
AEDesc &outSelfSpecifier) const;
virtual LModelObject* GetDefaultSuperModel() const;
virtual void SetDefaultSuperModel(
LModelObject *inSubModel);
virtual LModelObject* GetModelProperty(
DescType inProperty) const;
};
typedef struct SModelToken {
LModelObject *modelObject;
} SModelToken, *SModelTokenP, **SModelTokenH;
const Int32 position_AllSubModels = -1;
const DescType type_ModelToken = 'Toke';
// ===========================================================================
// Helper Classes.
class StLazyLock {
public:
StLazyLock(LModelObject *inModel);
~StLazyLock();
LModelObject *mModel;
Boolean mLaziness;
};
class StTempTellTarget {
public:
StTempTellTarget(LModelObject *inModel);
~StTempTellTarget();
LModelObject *mOldTarget;
Boolean mOldTargetLaziness;
};
#endif