From 5d8ac68d3a12f9b3c49a02e88952cafb53bc57d9 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Tue, 21 Jun 2011 12:03:28 -0500 Subject: [PATCH] Groups/agent profile floaters now update when a group visbility changes. Apply button in group settings doesn't behave quite as badly after changing notices/chat/show in profile settings. Groups floater now bolds visible groups, italicized if active (this may need to be something more noticeable) --- indra/newview/llagent.cpp | 12 +++++++--- indra/newview/llfloatergroups.cpp | 25 ++++++++++++-------- indra/newview/llpanelavatar.cpp | 33 +++++++++++++++++++-------- indra/newview/llpanelgroupgeneral.cpp | 23 +++++++++++++++++-- 4 files changed, 68 insertions(+), 25 deletions(-) diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 12132d4d4..97f21d5ef 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2488,15 +2488,18 @@ BOOL LLAgent::setGroupContribution(const LLUUID& group_id, S32 contribution) return FALSE; } +void update_group_floaters(const LLUUID& group_id); + BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile) { S32 count = mGroups.count(); for(S32 i = 0; i < count; ++i) { - if(mGroups.get(i).mID == group_id) + LLGroupData &group = mGroups.get(i); + if(group.mID == group_id) { - mGroups.get(i).mAcceptNotices = accept_notices; - mGroups.get(i).mListInProfile = list_in_profile; + group.mAcceptNotices = accept_notices; + group.mListInProfile = list_in_profile; LLMessageSystem* msg = gMessageSystem; msg->newMessage("SetGroupAcceptNotices"); msg->nextBlock("AgentData"); @@ -2508,6 +2511,9 @@ BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOO msg->nextBlock("NewData"); msg->addBOOL("ListInProfile", list_in_profile); sendReliableMessage(); + + update_group_floaters(group.mID); + return TRUE; } } diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp index 132c2abec..31f1328aa 100644 --- a/indra/newview/llfloatergroups.cpp +++ b/indra/newview/llfloatergroups.cpp @@ -198,15 +198,9 @@ LLPanelGroups::~LLPanelGroups() // clear the group list, and get a fresh set of info. void LLPanelGroups::reset() { - LLCtrlListInterface *group_list = childGetListInterface("group list"); - if (group_list) - { - group_list->operateOnAll(LLCtrlListInterface::OP_DELETE); - } childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); childSetTextArg("groupcount", "[MAX]", llformat("%d", gHippoLimits->getMaxAgentGroups())); - const std::string none_text = getString("none"); init_group_list(getChild("group list"), gAgent.getGroupID(), none_text); enableButtons(); @@ -489,6 +483,10 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const s LLCtrlListInterface *group_list = ctrl->getListInterface(); if (!group_list) return; + const LLUUID selected_id = group_list->getSelectedValue(); + const S32 selected_idx = group_list->getFirstSelectedIndex(); + const S32 scroll_pos = ctrl->getScrollPos(); + group_list->operateOnAll(LLCtrlListInterface::OP_DELETE); for(S32 i = 0; i < count; ++i) @@ -497,10 +495,10 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const s LLGroupData* group_datap = &gAgent.mGroups.get(i); if ((powers_mask == GP_ALL_POWERS) || ((group_datap->mPowers & powers_mask) != 0)) { - std::string style = "NORMAL"; + std::string style = group_datap->mListInProfile ? "BOLD" : "NORMAL"; if(highlight_id == id) { - style = "BOLD"; + style.append("|ITALIC"); } LLSD element; @@ -519,7 +517,7 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const s std::string style = "NORMAL"; if (highlight_id.isNull()) { - style = "BOLD"; + style = "ITALIC"; } LLSD element; element["id"] = LLUUID::null; @@ -531,6 +529,13 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const s group_list->addElement(element, ADD_TOP); } - group_list->selectByValue(highlight_id); + if(selected_id.notNull()) + group_list->selectByValue(selected_id); + else + group_list->selectByValue(highlight_id); //highlight is actually active group + if(selected_idx!=group_list->getFirstSelectedIndex()) //if index changed then our stored pos is pointless. + ctrl->scrollToShowSelected(); + else + ctrl->setScrollPos(scroll_pos); } diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index e4c00dcf6..db52949c7 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -1689,6 +1689,10 @@ void LLPanelAvatar::resetGroupList() LLScrollListCtrl* group_list = mPanelSecondLife->getChild("groups"); if (group_list) { + const LLUUID selected_id = group_list->getSelectedValue(); + const S32 selected_idx = group_list->getFirstSelectedIndex(); + const S32 scroll_pos = group_list->getScrollPos(); + group_list->deleteAllItems(); S32 count = gAgent.mGroups.count(); @@ -1717,11 +1721,19 @@ void LLPanelAvatar::resetGroupList() row["id"] = id ; row["columns"][0]["value"] = group_string; row["columns"][0]["font"] = "SANSSERIF_SMALL"; - row["columns"][0]["font-style"] = group_data.mListInProfile ? "BOLD" : "NORMAL"; + std::string font_style = group_data.mListInProfile ? "BOLD" : "NORMAL"; + if(group_data.mID == gAgent.getGroupID()) + font_style.append("|ITALIC"); + row["columns"][0]["font-style"] = font_style; row["columns"][0]["width"] = 0; - group_list->addElement(row); + group_list->addElement(row,ADD_SORTED); } - group_list->sortByColumnIndex(0, TRUE); + if(selected_id.notNull()) + group_list->selectByValue(selected_id); + if(selected_idx!=group_list->getFirstSelectedIndex()) //if index changed then our stored pos is pointless. + group_list->scrollToShowSelected(); + else + group_list->setScrollPos(scroll_pos); } } } @@ -2248,22 +2260,23 @@ void LLPanelAvatar::processAvatarGroupsReply(LLMessageSystem *msg, void**) } } // Set normal color if not found or if group is visible in profile - if (!group_data || group_data->mListInProfile) + if (group_data) { - row["columns"][0]["font-style"] = "BOLD"; + std::string font_style = group_data->mListInProfile ? "BOLD" : "NORMAL"; + if(group_data->mID == gAgent.getGroupID()) + font_style.append("|ITALIC"); + row["columns"][0]["font-style"] = font_style; } + else + row["columns"][0]["font-style"] = "NORMAL"; } - - - if (group_list) { - group_list->addElement(row); + group_list->addElement(row,ADD_SORTED); } } } - if(group_list) group_list->sortByColumnIndex(0, TRUE); } } diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index fdef5380c..fd76249c7 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -220,6 +220,7 @@ BOOL LLPanelGroupGeneral::postBuild() mCtrlReceiveNotices->setCallbackUserData(this); mCtrlReceiveNotices->set(accept_notices); mCtrlReceiveNotices->setEnabled(data.mID.notNull()); + mCtrlReceiveNotices->resetDirty(); } mCtrlReceiveChat = getChild("receive_chat", recurse); @@ -229,6 +230,7 @@ BOOL LLPanelGroupGeneral::postBuild() mCtrlReceiveChat->setCallbackUserData(this); mCtrlReceiveChat->set(!gIMMgr->getIgnoreGroup(mGroupID)); mCtrlReceiveChat->setEnabled(mGroupID.notNull()); + mCtrlReceiveChat->resetDirty(); } mCtrlListGroup = getChild("list_groups_in_profile", recurse); @@ -549,9 +551,17 @@ bool LLPanelGroupGeneral::apply(std::string& mesg) BOOL receive_notices = false; BOOL list_in_profile = false; if (mCtrlReceiveNotices) + { receive_notices = mCtrlReceiveNotices->get(); + mCtrlReceiveNotices->resetDirty(); //resetDirty() here instead of in update because this is where the settings + //are actually being applied. onCommitUserOnly doesn't call updateChanged directly. + } if (mCtrlListGroup) + { list_in_profile = mCtrlListGroup->get(); + mCtrlListGroup->resetDirty(); //resetDirty() here instead of in update because this is where the settings + //are actually being applied. onCommitUserOnly doesn't call updateChanged directly. + } gAgent.setUserGroupFlags(mGroupID, receive_notices, list_in_profile); @@ -561,6 +571,7 @@ bool LLPanelGroupGeneral::apply(std::string& mesg) gIMMgr->updateIgnoreGroup(mGroupID, !receive_chat); // Save here too in case we crash somewhere down the road -- MC gIMMgr->saveIgnoreGroup(); + mCtrlReceiveChat->resetDirty(); } mChanged = FALSE; @@ -776,14 +787,22 @@ void LLPanelGroupGeneral::update(LLGroupChange gc) { mCtrlReceiveNotices->setEnabled(mAllowEdit); } - mCtrlReceiveNotices->resetDirty(); + //mCtrlReceiveNotices->resetDirty(); Don't resetDirty. This ctrl is decoupled from update. + } + + if (mCtrlListGroup) + { + mCtrlListGroup->setVisible(is_member); + if (is_member) + mCtrlListGroup->setEnabled(mAllowEdit); + //mCtrlReceiveChat->resetDirty(); Don't resetDirty. This ctrl is decoupled from update. } if (mCtrlReceiveChat) { mCtrlReceiveChat->setVisible(is_member); mCtrlReceiveChat->setEnabled(TRUE); - mCtrlReceiveChat->resetDirty(); + //mCtrlReceiveChat->resetDirty(); Don't resetDirty. This ctrl is decoupled from update. }