//--------------------------------------------------------------------- void OverlayManager::destroyAllOverlayElementsImpl(ElementMap& elementMap) { ElementMap::iterator i; while ((i = elementMap.begin()) != elementMap.end()) { OverlayElement* element = i->second; // Get factory to delete FactoryMap::iterator fi = mFactories.find(element->getTypeName()); if (fi == mFactories.end()) { OGRE_EXCEPT(Exception::ERR_ITEM_NOT_FOUND, "Cannot locate factory for element " + element->getName(), "OverlayManager::destroyAllOverlayElements"); } // remove from parent, if any OverlayContainer* parent; if ((parent = element->getParent()) != 0) { parent->_removeChild(element->getName()); } // children of containers will be auto-removed when container is destroyed. // destroy the element and remove it from the list fi->second->destroyOverlayElement(element); elementMap.erase(i); } }
//----------------------------------------------------------------------- void OverlayProfileSessionListener::finializeSession() { OverlayContainer* container = dynamic_cast<OverlayContainer*>(mProfileGui); if (container) { OverlayContainer::ChildIterator children = container->getChildIterator(); while (children.hasMoreElements()) { OverlayElement* element = children.getNext(); OverlayContainer* parent = element->getParent(); if (parent) parent->removeChild(element->getName()); OverlayManager::getSingleton().destroyOverlayElement(element); } } if(mProfileGui) OverlayManager::getSingleton().destroyOverlayElement(mProfileGui); if(mOverlay) OverlayManager::getSingleton().destroy(mOverlay); mProfileBars.clear(); }
void OverlayContainer::copyFromTemplate(OverlayElement* templateOverlay) { OverlayElement::copyFromTemplate(templateOverlay); if (templateOverlay->isContainer() && isContainer()) { OverlayContainer::ChildIterator it = static_cast<OverlayContainer*>(templateOverlay)->getChildIterator(); while (it.hasMoreElements()) { OverlayElement* oldChildElement = it.getNext(); if (oldChildElement->isCloneable()) { OverlayElement* newChildElement = OverlayManager::getSingleton().createOverlayElement( oldChildElement->getTypeName(), mName+"/"+oldChildElement->getName()); newChildElement->copyFromTemplate(oldChildElement); addChild(static_cast<OverlayContainer*>(newChildElement)); } } } }
//----------------------------------------------------------------------- void Profiler::setEnabled(bool enabled) { if (!mInitialized && enabled) { // the user wants to enable the Profiler for the first time // so we initialize the GUI stuff initialize(); mInitialized = true; } else { OverlayContainer* container = dynamic_cast<OverlayContainer*>(mProfileGui); if (container) { OverlayContainer::ChildIterator children = container->getChildIterator(); while (children.hasMoreElements()) { OverlayElement* element = children.getNext(); OverlayContainer* parent = element->getParent(); if (parent) parent->removeChild(element->getName()); OverlayManager::getSingleton().destroyOverlayElement(element); } } if(mProfileGui) OverlayManager::getSingleton().destroyOverlayElement(mProfileGui); if(mOverlay) OverlayManager::getSingleton().destroy(mOverlay); mProfileBars.clear(); mInitialized = false; mEnabled = false; } // We store this enable/disable request until the frame ends // (don't want to screw up any open profiles!) mNewEnableState = enabled; }