diff options
| author | Merov Linden <merov@lindenlab.com> | 2012-11-02 11:01:08 -0700 | 
|---|---|---|
| committer | Merov Linden <merov@lindenlab.com> | 2012-11-02 11:01:08 -0700 | 
| commit | ef5121ffb309c0317a4eb478e9527d33441377c2 (patch) | |
| tree | 27f00f34caa4860416ed1ffc1e811df65392df1d | |
| parent | 7f2ea292e10b10958b3e00a641b50b194f131e41 (diff) | |
CHUI-481 : WIP : Make updateSessionName() a virtual method of LLIMConversation so we can eventually call it on events
| -rw-r--r-- | indra/newview/llimconversation.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llimconversation.h | 3 | ||||
| -rw-r--r-- | indra/newview/llimfloater.cpp | 54 | ||||
| -rw-r--r-- | indra/newview/llimfloater.h | 4 | 
4 files changed, 44 insertions, 23 deletions
diff --git a/indra/newview/llimconversation.cpp b/indra/newview/llimconversation.cpp index aee6642150..a6a246a01e 100644 --- a/indra/newview/llimconversation.cpp +++ b/indra/newview/llimconversation.cpp @@ -508,6 +508,12 @@ void LLIMConversation::hideOrShowTitle()  	floater_contents->setShape(contents_rect);  } +void LLIMConversation::updateSessionName(const std::string& name) +{ +	llinfos << "Merov debug : updateSessionName, name = " << name << llendl; +	mInputEditor->setLabel(LLTrans::getString("IM_to_label") + " " + name); +} +  void LLIMConversation::hideAllStandardButtons()  {  	for (S32 i = 0; i < BUTTON_COUNT; i++) diff --git a/indra/newview/llimconversation.h b/indra/newview/llimconversation.h index 4e66d000e6..2bd1582e87 100644 --- a/indra/newview/llimconversation.h +++ b/indra/newview/llimconversation.h @@ -104,6 +104,9 @@ protected:  	/// Update floater header and toolbar buttons when hosted/torn off state is toggled.  	void updateHeaderAndToolbar(); +	// Update the input field help text and other places that need the session name +	virtual void updateSessionName(const std::string& name); +  	// set the enable/disable state for the Call button  	virtual void enableDisableCallBtn(); diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 6d90b6a0b2..4e1bfb4e77 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -243,7 +243,6 @@ void LLIMFloater::initIMSession(const LLUUID& session_id)  	{  		mIsP2PChat = mSession->isP2PSessionType();  		mSessionInitialized = mSession->mSessionInitialized; -  		mDialog = mSession->mType;  	}  } @@ -281,7 +280,7 @@ void LLIMFloater::initIMFloater()  	else  	{  		std::string session_name(LLIMModel::instance().getName(mSessionID)); -		updateSessionName(session_name, session_name); +		updateSessionName(session_name);  		// For ad hoc conferences we should update the title with participants names.  		if ((IM_SESSION_INVITE == mDialog && !gAgent.isInGroup(mSessionID)) @@ -292,6 +291,8 @@ void LLIMFloater::initIMFloater()  				mParticipantsListRefreshConnection.disconnect();  			} +			// CHUI-441: We shouldn't have any avatar_list anymore... see floater_im_session.xml +			// *TODO: Track and delete if not necessary anymore  			LLAvatarList* avatar_list = getChild<LLAvatarList>("speakers_list");  			mParticipantsListRefreshConnection = avatar_list->setRefreshCompleteCallback(  					boost::bind(&LLIMFloater::onParticipantsListChanged, this, _1)); @@ -525,20 +526,21 @@ void LLIMFloater::onVoiceChannelStateChanged(  	updateCallBtnState(callIsActive);  } -void LLIMFloater::updateSessionName(const std::string& ui_title, -									const std::string& ui_label) +void LLIMFloater::updateSessionName(const std::string& name)  { -	mInputEditor->setLabel(LLTrans::getString("IM_to_label") + " " + ui_label); -	setTitle(ui_title);	 +	LLIMConversation::updateSessionName(name); +	setTitle(name);	  }  void LLIMFloater::onAvatarNameCache(const LLUUID& agent_id,  									const LLAvatarName& av_name)  { -	// Use display name only for labels, as the extended name will be in the -	// floater title +	// Use display name for label +	updateSessionName(av_name.mDisplayName); +	 +	// Overwrite the floater title with the extended name  	std::string ui_title = av_name.getCompleteName(); -	updateSessionName(ui_title, av_name.mDisplayName); +	setTitle(ui_title);	  	mTypingStart.setArg("[NAME]", ui_title);  } @@ -550,35 +552,45 @@ void LLIMFloater::onParticipantsListChanged(LLUICtrl* ctrl)  		return;  	} -	bool all_names_resolved = true;  	std::vector<LLSD> participants_uuids;  	uuid_vec_t temp_uuids; // uuids vector for building the added participants' names string +	LLUUID unfound_id;  	avatar_list->getValues(participants_uuids); -	// Check whether we have all participants names in LLAvatarNameCache +	// Check participants names in LLAvatarNameCache      for (std::vector<LLSD>::const_iterator it = participants_uuids.begin(); it != participants_uuids.end(); ++it)  	{  		const LLUUID& id = it->asUUID(); -		temp_uuids.push_back(id);  		LLAvatarName av_name;          if (!LLAvatarNameCache::get(id, &av_name))          { -			all_names_resolved = false; - -			// If a name is not found in cache, request it and continue the process recursively -			// until all ids are resolved into names. -			LLAvatarNameCache::get(id, -					boost::bind(&LLIMFloater::onParticipantsListChanged, this, avatar_list)); -			break; +			// Keep the first not found avatar id +			if (unfound_id.isNull()) +			{ +				unfound_id = id; +			}          } +		else +		{ +			// Add the participant to the list of existing names +			temp_uuids.push_back(id); +		}  	} -	if (all_names_resolved) +	if (temp_uuids.size() != 0)  	{ +		// Build the session name and update it  		std::string ui_title;  		LLAvatarActions::buildResidentsString(temp_uuids, ui_title); -		updateSessionName(ui_title, ui_title); +		updateSessionName(ui_title); +	} + +	if (unfound_id.notNull()) +	{ +		// If a name is not found in cache, request it and continue the process recursively +		// until all ids are resolved into names. +		LLAvatarNameCache::get(unfound_id, boost::bind(&LLIMFloater::onParticipantsListChanged, this, avatar_list));  	}  } diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index 8a0d6f10e0..ec3a96f694 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -139,8 +139,8 @@ private:  	/*virtual*/ void onClickCloseBtn(); -	// Update the window title, input field help text, etc. -	void updateSessionName(const std::string& ui_title, const std::string& ui_label); +	// Update the window title and input field help text +	/*virtual*/ void updateSessionName(const std::string& name);  	// For display name lookups for IM window titles  	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);  | 
