STORM-20: legacy friends list permissions

Moved to useing llavatarnamecache
Lots of clean up
Added support for sorting by usename via column sorting redirection
Removed code for avatarlist
Colorfied list control line stripe for FS skin
meow-7.2.2
Kadah_Coba 2011-07-04 15:20:31 -07:00
parent 7dffac04f4
commit bc57b21b21
7 changed files with 145 additions and 180 deletions

View File

@ -412,6 +412,7 @@ protected:
typedef std::deque<LLScrollListItem *> item_list;
item_list& getItemList() { return mItemList; }
public:
void updateLineHeight();
private:

View File

@ -39,6 +39,7 @@
#include "llavataractions.h"
#include "llavatarlist.h"
#include "llavatarlistitem.h"
#include "llavatarnamecache.h"
#include "llcallingcard.h" // for LLAvatarTracker
#include "llfloateravatarpicker.h"
#include "llfriendcard.h"
@ -58,8 +59,6 @@
#define RIGHTS_CHANGE_TIMEOUT 5.0
#define OBSERVER_TIMEOUT 0.5
#define ONLINE_SIP_ICON_NAME "slim_icon_16_viewer.tga"
static const std::string FRIENDS_TAB_NAME = "friends_panel";
static const std::string GROUP_TAB_NAME = "groups_panel";
@ -152,10 +151,11 @@ FSFloaterContacts::FSFloaterContacts(const LLSD& seed)
LLEventTimer(DEFAULT_PERIOD),
mTabContainer(NULL),
mObserver(NULL),
// mFriendList(NULL),
mFriendsList(NULL),
mGroupList(NULL),
mAllowRightsChange(TRUE),
mNumRightsChanged(0)
mNumRightsChanged(0),
mSortByUserName(LLCachedControl<bool>(gSavedSettings,"FSSortContactsByUserName", FALSE))
{
mEventTimer.stop();
mObserver = new LLLocalFriendsObserver(this);
@ -184,19 +184,8 @@ BOOL FSFloaterContacts::tick()
BOOL FSFloaterContacts::postBuild()
{
mTabContainer = getChild<LLTabContainer>("friends_and_groups");
mFriendsTab = getChild<LLPanel>(FRIENDS_TAB_NAME);
// mFriendList = mFriendsTab->getChild<LLAvatarList>("avatars_all");
// mFriendList->setNoItemsCommentText(getString("no_friends"));
// mFriendList->setShowIcons("FriendsListShowIcons");
// mFriendList->showPermissions(TRUE);
// mFriendList->setComparator(&STATUS_COMPARATOR);
// mFriendList->setRefreshCompleteCallback(boost::bind(&FSFloaterContacts::sortFriendList, this));
// mFriendList->setItemDoubleClickCallback(boost::bind(&FSFloaterContacts::onAvatarListDoubleClicked, this, _1));
// mFriendList->setReturnCallback(boost::bind(&FSFloaterContacts::onImButtonClicked, this));
mFriendsList = mFriendsTab->getChild<LLScrollListCtrl>("friend_list");
mFriendsList->setMaxSelectable(MAX_FRIEND_SELECT);
//mFriendsList->setMaximumSelectCallback(boost::bind(&FSFloaterContacts::onMaximumSelect, this)); //TODO
@ -208,10 +197,13 @@ BOOL FSFloaterContacts::postBuild()
mFriendsList->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
// primary sort = online status, secondary sort = name
mFriendsList->sortByColumn(std::string("friend_name"), TRUE);
if (mSortByUserName)
mFriendsList->getColumn(LIST_FRIEND_NAME)->mSortingColumn = mFriendsList->getColumn(LIST_FRIEND_USER_NAME)->mName;
else
mFriendsList->getColumn(LIST_FRIEND_NAME)->mSortingColumn = mFriendsList->getColumn(LIST_FRIEND_NAME)->mName;
mFriendsList->sortByColumn(std::string("full_name"), TRUE);
mFriendsList->sortByColumn(std::string("icon_online_status"), FALSE);
mFriendsTab->childSetAction("im_btn", boost::bind(&FSFloaterContacts::onImButtonClicked, this));
mFriendsTab->childSetAction("profile_btn", boost::bind(&FSFloaterContacts::onViewProfileButtonClicked, this));
mFriendsTab->childSetAction("offer_teleport_btn", boost::bind(&FSFloaterContacts::onTeleportButtonClicked, this));
@ -279,14 +271,20 @@ void FSFloaterContacts::onOpen(const LLSD& key)
}
}
// as soon as the avatar list widget tells us all names are loaded, do
// another sort on the list -Zi
void FSFloaterContacts::sortFriendList()
//static
FSFloaterContacts* FSFloaterContacts::findInstance()
{
// mFriendList->sort();
mFriendsList->updateSort();
return LLFloaterReg::findTypedInstance<FSFloaterContacts>("imcontacts");
}
//static
FSFloaterContacts* FSFloaterContacts::getInstance()
{
return LLFloaterReg::getTypedInstance<FSFloaterContacts>("imcontacts");
}
//
// Friend actions
//
@ -375,6 +373,13 @@ bool FSFloaterContacts::isItemsFreeOfFriends(const uuid_vec_t& uuids)
return true;
}
// static
void FSFloaterContacts::onAvatarPicked(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
{
if (!names.empty() && !ids.empty())
LLAvatarActions::requestFriendshipDialog(ids[0], names[0].getCompleteName());
}
void FSFloaterContacts::onAddFriendWizButtonClicked()
{
// Show add friend wizard.
@ -427,6 +432,9 @@ void FSFloaterContacts::onGroupSearchButtonClicked()
}
//
// Tab and list functions
//
std::string FSFloaterContacts::getActiveTabName() const
{
@ -439,7 +447,6 @@ LLUUID FSFloaterContacts::getCurrentItemID() const
if (cur_tab == FRIENDS_TAB_NAME)
{
// return mFriendList->getSelectedUUID();
LLScrollListItem* selected = mFriendsList->getFirstSelected();
if (selected)
selected->getUUID();
@ -447,9 +454,10 @@ LLUUID FSFloaterContacts::getCurrentItemID() const
return LLUUID::null;
}
if (cur_tab == GROUP_TAB_NAME)
{
return mGroupList->getSelectedUUID();
}
llassert(0 && "unknown tab selected");
return LLUUID::null;
}
@ -459,7 +467,6 @@ void FSFloaterContacts::getCurrentItemIDs(uuid_vec_t& selected_uuids) const
if (cur_tab == FRIENDS_TAB_NAME)
{
// mFriendList->getSelectedUUIDs(selected_uuids);
std::vector<LLScrollListItem*> selected = mFriendsList->getAllSelected();
for(std::vector<LLScrollListItem*>::iterator itr = selected.begin(); itr != selected.end(); ++itr)
{
@ -467,62 +474,30 @@ void FSFloaterContacts::getCurrentItemIDs(uuid_vec_t& selected_uuids) const
}
}
else if (cur_tab == GROUP_TAB_NAME)
{
mGroupList->getSelectedUUIDs(selected_uuids);
}
}
void FSFloaterContacts::sortFriendList()
{
mFriendsList->updateLineHeight();
mFriendsList->updateLayout();
if (mSortByUserName)
mFriendsList->getColumn(LIST_FRIEND_NAME)->mSortingColumn = mFriendsList->getColumn(LIST_FRIEND_USER_NAME)->mName;
else
llassert(0 && "unknown tab selected");
}
// void FSFloaterContacts::updateFriendList()
// {
// if (!mFriendList)
// return;
// uuid_vec_t& contact_friendsp = mFriendList->getIDs();
// contact_friendsp.clear();
// Cause inv fails so very much, lets just load the contacts floater from
// the avatar tracker instead of from calling cards, which are fail
// This should resolve part or all of FIRE-565 -KC
// const LLAvatarTracker& av_tracker = LLAvatarTracker::instance();
// LLAvatarTracker::buddy_map_t all_buddies;
// av_tracker.copyBuddyList(all_buddies);
// LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
// for (; buddy_it != all_buddies.end(); ++buddy_it)
// {
// LLUUID buddy_id = buddy_it->first;
// contact_friendsp.push_back(buddy_id);
// }
// mFriendList->setDirty(true, !mFriendList->filterHasMatches());
// }
// static
void FSFloaterContacts::onAvatarPicked(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
{
if (!names.empty() && !ids.empty())
LLAvatarActions::requestFriendshipDialog(ids[0], names[0].getCompleteName());
}
//static
FSFloaterContacts* FSFloaterContacts::findInstance()
{
return LLFloaterReg::findTypedInstance<FSFloaterContacts>("imcontacts");
}
FSFloaterContacts* FSFloaterContacts::getInstance()
{
return LLFloaterReg::getTypedInstance<FSFloaterContacts>("imcontacts");
mFriendsList->getColumn(LIST_FRIEND_NAME)->mSortingColumn = mFriendsList->getColumn(LIST_FRIEND_NAME)->mName;
mFriendsList->setNeedsSort(true);
}
//
// Friends list
//
void FSFloaterContacts::updateFriends(U32 changed_mask)
{
LLUUID selected_id;
@ -567,125 +542,130 @@ void FSFloaterContacts::updateFriends(U32 changed_mask)
refreshUI();
}
BOOL FSFloaterContacts::addFriend(const LLUUID& agent_id)
void FSFloaterContacts::addFriend(const LLUUID& agent_id)
{
LLAvatarTracker& at = LLAvatarTracker::instance();
const LLRelationship* relationInfo = at.getBuddyInfo(agent_id);
if(!relationInfo) return FALSE;
if(!relationInfo) return;
bool isOnlineSIP = LLVoiceClient::getInstance()->isOnlineSIP(agent_id);
bool isOnline = relationInfo->isOnline();
std::string fullname;
BOOL have_name = gCacheName->getFullName(agent_id, fullname);
LLAvatarName av_name;
if (!LLAvatarNameCache::get(agent_id, &av_name))
{
const LLRelationship* info = LLAvatarTracker::instance().getBuddyInfo(agent_id);
LLAvatarNameCache::get(agent_id, boost::bind(&FSFloaterContacts::updateFriendItem, this, agent_id, info));
}
LLSD element;
element["id"] = agent_id;
LLSD& friend_column = element["columns"][LIST_FRIEND_NAME];
friend_column["column"] = "friend_name";
friend_column["value"] = fullname;
friend_column["font"]["name"] = "SANSSERIF";
friend_column["font"]["style"] = "NORMAL";
LLSD& username_column = element["columns"][LIST_FRIEND_USER_NAME];
username_column["column"] = "user_name";
username_column["value"] = av_name.mUsername;
LLSD& friend_column = element["columns"][LIST_FRIEND_NAME];
friend_column["column"] = "full_name";
friend_column["value"] = av_name.getCompleteName();
friend_column["font"]["name"] = "SANSSERIF";
friend_column["font"]["style"] = "NORMAL";
LLSD& online_status_column = element["columns"][LIST_ONLINE_STATUS];
online_status_column["column"] = "icon_online_status";
online_status_column["type"] = "icon";
LLSD& online_status_column = element["columns"][LIST_ONLINE_STATUS];
online_status_column["column"] = "icon_online_status";
online_status_column["type"] = "icon";
if (isOnline)
{
friend_column["font"]["style"] = "BOLD";
online_status_column["value"] = "legacy/icon_avatar_online.tga";
{
friend_column["font"]["style"] = "BOLD";
online_status_column["value"] = "icon_avatar_online";
}
else if(isOnlineSIP)
{
friend_column["font"]["style"] = "BOLD";
online_status_column["value"] = ONLINE_SIP_ICON_NAME;
{
friend_column["font"]["style"] = "BOLD";
online_status_column["value"] = "slim_icon_16_viewer";
}
LLSD& online_column = element["columns"][LIST_VISIBLE_ONLINE];
online_column["column"] = "icon_visible_online";
online_column["type"] = "checkbox";
online_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS);
LLSD& online_column = element["columns"][LIST_VISIBLE_ONLINE];
online_column["column"] = "icon_visible_online";
online_column["type"] = "checkbox";
online_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS);
LLSD& visible_map_column = element["columns"][LIST_VISIBLE_MAP];
visible_map_column["column"] = "icon_visible_map";
visible_map_column["type"] = "checkbox";
visible_map_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION);
LLSD& visible_map_column = element["columns"][LIST_VISIBLE_MAP];
visible_map_column["column"] = "icon_visible_map";
visible_map_column["type"] = "checkbox";
visible_map_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION);
LLSD& edit_my_object_column = element["columns"][LIST_EDIT_MINE];
edit_my_object_column["column"] = "icon_edit_mine";
edit_my_object_column["type"] = "checkbox";
edit_my_object_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS);
LLSD& edit_my_object_column = element["columns"][LIST_EDIT_MINE];
edit_my_object_column["column"] = "icon_edit_mine";
edit_my_object_column["type"] = "checkbox";
edit_my_object_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS);
LLSD& visible_their_map_column = element["columns"][LIST_VISIBLE_MAP_THEIRS];
visible_their_map_column["column"] = "icon_visible_map_theirs";
visible_their_map_column["type"] = "checkbox";
visible_their_map_column["enabled"] = "";
visible_their_map_column["value"] = relationInfo->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION);
LLSD& visible_their_map_column = element["columns"][LIST_VISIBLE_MAP_THEIRS];
visible_their_map_column["column"] = "icon_visible_map_theirs";
visible_their_map_column["type"] = "checkbox";
visible_their_map_column["enabled"] = "";
visible_their_map_column["value"] = relationInfo->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION);
LLSD& edit_their_object_column = element["columns"][LIST_EDIT_THEIRS];
edit_their_object_column["column"] = "icon_edit_theirs";
edit_their_object_column["type"] = "checkbox";
edit_their_object_column["enabled"] = "";
edit_their_object_column["value"] = relationInfo->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS);
LLSD& edit_their_object_column = element["columns"][LIST_EDIT_THEIRS];
edit_their_object_column["column"] = "icon_edit_theirs";
edit_their_object_column["type"] = "checkbox";
edit_their_object_column["enabled"] = "";
edit_their_object_column["value"] = relationInfo->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS);
LLSD& update_gen_column = element["columns"][LIST_FRIEND_UPDATE_GEN];
update_gen_column["column"] = "friend_last_update_generation";
update_gen_column["value"] = have_name ? relationInfo->getChangeSerialNum() : -1;
LLSD& update_gen_column = element["columns"][LIST_FRIEND_UPDATE_GEN];
update_gen_column["column"] = "friend_last_update_generation";
update_gen_column["value"] = relationInfo->getChangeSerialNum();
mFriendsList->addElement(element, ADD_BOTTOM);
return have_name;
}
// propagate actual relationship to UI.
// Does not resort the UI list because it can be called frequently. JC
BOOL FSFloaterContacts::updateFriendItem(const LLUUID& agent_id, const LLRelationship* info)
void FSFloaterContacts::updateFriendItem(const LLUUID& agent_id, const LLRelationship* info)
{
if (!info) return FALSE;
if (!info) return;
LLScrollListItem* itemp = mFriendsList->getItem(agent_id);
if (!itemp) return FALSE;
if (!itemp) return;
bool isOnlineSIP = LLVoiceClient::getInstance()->isOnlineSIP(itemp->getUUID());
bool isOnline = info->isOnline();
std::string fullname;
BOOL have_name = gCacheName->getFullName(agent_id, fullname);
LLAvatarName av_name;
if (!LLAvatarNameCache::get(agent_id, &av_name))
{
LLAvatarNameCache::get(agent_id, boost::bind(&FSFloaterContacts::updateFriendItem, this, agent_id, info));
}
// Name of the status icon to use
std::string statusIcon;
if(isOnline)
{
statusIcon = "legacy/icon_avatar_online.tga";
statusIcon = "icon_avatar_online";
}
else if(isOnlineSIP)
{
statusIcon = ONLINE_SIP_ICON_NAME;
statusIcon = "slim_icon_16_viewer";
}
itemp->getColumn(LIST_ONLINE_STATUS)->setValue(statusIcon);
itemp->getColumn(LIST_FRIEND_NAME)->setValue(fullname);
//This might work, but would need to test if it changes with DN changes _KC
//itemp->getColumn(LIST_FRIEND_NAME)->setValue( LLSLURL("agent", agent_id, "completename").getSLURLString());
itemp->getColumn(LIST_FRIEND_USER_NAME)->setValue( av_name.mUsername );
itemp->getColumn(LIST_FRIEND_NAME)->setValue( av_name.getCompleteName() );
// render name of online friends in bold text
((LLScrollListText*)itemp->getColumn(LIST_FRIEND_NAME))->setFontStyle((isOnline || isOnlineSIP) ? LLFontGL::BOLD : LLFontGL::NORMAL);
((LLScrollListText*)itemp->getColumn(LIST_FRIEND_NAME))->setFontStyle((isOnline || isOnlineSIP) ? LLFontGL::BOLD : LLFontGL::NORMAL);
itemp->getColumn(LIST_VISIBLE_ONLINE)->setValue(info->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS));
itemp->getColumn(LIST_VISIBLE_MAP)->setValue(info->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION));
itemp->getColumn(LIST_EDIT_MINE)->setValue(info->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS));
itemp->getColumn(LIST_VISIBLE_MAP_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION));
itemp->getColumn(LIST_EDIT_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS));
S32 change_generation = have_name ? info->getChangeSerialNum() : -1;
// S32 change_generation = info->getChangeSerialNum();
S32 change_generation = info->getChangeSerialNum();
itemp->getColumn(LIST_FRIEND_UPDATE_GEN)->setValue(change_generation);
// enable this item, in case it was disabled after user input
itemp->setEnabled(TRUE);
// Do not resort, this function can be called frequently.
return have_name;
}
void FSFloaterContacts::refreshRightsChangeList()
@ -750,55 +730,45 @@ void FSFloaterContacts::refreshNames(U32 changed_mask)
LLAvatarTracker::buddy_map_t all_buddies;
LLAvatarTracker::instance().copyBuddyList(all_buddies);
BOOL have_names = TRUE;
if(changed_mask & (LLFriendObserver::ADD | LLFriendObserver::REMOVE))
{
have_names &= refreshNamesSync(all_buddies);
refreshNamesSync(all_buddies);
}
if(changed_mask & LLFriendObserver::ONLINE)
{
have_names &= refreshNamesPresence(all_buddies);
refreshNamesPresence(all_buddies);
}
if (!have_names)
{
mEventTimer.start();
}
// Changed item in place, need to request sort and update columns
// because we might have changed data in a column on which the user
// has already sorted. JC
mFriendsList->updateSort();
sortFriendList();
// re-select items
mFriendsList->selectMultiple(selected_ids);
mFriendsList->setScrollPos(pos);
}
BOOL FSFloaterContacts::refreshNamesSync(const LLAvatarTracker::buddy_map_t & all_buddies)
void FSFloaterContacts::refreshNamesSync(const LLAvatarTracker::buddy_map_t & all_buddies)
{
mFriendsList->deleteAllItems();
BOOL have_names = TRUE;
LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
for(; buddy_it != all_buddies.end(); ++buddy_it)
{
have_names &= addFriend(buddy_it->first);
addFriend(buddy_it->first);
}
return have_names;
}
BOOL FSFloaterContacts::refreshNamesPresence(const LLAvatarTracker::buddy_map_t & all_buddies)
void FSFloaterContacts::refreshNamesPresence(const LLAvatarTracker::buddy_map_t & all_buddies)
{
std::vector<LLScrollListItem*> items = mFriendsList->getAllData();
std::sort(items.begin(), items.end(), SortFriendsByID());
LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
std::vector<LLScrollListItem*>::const_iterator item_it = items.begin();
BOOL have_names = TRUE;
while(true)
{
@ -822,7 +792,7 @@ BOOL FSFloaterContacts::refreshNamesPresence(const LLAvatarTracker::buddy_map_t
if (last_change_generation < info->getChangeSerialNum())
{
// update existing item in UI
have_names &= updateFriendItem(buddy_it->first, info);
updateFriendItem(buddy_it->first, info);
}
++buddy_it;
@ -837,8 +807,6 @@ BOOL FSFloaterContacts::refreshNamesPresence(const LLAvatarTracker::buddy_map_t
++buddy_it;
}
}
return have_names;
}
void FSFloaterContacts::refreshUI()
@ -864,7 +832,6 @@ void FSFloaterContacts::refreshUI()
//(single_selected will always be true in this situations)
childSetEnabled("remove_btn", single_selected);
childSetEnabled("im_btn", single_selected);
// childSetEnabled("friend_rights", single_selected);
refreshRightsChangeList();
}
@ -876,8 +843,6 @@ void FSFloaterContacts::onSelectName()
applyRightsToFriends();
}
void FSFloaterContacts::confirmModifyRights(rights_map_t& ids, EGrantRevoke command)
{
if (ids.empty()) return;

View File

@ -71,12 +71,9 @@ public:
static FSFloaterContacts* findInstance();
void sortFriendList();
// void updateFriendList();
LLPanel* mFriendsTab;
// LLAvatarList* mFriendList;
LLScrollListCtrl* mFriendsList;
LLScrollListCtrl* mFriendsList;
LLPanel* mGroupsTab;
LLGroupList* mGroupList;
@ -89,6 +86,7 @@ private:
enum FRIENDS_COLUMN_ORDER
{
LIST_ONLINE_STATUS,
LIST_FRIEND_USER_NAME,
LIST_FRIEND_NAME,
LIST_VISIBLE_ONLINE,
LIST_VISIBLE_MAP,
@ -100,14 +98,14 @@ private:
typedef std::map<LLUUID, S32> rights_map_t;
void refreshNames(U32 changed_mask);
BOOL refreshNamesSync(const LLAvatarTracker::buddy_map_t & all_buddies);
BOOL refreshNamesPresence(const LLAvatarTracker::buddy_map_t & all_buddies);
void refreshNamesSync(const LLAvatarTracker::buddy_map_t & all_buddies);
void refreshNamesPresence(const LLAvatarTracker::buddy_map_t & all_buddies);
void refreshRightsChangeList();
void refreshUI();
void onSelectName();
void applyRightsToFriends();
BOOL addFriend(const LLUUID& agent_id);
BOOL updateFriendItem(const LLUUID& agent_id, const LLRelationship* relationship);
void addFriend(const LLUUID& agent_id);
void updateFriendItem(const LLUUID& agent_id, const LLRelationship* relationship);
typedef enum
{
@ -146,6 +144,7 @@ private:
LLFriendObserver* mObserver;
BOOL mAllowRightsChange;
S32 mNumRightsChanged;
LLCachedControl<bool> mSortByUserName;
};

View File

@ -753,9 +753,6 @@ BOOL LLPanelPeople::postBuild()
mOnlineFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2));
mAllFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2));
// FSFloaterContacts* fs_contacts = FSFloaterContacts::getInstance();
// fs_contacts->mFriendsTab->setVisibleCallback(boost::bind(&Updater::setActive, mFriendListUpdater, _2));
return TRUE;
}
@ -842,11 +839,6 @@ void LLPanelPeople::updateFriendList()
llwarns << "Friends Cards failed to load" << llendl;
}
// update the contacts floater as well -KC
// static FSFloaterContacts* fs_contacts = FSFloaterContacts::getInstance();
// if (fs_contacts)
// fs_contacts->updateFriendList();
LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
for (; buddy_it != all_buddies.end(); ++buddy_it)
{

View File

@ -755,5 +755,13 @@ with the same filename but different name
<texture name="friends_icon_24x24" file_name="icons/Friends_Icon_24x24.png" preload="false" />
<texture name="gift_icon_24x24" file_name="icons/gift_icon_24x24.png" preload="false" />
<texture name="ff_online_status_button" file_name="legacy/ff_online_status_button.tga" preload="false" />
<texture name="ff_visible_online_button" file_name="legacy/ff_visible_online_button.tga" preload="false" />
<texture name="ff_visible_map_button" file_name="legacy/ff_visible_map_button.tga" preload="false" />
<texture name="ff_edit_mine_button" file_name="legacy/ff_edit_mine_button.tga" preload="false" />
<texture name="ff_visible_map_button_theirs" file_name="legacy/ff_visible_map_button_theirs.tga" preload="false" />
<texture name="ff_edit_theirs_button" file_name="legacy/ff_edit_theirs_button.tga" preload="false" />
<texture name="icon_avatar_online" file_name="legacy/icon_avatar_online_small.tga" preload="false" />
<texture name="slim_icon_16_viewer" file_name="slim_icon_16_viewer.tga" preload="false" />
</textures>

View File

@ -789,7 +789,7 @@
reference="Red" />
<color
name="ScrollBGStripeColor"
reference="Transparent" />
reference="White_10" />
<color
name="ScrollBgReadOnlyColor"
reference="Transparent" />

View File

@ -797,7 +797,7 @@
reference="Red" />
<color
name="ScrollBGStripeColor"
reference="Transparent" />
reference="White_10" />
<color
name="ScrollBgReadOnlyColor"
reference="Transparent" />