Fix for normal bug EXT-2564 - collapsed All friends list reopens if online friends list changes.

--HG--
branch : product-engine
master
Dmitry Zaporozhan 2009-11-25 12:19:24 +02:00
parent 25085a67f4
commit a671c4963a
2 changed files with 63 additions and 6 deletions

View File

@ -71,6 +71,8 @@ static const std::string FRIENDS_TAB_NAME = "friends_panel";
static const std::string GROUP_TAB_NAME = "groups_panel";
static const std::string RECENT_TAB_NAME = "recent_panel";
static const std::string COLLAPSED_BY_USER = "collapsed_by_user";
/** Comparator for comparing avatar items by last interaction date */
class LLAvatarItemRecentComparator : public LLAvatarItemComparator
{
@ -465,7 +467,7 @@ LLPanelPeople::~LLPanelPeople()
}
void LLPanelPeople::onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAvatarList* avatar_list)
void LLPanelPeople::onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list)
{
if(!avatar_list)
{
@ -478,6 +480,12 @@ void LLPanelPeople::onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAva
if(!expanded)
{
avatar_list->resetSelection();
setAccordionCollapsedByUser(ctrl, true);
}
else
{
setAccordionCollapsedByUser(ctrl, false);
}
}
@ -548,11 +556,11 @@ BOOL LLPanelPeople::postBuild()
LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>("tab_all");
accordion_tab->setDropDownStateChangedCallback(
boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _2, mAllFriendList));
boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _1, _2, mAllFriendList));
accordion_tab = getChild<LLAccordionCtrlTab>("tab_online");
accordion_tab->setDropDownStateChangedCallback(
boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _2, mOnlineFriendList));
boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _1, _2, mOnlineFriendList));
buttonSetAction("view_profile_btn", boost::bind(&LLPanelPeople::onViewProfileButtonClicked, this));
buttonSetAction("group_info_btn", boost::bind(&LLPanelPeople::onGroupInfoButtonClicked, this));
@ -929,6 +937,9 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string)
mRecentList->setNameFilter(mFilterSubString);
mGroupList->setNameFilter(mFilterSubString);
setAccordionCollapsedByUser("tab_online", false);
setAccordionCollapsedByUser("tab_all", false);
showFriendsAccordionsIfNeeded();
}
@ -1282,8 +1293,12 @@ void LLPanelPeople::showAccordion(const std::string name, bool show)
tab->setVisible(show);
if(show)
{
// expand accordion
tab->changeOpenClose(false);
// don't expand accordion if it was collapsed by user
if(!isAccordionCollapsedByUser(tab))
{
// expand accordion
tab->changeOpenClose(false);
}
}
}
@ -1315,3 +1330,40 @@ void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param
LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
accordion->arrange();
}
void LLPanelPeople::setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed)
{
if(!acc_tab)
{
llwarns << "Invalid parameter" << llendl;
return;
}
LLSD param = acc_tab->getValue();
param[COLLAPSED_BY_USER] = collapsed;
acc_tab->setValue(param);
}
void LLPanelPeople::setAccordionCollapsedByUser(const std::string& name, bool collapsed)
{
setAccordionCollapsedByUser(getChild<LLUICtrl>(name), collapsed);
}
bool LLPanelPeople::isAccordionCollapsedByUser(LLUICtrl* acc_tab)
{
if(!acc_tab)
{
llwarns << "Invalid parameter" << llendl;
return false;
}
LLSD param = acc_tab->getValue();
return param[COLLAPSED_BY_USER].asBoolean();
}
bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name)
{
return isAccordionCollapsedByUser(getChild<LLUICtrl>(name));
}
// EOF

View File

@ -127,7 +127,7 @@ private:
const std::vector<LLUUID>& ids,
void*);
void onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAvatarList* avatar_list);
void onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list);
void showAccordion(const std::string name, bool show);
@ -135,6 +135,11 @@ private:
void onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param);
void setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed);
void setAccordionCollapsedByUser(const std::string& name, bool collapsed);
bool isAccordionCollapsedByUser(LLUICtrl* acc_tab);
bool isAccordionCollapsedByUser(const std::string& name);
LLFilterEditor* mFilterEditor;
LLTabContainer* mTabContainer;
LLAvatarList* mOnlineFriendList;