// (c) Ubi Studios 1996 // See Vincent Greco for any comment or question #ifndef __SNDLSTPR_HPP__ #define __SNDLSTPR_HPP__ #include "SNDLstEd.Hpp" #define SNDLST2_ChildClass \ SNDLST2_EdChild #define SNDLST2_ParentClass \ SNDLST2_EdParent TemplateParam class SNDLST2_EdParent; TemplateParam class SNDLST2_EdChild : public SNDLST2_ElementClass { private: // SNDLST2_ParentClass * pParent; public: SNDLST2_EdChild(void) { // pParent=NULL; } virtual ~SNDLST2_EdChild(void){} public: SNDLST2_ParentClass * GetParent() {return (SNDLST2_ParentClass *)GetList();} // void SetParent(SNDLST2_ParentClass * _pParent, BOOL ModifyEngine=TRUE); // void Isolate(BOOL ModifyEngine=TRUE); }; TemplateParam class SNDLST2_EdParent : virtual public SNDLST2_EdMot, public SNDLST2_ListClass { private: // SNDLST2_EdList m_List; public: void SetStruct(tdxPointerToAnchorStruct pNewStruct) { SNDLST2_EdMot::SetStruct(pNewStruct); SetEngineAnchor(pNewStruct); } public: SNDLST2_EdParent(void) {SetEngineAnchor(GetStruct());}//m_List.SetOwner(this);/*LST_M_InitParent(GetStruct());*/} virtual ~SNDLST2_EdParent(void){} // SNDLST2_EdList *GetList(){return &m_List;} /* POSITION InsertAfter( POSITION position, SNDLST2_ChildClass* newElement, BOOL ModifyEngine=TRUE); POSITION InsertBefore( POSITION position, SNDLST2_ChildClass* newElement, BOOL ModifyEngine=TRUE); POSITION AddHead(SNDLST2_ChildClass* newElement, BOOL ModifyEngine=TRUE); POSITION AddTail(SNDLST2_ChildClass* newElement, BOOL ModifyEngine=TRUE); void RemoveAt(POSITION position, BOOL ModifyEngine=TRUE); EditorClass* RemoveHead(BOOL ModifyEngine=TRUE); EditorClass* RemoveTail(BOOL ModifyEngine=TRUE); void RemoveAll(BOOL ModifyEngine=TRUE); */ }; //both Parent and Child (homogenous tree) TemplateParam class SNDLST2_EdNode : public SNDLST2_ElementClass, public SNDLST2_ListClass { private: // SNDLST2_EdList m_List; public: void SetStruct(tdxPointerToAnchorStruct pNewStruct) { SNDLST2_EdMot::SetStruct(pNewStruct); SetEngineAnchor(pNewStruct); } EditorClass * GetParent() {return (EditorClass *)GetList();} public: SNDLST2_EdNode(void) {SetEngineAnchor(GetStruct());} virtual ~SNDLST2_EdNode(void){} }; //------------------------------------------------------------------ /* //redondance avec SetList de SNDLST2_ElementClass ? TemplateParam void SNDLST2_ChildClass::SetParent(SNDLST2_ParentClass * _pParent, BOOL ModifyEngine) { pParent=_pParent; } */ /* TemplateParam void SNDLST2_ChildClass::Isolate(BOOL ModifyEngine)//can be called as many times as you want. { if(pParent) { POSITION P=pParent->GetList()->Find(this); pParent->GetList()->RemoveAt(P, ModifyEngine); // pParent=NULL;//??? } } TemplateParam void SNDLST2_ChildClass::InsertBetween(tdxHandleToStruct pPrev, tdxHandleToStruct pNext) { if(pParent) { POSITION P=pParent->GetList()->Find(this); pParent->GetList()->RemoveAt(P); // pParent=NULL; InsertBetween is always followed by a SetParent } LST_M_StaticInsertBetween(GetStruct(),pPrev,pNext); } //----------------------------------------- TemplateParam POSITION SNDLST2_ParentClass::InsertAfter(POSITION position, SNDLST2_ChildClass* newElement, BOOL ModifyEngine) { // newElement->SetParent(this, ModifyEngine); return SNDLST2_ListClass::InsertAfter(position, newElement); } TemplateParam POSITION SNDLST2_ParentClass::InsertBefore(POSITION position, SNDLST2_ChildClass* newElement, BOOL ModifyEngine) { // newElement->SetParent(this, ModifyEngine); return SNDLST2_ListClass::InsertBefore(position, newElement); } TemplateParam POSITION SNDLST2_ParentClass:: AddHead(SNDLST2_ChildClass* newElement, BOOL ModifyEngine ) { // newElement->SetParent(this, ModifyEngine); return SNDLST2_ListClass::AddHead(newElement); } TemplateParam POSITION SNDLST2_ParentClass::AddTail(SNDLST2_ChildClass* newElement, BOOL ModifyEngine ) { // newElement->SetParent(this, ModifyEngine); return SNDLST2_ListClass::AddTail(newElement); } TemplateParam void SNDLST2_ParentClass::RemoveAt(POSITION position, BOOL ModifyEngine) { // GetAt(position)->SetParent(NULL, ModifyEngine); SNDLST2_ListClass::RemoveAt(position); } TemplateParam EditorClass* SNDLST2_ParentClass::RemoveHead(BOOL ModifyEngine) { SNDLST2_ChildClass *pOldObj = SNDLST2_ListClass::RemoveHead(); // pOldObj->SetParent(NULL, ModifyEngine); return (EditorClass*)pOldObj; } TemplateParam EditorClass* SNDLST2_ParentClass::RemoveTail(BOOL ModifyEngine) { SNDLST2_ChildClass *pOldObj = SNDLST2_ListClass::RemoveTail(); // pOldObj->SetParent(NULL, ModifyEngine); return (EditorClass*)pOldObj; } TemplateParam void SNDLST2_ParentClass::RemoveAll(BOOL ModifyEngine)//not tested !!! { SNDLST2_ListClass::RemoveAll(); } */ #endif //__LSTEDPAR_HPP__