From 3cf624b371eace5ec382796d7bd811d181d5e877 Mon Sep 17 00:00:00 2001
From: AlexanderP ProductEngine <apaschenko@productengine.com>
Date: Wed, 5 Sep 2012 18:48:07 +0300
Subject: CHUI-268 (Transfer the common functionality from LLNearbyChat and
 LLIMFloater to LLIMConversation):  moved  focusLost(), focusReceived and
 enable/disable of the call button to base class

---
 indra/newview/llimconversation.cpp | 42 ++++++++++++++++++++++++++++++++++++++
 indra/newview/llimconversation.h   | 14 +++++++++----
 indra/newview/llimfloater.cpp      | 39 -----------------------------------
 indra/newview/llimfloater.h        |  9 --------
 indra/newview/llnearbychat.cpp     | 23 +--------------------
 indra/newview/llnearbychat.h       |  7 -------
 6 files changed, 53 insertions(+), 81 deletions(-)

(limited to 'indra')

diff --git a/indra/newview/llimconversation.cpp b/indra/newview/llimconversation.cpp
index 5a5196fb7e..d8c81a7849 100644
--- a/indra/newview/llimconversation.cpp
+++ b/indra/newview/llimconversation.cpp
@@ -31,6 +31,8 @@
 
 #include "llchatentry.h"
 #include "llchathistory.h"
+#include "llchiclet.h"
+#include "llchicletbar.h"
 #include "lldraghandle.h"
 #include "llfloaterreg.h"
 #include "llimfloater.h"
@@ -53,6 +55,8 @@ LLIMConversation::LLIMConversation(const LLUUID& session_id)
   , mInputEditorTopPad(0)
   , mRefreshTimer(new LLTimer())
 {
+	mSession = LLIMModel::getInstance()->findIMSession(mSessionID);
+
 	mCommitCallbackRegistrar.add("IMSession.Menu.Action",
 			boost::bind(&LLIMConversation::onIMSessionMenuItemClicked,  this, _2));
 	mEnableCallbackRegistrar.add("IMSession.Menu.CompactExpandedModes.CheckItem",
@@ -182,6 +186,44 @@ void LLIMConversation::draw()
 	}
 }
 
+void LLIMConversation::enableDisableCallBtn()
+{
+    getChildView("voice_call_btn")->setEnabled(
+    		mSessionID.notNull()
+    		&& mSession
+    		&& mSession->mSessionInitialized
+    		&& LLVoiceClient::getInstance()->voiceEnabled()
+    		&& LLVoiceClient::getInstance()->isVoiceWorking()
+    		&& mSession->mCallBackEnabled);
+}
+
+
+void LLIMConversation::onFocusReceived()
+{
+	setBackgroundOpaque(true);
+
+	if (mSessionID.notNull())
+	{
+		LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, true);
+
+		if (getVisible())
+		{
+			// suppress corresponding toast only if this floater is visible and have focus
+			LLIMModel::getInstance()->setActiveSessionID(mSessionID);
+			LLIMModel::instance().sendNoUnreadMessages(mSessionID);
+		}
+	}
+
+	LLTransientDockableFloater::onFocusReceived();
+}
+
+void LLIMConversation::onFocusLost()
+{
+	setBackgroundOpaque(false);
+	LLTransientDockableFloater::onFocusLost();
+}
+
+
 void LLIMConversation::buildParticipantList()
 {
 	if (mIsNearbyChat)
diff --git a/indra/newview/llimconversation.h b/indra/newview/llimconversation.h
index 26151ad1be..50feb12aed 100644
--- a/indra/newview/llimconversation.h
+++ b/indra/newview/llimconversation.h
@@ -33,6 +33,7 @@
 #include "lltransientdockablefloater.h"
 #include "llviewercontrol.h"
 #include "lleventtimer.h"
+#include "llimview.h"
 #include "llconversationmodel.h"
 
 class LLPanelChatControlPanel;
@@ -87,9 +88,6 @@ protected:
 	// refresh a visual state of the Call button
 	void updateCallBtnState(bool callIsActive);
 
-	// set the enable/disable state for the Call button
-	virtual void enableDisableCallBtn() = 0;
-
 	void buildParticipantList();
 	void onSortMenuItemClicked(const LLSD& userdata);
 
@@ -99,9 +97,18 @@ protected:
 	/// Update floater header and toolbar buttons when hosted/torn off state is toggled.
 	void updateHeaderAndToolbar();
 
+	// set the enable/disable state for the Call button
+	virtual void enableDisableCallBtn();
+
+	// process focus events to set a currently active session
+	/* virtual */ void onFocusLost();
+	/* virtual */ void onFocusReceived();
+
 	bool mIsNearbyChat;
 	bool mIsP2PChat;
 
+	LLIMModel::LLIMSession* mSession;
+
 	LLLayoutPanel* mParticipantListPanel;
 	LLParticipantList* mParticipantList;
 	LLUUID mSessionID;
@@ -119,7 +126,6 @@ private:
 	/// Refreshes the floater at a constant rate.
 	virtual void refresh() = 0;
 
-
 	/**
 	 * Adjusts chat history height to fit vertically with input chat field
 	 * and avoid overlapping, since input chat field can be vertically expanded.
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index a601561c62..7b475c1e0b 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -92,24 +92,6 @@ LLIMFloater::LLIMFloater(const LLUUID& session_id)
 	setDocked(true);
 }
 
-void LLIMFloater::onFocusLost()
-{
-	LLIMModel::getInstance()->resetActiveSessionID();
-	
-	LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, false);
-}
-
-void LLIMFloater::onFocusReceived()
-{
-	LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, true);
-
-	if (getVisible())
-	{
-		// suppress corresponding toast only if this floater is visible and have focus
-		LLIMModel::getInstance()->setActiveSessionID(mSessionID);
-		LLIMModel::instance().sendNoUnreadMessages(mSessionID);
-	}
-}
 
 // virtual
 void LLIMFloater::refresh()
@@ -513,27 +495,6 @@ void LLIMFloater::boundVoiceChannel()
 	}
 }
 
-void LLIMFloater::enableDisableCallBtn()
-{
-	bool voice_enabled = LLVoiceClient::getInstance()->voiceEnabled()
-			&& LLVoiceClient::getInstance()->isVoiceWorking();
-
-	if (mSession)
-	{
-		bool session_initialized = mSession->mSessionInitialized;
-		bool callback_enabled = mSession->mCallBackEnabled;
-
-		BOOL enable_connect =
-				session_initialized && voice_enabled && callback_enabled;
-		getChildView("voice_call_btn")->setEnabled(enable_connect);
-	}
-	else
-	{
-		getChildView("voice_call_btn")->setEnabled(false);
-	}
-}
-
-
 void LLIMFloater::onCallButtonClicked()
 {
 	LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionID);
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index 24a8f17feb..7b2c9e7aef 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -134,10 +134,6 @@ public:
 
 private:
 
-	// process focus events to set a currently active session
-	/* virtual */ void onFocusLost();
-	/* virtual */ void onFocusReceived();
-
 	/*virtual*/ void refresh();
 
 	/*virtual*/ void onClickCloseBtn();
@@ -169,9 +165,6 @@ private:
 
 	void onCallButtonClicked();
 
-	// set the enable/disable state for the Call button
-	virtual void enableDisableCallBtn();
-
 	void boundVoiceChannel();
 
 	// Add the "User is typing..." indicator.
@@ -184,8 +177,6 @@ private:
 
 	static void confirmLeaveCallCallback(const LLSD& notification, const LLSD& response);
 
-
-	LLIMModel::LLIMSession* mSession;
 	S32 mLastMessageIndex;
 
 	EInstantMessage mDialog;
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 25bbc82fee..c2ad8cfda3 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -133,6 +133,7 @@ LLNearbyChat::LLNearbyChat(const LLSD& llsd)
 	setIsChrome(TRUE);
 	mKey = LLSD();
 	mSpeakerMgr = LLLocalSpeakerMgr::getInstance();
+	mSessionID = LLUUID();
 	setName("nearby_chat");
 	setIsSingleInstance(TRUE);
 }
@@ -216,21 +217,6 @@ bool	LLNearbyChat::onNearbyChatCheckContextMenuItem(const LLSD& userdata)
 	return false;
 }
 
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLNearbyChat::onFocusReceived()
-{
-	setBackgroundOpaque(true);
-	LLIMConversation::onFocusReceived();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLNearbyChat::onFocusLost()
-{
-	setBackgroundOpaque(false);
-	LLIMConversation::onFocusLost();
-}
 
 BOOL	LLNearbyChat::handleMouseDown(S32 x, S32 y, MASK mask)
 {
@@ -326,13 +312,6 @@ void	LLNearbyChat::setVisible(BOOL visible)
 }
 
 
-void LLNearbyChat::enableDisableCallBtn()
-{
-	// bool btn_enabled = LLAgent::isActionAllowed("speak");
-
-	getChildView("voice_call_btn")->setEnabled(false /*btn_enabled*/);
-}
-
 void LLNearbyChat::onTearOffClicked()
 {
 	LLIMConversation::onTearOffClicked();
diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h
index 4fc5cb7f76..1db7afc01f 100644
--- a/indra/newview/llnearbychat.h
+++ b/indra/newview/llnearbychat.h
@@ -51,10 +51,6 @@ public:
 	/*virtual*/ BOOL postBuild();
 	/*virtual*/ void onOpen(const LLSD& key);
 
-	// focus overrides
-	/*virtual*/ void	onFocusLost();
-	/*virtual*/ void	onFocusReceived();
-
 	/*virtual*/ void	setVisible(BOOL visible);
 
 	void loadHistory();
@@ -102,9 +98,6 @@ protected:
 
 	void displaySpeakingIndicator();
 
-	// set the enable/disable state for the Call button
-	virtual void enableDisableCallBtn();
-
 	// Which non-zero channel did we last chat on?
 	static S32 sLastSpecialChatChannel;
 
-- 
cgit v1.2.3