void LLPanel::childSetTabChangeCallback(const std::string& id, const std::string& tabname, void (*on_tab_clicked)(void*, bool), void *userdata) { LLTabContainer* child = getChild<LLTabContainer>(id); if (child) { LLPanel *panel = child->getPanelByName(tabname); if (panel) { child->setTabChangeCallback(panel, on_tab_clicked); child->setTabUserData(panel, userdata); } } }
LLFloaterDirectory::LLFloaterDirectory(const std::string& name) : LLFloater(name, std::string("FloaterFindRect2"), LLStringUtil::null), mMinimizing(false) { sInstance = this; mFindAllPanel = NULL; mClassifiedPanel = NULL; mEventsPanel = NULL; mLandPanel = NULL; mPanelAvatarp = NULL; mPanelEventp = NULL; mPanelGroupp = NULL; mPanelGroupHolderp = NULL; mPanelPlacep = NULL; mPanelPlaceSmallp = NULL; mPanelClassifiedp = NULL; // Build the floater with our tab panel classes bool secondlife = gHippoGridManager->getConnectedGrid()->isSecondLife(); LLCallbackMap::map_t factory_map; factory_map["classified_panel"] = LLCallbackMap(createClassified, this); factory_map["events_panel"] = LLCallbackMap(createEvents, this); factory_map["places_panel"] = LLCallbackMap(createPlaces, this); factory_map["land_sales_panel"] = LLCallbackMap(createLand, this); factory_map["people_panel"] = LLCallbackMap(createPeople, this); factory_map["groups_panel"] = LLCallbackMap(createGroups, this); factory_map[market_panel] = LLCallbackMap(LLPanelDirMarket::create, this); factory_map["find_all_panel"] = LLCallbackMap(createFindAll, this); factory_map["showcase_panel"] = LLCallbackMap(createShowcase, this); if (secondlife) { factory_map["web_panel"] = LLCallbackMap(createWebPanel, this); } else { factory_map["find_all_old_panel"] = LLCallbackMap(createFindAllOld, this); } factory_map["classified_details_panel"] = LLCallbackMap(createClassifiedDetail, this); factory_map["event_details_panel"] = LLCallbackMap(createEventDetail, this); factory_map["group_details_panel"] = LLCallbackMap(createGroupDetail, this); factory_map["group_details_panel_holder"] = LLCallbackMap(createGroupDetailHolder, this); factory_map["place_details_panel"] = LLCallbackMap(createPlaceDetail, this); factory_map["place_details_small_panel"] = LLCallbackMap(createPlaceDetailSmall, this); factory_map["Panel Avatar"] = LLCallbackMap(createPanelAvatar, this); mCommitCallbackRegistrar.add("Search.WebFloater", boost::bind(&LLFloaterSearch::open, boost::bind(LLFloaterSearch::getInstance))); LLUICtrlFactory::getInstance()->buildFloater(this, "floater_directory.xml", &factory_map); moveResizeHandlesToFront(); if (mPanelAvatarp) { mPanelAvatarp->selectTab(0); } LLTabContainer* container = getChild<LLTabContainer>("Directory Tabs"); if (secondlife) { container->removeTabPanel(getChild<LLPanel>("find_all_old_panel")); // Not used } else { container->removeTabPanel(getChild<LLPanel>("web_panel")); // Not needed LLPanel* panel(getChild<LLPanel>("find_all_panel")); LLPanel* prev_tab(getChild<LLPanel>("find_all_old_panel")); LFSimFeatureHandler& inst(LFSimFeatureHandler::instance()); set_tab_visible(container, panel, !inst.searchURL().empty(), prev_tab); inst.setSearchURLCallback(boost::bind(set_tab_visible, container, panel, !boost::bind(&std::string::empty, _1), prev_tab)); panel = getChild<LLPanel>("showcase_panel"); prev_tab = getChild<LLPanel>("events_panel"); set_tab_visible(container, panel, !inst.destinationGuideURL().empty(), prev_tab); inst.setDestinationGuideURLCallback(boost::bind(set_tab_visible, container, panel, !boost::bind(&std::string::empty, _1), prev_tab)); LLPanelDirMarket* marketp = static_cast<LLPanelDirMarket*>(container->getPanelByName(market_panel)); container->removeTabPanel(marketp); // Until we get a MarketPlace URL, tab is removed. marketp->handleRegionChange(container); gAgent.addRegionChangedCallback(boost::bind(&LLPanelDirMarket::handleRegionChange, marketp, container)); } container->setCommitCallback(boost::bind(&LLFloaterDirectory::onTabChanged,_2)); }