FIRE-5283: Add option to sort friendlist in people panel by username

meow-7.2.2
Ansariel 2014-02-10 11:18:30 +01:00
parent edc2a47b01
commit 12db7a9739
6 changed files with 67 additions and 0 deletions

View File

@ -224,6 +224,8 @@ static bool findInsensitive(std::string haystack, const std::string& needle_uppe
//comparators
static const LLAvatarItemNameComparator NAME_COMPARATOR;
static const LLFlatListView::ItemReverseComparator REVERSE_NAME_COMPARATOR(NAME_COMPARATOR);
// <FS:Ansariel> FIRE-5283: Sort by username
static const LLAvatarItemUserNameComparator USERNAME_COMPARATOR;
LLAvatarList::Params::Params()
: ignore_online_status("ignore_online_status", false)
@ -431,6 +433,14 @@ void LLAvatarList::sortByName()
sort();
}
// <FS:Ansariel> FIRE-5283: Sort by username
void LLAvatarList::sortByUserName()
{
setComparator(&USERNAME_COMPARATOR);
sort();
}
// </FS:Ansariel>
void LLAvatarList::setDirty(bool val /*= true*/, bool force_refresh /*= false*/)
{
mDirty = val;
@ -909,6 +919,19 @@ bool LLAvatarItemAgentOnTopComparator::doCompare(const LLAvatarListItem* avatar_
return LLAvatarItemNameComparator::doCompare(avatar_item1,avatar_item2);
}
// <FS:Ansariel> FIRE-5283: Sort by username
bool LLAvatarItemUserNameComparator::doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const
{
std::string name1 = avatar_item1->getUserName();
std::string name2 = avatar_item2->getUserName();
LLStringUtil::toUpper(name1);
LLStringUtil::toUpper(name2);
return name1 < name2;
}
// </FS:Ansariel>
/************************************************************************/
/* class LLAvalineListItem */
/************************************************************************/

View File

@ -93,6 +93,8 @@ public:
void showUsername(bool visible);
void showVoiceVolume(bool visible);
void sortByName();
// <FS:Ansariel> FIRE-5283: Sort by username
void sortByUserName();
void setShowIcons(std::string param_name);
bool getIconsVisible() const { return mShowIcons; }
const std::string getIconParamName() const{return mIconParamName;}
@ -233,6 +235,20 @@ protected:
virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const;
};
// <FS:Ansariel> FIRE-5283: Sort by username
class LLAvatarItemUserNameComparator : public LLAvatarItemComparator
{
LOG_CLASS(LLAvatarItemUserNameComparator);
public:
LLAvatarItemUserNameComparator() {};
virtual ~LLAvatarItemUserNameComparator() {};
protected:
virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const;
};
// </FS:Ansariel>
/**
* Represents Avaline caller in Avatar list in Voice Control Panel and group chats.
*/

View File

@ -1148,6 +1148,11 @@ void LLPanelPeople::setSortOrder(LLAvatarList* list, ESortOrder order, bool save
list->setComparator(&DISTANCE_COMPARATOR);
list->sort();
break;
// <FS:Ansariel> FIRE-5283: Sort by username
case E_SORT_BY_USERNAME:
list->sortByUserName();
break;
// </FS:Ansariel>
default:
llwarns << "Unrecognized people sort order for " << list->getName() << llendl;
return;
@ -1435,6 +1440,12 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata)
{
setSortOrder(mAllFriendList, E_SORT_BY_NAME);
}
// <FS:Ansariel> FIRE-5283: Sort by username
if (chosen_item == "sort_username")
{
setSortOrder(mAllFriendList, E_SORT_BY_USERNAME);
}
// </FS:Ansariel>
else if (chosen_item == "sort_status")
{
setSortOrder(mAllFriendList, E_SORT_BY_STATUS);
@ -1528,6 +1539,10 @@ bool LLPanelPeople::onFriendsViewSortMenuItemCheck(const LLSD& userdata)
return sort_order == E_SORT_BY_NAME;
if (item == "sort_status")
return sort_order == E_SORT_BY_STATUS;
// <FS:Ansariel> FIRE-5283: Sort by username
if (item == "sort_username")
return sort_order == E_SORT_BY_USERNAME;
// </FS:Ansariel>
return false;
}

View File

@ -79,6 +79,8 @@ private:
E_SORT_BY_MOST_RECENT = 2,
E_SORT_BY_DISTANCE = 3,
E_SORT_BY_RECENT_SPEAKERS = 4,
// <FS:Ansariel> FIRE-5283: Sort by username
E_SORT_BY_USERNAME = 5,
} ESortOrder;
void removePicker();

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_group_plus">
<menu_item_check label="Nach Namen sortieren" name="sort_name"/>
<menu_item_check label="Nach Benutzernamen sortieren" name="sort_username"/>
<menu_item_check label="Nach Status sortieren" name="sort_status"/>
<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
<menu_item_check label="Erteilte Genehmigungen anzeigen" name="view_permissions"/>

View File

@ -13,6 +13,16 @@
function="People.Friends.ViewSort.CheckItem"
parameter="sort_name" />
</menu_item_check>
<menu_item_check
label="Sort by Username"
name="sort_username">
<menu_item_check.on_click
function="People.Friends.ViewSort.Action"
parameter="sort_username" />
<menu_item_check.on_check
function="People.Friends.ViewSort.CheckItem"
parameter="sort_username" />
</menu_item_check>
<menu_item_check
label="Sort by Status"
name="sort_status">