void ConfVarTable::Clear() { assert( typeTable == _type ); assert( !_frozen ); ClearInternal(); FireValueUpdate(this); }
ConfVarTable::~ConfVarTable() { assert(typeTable == _type); ClearInternal(); delete _val.asTable; _type = typeNil; }
bool CGroupObject::UpdateReference(bool bForceReload) { if (!m_ReferenceName_.size()) { ELog.Msg (mtError,"ERROR: '%s' - has empty reference.",Name); return false; } xr_string fn = m_ReferenceName_.c_str(); fn = EFS.ChangeFileExt(fn,".group"); IReader* R = FS.r_open(_groups_, fn.c_str()); bool bres = false; if (R) { bForceInitListBox = TRUE; ObjectsInGroup ObjectsInGroupBk = m_ObjectsInGroup; if(bForceReload) ClearInternal (ObjectsInGroupBk); m_ObjectsInGroup.clear(); xr_string nm = Name; shared_str old_refs = m_ReferenceName_; UpdateTransform (true); Fvector old_pos = PPosition; Fvector old_rot = PRotation; Fvector old_sc = PScale; if(LoadStream(*R)) { Name = nm.c_str(); bres = true; UpdateTransform (true); } FS.r_close (R); SetRefName(old_refs.c_str()); NumSetPosition (old_pos); NumSetRotation (old_rot); NumSetScale (old_sc); UpdateTransform (true); if(m_ObjectsInGroup.size()==ObjectsInGroupBk.size()) { ObjectsInGroup::iterator it = m_ObjectsInGroup.begin(); ObjectsInGroup::iterator itBk = ObjectsInGroupBk.begin(); for(; it!=m_ObjectsInGroup.end(); ++it, ++itBk) { it->pObject->m_CO_Flags.set(flObjectInGroupUnique, FALSE); if(itBk->pObject->m_CO_Flags.test(flObjectInGroupUnique) ) { std::swap(*itBk, *it); }else it->pObject->Name = itBk->pObject->Name; } }else { if(ObjectsInGroupBk.size()) { ELog.Msg (mtError, "Not all objects synchronised correctly", Name); for (ObjectsInGroup::iterator it=m_ObjectsInGroup.begin(); it!=m_ObjectsInGroup.end(); ++it) it->pObject->m_CO_Flags.set(flObjectInGroupUnique, FALSE); }else { // first setup for (ObjectsInGroup::iterator it=m_ObjectsInGroup.begin(); it!=m_ObjectsInGroup.end(); ++it) it->pObject->m_CO_Flags.set(flObjectInGroupUnique, FALSE); } } ClearInternal (ObjectsInGroupBk); }else { ELog.Msg (mtError,"ERROR: Can't open group file: '%s'.",fn.c_str()); } return bres; }