/** * Closes the given display. * * @pre disp is a display we know about. * @post disp has been removed from the list of displays * (notifyDrawMgr == true) && (drawMgr != NULL) && (disp is active) * ==> Draw manager has been told to clode the window for the display */ int DisplayManager::closeDisplay(DisplayPtr disp, bool notifyDrawMgr) { vprASSERT(isMemberDisplay(disp)); // Make sure that display actually exists vprDEBUG(vrjDBG_DISP_MGR, vprDBG_STATE_LVL) << "[vrj::DisplayManager::closeDisplay()] Closing display named '" << disp->getName() << "'" << std::endl << vprDEBUG_FLUSH; // Notify the draw manager to get rid of it // Note: if it is not active, then the draw manager doesn't know about it if ((notifyDrawMgr) && (mDrawManager != NULL) && (disp->isActive())) { mDrawManager->removeDisplay(disp); } // Remove it from local data structures size_t num_before_close = mActiveDisplays.size() + mInactiveDisplays.size(); mActiveDisplays.erase( std::remove(mActiveDisplays.begin(), mActiveDisplays.end(), disp), mActiveDisplays.end()); mInactiveDisplays.erase( std::remove(mInactiveDisplays.begin(), mInactiveDisplays.end(), disp), mInactiveDisplays.end()); vprASSERT(num_before_close == (1+mActiveDisplays.size() + mInactiveDisplays.size())); boost::ignore_unused_variable_warning(num_before_close); return 1; }
/** * Adds the element to the configuration. * * @pre configCanHandle(element) == true * @post (display of same name already loaded) ==> old display closed, new one opened<br> * (display is new) ==> (new display is added)<br> * Draw Manager is notified of the display change. */ bool DisplayManager::configAddDisplay(jccl::ConfigElementPtr element) { vprASSERT(configCanHandle(element)); // We must be able to handle it first of all vprDEBUG_BEGIN(vrjDBG_DISP_MGR,vprDBG_STATE_LVL) << "------- DisplayManager::configAddDisplay -------\n" << vprDEBUG_FLUSH; // Find out if we already have a window of this name // If so, then close it before we open a new one of the same name // This basically allows re-configuration of a window DisplayPtr cur_disp = findDisplayNamed(element->getName()); if (cur_disp != NULL) // We have an old display { vprDEBUG(vrjDBG_DISP_MGR,vprDBG_CONFIG_LVL) << "Removing old window: " << cur_disp->getName().c_str() << vprDEBUG_FLUSH; closeDisplay(cur_disp,true); // Close the display and notify the draw manager to close the window } // --- Add a display (of the correct type) ---- // if (element->getID() == std::string("display_window")) // Display window { DisplayPtr newDisp = Display::create(); // Create the display newDisp->config(element); addDisplay(newDisp,true); // Add it vprDEBUG(vrjDBG_DISP_MGR,vprDBG_STATE_LVL) << "Adding display: " << newDisp->getName().c_str() << std::endl << vprDEBUG_FLUSH; vprDEBUG(vrjDBG_DISP_MGR,vprDBG_STATE_LVL) << "Display: " << newDisp << std::endl << vprDEBUG_FLUSH; } vprDEBUG_END(vrjDBG_DISP_MGR,vprDBG_STATE_LVL) << "------- DisplayManager::configAddDisplay Done. --------\n" << vprDEBUG_FLUSH; return true; }