void NFrameBase::SetChildBottommost(NFrameBase* child) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return; size_t zorder; FrameList::const_iterator ite = GetChildHelper(child, zorder); NAssertError((ite != childs_.end()), _T("child not exists")); if(ite == childs_.end()) return; if(zorder >= childs_.size() - bottomMostCount_) return; if(zorder < topMostCount_) -- topMostCount_; // move childs_.erase(ite); ite = childs_.begin(); size_t offset = childs_.size() - bottomMostCount_; for(size_t i=0; i<offset; ++ i) { ++ ite; } childs_.insert(ite, child); ++ bottomMostCount_; }
bool NFrameBase::AddChild(NFrameBase* child) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return FALSE; // check if exists size_t zorder; NAssertError(GetChildHelper(child, zorder) == childs_.end(), _T("child already exists")); if(GetChildHelper(child, zorder) != childs_.end()) return true; childs_.push_back(child); SetParentHelper(child, this); return true; }
size_t NFrameBase::GetChildZOrder(NFrameBase* child) const { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return static_cast<size_t>(-1); size_t zorder; FrameList::const_iterator ite = GetChildHelper(child, zorder); NAssertError(ite != childs_.end(), _T("child not exists")); return zorder; }
bool NFrameBase::AddChild(NFrameBase* child) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return FALSE; // check if exists size_t zorder; NAssertError(GetChildHelper(child, zorder) == childs_.end(), _T("child already exists")); FrameList::const_iterator ite = GetChildHelper(child, zorder); for(int i=topMostCount_; i>0; --i) { -- ite; } childs_.insert(ite, child); SetParentHelper(child, this); return true; }
bool NFrameBase::RemoveChild(NFrameBase* child) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return FALSE; size_t zorder; FrameList::const_iterator ite = GetChildHelper(child, zorder); if(ite == childs_.end()) return false; if(zorder < topMostCount_) -- topMostCount_; if(zorder >= childs_.size() - bottomMostCount_) -- bottomMostCount_; childs_.erase(ite); SetParentHelper(child, NULL); return true; }
size_t NFrameBase::SetChildZOrder(NFrameBase* child, size_t zorder) { NAssertError(child != NULL, _T("wrong type")); if(child == NULL) return static_cast<size_t>(-1); size_t tmpZorder; FrameList::const_iterator ite = GetChildHelper(child, tmpZorder); NAssertError(ite != childs_.end(), _T("child not exists")); if(ite == childs_.end()) return static_cast<size_t>(-1); if(tmpZorder < topMostCount_ || tmpZorder >= childs_.size() - bottomMostCount_) return tmpZorder; childs_.erase(ite); zorder = (zorder > childs_.size()) ? childs_.size() : zorder; zorder = (zorder < 0) ? 0 : zorder; ite = childs_.begin(); for(size_t i=0; i<zorder; ++ i) ++ ite; childs_.insert(ite, child); return zorder; }