From 5caeb8aa0c490d8c03a6233f2ac6066e99092cd9 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sat, 27 Apr 2013 13:34:36 +0200 Subject: [PATCH] Futher contact sets refactoring: * Get rid of duplicated group name constants that actually mean the same * Move presentation-related group list building to the floater; this also fixes the remaining localization issues of FIRE-5434 * Fixed missing save operation after deleting a set --- indra/newview/lggcontactsets.cpp | 45 +++--------- indra/newview/lggcontactsets.h | 8 +-- indra/newview/lggcontactsetsfloater.cpp | 70 ++++++++++++++++--- .../default/xui/de/floater_contactsets.xml | 4 ++ .../default/xui/en/floater_contactsets.xml | 4 ++ 5 files changed, 81 insertions(+), 50 deletions(-) diff --git a/indra/newview/lggcontactsets.cpp b/indra/newview/lggcontactsets.cpp index fb4e8ccee1..d37da418ff 100644 --- a/indra/newview/lggcontactsets.cpp +++ b/indra/newview/lggcontactsets.cpp @@ -432,7 +432,6 @@ void LGGContactSets::setDefaultColor(const LLColor4& dColor) std::vector LGGContactSets::getInnerGroups(const std::string& groupName) { std::vector toReturn; - toReturn.clear(); static LLCachedControl useFolders(gSavedSettings, "FSContactSetsShowFolders"); static LLCachedControl showOnline(gSavedSettings, "FSContactSetsShowOnline"); static LLCachedControl showOffline(gSavedSettings, "FSContactSetsShowOffline"); @@ -444,11 +443,6 @@ std::vector LGGContactSets::getInnerGroups(const std::string& group std::set newGroups; - if (groupName != CS_GROUP_ALL_SETS && getAllGroups(FALSE).size() > 0) - { - newGroups.insert(CS_GROUP_ALL_SETS); - } - std::vector freindsInGroup = getFriendsInGroup(groupName); for (U32 fn = 0; fn < (U32)freindsInGroup.size(); fn++) { @@ -508,12 +502,12 @@ std::vector LGGContactSets::getFriendsInGroup(const std::string& groupNa return toReturn; } - if (groupName == CS_GROUP_PSEUDONYM || groupName == CS_GROUP_RENAMED) + if (groupName == CS_GROUP_PSEUDONYM) { return getListOfPseudonymAvs(); } - if (groupName == CS_GROUP_NON_FRIENDS) + if (groupName == CS_GROUP_EXTRA_AVS) { return getListOfNonFriends(); } @@ -527,29 +521,10 @@ std::vector LGGContactSets::getFriendsInGroup(const std::string& groupNa return toReturn; } -std::vector LGGContactSets::getAllGroups(BOOL extraGroups) +std::vector LGGContactSets::getAllGroups() { std::vector toReturn; - if (extraGroups) - { - if (getAllGroups(FALSE).size() > 0) - { - toReturn.push_back(CS_GROUP_ALL_SETS); - toReturn.push_back(CS_GROUP_NO_SETS); - } - - if (getListOfPseudonymAvs().size() > 0) - { - toReturn.push_back(CS_GROUP_RENAMED); - } - - if (getListOfNonFriends().size() > 0) - { - toReturn.push_back(CS_GROUP_NON_FRIENDS); - } - } - for (group_map_t::iterator it = mGroups.begin(); it != mGroups.end(); ++it) { toReturn.push_back(it->second->mName); @@ -600,12 +575,12 @@ BOOL LGGContactSets::isFriendInGroup(const LLUUID& friend_id, const std::string& return !isFriendInAnyGroup(friend_id); } - if (groupName == CS_GROUP_RENAMED) + if (groupName == CS_GROUP_PSEUDONYM) { return hasPseudonym(friend_id); } - if (groupName == CS_GROUP_NON_FRIENDS) + if (groupName == CS_GROUP_EXTRA_AVS) { return isNonFriend(friend_id); } @@ -763,12 +738,12 @@ void LGGContactSets::removeDisplayName(const LLUUID& friend_id) void LGGContactSets::removeFriendFromGroup(const LLUUID& friend_id, const std::string& groupName) { - if (groupName == CS_GROUP_EXTRA_AVS || groupName == CS_GROUP_NON_FRIENDS) + if (groupName == CS_GROUP_EXTRA_AVS) { return removeNonFriendFromList(friend_id); } - if (groupName == CS_GROUP_RENAMED || groupName == CS_GROUP_PSEUDONYM) + if (groupName == CS_GROUP_PSEUDONYM) { return clearPseudonym(friend_id); } @@ -806,6 +781,7 @@ void LGGContactSets::deleteGroup(const std::string& groupName) { delete found->second; mGroups.erase(found); + saveToDisk(); } } @@ -848,10 +824,7 @@ bool LGGContactSets::isInternalGroupName(const std::string& groupName) groupName == CS_GROUP_PSEUDONYM || groupName == CS_GLOBAL_SETTINGS || groupName == CS_GROUP_NO_SETS || - groupName == CS_GROUP_ALL_SETS || - groupName == CS_GROUP_ALL_GROUPS || - groupName == CS_GROUP_RENAMED || - groupName == CS_GROUP_NON_FRIENDS + groupName == CS_GROUP_ALL_SETS ); } diff --git a/indra/newview/lggcontactsets.h b/indra/newview/lggcontactsets.h index 6d2617575c..f857767125 100644 --- a/indra/newview/lggcontactsets.h +++ b/indra/newview/lggcontactsets.h @@ -33,11 +33,8 @@ typedef enum e_lgg_cs LGG_CS_MINIMAP } ELGGCSType; -const std::string CS_GROUP_ALL_GROUPS = "All Groups"; const std::string CS_GROUP_ALL_SETS = "All Sets"; const std::string CS_GROUP_NO_SETS = "No Sets"; -const std::string CS_GROUP_RENAMED = "ReNamed"; -const std::string CS_GROUP_NON_FRIENDS = "Non Friends"; const std::string CS_GROUP_EXTRA_AVS = "extraAvs"; const std::string CS_GROUP_PSEUDONYM = "pseudonym"; const std::string CS_GLOBAL_SETTINGS = "globalSettings"; @@ -67,7 +64,7 @@ public: std::vector getInnerGroups(const std::string& groupName); std::vector getFriendGroups(const LLUUID& friend_id); - std::vector getAllGroups(BOOL extraGroups = TRUE); + std::vector getAllGroups(); void addFriendToGroup(const LLUUID& friend_id, const std::string& groupName); void removeFriendFromGroup(const LLUUID& friend_id, const std::string& groupName); @@ -83,6 +80,7 @@ public: void removeNonFriendFromList(const LLUUID& non_friend_id); BOOL isNonFriend(const LLUUID& non_friend_id); std::vector getListOfNonFriends(); + std::vector getListOfPseudonymAvs(); BOOL notifyForFriend(const LLUUID& friend_id); void setNotifyForGroup(const std::string& groupName, BOOL notify); @@ -91,6 +89,7 @@ public: bool callbackAliasReset(const LLSD& notification, const LLSD& response); bool isInternalGroupName(const std::string& groupName); + bool hasGroups() { return !mGroups.empty(); } private: typedef boost::unordered_set uuid_set_t; @@ -119,7 +118,6 @@ private: std::vector getFriendsInAnyGroup(); void setPseudonym(const LLUUID& friend_id, const std::string& pseudonym); - std::vector getListOfPseudonymAvs(); BOOL hasVisuallyDifferentPseudonym(const LLUUID& friend_id); void loadFromDisk(); diff --git a/indra/newview/lggcontactsetsfloater.cpp b/indra/newview/lggcontactsetsfloater.cpp index ad199fc2e4..c4cfe8047d 100644 --- a/indra/newview/lggcontactsetsfloater.cpp +++ b/indra/newview/lggcontactsetsfloater.cpp @@ -238,25 +238,65 @@ void lggContactSetsFloater::onPickAvatar(const std::vector& ids, void lggContactSetsFloater::updateGroupsList() { - static LLCachedControl currentGroup(gSavedSettings, "FSContactSetsSelectedGroup"); + static LLCachedControl current_group(gSavedSettings, "FSContactSetsSelectedGroup"); + LLComboBox* cb = groupsList; cb->clear(); cb->removeall(); + bool current_group_in_list = false; std::vector groups = LGGContactSets::getInstance()->getAllGroups(); - for (int i = 0; i < (int)groups.size(); i++) + if (!groups.empty()) { - cb->add(groups[i], groups[i], ADD_BOTTOM, TRUE); + cb->add(getString("AllSets"), CS_GROUP_ALL_SETS); + if (!current_group_in_list && current_group() == CS_GROUP_ALL_SETS) + { + current_group_in_list = true; + } + + cb->add(getString("NoSets"), CS_GROUP_NO_SETS); + if (!current_group_in_list && current_group() == CS_GROUP_NO_SETS) + { + current_group_in_list = true; + } } - if (LGGContactSets::getInstance()->isAGroup(currentGroup)) + if (!LGGContactSets::getInstance()->getListOfPseudonymAvs().empty()) { - cb->setSimple(LLStringExplicit(currentGroup)); + cb->add(getString("Renamed"), CS_GROUP_PSEUDONYM); + if (!current_group_in_list && current_group() == CS_GROUP_PSEUDONYM) + { + current_group_in_list = true; + } + } + + if (!LGGContactSets::getInstance()->getListOfNonFriends().empty()) + { + cb->add(getString("NoFriend"), CS_GROUP_EXTRA_AVS); + if (!current_group_in_list && current_group() == CS_GROUP_EXTRA_AVS) + { + current_group_in_list = true; + } + } + + for (std::vector::iterator it = groups.begin(); it != groups.end(); ++it) + { + std::string group_name = *it; + cb->add(group_name, group_name, ADD_BOTTOM, TRUE); + if (!current_group_in_list && group_name == current_group()) + { + current_group_in_list = true; + } + } + + if (current_group_in_list) + { + cb->selectByValue(current_group()); } else if (groups.size() > 0) { - gSavedSettings.setString("FSContactSetsSelectedGroup", groups[0]); - cb->setSimple(groups[0]); + gSavedSettings.setString("FSContactSetsSelectedGroup", groups.front()); + cb->selectFirstItem(); updateGroupGUIs(); generateCurrentList(); } @@ -297,7 +337,7 @@ void lggContactSetsFloater::updateGroupGUIs() void lggContactSetsFloater::onSelectGroup() { - gSavedSettings.setString("FSContactSetsSelectedGroup", sInstance->groupsList->getSimple()); + gSavedSettings.setString("FSContactSetsSelectedGroup", sInstance->groupsList->getSelectedValue()); sInstance->updateGroupGUIs(); sInstance->selected.clear(); sInstance->generateCurrentList(); @@ -368,7 +408,7 @@ void lggContactSetsFloater::drawRightClick() extras += 2; } - std::vector groups = LGGContactSets::getInstance()->getAllGroups(FALSE); + std::vector groups = LGGContactSets::getInstance()->getAllGroups(); if (selected.size() == 0) { groups.clear(); @@ -1132,6 +1172,12 @@ void lggContactSetsFloater::draw() // see if we are guna draw some folders allFolders = LGGContactSets::getInstance()->getInnerGroups(currentGroup); + + if (currentGroup() != CS_GROUP_ALL_SETS && LGGContactSets::getInstance()->hasGroups()) + { + allFolders.insert(allFolders.begin(), CS_GROUP_ALL_SETS); + } + numberOfPanels += allFolders.size(); LLRect topScroll = getChild("top_region")->getRect(); @@ -1370,6 +1416,12 @@ void lggContactSetsFloater::draw() groupTextColor = LGGContactSets::toneDownColor(color, 1.0f); } + if (folder == CS_GROUP_ALL_SETS) + { + static const std::string ALL_SETS = getString("AllSets"); + folder = ALL_SETS; + } + useFont->render( utf8str_to_wstring(folder), 0, diff --git a/indra/newview/skins/default/xui/de/floater_contactsets.xml b/indra/newview/skins/default/xui/de/floater_contactsets.xml index f5c8ca9077..2814f77749 100644 --- a/indra/newview/skins/default/xui/de/floater_contactsets.xml +++ b/indra/newview/skins/default/xui/de/floater_contactsets.xml @@ -24,6 +24,10 @@ + + + + Set: diff --git a/indra/newview/skins/default/xui/en/floater_contactsets.xml b/indra/newview/skins/default/xui/en/floater_contactsets.xml index 1059e384cd..b090d44917 100644 --- a/indra/newview/skins/default/xui/en/floater_contactsets.xml +++ b/indra/newview/skins/default/xui/en/floater_contactsets.xml @@ -39,6 +39,10 @@ + + + +