Toggle sidebar people panel and floater FIRE-493

meow-7.2.2
Tozh 2011-03-20 15:18:39 -04:00
parent f4e30cccd8
commit 3e1ed3f2d7
7 changed files with 149 additions and 35 deletions

View File

@ -57,7 +57,9 @@
#include "rlvhandler.h"
#include "rlvui.h"
// [/RLVa:KB]
//-TT Toggle sidebar panels and floaters
#include "llsidetraytab.h"
//-TT
// Distance from mouse down on which drag'n'drop should be started.
#define DRAG_START_DISTANCE 3
@ -866,7 +868,7 @@ bool LLBottomTray::onContextMenuItemEnabled(const LLSD& userdata)
// used to manage the bottom bar icons specific to sidebar panels.
// AO: A bit hacky and might be better in another place.
void LLBottomTray::showSidebarPanel(const std::string& panel_name)
void LLBottomTray::showSidebarPanel(const LLSD& panel_name)
{
LLSD param;
LLSideTray* sb = LLSideTray::getInstance();
@ -876,35 +878,35 @@ void LLBottomTray::showSidebarPanel(const std::string& panel_name)
// map buttons to specific values that are useful for detection & comparisons
if (panel_name == "panel_people")
if (master_panel_name == "panel_people")
{
param["people_panel_tab_name"] = "nearby_panel";
tab_name = "sidebar_people";
btn = getChild<LLButton>("sidebar_people_btn");
master_panel_name = "panel_container_people";
}
else if (panel_name == "panel_me")
else if (master_panel_name == "panel_me")
{
tab_name = "sidebar_me";
btn = getChild<LLButton>("sidebar_me_btn");
master_panel_name = "panel_container_me";
}
else if (panel_name == "panel_home")
else if (master_panel_name == "panel_home")
{
tab_name = "sidebar_home";
btn = getChild<LLButton>("sidebar_home_btn");
}
else if (panel_name == "panel_places")
else if (master_panel_name == "panel_places")
{
tab_name = "sidebar_places";
btn = getChild<LLButton>("sidebar_places_btn");
}
else if (panel_name == "sidepanel_appearance")
else if (master_panel_name == "sidepanel_appearance")
{
tab_name = "sidebar_appearance";
btn = getChild<LLButton>("sidebar_appearance_btn");
}
else if (panel_name == "sidepanel_inventory")
else if (master_panel_name == "sidepanel_inventory")
{
tab_name = "sidebar_inventory";
btn = getChild<LLButton>("sidebar_inv_btn");
@ -914,18 +916,17 @@ void LLBottomTray::showSidebarPanel(const std::string& panel_name)
LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name);
if (LLFloater::isShown(floater_tab))
{
if (floater_tab->isMinimized())
//-TT Toggle sidebar panels and floaters - added state toggle and combined the cases
bool isMinimized = floater_tab->isMinimized();
if (btn)
{
if (btn)
btn->setForcePressedState(true);
floater_tab->setMinimized(false);
}
else
{
if (btn)
btn->setForcePressedState(false);
floater_tab->setMinimized(true);
//btn->setToggleState(isMinimized);
btn->setForcePressedState(isMinimized);
//const LLSD& sdName(tab_name);
//// Set the clicked callback to toggle the floater
//btn->setClickedCallback(boost::bind(&LLFloaterReg::toggleFloaterInstance, sdName));
}
floater_tab->setMinimized(!isMinimized);
}
// toggle collapsing sidebar if active & docked
else
@ -933,12 +934,29 @@ void LLBottomTray::showSidebarPanel(const std::string& panel_name)
if (sb->isPanelActive(master_panel_name))
{
sb->collapseSideBar();
//btn->setToggleState(false);
}
else
{
sb->showPanel(panel_name, param);
//btn->setToggleState(true);
}
//-TT Toggle sidebar panels with buttons
if (btn)
{
// Set the clicked callback to toggle the sidebar
//btn->setClickedCallback(boost::bind(&LLSideTrayTab::toggleSidebarTabInstance, sdName));
}
}
//const LLSD& sdName(panel_name);
//std::string vis_control_name = LLSideTrayTab::declareVisibilityControl(sdname.asString());
// Set the button control value (toggle state) to the floater visibility control (Sets the value as well)
//btn->setControlVariable(LLSideTray::getInstance()->getPanel(sdName));
// Set the clicked callback to toggle the floater
//btn->setClickedCallback(boost::bind(&LLSideTrayTab::toggleSidebarTabInstance, sdName));
//btn->toggleState();
//-TT
}
void LLBottomTray::onContextMenuItemClicked(const LLSD& userdata)

View File

@ -445,7 +445,10 @@ protected:
void updateContextMenu(S32 x, S32 y, MASK mask);
void onContextMenuItemClicked(const LLSD& userdata);
void showSidebarPanel(const std::string& panel_name);
//void showSidebarPanel(std::string &panel_name);
//-TT Toggle sidebar panels with buttons
void showSidebarPanel(const LLSD& panel_name);
//-TT
bool onContextMenuItemEnabled(const LLSD& userdata);
// Either default or saved after user's manual resize width of nearby chat.

View File

@ -190,17 +190,18 @@ LLSideTray* LLSideTrayTab::getSideTray()
//-TT - Patch : MinimizeSidetabs
void LLSideTrayTab::minimizeTab()
{
LLSideTray* side_tray = LLSideTray::getInstance();
if (side_tray->isTabAttached(getName()))
{
side_tray->collapseSideBar();
}
else
{
llinfos << "Trying to minimize floater " << getName() << llendl;
LLFloater* floater_tab = (LLFloater*)getParent();
floater_tab->setMinimized(true);
}
LLSideTrayTab::toggleSidebarTabInstance(getName());
////LLSideTray* side_tray = LLSideTray::getInstance();
////if (side_tray->isTabAttached(getName()))
////{
//// side_tray->collapseSideBar();
////}
////else
////{
//// llinfos << "Trying to minimize floater " << getName() << llendl;
//// LLFloater* floater_tab = (LLFloater*)getParent();
//// floater_tab->setMinimized(true);
////}
}
@ -242,6 +243,28 @@ void LLSideTrayTab::toggleTabDocked()
// so that it doesn't receive redundant visibility change notifications.
LLFloaterReg::toggleInstance("side_bar_tab", tab_name);
}
//-TT Toggle sidebar panels with buttons
void LLSideTrayTab::toggleSidebarTabInstance(std::string sdname)
{
LLSideTray* side_tray = LLSideTray::getInstance();
if (side_tray->isTabAttached(sdname))
{
side_tray->collapseSideBar();
}
else
{
llinfos << "Trying to minimize floater " << sdname << llendl;
//LLFloater* floater_tab = (LLFloater*)getParent();
LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", sdname);
floater_tab->setMinimized(true);
}
//if (floater_tab)
// return !(floater_tab->isMinimized());
//else
// return side_tray->isTabAttached(sdname);
}
//-TT
void LLSideTrayTab::dock(LLFloater* floater_tab)
{
@ -1242,10 +1265,28 @@ void LLSideTray::togglePanel(LLPanel* &sub_panel, const std::string& panel_name,
// If a panel is visible and attached to Side Tray (has LLSideTray among its ancestors)
// it should be toggled off by collapsing Side Tray.
if (sub_panel->isInVisibleChain() && sub_panel->hasAncestor(this))
{
LLSideTray::getInstance()->collapseSideBar();
}
//if (sub_panel->isInVisibleChain() && sub_panel->hasAncestor(this))
//{
// LLSideTray::getInstance()->collapseSideBar();
//}
//-TT Toggle sidebar panels with buttons
if (sub_panel->isInVisibleChain())
if (sub_panel->hasAncestor(this))
{
LLSideTray::getInstance()->collapseSideBar();
}
else
{
LLSideTrayTab *tab = getTabByPanel(panel_name);
if(tab)
{
LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab->getName());
floater_tab->setMinimized(!(floater_tab->isMinimized()));
//tab->minimizeTab();
}
}
//-TT
else
{
LLSideTray::getInstance()->showPanel(panel_name, params);
@ -1284,6 +1325,44 @@ LLPanel *findChildPanel(LLPanel *panel, const std::string& name, bool recurse)
return NULL;
}
//-TT Toggle sidebar panels and floaters
LLSideTrayTab* LLSideTray::getTabByPanel(const std::string& panel_name)
{
// Look up the panel in the list of detached tabs.
for ( child_vector_const_iter_t child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it)
{
LLPanel *panel = findChildPanel(*child_it,panel_name,true);
if(panel)
{
return *child_it;
}
}
// Look up the panel in the list of attached tabs.
for ( child_vector_const_iter_t child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
{
LLPanel *panel = findChildPanel(*child_it,panel_name,true);
if(panel)
{
return *child_it;
}
}
return NULL;
}
//-TT
//-TT Toggle sidebar panels and floaters
bool LLSideTray::isFloaterPanelVisible(const std::string& panel_name)
{
LLSideTrayTab *tab = LLSideTray::getInstance()->getTabByPanel(panel_name);
if(tab)
{
LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab->getName());
return !(floater_tab->isMinimized());
}
return false;
}
//-TT
LLPanel* LLSideTray::getPanel(const std::string& panel_name)
{
// Look up the panel in the list of detached tabs.
@ -1324,6 +1403,7 @@ bool LLSideTray::isPanelActive(const std::string& panel_name)
return (panel->getName() == panel_name);
}
void LLSideTray::updateSidetrayVisibility()
{
// set visibility of parent container based on collapsed state

View File

@ -197,6 +197,10 @@ public:
void toggleTabDocked(const std::string& strTabName);
// [/RLVa:KB]
//-TT Toggle sidebar panels with buttons
static bool isFloaterPanelVisible(const std::string& panel_name);
//-TT
protected:
bool addChild (LLView* view, S32 tab_group);
bool removeTab (LLSideTrayTab* tab); // Used to detach tabs temporarily
@ -224,7 +228,9 @@ protected:
bool onTabDestroy (const LLSideTrayTab* tab);
// [/RLVa:KB]
void onToggleCollapse();
//-TT Toggle sidebar panels with buttons
LLSideTrayTab* getTabByPanel(const std::string& panel_name);
//-TT
private:
// Implementation of LLDestroyClass<LLSideTray>
static void destroyClass()

View File

@ -69,6 +69,9 @@ public:
/*virtual*/ BOOL postBuild ();
/*virtual*/ bool addChild (LLView* view, S32 tab_group);
//-TT Toggle sidebar panels with buttons
static void toggleSidebarTabInstance(std::string sdname);
//-TT
void reshape (S32 width, S32 height, BOOL called_from_parent = TRUE);

View File

@ -5923,6 +5923,7 @@ class LLSidetrayPanelVisible : public view_listener_t
std::string panel_name = userdata.asString();
// Toggle the panel
if (LLSideTray::getInstance()->isPanelActive(panel_name))
//|| LLSideTray::getInstance()->isFloaterPanelVisible(panel_name))
{
return true;
}

View File

@ -213,6 +213,9 @@
enabled="true"
use_ellipses="true"
width="36">
<init_callback
function="SideTray.PanelPeopleTab"
parameter="panel_container_people" />
</bottomtray_button>
</layout_panel>