diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llavatarlistitem.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llavatarlistitem.h | 2 | ||||
| -rw-r--r-- | indra/newview/llcallingcard.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llchiclet.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/llchiclet.h | 7 | ||||
| -rw-r--r-- | indra/newview/llgrouplist.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llimpanel.cpp | 62 | ||||
| -rw-r--r-- | indra/newview/llimview.cpp | 125 | ||||
| -rw-r--r-- | indra/newview/llimview.h | 24 | ||||
| -rw-r--r-- | indra/newview/llinspectavatar.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/llmutelist.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llnearbychatbar.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelavatar.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/llpanelgroupgeneral.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_avatar_list_item.xml | 17 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_edit_profile.xml | 5 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_group_notify.xml | 8 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_profile.xml | 5 | 
18 files changed, 210 insertions, 119 deletions
| diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 51545bcc07..4179d7a58d 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -33,6 +33,7 @@  #include "llviewerprecompiledheaders.h" +#include "llavataractions.h"  #include "llavatarlistitem.h"  #include "llfloaterreg.h" @@ -49,6 +50,7 @@ LLAvatarListItem::LLAvatarListItem()  	mStatus(NULL),  	mSpeakingIndicator(NULL),  	mInfoBtn(NULL), +	mProfileBtn(NULL),  	mContextMenu(NULL),  	mAvatarId(LLUUID::null)  { @@ -63,10 +65,14 @@ BOOL  LLAvatarListItem::postBuild()  	mSpeakingIndicator = getChild<LLOutputMonitorCtrl>("speaking_indicator");  	mInfoBtn = getChild<LLButton>("info_btn"); +	mProfileBtn = getChild<LLButton>("profile_btn");  	mInfoBtn->setVisible(false);  	mInfoBtn->setClickedCallback(boost::bind(&LLAvatarListItem::onInfoBtnClick, this)); +	mProfileBtn->setVisible(false); +	mProfileBtn->setClickedCallback(boost::bind(&LLAvatarListItem::onProfileBtnClick, this)); +  /*  	if(!p.buttons.profile)  	{ @@ -104,6 +110,7 @@ void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask)  {  	childSetVisible("hovered_icon", true);  	mInfoBtn->setVisible(true); +	mProfileBtn->setVisible(true);  	LLPanel::onMouseEnter(x, y, mask);  } @@ -112,6 +119,7 @@ void LLAvatarListItem::onMouseLeave(S32 x, S32 y, MASK mask)  {  	childSetVisible("hovered_icon", false);  	mInfoBtn->setVisible(false); +	mProfileBtn->setVisible(false);  	LLPanel::onMouseLeave(x, y, mask);  } @@ -171,6 +179,11 @@ void LLAvatarListItem::onInfoBtnClick()  	*/  } +void LLAvatarListItem::onProfileBtnClick() +{ +	LLAvatarActions::showProfile(mAvatarId); +} +  void LLAvatarListItem::showStatus(bool show_status)  {  	// *HACK: dirty hack until we can determine correct avatar status (EXT-1076). diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index bde9250e4a..871441b2d3 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -66,6 +66,7 @@ public:  	const std::string getAvatarName() const;  	void onInfoBtnClick(); +	void onProfileBtnClick();  	void showSpeakingIndicator(bool show) { mSpeakingIndicator->setVisible(show); }  	void showInfoBtn(bool show_info_btn) {mInfoBtn->setVisible(show_info_btn); } @@ -82,6 +83,7 @@ private:  	LLOutputMonitorCtrl* mSpeakingIndicator;  	LLButton* mInfoBtn; +	LLButton* mProfileBtn;  	ContextMenu* mContextMenu;  	LLUUID mAvatarId; diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index e3440ee779..2b7bd83ca3 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.cpp @@ -682,7 +682,11 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)  			{  				std::string notifyMsg = notification->getMessage();  				if (!notifyMsg.empty()) +				{  					floater->addHistoryLine(notifyMsg,LLUIColorTable::instance().getColor("SystemChatColor")); + +					LLIMModel::getInstance()->addMessage(session_id, SYSTEM_FROM, LLUUID::null, notifyMsg); +				}  			}  		} diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 23664fa6d6..340b0fa22c 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -763,15 +763,14 @@ bool LLChicletPanel::addChiclet(LLChiclet* chiclet, S32 index)  	if(mScrollArea->addChild(chiclet))  	{  		S32 offset = 0; -		// Do not scroll chiclets if chiclets are scrolled right and new -		// chiclet is added to the beginning of the list -		if(canScrollLeft()) + +		// if index == 0 and chickelt list isn't empty insert chiclet before first in the list +		// without scrolling, so other visible chicklets aren't change screen position +		if (0 == index && !mChicletList.empty())  		{ -			offset = - (chiclet->getRequiredRect().getWidth() + getChicletPadding()); -			if(0 == index) -			{ -				offset += getChiclet(0)->getRect().mLeft; -			} +			offset = getChiclet(0)->getRect().mLeft +					- (chiclet->getRequiredRect().getWidth() +							+ getChicletPadding());  		}  		mChicletList.insert(mChicletList.begin() + index, chiclet); @@ -1128,6 +1127,25 @@ BOOL LLChicletPanel::handleScrollWheel(S32 x, S32 y, S32 clicks)  	return TRUE;  } +bool LLChicletPanel::isAnyIMFloaterDoked() +{ +	bool res = false; +	for (chiclet_list_t::iterator it = mChicletList.begin(); it +			!= mChicletList.end(); it++) +	{ +		LLIMFloater* im_floater = LLFloaterReg::findTypedInstance<LLIMFloater>( +				"impanel", (*it)->getSessionId()); +		if (im_floater != NULL && im_floater->getVisible() +				&& !im_floater->isMinimized() && im_floater->isDocked()) +		{ +			res = true; +			break; +		} +	} + +	return res; +} +  //////////////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////////////  ////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index ef47b54333..458bc73bc4 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -752,6 +752,8 @@ protected:  	S32 getScrollingOffset() { return mScrollingOffset; } +	bool isAnyIMFloaterDoked(); +  protected:  	chiclet_list_t mChicletList; @@ -818,7 +820,10 @@ T* LLChicletPanel::createChiclet(const LLUUID& session_id /*= LLUUID::null*/, S3  		return NULL;  	} -	scrollToChiclet(chiclet); +	if (!isAnyIMFloaterDoked()) +	{ +		scrollToChiclet(chiclet); +	}  	chiclet->setSessionId(session_id); diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 4caef8e000..ae869d9ac4 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -315,7 +315,7 @@ void LLGroupListItem::setActive(bool active)  	// rebuild the text.  This will cause problems if the text contains  	// hyperlinks, as their styles will be wrong.  	std::string text = mGroupNameBox->getText(); -	mGroupNameBox->clear(); +	mGroupNameBox->setText(LLStringUtil::null);// *HACK: replace with clear() when it's fixed.  	mGroupNameBox->appendText(text, false, style_params);  } diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index c2d515f158..0ff3bd24e9 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -1013,33 +1013,28 @@ LLFloaterIMPanel::LLFloaterIMPanel(const std::string& session_label,  				       (void *)this);  	} -	if ( !mSessionInitialized ) +	//*TODO we probably need the same "awaiting message" thing in LLIMFloater +	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mSessionUUID); +	if (!im_session)  	{ -		if ( !LLIMModel::instance().sendStartSession( -				 mSessionUUID, -				 mOtherParticipantUUID, -				 mSessionInitialTargetIDs, -				 mDialog) ) -		{ -			//we don't need to need to wait for any responses -			//so we're already initialized -			mSessionInitialized = TRUE; -			mSessionStartMsgPos = 0; -		} -		else -		{ -			//locally echo a little "starting session" message -			LLUIString session_start = sSessionStartString; +		llerror("im session with id " + mSessionUUID.asString() + " does not exist!", 0); +		return; +	} -			session_start.setArg("[NAME]", getTitle()); -			mSessionStartMsgPos =  -				mHistoryEditor->getWText().length(); +	mSessionInitialized =  im_session->mSessionInitialized; +	if (!mSessionInitialized) +	{ +		//locally echo a little "starting session" message +		LLUIString session_start = sSessionStartString; -			addHistoryLine( -				session_start, -				LLUIColorTable::instance().getColor("SystemChatColor"), -				false); -		} +		session_start.setArg("[NAME]", getTitle()); +		mSessionStartMsgPos =  +			mHistoryEditor->getWText().length(); + +		addHistoryLine( +			session_start, +			LLUIColorTable::instance().getColor("SystemChatColor"), +			false);  	}  } @@ -1346,25 +1341,6 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4  	mHistoryEditor->appendText(utf8msg, prepend_newline, LLStyle::Params().color(color));  	mHistoryEditor->blockUndo(); -	S32 im_log_option =  gSavedPerAccountSettings.getS32("IMLogOptions"); -	if (log_to_file && (im_log_option!=LOG_CHAT)) -	{ -		std::string histstr; -		if (gSavedPerAccountSettings.getBOOL("LogTimestamp")) -			histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + name + separator_string + utf8msg; -		else -			histstr = name + separator_string + utf8msg; - -		if(im_log_option==LOG_BOTH_TOGETHER) -		{ -			LLLogChat::saveHistory(std::string("chat"),histstr); -		} -		else -		{ -			LLLogChat::saveHistory(getTitle(),histstr); -		} -	} -  	if (!isInVisibleChain())  	{  		mNumUnreadMessages++; diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 6b947b2503..2ecd3eb448 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -86,6 +86,7 @@ LLIMMgr* gIMMgr = NULL;  //  // *FIXME: make these all either UIStrings or Strings +const static std::string IM_SEPARATOR(": ");  std::map<LLUUID, LLIMModel::LLIMSession*> LLIMModel::sSessionsMap; @@ -119,14 +120,16 @@ LLIMModel::LLIMModel()  } -LLIMModel::LLIMSession::LLIMSession( const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id ) +LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids)  :	mSessionID(session_id),  	mName(name),  	mType(type),  	mNumUnread(0),  	mOtherParticipantID(other_participant_id), +	mInitialTargetIDs(ids),  	mVoiceChannel(NULL), -	mSpeakers(NULL) +	mSpeakers(NULL), +	mSessionInitialized(false)  {  	if (IM_NOTHING_SPECIAL == type || IM_SESSION_P2P_INVITE == type)  	{ @@ -140,6 +143,14 @@ LLIMModel::LLIMSession::LLIMSession( const LLUUID& session_id, const std::string  	// All participants will be added to the list of people we've recently interacted with.  	mSpeakers->addListener(&LLRecentPeople::instance(), "add"); + +	if (!LLIMModel::getInstance()->sendStartSession(mSessionID, mOtherParticipantID,  +		mInitialTargetIDs, mType)) +	{ +		//we don't need to wait for any responses +		//so we're already initialized +		mSessionInitialized = true; +	}  }  LLIMModel::LLIMSession::~LLIMSession() @@ -186,11 +197,18 @@ void LLIMModel::updateSessionID(const LLUUID& old_session_id, const LLUUID& new_  		session->mSessionID = new_session_id;  		session->mVoiceChannel->updateSessionID(new_session_id); -		//*TODO set session initialized flag here? (IB) +		session->mSessionInitialized = true;  		sSessionsMap.erase(old_session_id);  		sSessionsMap[new_session_id] = session;  	} + +	//*TODO remove this "floater" stuff when Communicate Floater is gone +	LLFloaterIMPanel* floater = gIMMgr->findFloaterBySession(old_session_id); +	if (floater) +	{ +		floater->sessionInitReplyReceived(new_session_id); +	}  }  void LLIMModel::testMessages() @@ -219,7 +237,7 @@ void LLIMModel::testMessages()  } -bool LLIMModel::newSession(LLUUID session_id, std::string name, EInstantMessage type, LLUUID other_participant_id) +bool LLIMModel::newSession(LLUUID session_id, std::string name, EInstantMessage type, LLUUID other_participant_id, const std::vector<LLUUID>& ids)  {  	if (is_in_map(sSessionsMap, session_id))  	{ @@ -227,7 +245,7 @@ bool LLIMModel::newSession(LLUUID session_id, std::string name, EInstantMessage  		return false;  	} -	LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id); +	LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids);  	sSessionsMap[session_id] = session;  	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id); @@ -303,9 +321,34 @@ bool LLIMModel::addToHistory(LLUUID session_id, std::string from, std::string ut  } -		 -bool LLIMModel::addMessage(LLUUID session_id, std::string from, LLUUID from_id, std::string utf8_text) {  +//*TODO rewrite chat history persistence using LLSD serialization (IB) +bool LLIMModel::logToFile(const LLUUID& session_id, const std::string& from, const std::string& utf8_text) +{ +	S32 im_log_option =  gSavedPerAccountSettings.getS32("IMLogOptions"); +	if (im_log_option != LOG_CHAT) +	{ +		std::string histstr; +		if (gSavedPerAccountSettings.getBOOL("LogTimestamp")) +			histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + from + IM_SEPARATOR + utf8_text; +		else +			histstr = from + IM_SEPARATOR + utf8_text; + +		if(im_log_option == LOG_BOTH_TOGETHER) +		{ +			LLLogChat::saveHistory(std::string("chat"), histstr); +			return true; +		} +		else +		{ +			LLLogChat::saveHistory(LLIMModel::getInstance()->getName(session_id), histstr); +			return true; +		} +	} +	return false; +} +//*TODO add const qualifier and pass by references (IB) +bool LLIMModel::addMessage(LLUUID session_id, std::string from, LLUUID from_id, std::string utf8_text, bool log2file /* = true */) {   	LLIMSession* session = findIMSession(session_id);  	if (!session)  @@ -315,10 +358,8 @@ bool LLIMModel::addMessage(LLUUID session_id, std::string from, LLUUID from_id,  	}  	addToHistory(session_id, from, utf8_text); +	if (log2file) logToFile(session_id, from, utf8_text); -	std::string agent_name; -	LLAgentUI::buildFullname(agent_name); -	  	session->mNumUnread++;  	// notify listeners @@ -527,7 +568,7 @@ void LLIMModel::sendMessage(const std::string& utf8_text,  		// Do we have to replace the /me's here?  		std::string from;  		LLAgentUI::buildFullname(from); -		LLIMModel::instance().addToHistory(im_session_id, from, utf8_text); +		LLIMModel::getInstance()->addMessage(im_session_id, from, gAgentID, utf8_text);  		//local echo for the legacy communicate panel  		std::string history_echo; @@ -1475,9 +1516,12 @@ LLUUID LLIMMgr::addSession(  	if (!LLIMModel::getInstance()->findIMSession(session_id))  	{ -		LLIMModel::instance().newSession(session_id, name, dialog, other_participant_id); +		LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids);  	} +	LLIMFloater::show(session_id); + +	//*TODO remove this "floater" thing when Communicate Floater's gone  	LLFloaterIMPanel* floater = findFloaterBySession(session_id);  	if(!floater)  	{ @@ -1490,19 +1534,17 @@ LLUUID LLIMMgr::addSession(  			dialog,  			TRUE,  			ids); +	} -		if ( !floater ) return LLUUID::null; - -		noteOfflineUsers(floater, ids); +	noteOfflineUsers(session_id, floater, ids); -		// Only warn for regular IMs - not group IMs -		if( dialog == IM_NOTHING_SPECIAL ) -		{ -			noteMutedUsers(floater, ids); -		} +	// Only warn for regular IMs - not group IMs +	if( dialog == IM_NOTHING_SPECIAL ) +	{ +		noteMutedUsers(session_id, floater, ids);  	} -	floater->setInputFocus(TRUE); -	LLIMFloater::show(session_id); + +  	return session_id;  } @@ -1868,18 +1910,25 @@ LLFloaterIMPanel* LLIMMgr::createFloater(  }  void LLIMMgr::noteOfflineUsers( +	const LLUUID& session_id,  	LLFloaterIMPanel* floater,  	const LLDynamicArray<LLUUID>& ids)  {  	S32 count = ids.count();  	if(count == 0)  	{ -		floater->addHistoryLine(LLTrans::getString("only_user_message"), LLUIColorTable::instance().getColor("SystemChatColor")); +		const std::string& only_user = LLTrans::getString("only_user_message"); +		if (floater) +		{ +			floater->addHistoryLine(only_user, LLUIColorTable::instance().getColor("SystemChatColor")); +		} +		LLIMModel::getInstance()->addMessage(session_id, SYSTEM_FROM, LLUUID::null, only_user);  	}  	else  	{  		const LLRelationship* info = NULL;  		LLAvatarTracker& at = LLAvatarTracker::instance(); +		LLIMModel* im_model = LLIMModel::getInstance();  		for(S32 i = 0; i < count; ++i)  		{  			info = at.getBuddyInfo(ids.get(i)); @@ -1890,13 +1939,19 @@ void LLIMMgr::noteOfflineUsers(  				LLUIString offline = LLTrans::getString("offline_message");  				offline.setArg("[FIRST]", first);  				offline.setArg("[LAST]", last); -				floater->addHistoryLine(offline, LLUIColorTable::instance().getColor("SystemChatColor")); + +				if (floater) +				{ +					floater->addHistoryLine(offline, LLUIColorTable::instance().getColor("SystemChatColor")); +				} + +				im_model->addMessage(session_id, SYSTEM_FROM, LLUUID::null, offline);  			}  		}  	}  } -void LLIMMgr::noteMutedUsers(LLFloaterIMPanel* floater, +void LLIMMgr::noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* floater,  								  const LLDynamicArray<LLUUID>& ids)  {  	// Don't do this if we don't have a mute list. @@ -1909,12 +1964,18 @@ void LLIMMgr::noteMutedUsers(LLFloaterIMPanel* floater,  	S32 count = ids.count();  	if(count > 0)  	{ +		LLIMModel* im_model = LLIMModel::getInstance(); +		  		for(S32 i = 0; i < count; ++i)  		{  			if( ml->isMuted(ids.get(i)) )  			{  				LLUIString muted = LLTrans::getString("muted_message"); + +				//*TODO remove this "floater" thing when Communicate Floater's gone  				floater->addHistoryLine(muted); + +				im_model->addMessage(session_id, SYSTEM_FROM, LLUUID::null, muted);  				break;  			}  		} @@ -1941,17 +2002,6 @@ void LLIMMgr::processIMTypingCore(const LLIMInfo* im_info, BOOL typing)  	}  } -void LLIMMgr::updateFloaterSessionID( -	const LLUUID& old_session_id, -	const LLUUID& new_session_id) -{ -	LLFloaterIMPanel* floater = findFloaterBySession(old_session_id); -	if (floater) -	{ -		floater->sessionInitReplyReceived(new_session_id); -	} -} -  class LLViewerChatterBoxSessionStartReply : public LLHTTPNode  {  public: @@ -1980,9 +2030,6 @@ public:  		if ( success )  		{  			session_id = body["session_id"].asUUID(); -			gIMMgr->updateFloaterSessionID( -				temp_session_id, -				session_id);  			LLIMModel::getInstance()->updateSessionID(temp_session_id, session_id); diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 9a94d01bb2..df28c16bb1 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -53,18 +53,21 @@ public:  	struct LLIMSession  	{  		LLIMSession(const LLUUID& session_id, const std::string& name,  -			const EInstantMessage& type, const LLUUID& other_participant_id); +			const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids);  		virtual ~LLIMSession();  		LLUUID mSessionID;  		std::string mName;  		EInstantMessage mType;  		LLUUID mOtherParticipantID; +		std::vector<LLUUID> mInitialTargetIDs;  		S32 mNumUnread;  		std::list<LLSD> mMsgs;  		LLVoiceChannel* mVoiceChannel;  		LLIMSpeakerMgr* mSpeakers; + +		bool mSessionInitialized;  	}; @@ -88,11 +91,16 @@ public:  	boost::signals2::connection addChangedCallback( boost::function<void (const LLSD& data)> cb ); -	bool newSession(LLUUID session_id, std::string name, EInstantMessage type, LLUUID other_participant_id); +	bool newSession(LLUUID session_id, std::string name, EInstantMessage type, LLUUID other_participant_id,  +		const std::vector<LLUUID>& ids = std::vector<LLUUID>());  	bool clearSession(LLUUID session_id);  	std::list<LLSD> getMessages(LLUUID session_id, int start_index = 0); -	bool addMessage(LLUUID session_id, std::string from, LLUUID other_participant_id, std::string utf8_text); + +	bool addMessage(LLUUID session_id, std::string from, LLUUID other_participant_id, std::string utf8_text, bool log2file = true);  	bool addToHistory(LLUUID session_id, std::string from, std::string utf8_text);  + +	bool logToFile(const LLUUID& session_id, const std::string& from, const std::string& utf8_text); +  	//used to get the name of the session, for use as the title  	//currently just the other avatar name  	const std::string& getName(const LLUUID& session_id) const; @@ -223,12 +231,6 @@ public:  		const std::string& session_handle = LLStringUtil::null,  		const std::string& session_uri = LLStringUtil::null); -	//Updates a given session's session IDs.  Does not open, -	//create or do anything new.  If the old session doesn't -	//exist, then nothing happens. -	void updateFloaterSessionID(const LLUUID& old_session_id, -								const LLUUID& new_session_id); -  	void processIMTypingStart(const LLIMInfo* im_info);  	void processIMTypingStop(const LLIMInfo* im_info); @@ -293,8 +295,8 @@ private:  	// prints a simple message if they are not online. Used to help  	// reduce 'hello' messages to the linden employees unlucky enough  	// to have their calling card in the default inventory. -	void noteOfflineUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids); -	void noteMutedUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids); +	void noteOfflineUsers(const LLUUID& session_id, LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids); +	void noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);  	void processIMTypingCore(const LLIMInfo* im_info, BOOL typing); diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index 261d0836a0..44dd11dd86 100644 --- a/indra/newview/llinspectavatar.cpp +++ b/indra/newview/llinspectavatar.cpp @@ -39,7 +39,6 @@  #include "llavataractions.h"  #include "llavatarpropertiesprocessor.h"  #include "llcallingcard.h" -#include "lldateutil.h"		// ageFromDate()  #include "llfloaterreporter.h"  #include "llfloaterworldmap.h"  #include "llmutelist.h" @@ -359,7 +358,7 @@ void LLInspectAvatar::processAvatarData(LLAvatarData* data)  {  	LLStringUtil::format_map_t args;  	args["[BORN_ON]"] = data->born_on; -	args["[AGE]"] = LLDateUtil::ageFromDate(data->born_on); +	args["[AGE]"] = data->born_on;  	args["[SL_PROFILE]"] = data->about_text;  	args["[RW_PROFILE"] = data->fl_about_text;  	args["[ACCTTYPE]"] = LLAvatarPropertiesProcessor::accountType(data); diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index b47d6f4214..ff7f08bf97 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -530,6 +530,8 @@ void notify_automute_callback(const LLUUID& agent_id, const std::string& first_n  			{  				timp->addHistoryLine(message);  			} + +			LLIMModel::getInstance()->addMessage(agent_id, SYSTEM_FROM, LLUUID::null, message);  		}  		LLChat auto_chat(message); diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index c2e1019f43..4f3bca50ff 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -192,7 +192,7 @@ BOOL LLNearbyChatBar::postBuild()  	mChatBox->setKeystrokeCallback(&onChatBoxKeystroke, this);  	mChatBox->setFocusLostCallback(boost::bind(&onChatBoxFocusLost, _1, this)); -	mChatBox->setIgnoreArrowKeys(TRUE); +	mChatBox->setIgnoreArrowKeys( FALSE );   	mChatBox->setCommitOnFocusLost( FALSE );  	mChatBox->setRevertOnEsc( FALSE );  	mChatBox->setIgnoreTab(TRUE); diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index c543f85f22..3a3ea1fc3c 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -38,7 +38,6 @@  #include "llavatarconstants.h"	// AVATAR_ONLINE  #include "llcallingcard.h"  #include "llcombobox.h" -#include "lldateutil.h"  #include "llimview.h"  #include "lltexteditor.h"  #include "lltexturectrl.h" @@ -448,7 +447,7 @@ void LLPanelAvatarProfile::processGroupProperties(const LLAvatarGroups* avatar_g  void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data)  { -	childSetValue("register_date", LLDateUtil::ageFromDate(avatar_data->born_on)); +	childSetValue("register_date", avatar_data->born_on );  	childSetValue("sl_description_edit", avatar_data->about_text);  	childSetValue("fl_description_edit",avatar_data->fl_about_text);  	childSetValue("2nd_life_pic", avatar_data->image_id); diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index a6b67d668a..1c2875bf46 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -476,8 +476,15 @@ bool LLPanelGroupGeneral::confirmMatureApply(const LLSD& notification, const LLS  	// If we got here it means they set a valid value  	std::string mesg = ""; -	apply(mesg); -	return false; +	bool ret = apply(mesg); +	if ( !mesg.empty() ) +	{ +		LLSD args; +		args["MESSAGE"] = mesg; +		LLNotifications::instance().add("GenericAlert", args); +	} + +	return ret;  }  // static diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml index c3ae2d953a..f7f08b9b6a 100644 --- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml @@ -47,7 +47,7 @@       top="4"       use_ellipses="true"        value="Unknown" -     width="180" /> +     width="162" />      <text       follows="right"       font="SansSerif" @@ -85,4 +85,19 @@       picture_style="true"       top="2"       width="18" /> +    <button +     follows="right" +     font="SansSerifBigBold" +     height="18" +     image_disabled="profile_chevron_btn.tga" +     image_disabled_selected="profile_chevron_btn.tga" +     image_hover_selected="profile_chevron_btn_active.tga" +     image_selected="profile_chevron_btn_active.tga" +     image_unselected="profile_chevron_btn.tga" +     layout="topleft" +     left_pad="2" +     name="profile_btn" +     picture_style="true" +     top="2" +     width="18" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml index b13058f40a..b728c23bc5 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -14,7 +14,8 @@   width="255">     <string      name="CaptionTextAcctInfo"> -       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] +       [ACCTTYPE]  +[PAYMENTINFO] [AGEVERIFICATION]     </string>     <string      name="AcctTypeResident" @@ -294,7 +295,7 @@           width="100"/>          <text           follows="left|top|right" -         height="15" +         height="20"           layout="topleft"           left="10"           name="acc_status_text" diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml index deea0a44ab..bd98996ae1 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notify.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml @@ -7,13 +7,13 @@          4      </string>  	<panel follows="top" background_visible="true" bevel_style="in" bg_alpha_color="black" -		height="50" label="header" layout="topleft" left="0" name="header" +		height="30" label="header" layout="topleft" left="0" name="header"  		top="0" width="350"> -		<icon follows="left|top|right|bottom" height="40"  width="40" layout="topleft" +		<icon follows="left|top|right|bottom" height="20"  width="20" layout="topleft"  			top="5"  left="5" mouse_opaque="true" name="group_icon"/>  		<text type="string" length="1" follows="left|top|right|bottom" -			font="SansSerifBigBold" height="20" layout="topleft" left="60" name="title" -			text_color="GroupNotifyTextColor" top="20" width="275" use_ellipses="true"> +			font="SansSerifBigBold" height="20" layout="topleft" left_pad="10" name="title" +			text_color="GroupNotifyTextColor" top="5" width="275" use_ellipses="true">  			Sender Name / Group Name          </text>  	</panel> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 78aff64216..bdd1d80663 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -10,7 +10,8 @@   width="313">      <string       name="CaptionTextAcctInfo"> -        [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] +        [ACCTTYPE]  +[PAYMENTINFO] [AGEVERIFICATION]      </string>      <string       name="payment_update_link_url"> @@ -198,7 +199,7 @@           width="100"/> -->          <text           follows="left|top" -         height="15" +         height="20"           layout="topleft"           left="10"           name="acc_status_text" | 
