diff options
| author | Oz Linden <oz@lindenlab.com> | 2012-11-19 11:31:01 -0500 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2012-11-19 11:31:01 -0500 | 
| commit | f362666df729a6653c04b98d287cfedacaf3ed9f (patch) | |
| tree | f45fda952f6abb3f92ecde17daa22e11f2a1b76e /indra/newview | |
| parent | f99d7bcd475aacffa11b740cf7042cdae77590de (diff) | |
| parent | 6cd16bc537a9978db75e1c1fa0fda0af99cb3cdf (diff) | |
merge changes for DRTVWR-245
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llnamelistctrl.cpp | 27 | ||||
| -rw-r--r-- | indra/newview/llnamelistctrl.h | 18 | ||||
| -rw-r--r-- | indra/newview/llpanelgroup.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelgroupgeneral.cpp | 101 | ||||
| -rw-r--r-- | indra/newview/llpanelgroupgeneral.h | 6 | ||||
| -rw-r--r-- | indra/newview/llpanelgroupinvite.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llpanelgroupinvite.h | 4 | ||||
| -rw-r--r-- | indra/newview/llpanelgrouplandmoney.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelgrouproles.cpp | 54 | ||||
| -rw-r--r-- | indra/newview/llpanelgrouproles.h | 2 | 
10 files changed, 118 insertions, 109 deletions
| diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 472c26e22d..b0fbad33b0 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -68,7 +68,7 @@ LLNameListCtrl::LLNameListCtrl(const LLNameListCtrl::Params& p)  {}  // public -void LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPosition pos, +LLScrollListItem* LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPosition pos,  								 BOOL enabled, const std::string& suffix)  {  	//llinfos << "LLNameListCtrl::addNameItem " << agent_id << llendl; @@ -78,7 +78,7 @@ void LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPosition pos,  	item.enabled = enabled;  	item.target = INDIVIDUAL; -	addNameItemRow(item, pos, suffix); +	return addNameItemRow(item, pos, suffix);  }  // virtual, public @@ -204,7 +204,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)  {  	BOOL handled = FALSE;  	S32 column_index = getColumnIndexFromOffset(x); -	LLScrollListItem* hit_item = hitItem(x, y); +	LLNameListItem* hit_item = dynamic_cast<LLNameListItem*>(hitItem(x, y));  	if (hit_item  		&& column_index == mNameColumnIndex)  	{ @@ -228,7 +228,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)  				LLCoordGL pos( sticky_rect.mRight - info_icon_size, sticky_rect.mTop - (sticky_rect.getHeight() - icon->getHeight())/2 );  				// Should we show a group or an avatar inspector? -				bool is_group = hit_item->getValue()["is_group"].asBoolean(); +				bool is_group = hit_item->isGroup();  				LLToolTip::Params params;  				params.background_visible( false ); @@ -271,10 +271,10 @@ void LLNameListCtrl::addGroupNameItem(LLNameListCtrl::NameItem& item, EAddPositi  	addNameItemRow(item, pos);  } -void LLNameListCtrl::addNameItem(LLNameListCtrl::NameItem& item, EAddPosition pos) +LLScrollListItem* LLNameListCtrl::addNameItem(LLNameListCtrl::NameItem& item, EAddPosition pos)  {  	item.target = INDIVIDUAL; -	addNameItemRow(item, pos); +	return addNameItemRow(item, pos);  }  LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition pos, void* userdata) @@ -293,19 +293,12 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(  	const std::string& suffix)  {  	LLUUID id = name_item.value().asUUID(); -	LLNameListItem* item = NULL; - -	// Store item type so that we can invoke the proper inspector. -	// *TODO Vadim: Is there a more proper way of storing additional item data? -	{ -		LLNameListCtrl::NameItem item_p(name_item); -		item_p.value = LLSD().with("uuid", id).with("is_group", name_item.target() == GROUP); -		item = new LLNameListItem(item_p); -		LLScrollListCtrl::addRow(item, item_p, pos); -	} +	LLNameListItem* item = new LLNameListItem(name_item,name_item.target() == GROUP);  	if (!item) return NULL; +	LLScrollListCtrl::addRow(item, name_item, pos); +  	// use supplied name by default  	std::string fullname = name_item.name;  	switch(name_item.target) @@ -411,7 +404,7 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,  			setNeedsSort();  		}  	} - +	  	dirtyColumns();  } diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h index ba85e77c65..3ac0565761 100644 --- a/indra/newview/llnamelistctrl.h +++ b/indra/newview/llnamelistctrl.h @@ -42,14 +42,24 @@ class LLAvatarName;  class LLNameListItem : public LLScrollListItem, public LLHandleProvider<LLNameListItem>  {  public: -	LLUUID	getUUID() const		{ return getValue()["uuid"].asUUID(); } +	bool isGroup() const { return mIsGroup; } +	void setIsGroup(bool is_group) { mIsGroup = is_group; } +  protected:  	friend class LLNameListCtrl;  	LLNameListItem( const LLScrollListItem::Params& p ) -	:	LLScrollListItem(p) +	:	LLScrollListItem(p), mIsGroup(false) +	{ +	} + +	LLNameListItem( const LLScrollListItem::Params& p, bool is_group ) +	:	LLScrollListItem(p), mIsGroup(is_group)  	{  	} + +private: +	bool mIsGroup;  }; @@ -105,9 +115,9 @@ protected:  public:  	// Add a user to the list by name.  It will be added, the name  	// requested from the cache, and updated as necessary. -	void addNameItem(const LLUUID& agent_id, EAddPosition pos = ADD_BOTTOM, +	LLScrollListItem* addNameItem(const LLUUID& agent_id, EAddPosition pos = ADD_BOTTOM,  					 BOOL enabled = TRUE, const std::string& suffix = LLStringUtil::null); -	void addNameItem(NameItem& item, EAddPosition pos = ADD_BOTTOM); +	LLScrollListItem* addNameItem(NameItem& item, EAddPosition pos = ADD_BOTTOM);  	/*virtual*/ LLScrollListItem* addElement(const LLSD& element, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL);  	LLScrollListItem* addNameItemRow(const NameItem& value, EAddPosition pos = ADD_BOTTOM, const std::string& suffix = LLStringUtil::null); diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h index b494c7d403..0e6f5b8924 100644 --- a/indra/newview/llpanelgroup.h +++ b/indra/newview/llpanelgroup.h @@ -33,7 +33,7 @@  class LLOfferInfo; -const S32 UPDATE_MEMBERS_PER_FRAME = 500; +const F32 UPDATE_MEMBERS_SECONDS_PER_FRAME = 0.005; // 5ms  // Forward declares  class LLPanelGroupTab; diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index f6ce7de47e..51b4d2ea65 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -28,8 +28,10 @@  #include "llpanelgroupgeneral.h" -#include "lluictrlfactory.h" +#include "llavatarnamecache.h"  #include "llagent.h" +#include "llsdparam.h" +#include "lluictrlfactory.h"  #include "roles_constants.h"  // UI elements @@ -668,6 +670,7 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)  		{  			mMemberProgress = gdatap->mMembers.begin();  			mPendingMemberUpdate = TRUE; +			mUdpateSessionID.generate();  			sSDTime = 0.0f;  			sElementTime = 0.0f; @@ -696,76 +699,45 @@ void LLPanelGroupGeneral::updateMembers()  	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); -	if (!mListVisibleMembers || !gdatap  +	if (!mListVisibleMembers  +		|| !gdatap   		|| !gdatap->isMemberDataComplete()  		|| gdatap->mMembers.empty())  	{  		return;  	} -	static LLTimer all_timer; -	static LLTimer sd_timer; -	static LLTimer element_timer; +	LLTimer update_time; +	update_time.setTimerExpirySec(UPDATE_MEMBERS_SECONDS_PER_FRAME); -	all_timer.reset(); -	S32 i = 0; +	LLAvatarName av_name; -	for( ; mMemberProgress != gdatap->mMembers.end() && i<UPDATE_MEMBERS_PER_FRAME;  -			++mMemberProgress, ++i) +	for( ; mMemberProgress != gdatap->mMembers.end() && !update_time.hasExpired();  +			++mMemberProgress)  	{ -		lldebugs << "Adding " << mMemberProgress->first << ", " << mMemberProgress->second->getTitle() << llendl;  		LLGroupMemberData* member = mMemberProgress->second;  		if (!member)  		{  			continue;  		} -		// Owners show up in bold. -		std::string style = "NORMAL"; -		sd_timer.reset(); -		LLSD row; -		row["id"] = member->getID(); - -		row["columns"][0]["column"] = "name"; -		row["columns"][0]["font"]["name"] = "SANSSERIF_SMALL"; -		row["columns"][0]["font"]["style"] = style; -		// value is filled in by name list control - -		row["columns"][1]["column"] = "title"; -		row["columns"][1]["value"] = member->getTitle(); -		row["columns"][1]["font"]["name"] = "SANSSERIF_SMALL"; -		row["columns"][1]["font"]["style"] = style; - -		std::string status = member->getOnlineStatus(); -		 -		row["columns"][2]["column"] = "status"; -		row["columns"][2]["value"] = status; -		row["columns"][2]["font"]["name"] = "SANSSERIF_SMALL"; -		row["columns"][2]["font"]["style"] = style; -		sSDTime += sd_timer.getElapsedTimeF32(); - -		element_timer.reset(); -		LLScrollListItem* member_row = mListVisibleMembers->addElement(row); -		 -		if ( member->isOwner() ) +		if (LLAvatarNameCache::get(mMemberProgress->first, &av_name)) +		{ +			addMember(mMemberProgress->second); +		} +		else  		{ -			LLScrollListText* name_textp = dynamic_cast<LLScrollListText*>(member_row->getColumn(0)); -			if (name_textp) -				name_textp->setFontStyle(LLFontGL::BOLD); +			// If name is not cached, onNameCache() should be called when it is cached and add this member to list. +			LLAvatarNameCache::get(mMemberProgress->first,  +									boost::bind(&LLPanelGroupGeneral::onNameCache, +												this, mUdpateSessionID, member, _1, _2));  		} -		sElementTime += element_timer.getElapsedTimeF32();  	} -	sAllTime += all_timer.getElapsedTimeF32(); -	lldebugs << "Updated " << i << " of " << UPDATE_MEMBERS_PER_FRAME << "members in the list." << llendl;  	if (mMemberProgress == gdatap->mMembers.end())  	{  		lldebugs << "   member list completed." << llendl;  		mListVisibleMembers->setEnabled(TRUE); - -		lldebugs << "All Time: " << sAllTime << llendl; -		lldebugs << "SD Time: " << sSDTime << llendl; -		lldebugs << "Element Time: " << sElementTime << llendl;  	}  	else  	{ @@ -774,6 +746,39 @@ void LLPanelGroupGeneral::updateMembers()  	}  } +void LLPanelGroupGeneral::addMember(LLGroupMemberData* member) +{ +	LLNameListCtrl::NameItem item_params; +	item_params.value = member->getID(); + +	LLScrollListCell::Params column; +	item_params.columns.add().column("name").font.name("SANSSERIF_SMALL"); + +	item_params.columns.add().column("title").value(member->getTitle()).font.name("SANSSERIF_SMALL"); + +	item_params.columns.add().column("status").value(member->getOnlineStatus()).font.name("SANSSERIF_SMALL"); + +	LLScrollListItem* member_row = mListVisibleMembers->addNameItemRow(item_params); + +	if ( member->isOwner() ) +	{ +		LLScrollListText* name_textp = dynamic_cast<LLScrollListText*>(member_row->getColumn(0)); +		if (name_textp) +			name_textp->setFontStyle(LLFontGL::BOLD); +	} +} + +void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name) +{ +	if (!member  +		|| update_id != mUdpateSessionID) +	{ +		return; +	} + +	addMember(member); +} +  void LLPanelGroupGeneral::updateChanged()  {  	// List all the controls we want to check for changes... diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h index 88c092c461..b179f78c56 100644 --- a/indra/newview/llpanelgroupgeneral.h +++ b/indra/newview/llpanelgroupgeneral.h @@ -38,6 +38,7 @@ class LLNameListCtrl;  class LLCheckBoxCtrl;  class LLComboBox;  class LLSpinCtrl; +class LLAvatarName;  class LLPanelGroupGeneral : public LLPanelGroupTab  { @@ -62,6 +63,7 @@ public:  	virtual void setupCtrls	(LLPanel* parent); +	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name);  private:  	void	reset(); @@ -75,7 +77,8 @@ private:  	static void onReceiveNotices(LLUICtrl* ctrl, void* data);  	static void openProfile(void* data); -	S32		sortMembersList(S32,const LLScrollListItem*,const LLScrollListItem*); +	S32	 sortMembersList(S32,const LLScrollListItem*,const LLScrollListItem*); +	void addMember(LLGroupMemberData* member);      static bool joinDlgCB(const LLSD& notification, const LLSD& response); @@ -87,6 +90,7 @@ private:  	BOOL			mChanged;  	BOOL			mFirstUse;  	std::string		mIncompleteMemberDataStr; +	LLUUID			mUdpateSessionID;  	// Group information (include any updates in updateChanged)  	LLLineEditor		*mGroupNameEditor; diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp index 1ed8d8cf03..b9b347d4be 100644 --- a/indra/newview/llpanelgroupinvite.cpp +++ b/indra/newview/llpanelgroupinvite.cpp @@ -467,10 +467,11 @@ void LLPanelGroupInvite::addUsers(uuid_vec_t& agent_ids)  			//so we need to do this additional search in avatar tracker, see EXT-4732  			if (LLAvatarTracker::instance().isBuddy(agent_id))  			{ -				if (!gCacheName->getFullName(agent_id, fullname)) +				LLAvatarName av_name; +				if (!LLAvatarNameCache::get(agent_id, &av_name))  				{  					// actually it should happen, just in case -					gCacheName->get(LLUUID(agent_id), false, boost::bind( +					LLAvatarNameCache::get(LLUUID(agent_id), boost::bind(  							&LLPanelGroupInvite::addUserCallback, this, _1, _2));  					// for this special case!  					//when there is no cached name we should remove resident from agent_ids list to avoid breaking of sequence @@ -479,7 +480,7 @@ void LLPanelGroupInvite::addUsers(uuid_vec_t& agent_ids)  				}  				else  				{ -					names.push_back(fullname); +					names.push_back(av_name.getLegacyName());  				}  			}  		} @@ -487,12 +488,12 @@ void LLPanelGroupInvite::addUsers(uuid_vec_t& agent_ids)  	mImplementation->addUsers(names, agent_ids);  } -void LLPanelGroupInvite::addUserCallback(const LLUUID& id, const std::string& full_name) +void LLPanelGroupInvite::addUserCallback(const LLUUID& id, const LLAvatarName& av_name)  {  	std::vector<std::string> names;  	uuid_vec_t agent_ids;  	agent_ids.push_back(id); -	names.push_back(full_name); +	names.push_back(av_name.getLegacyName());  	mImplementation->addUsers(names, agent_ids);  } diff --git a/indra/newview/llpanelgroupinvite.h b/indra/newview/llpanelgroupinvite.h index a7bfd2226e..9f7b5ae9be 100644 --- a/indra/newview/llpanelgroupinvite.h +++ b/indra/newview/llpanelgroupinvite.h @@ -29,6 +29,8 @@  #include "llpanel.h"  #include "lluuid.h" +class LLAvatarName; +  class LLPanelGroupInvite  : public LLPanel  { @@ -40,7 +42,7 @@ public:  	/**  	 * this callback is being used to add a user whose fullname isn't been loaded before invoking of addUsers().  	 */   -	void addUserCallback(const LLUUID& id, const std::string& full_name); +	void addUserCallback(const LLUUID& id, const LLAvatarName& av_name);  	void clear();  	void update(); diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index 363443646d..37755fb851 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -517,7 +517,7 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)  			row["columns"][3]["column"] = "type";  			row["columns"][3]["value"] = land_type; -			row["columns"][3]["font"] = "SANSSERIFSMALL"; +			row["columns"][3]["font"] = "SANSSERIF_SMALL";  			// hidden is always last column  			row["columns"][4]["column"] = "hidden"; diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index bbe47ae943..5720168f81 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -29,6 +29,7 @@  #include "llcheckboxctrl.h"  #include "llagent.h" +#include "llavatarnamecache.h"  #include "llbutton.h"  #include "llfiltereditor.h"  #include "llfloatergroupinvite.h" @@ -1584,25 +1585,22 @@ void LLPanelGroupMembersSubTab::addMemberToList(LLUUID id, LLGroupMemberData* da  	LLUIString donated = getString("donation_area");  	donated.setArg("[AREA]", llformat("%d", data->getContribution())); -	LLSD row; -	row["id"] = id; +	LLNameListCtrl::NameItem item_params; +	item_params.value = id; -	row["columns"][0]["column"] = "name"; -	// value is filled in by name list control +	item_params.columns.add().column("name").font.name("SANSSERIF_SMALL").style("NORMAL"); -	row["columns"][1]["column"] = "donated"; -	row["columns"][1]["value"] = donated.getString(); +	item_params.columns.add().column("donated").value(donated.getString()) +			.font.name("SANSSERIF_SMALL").style("NORMAL"); -	row["columns"][2]["column"] = "online"; -	row["columns"][2]["value"] = data->getOnlineStatus(); -	row["columns"][2]["font"] = "SANSSERIF_SMALL"; - -	mMembersList->addElement(row); +	item_params.columns.add().column("online").value(data->getOnlineStatus()) +			.font.name("SANSSERIF_SMALL").style("NORMAL"); +	mMembersList->addNameItemRow(item_params);  	mHasMatch = TRUE;  } -void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, const LLUUID& id) +void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name)  {  	// Update ID is used to determine whether member whose id is passed  	// into onNameCache() was passed after current or previous user-initiated update. @@ -1612,21 +1610,15 @@ void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, const LLUUI  	// we do nothing.  	if (mUdpateSessionID != update_id) return; -	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); -		if (!gdatap)  +	if (!member)  	{ -		llwarns << "LLPanelGroupMembersSubTab::updateMembers() -- No group data!" << llendl;  		return;  	} -	std::string fullname; -	gCacheName->getFullName(id, fullname); - -	LLGroupMemberData* data;  	// trying to avoid unnecessary hash lookups -	if (matchesSearchFilter(fullname) && ((data = gdatap->mMembers[id]) != NULL)) +	if (matchesSearchFilter(av_name.getLegacyName()))  	{ -		addMemberToList(id, data); +		addMemberToList(id, member);  		if(!mMembersList->getEnabled())  		{  			mMembersList->setEnabled(TRUE); @@ -1665,18 +1657,20 @@ void LLPanelGroupMembersSubTab::updateMembers()  	LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end(); -	 -	S32 i = 0; -	for( ; mMemberProgress != end && i<UPDATE_MEMBERS_PER_FRAME;  -			++mMemberProgress, ++i) + +	LLTimer update_time; +	update_time.setTimerExpirySec(UPDATE_MEMBERS_SECONDS_PER_FRAME); + +	for( ; mMemberProgress != end && !update_time.hasExpired(); ++mMemberProgress)  	{  		if (!mMemberProgress->second)  			continue; +  		// Do filtering on name if it is already in the cache. -		std::string fullname; -		if (gCacheName->getFullName(mMemberProgress->first, fullname)) +		LLAvatarName av_name; +		if (LLAvatarNameCache::get(mMemberProgress->first, &av_name))  		{ -			if (matchesSearchFilter(fullname)) +			if (matchesSearchFilter(av_name.getLegacyName()))  			{  				addMemberToList(mMemberProgress->first, mMemberProgress->second);  			} @@ -1684,8 +1678,8 @@ void LLPanelGroupMembersSubTab::updateMembers()  		else  		{  			// If name is not cached, onNameCache() should be called when it is cached and add this member to list. -			gCacheName->get(mMemberProgress->first, FALSE, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, -																	   this, mUdpateSessionID, _1)); +			LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, +																	   this, mUdpateSessionID, mMemberProgress->second, _1, _2));  		}  	} diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h index a55e264150..8b454e020a 100644 --- a/indra/newview/llpanelgrouproles.h +++ b/indra/newview/llpanelgrouproles.h @@ -188,7 +188,7 @@ public:  	virtual void setGroupID(const LLUUID& id);  	void addMemberToList(LLUUID id, LLGroupMemberData* data); -	void onNameCache(const LLUUID& update_id, const LLUUID& id); +	void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLUUID& id, const LLAvatarName& av_name);  protected:  	typedef std::map<LLUUID, LLRoleMemberChangeType> role_change_data_map_t; | 
