80 lines
2.8 KiB
C++
Executable File
80 lines
2.8 KiB
C++
Executable File
/**********************************************************************
|
|
*<
|
|
FILE: IComponent.h
|
|
|
|
DESCRIPTION: An interface representing the composite pattern.
|
|
|
|
CREATED BY: John Hutchinson
|
|
|
|
HISTORY: created 9/1/98
|
|
|
|
*> Copyright (c) 1994, All Rights Reserved.
|
|
**********************************************************************/
|
|
#ifndef _ICOMP
|
|
#define _ICOMP
|
|
|
|
/*
|
|
The composite pattern relies on a common interface for leaves and composites.
|
|
This class embodies that commonality. Classes which realize this interface
|
|
will generally be of two forms: composites and leaves. A composite will
|
|
implement its methods by iterating over its components and making a recursive
|
|
call. A leaf will actually do something.
|
|
|
|
*/
|
|
class ComponentIterator;
|
|
class INode;
|
|
class Object;
|
|
|
|
class IComponent {
|
|
public:
|
|
virtual void DisposeTemporary() = 0;
|
|
virtual void Remove(ComponentIterator& c) = 0;
|
|
virtual void Add(TimeValue t, Object* obj, TSTR objname, Matrix3& oppTm, Matrix3& boolTm, Matrix3& parTM, Control* opCont = NULL) = 0;
|
|
virtual void Add(TimeValue t, INode *node, Matrix3& boolTm, bool delnode = true) = 0;
|
|
|
|
virtual ComponentIterator * MakeIterator() /*const*/ = 0;
|
|
virtual ComponentIterator * MakeReverseIterator() /*const*/ = 0;
|
|
|
|
virtual Object* MakeLeaf(Object* o) = 0;
|
|
virtual bool IsLeaf() const = 0;
|
|
|
|
virtual void SelectOp(int which, BOOL selected) = 0;
|
|
virtual void ClearSelection() = 0;
|
|
virtual int GetSubSelectionCount() = 0;
|
|
};
|
|
|
|
|
|
class ComponentIterator {
|
|
public:
|
|
virtual void First() = 0;
|
|
virtual void Next() = 0;
|
|
virtual bool IsDone() /*const*/ = 0; //Should be const but we want to call nonconst methods from within
|
|
virtual int SubObjIndex() = 0;
|
|
virtual IComponent* GetComponent(void** ipp = NULL, ULONG iid = I_BASEOBJECT) const = 0;
|
|
//Note: this object may be dynamically allocated. Calls must
|
|
//be matched with calls to DisposeTemporary()
|
|
|
|
virtual Object* GetComponentObject() const = 0;
|
|
virtual INode* GetComponentINode(INode *node) const = 0;
|
|
virtual void DisposeComponentINode(INode *node) const = 0;
|
|
virtual Control* GetComponentControl() const = 0;//This need not be released
|
|
virtual bool Selected() const = 0;//is the corresponding component selected?
|
|
virtual bool Hidden() const = 0;//is the corresponding component hidden?
|
|
virtual void DeleteThis() = 0;
|
|
|
|
//JH 4/12/99 Adding some methods for better display control
|
|
virtual bool WantsDisplay(DWORD flags) = 0;
|
|
virtual Point3 DisplayColor(DWORD flags, INode* n = NULL, GraphicsWindow* gw = NULL) = 0;
|
|
protected:
|
|
virtual bool ValidIndex(int which) const = 0;
|
|
};
|
|
|
|
class CompositeClassDesc: public ClassDesc
|
|
{
|
|
public:
|
|
virtual int NumValenceTypes(){return 0;}
|
|
virtual Class_ID GetValenceClassID(int which) {return Class_ID(0,0);}
|
|
};
|
|
|
|
#endif //_ICOMP
|