void LLMultiFloater::removeFloater(LLFloater* floaterp) { if (!floaterp || floaterp->getHost() != this ) return; floater_data_map_t::iterator found_data_it = mFloaterDataMap.find(floaterp->getHandle()); if (found_data_it != mFloaterDataMap.end()) { LLFloaterData& floater_data = found_data_it->second; floaterp->setCanMinimize(floater_data.mCanMinimize); floaterp->mSaveRect = floater_data.mSaveRect; if (!floater_data.mCanResize) { // restore original size floaterp->reshape(floater_data.mWidth, floater_data.mHeight); } floaterp->setCanResize(floater_data.mCanResize); mFloaterDataMap.erase(found_data_it); } mTabContainer->removeTabPanel(floaterp); floaterp->setBackgroundVisible(TRUE); floaterp->setCanDrag(TRUE); floaterp->setHost(NULL); floaterp->applyRectControl(); updateResizeLimits(); tabOpen((LLFloater*)mTabContainer->getCurrentPanel(), false); }
void LLFloaterNotificationConsole::removeChannel(const std::string& name) { LLPanel* panelp = getChild<LLPanel>(name); getChildRef<LLLayoutStack>("notification_channels").removePanel(panelp); delete panelp; updateResizeLimits(); }
void LLFloaterNotificationConsole::addChannel(const std::string& name, bool open) { LLLayoutStack& stack = getChildRef<LLLayoutStack>("notification_channels"); LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(name); stack.addPanel(panelp, LLLayoutStack::ANIMATE); LLButton& header_button = panelp->getChildRef<LLButton>("header"); header_button.setToggleState(!open); stack.collapsePanel(panelp, !open); updateResizeLimits(); }
void LLFloaterNotificationConsole::addChannel(const std::string& name, bool open) { LLLayoutStack& stack = getChildRef<LLLayoutStack>("notification_channels"); LLNotificationChannelPanel::Params p; p.min_dim = NOTIFICATION_PANEL_HEADER_HEIGHT; p.auto_resize = true; p.user_resize = true; p.name = name; LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(p); stack.addPanel(panelp, LLLayoutStack::ANIMATE); LLButton& header_button = panelp->getChildRef<LLButton>("header"); header_button.setToggleState(!open); stack.collapsePanel(panelp, !open); updateResizeLimits(); }
/** void addFloater(LLFloater* floaterp, BOOL select_added_floater) Adds the LLFloater pointed to by floaterp to this. If floaterp is already hosted by this, then it is re-added to get new titles, etc. If select_added_floater is true, the LLFloater pointed to by floaterp will become the selected tab in this Affects: mTabContainer, floaterp **/ void LLMultiFloater::addFloater(LLFloater* floaterp, BOOL select_added_floater, LLTabContainer::eInsertionPoint insertion_point) { if (!floaterp) { return; } if (!mTabContainer) { LL_ERRS() << "Tab Container used without having been initialized." << LL_ENDL; return; } if (floaterp->getHost() == this) { // already hosted by me, remove // do this so we get updated title, etc. mFloaterDataMap.erase(floaterp->getHandle()); mTabContainer->removeTabPanel(floaterp); } else if (floaterp->getHost()) { // floaterp is hosted by somebody else and // this is adding it, so remove it from its old host floaterp->getHost()->removeFloater(floaterp); } else if (floaterp->getParent() == gFloaterView) { // rehost preview floater as child panel gFloaterView->removeChild(floaterp); } // store original configuration LLFloaterData floater_data; floater_data.mWidth = floaterp->getRect().getWidth(); floater_data.mHeight = floaterp->getRect().getHeight(); floater_data.mCanMinimize = floaterp->isMinimizeable(); floater_data.mCanResize = floaterp->isResizable(); floater_data.mSaveRect = floaterp->mSaveRect; // remove minimize and close buttons floaterp->setCanMinimize(FALSE); floaterp->setCanResize(FALSE); floaterp->setCanDrag(FALSE); floaterp->mSaveRect = FALSE; floaterp->storeRectControl(); // avoid double rendering of floater background (makes it more opaque) floaterp->setBackgroundVisible(FALSE); if (mAutoResize) { growToFit(floater_data.mWidth, floater_data.mHeight); } //add the panel, add it to proper maps mTabContainer->addTabPanel( LLTabContainer::TabPanelParams() .panel(floaterp) .label(floaterp->getShortTitle()) .insert_at(insertion_point)); mFloaterDataMap[floaterp->getHandle()] = floater_data; updateResizeLimits(); if ( select_added_floater ) { mTabContainer->selectTabPanel(floaterp); } else { // reassert visible tab (hiding new floater if necessary) mTabContainer->selectTab(mTabContainer->getCurrentPanelIndex()); } floaterp->setHost(this); if (isMinimized()) { floaterp->setVisible(FALSE); } // Tabs sometimes overlap resize handle moveResizeHandlesToFront(); }