diff options
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 22 | ||||
| -rw-r--r-- | indra/newview/app_settings/settings_per_account.xml | 11 | ||||
| -rw-r--r-- | indra/newview/llfloaterimcontainer.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llfloaterimnearbychat.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llfloaterimnearbychathandler.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/llfloaterimsession.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llfloaterimsessiontab.cpp | 86 | ||||
| -rw-r--r-- | indra/newview/llfloaterimsessiontab.h | 15 | ||||
| -rw-r--r-- | indra/newview/llimview.cpp | 36 | ||||
| -rw-r--r-- | indra/newview/llpanelpeoplemenus.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/skins/default/textures/textures.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_im_session.xml | 123 | 
12 files changed, 277 insertions, 52 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index e216c7865d..4c305e1d60 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1716,17 +1716,6 @@        <key>Value</key>        <integer>131073</integer>      </map> -    <key>NearbyChatIsNotTornOff</key> -    <map> -      <key>Comment</key> -      <string>saving torn-off state of the nearby chat between sessions</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map>      <key>CloseChatOnReturn</key>      <map>        <key>Comment</key> @@ -4282,6 +4271,17 @@        <key>Value</key>        <integer>1</integer>      </map> +     <key>IMShowContentPanel</key> +    <map> +      <key>Comment</key> +      <string>Show Toolbar and Body Panels</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>IgnoreAllNotifications</key>      <map>        <key>Comment</key> diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 363713f2f4..47137c8de9 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -281,6 +281,17 @@        	<key>Value</key>        		<integer>2</integer>      	</map>     +    <key>NearbyChatIsNotTornOff</key> +    <map> +      <key>Comment</key> +      <string>saving torn-off state of the nearby chat between sessions</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>ShowFavoritesOnLogin</key>          <map>          <key>Comment</key> diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 1607a681c7..1954f098b6 100644 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -53,6 +53,7 @@  #include "llcallbacklist.h"  #include "llworld.h"  #include "llsdserialize.h" +#include "llviewerobjectlist.h"  //  // LLFloaterIMContainer @@ -1221,7 +1222,7 @@ bool LLFloaterIMContainer::enableContextMenuItem(const std::string& item, uuid_v  	}  	// Handle all other options -	if (("can_invite" == item) || ("can_chat_history" == item) || ("can_share" == item) || ("can_pay" == item) || ("can_zoom_in" == item)) +	if (("can_invite" == item) || ("can_chat_history" == item) || ("can_share" == item) || ("can_pay" == item))  	{  		// Those menu items are enable only if a single avatar is selected  		return is_single_select; @@ -1251,6 +1252,10 @@ bool LLFloaterIMContainer::enableContextMenuItem(const std::string& item, uuid_v      {          return LLAvatarActions::canCall();      } +	else if ("can_zoom_in" == item) +	{ +		return is_single_select && gObjectList.findObject(single_id); +	}      else if ("can_show_on_map" == item)      {          return (is_single_select ? (LLAvatarTracker::instance().isBuddyOnline(single_id) && is_agent_mappable(single_id)) || gAgent.isGodlike() : false); diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp index eb1a1f54ed..a593fd4732 100644 --- a/indra/newview/llfloaterimnearbychat.cpp +++ b/indra/newview/llfloaterimnearbychat.cpp @@ -275,7 +275,7 @@ void LLFloaterIMNearbyChat::onTearOffClicked()  	// see CHUI-170: Save torn-off state of the nearby chat between sessions  	BOOL in_the_multifloater = (BOOL)getHost(); -	gSavedSettings.setBOOL("NearbyChatIsNotTornOff", in_the_multifloater); +	gSavedPerAccountSettings.setBOOL("NearbyChatIsNotTornOff", in_the_multifloater);  } @@ -290,6 +290,7 @@ void LLFloaterIMNearbyChat::onOpen(const LLSD& key)  void LLFloaterIMNearbyChat::onClose(bool app_quitting)  {  	// Override LLFloaterIMSessionTab::onClose() so that Nearby Chat is not removed from the conversation floater +	LLFloaterIMSessionTab::restoreFloater();  	onClickCloseBtn();  } @@ -336,7 +337,7 @@ bool LLFloaterIMNearbyChat::isChatVisible() const  	if (im_box != NULL)  	{  		isVisible = -				isChatMultiTab() && gSavedSettings.getBOOL("NearbyChatIsNotTornOff")? +				isChatMultiTab() && gSavedPerAccountSettings.getBOOL("NearbyChatIsNotTornOff")?  						im_box->getVisible() && !im_box->isMinimized() :  						getVisible() && !isMinimized();  	} diff --git a/indra/newview/llfloaterimnearbychathandler.cpp b/indra/newview/llfloaterimnearbychathandler.cpp index 8870d54cd2..7afcf288ce 100644 --- a/indra/newview/llfloaterimnearbychathandler.cpp +++ b/indra/newview/llfloaterimnearbychathandler.cpp @@ -559,12 +559,14 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,      LLFloaterIMContainer* im_box = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"); -	if( nearby_chat->hasFocus()  +	if(( nearby_chat->hasFocus()          || im_box->hasFocus()  		|| ( chat_msg.mSourceType == CHAT_SOURCE_AGENT  			&& gSavedSettings.getBOOL("UseChatBubbles") )  		|| mChannel.isDead() -		|| !mChannel.get()->getShowToasts() ) // to prevent toasts in Do Not Disturb mode +		|| !mChannel.get()->getShowToasts() ) +		&& nearby_chat->isMessagePaneExpanded()) +		// to prevent toasts in Do Not Disturb mode  		return;//no need in toast if chat is visible or if bubble chat is enabled  	// arrange a channel on a screen @@ -606,7 +608,7 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,  		//Don't show nearby toast, if conversation is visible but not focused  		LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(LLUUID()); -		if (session_floater +		if (session_floater && session_floater->isMessagePaneExpanded()  		    && session_floater->isInVisibleChain() && !session_floater->isMinimized()  		    && !(session_floater->getHost() && session_floater->getHost()->isMinimized()))  		{ @@ -614,7 +616,7 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,  		}          //Will show toast when chat preference is set         -        if(gSavedSettings.getString("NotificationNearbyChatOptions") == "toast") +        if((gSavedSettings.getString("NotificationNearbyChatOptions") == "toast") || !session_floater->isMessagePaneExpanded())          {              // Add a nearby chat toast.              LLUUID id; diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index 50b2ed8c51..733678364e 100644 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -618,7 +618,7 @@ void LLFloaterIMSession::onClose(bool app_quitting)  	// Last change:  	// EXT-3516 X Button should end IM session, _ button should hide  	gIMMgr->leaveSession(mSessionID); - +	LLFloaterIMSessionTab::restoreFloater();  	// Clean up the conversation *after* the session has been ended  	LLFloaterIMSessionTab::onClose(app_quitting);  } diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index 9fd22b1537..cfd239c22f 100644 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -170,7 +170,7 @@ void LLFloaterIMSessionTab::addToHost(const LLUUID& session_id)  			conversp->setHostAttached(true);  			if (!conversp->isNearbyChat() -					|| gSavedSettings.getBOOL("NearbyChatIsNotTornOff")) +					|| gSavedPerAccountSettings.getBOOL("NearbyChatIsNotTornOff"))  			{  				floater_container->addFloater(conversp, false, LLTabContainer::RIGHT_OF_CURRENT);  			} @@ -194,19 +194,28 @@ BOOL LLFloaterIMSessionTab::postBuild()  {  	BOOL result; +	mBodyStack = getChild<LLLayoutStack>("main_stack"); + +  	mCloseBtn = getChild<LLButton>("close_btn");  	mCloseBtn->setCommitCallback(boost::bind(&LLFloater::onClickClose, this));  	mExpandCollapseBtn = getChild<LLButton>("expand_collapse_btn");  	mExpandCollapseBtn->setClickedCallback(boost::bind(&LLFloaterIMSessionTab::onSlide, this)); +	mExpandCollapseLineBtn = getChild<LLButton>("minz_btn"); +	mExpandCollapseLineBtn->setClickedCallback(boost::bind(&LLFloaterIMSessionTab::onCollapseToLine, this)); +  	mTearOffBtn = getChild<LLButton>("tear_off_btn");  	mTearOffBtn->setCommitCallback(boost::bind(&LLFloaterIMSessionTab::onTearOffClicked, this));  	mGearBtn = getChild<LLButton>("gear_btn");  	mParticipantListPanel = getChild<LLLayoutPanel>("speakers_list_panel"); -	 +	mToolbarPanel = getChild<LLLayoutPanel>("toolbar_panel"); +	mContentPanel = getChild<LLLayoutPanel>("body_panel"); +	mInputButtonPanel = getChild<LLLayoutPanel>("input_button_layout_panel"); +	mInputButtonPanel->setVisible(false);  	// Add a scroller for the folder (participant) view  	LLRect scroller_view_rect = mParticipantListPanel->getRect();  	scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom); @@ -233,7 +242,7 @@ BOOL LLFloaterIMSessionTab::postBuild()  	setOpenPositioning(LLFloaterEnums::POSITIONING_RELATIVE);  	mSaveRect = isNearbyChat() -					&&  !gSavedSettings.getBOOL("NearbyChatIsNotTornOff"); +					&&  !gSavedPerAccountSettings.getBOOL("NearbyChatIsNotTornOff");  	initRectControl();  	if (isChatMultiTab()) @@ -264,6 +273,8 @@ BOOL LLFloaterIMSessionTab::postBuild()  	mConversationsRoot->setFollowsAll();  	mConversationsRoot->addChild(mConversationsRoot->mStatusTextBox); +	setMessagePaneExpanded(true); +  	buildConversationViewParticipant();  	refreshConversation(); @@ -651,6 +662,7 @@ void LLFloaterIMSessionTab::updateHeaderAndToolbar()  	mParticipantListPanel->setVisible(is_participant_list_visible); +  	// Display collapse image (<<) if the floater is hosted  	// or if it is torn off but has an open control panel.  	bool is_expanded = is_not_torn_off || is_participant_list_visible; @@ -674,6 +686,7 @@ void LLFloaterIMSessionTab::updateHeaderAndToolbar()  	mTearOffBtn->setImageOverlay(getString(is_not_torn_off? "tear_off_icon" : "return_icon"));  	mTearOffBtn->setToolTip(getString(is_not_torn_off? "tooltip_to_separate_window" : "tooltip_to_main_window")); +  	mCloseBtn->setVisible(is_not_torn_off && !mIsNearbyChat);  	enableDisableCallBtn(); @@ -784,6 +797,65 @@ void LLFloaterIMSessionTab::onSlide(LLFloaterIMSessionTab* self)  	}  } +void LLFloaterIMSessionTab::onCollapseToLine(LLFloaterIMSessionTab* self) +{ +	LLFloaterIMContainer* host_floater = dynamic_cast<LLFloaterIMContainer*>(self->getHost()); +	if (!host_floater) +	{ +		if(self->mParticipantListPanel->getVisible()) +		{ +			onSlide(self); +		} + +		bool expand = self->isMessagePaneExpanded(); +		self->mExpandCollapseLineBtn->setImageOverlay(self->getString(expand ? "collapseline_icon" : "expandline_icon")); +		self->mContentPanel->setVisible(!expand); +		self->mToolbarPanel->setVisible(!expand); +		self->reshapeFloater(expand); +		self->setMessagePaneExpanded(!expand); + +	} +} + +void LLFloaterIMSessionTab::reshapeFloater(bool collapse) +{ +	LLRect floater_rect = getRect(); + +	if(collapse) +	{ +		mFloaterHeight = floater_rect.getHeight(); +		S32 height = mContentPanel->getRect().getHeight() + mToolbarPanel->getRect().getHeight(); +		floater_rect.mTop -= height; +		enableResizeCtrls(true, true, false); +	} +	else +	{ +		floater_rect.mTop = floater_rect.mBottom + mFloaterHeight; +		enableResizeCtrls(true, true, true); + +	} + +	setShape(floater_rect, true); +	mBodyStack->updateLayout(); + +} + +void LLFloaterIMSessionTab::restoreFloater() +{ +	if(!isMessagePaneExpanded()) +	{ +		mContentPanel->setVisible(true); +		mToolbarPanel->setVisible(true); +		LLRect floater_rect = getRect(); +		floater_rect.mTop = floater_rect.mBottom + mFloaterHeight; +		setShape(floater_rect, true); +		mBodyStack->updateLayout(); +		mExpandCollapseLineBtn->setImageOverlay(getString("expandline_icon")); +		setMessagePaneExpanded(true); +		enableResizeCtrls(true, true, true); +	} +} +  /*virtual*/  void LLFloaterIMSessionTab::onOpen(const LLSD& key)  { @@ -793,12 +865,15 @@ void LLFloaterIMSessionTab::onOpen(const LLSD& key)  		// Show the messages pane when opening a floater hosted in the Conversations  		host_floater->collapseMessagesPane(false);  	} + +	mInputButtonPanel->setVisible(isTornOff());  }  void LLFloaterIMSessionTab::onTearOffClicked()  { -    setFollows(isTornOff()? FOLLOWS_ALL : FOLLOWS_NONE); +	restoreFloater(); +	setFollows(isTornOff()? FOLLOWS_ALL : FOLLOWS_NONE);      mSaveRect = isTornOff();      initRectControl();  	LLFloater::onClickTearOff(this); @@ -813,7 +888,10 @@ void LLFloaterIMSessionTab::onTearOffClicked()  	else  	{  		container->selectConversation(mSessionID); +  	} +	mInputButtonPanel->setVisible(isTornOff()); +  	refreshConversation();  	updateGearBtn();  } diff --git a/indra/newview/llfloaterimsessiontab.h b/indra/newview/llfloaterimsessiontab.h index e8ae557412..e41f639037 100644 --- a/indra/newview/llfloaterimsessiontab.h +++ b/indra/newview/llfloaterimsessiontab.h @@ -98,6 +98,8 @@ public:  	LLConversationItem* getCurSelectedViewModelItem();  	void forceReshape();  	virtual BOOL handleKeyHere( KEY key, MASK mask ); +	bool isMessagePaneExpanded(){return mMessagePaneExpanded;} +	void setMessagePaneExpanded(bool expanded){mMessagePaneExpanded = expanded;}  protected: @@ -111,6 +113,9 @@ protected:  	bool onIMShowModesMenuItemCheck(const LLSD& userdata);  	bool onIMShowModesMenuItemEnable(const LLSD& userdata);  	static void onSlide(LLFloaterIMSessionTab *self); +	static void onCollapseToLine(LLFloaterIMSessionTab *self); +	void reshapeFloater(bool collapse); +	void restoreFloater();  	// refresh a visual state of the Call button  	void updateCallBtnState(bool callIsActive); @@ -138,15 +143,22 @@ protected:  	bool mIsNearbyChat;  	bool mIsP2PChat; + +	bool mMessagePaneExpanded;  	bool mIsParticipantListExpanded; +  	LLIMModel::LLIMSession* mSession;  	// Participants list: model and view  	LLConversationViewParticipant* createConversationViewParticipant(LLConversationItem* item);  	LLUUID mSessionID;  +	LLLayoutStack* mBodyStack;  	LLLayoutPanel* mParticipantListPanel;	// add the widgets to that see mConversationsListPanel +	LLLayoutPanel* mContentPanel; +	LLLayoutPanel* mToolbarPanel; +	LLLayoutPanel* mInputButtonPanel;  	LLParticipantList* getParticipantList();  	conversations_widgets_map mConversationsWidgets;  	LLConversationViewModel mConversationViewModel; @@ -158,11 +170,14 @@ protected:  	LLChatEntry* mInputEditor;  	int mInputEditorTopPad; // padding between input field and chat history +	LLButton* mExpandCollapseLineBtn;  	LLButton* mExpandCollapseBtn;  	LLButton* mTearOffBtn;  	LLButton* mCloseBtn;  	LLButton* mGearBtn; +	S32 mFloaterHeight; +  private:  	// Handling selection and contextual menu diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index fbb3bd4a8e..10e214bc90 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -199,13 +199,13 @@ void on_new_message(const LLSD& msg)      // execution of the action      LLFloaterIMContainer* im_box = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"); - -	if (im_box->isFrontmost() && im_box->getSelectedSession() == session_id) +	LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(session_id); +	 +	if (im_box->isFrontmost() && im_box->getSelectedSession() == session_id +		&& !(session_floater->getHost() ? im_box->isMinimized() : session_floater->isMinimized()))  	{  		return;  	} - -	LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(session_id);      //session floater not focused (visible or not)      bool session_floater_not_focused = session_floater && !session_floater->hasFocus(); @@ -226,17 +226,18 @@ void on_new_message(const LLSD& msg)              && !session_floater->isMinimized()              && !(session_floater->getHost() && session_floater->getHost()->isMinimized()); -    if ("toast" == action && !session_floater_is_open) +    bool conversation_floater_collapsed = !session_floater->isMessagePaneExpanded(); +    if (("toast" == action && !session_floater_is_open) || conversation_floater_collapsed)      {          //User is not focused on conversation containing the message -        if(session_floater_not_focused) +        if(session_floater_not_focused || conversation_floater_collapsed)          {          	if(!LLMuteList::getInstance()->isMuted(participant_id))          	{          		im_box->flashConversationItemWidget(session_id, true);          	}              //The conversation floater isn't focused/open -            if(conversation_floater_not_focused) +            if(conversation_floater_not_focused || conversation_floater_collapsed)              {              	if(!LLMuteList::getInstance()->isMuted(participant_id)                       && !gAgent.isDoNotDisturb()) @@ -286,9 +287,22 @@ void on_new_message(const LLSD& msg)  				//Surface conversations floater  				LLFloaterReg::showInstance("im_container");  				im_box->collapseMessagesPane(false); -				if (session_floater && session_floater->isMinimized()) +				if (session_floater)  				{ -					LLFloater::onClickMinimize(session_floater); +					if (session_floater->getHost()) +					{ +						if (NULL != im_box && im_box->isMinimized()) +						{ +							LLFloater::onClickMinimize(im_box); +						} +					} +					else +					{ +						if (session_floater->isMinimized()) +						{ +							LLFloater::onClickMinimize(session_floater); +						} +					}  				}  			} @@ -2637,7 +2651,7 @@ void LLIMMgr::addMessage(  	if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly"))  	{  		// Evaluate if we need to skip this message when that setting is true (default is false) -		LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(session_id); +		LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(new_session_id);  		skip_message = (LLAvatarTracker::instance().getBuddyInfo(other_participant_id) == NULL);	// Skip non friends...  		skip_message &= !session->isGroupSessionType();			// Do not skip group chats...  		skip_message &= !(other_participant_id == gAgentID);	// You are your best friend... Don't skip yourself @@ -2653,7 +2667,7 @@ void LLIMMgr::addMessage(      {          LLFloaterReg::showInstance("im_container");  	    LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container")-> -	    		flashConversationItemWidget(session_id, true); +	    		flashConversationItemWidget(new_session_id, true);      }  } diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index aa14b74869..49f7361c4a 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -40,6 +40,7 @@  #include "lllogchat.h"  #include "llviewermenu.h"			// for gMenuHolder  #include "llconversationmodel.h" +#include "llviewerobjectlist.h"  namespace LLPanelPeopleMenus  { @@ -212,6 +213,12 @@ bool PeopleContextMenu::enableContextMenuItem(const LLSD& userdata)  	{  		return LLAvatarActions::canCall();  	} +	else if (item == std::string("can_zoom_in")) +	{ +		const LLUUID& id = mUUIDs.front(); + +		return gObjectList.findObject(id); +	}  	else if (item == std::string("can_show_on_map"))  	{  		const LLUUID& id = mUUIDs.front(); @@ -228,8 +235,7 @@ bool PeopleContextMenu::enableContextMenuItem(const LLSD& userdata)  		return LLLogChat::isTranscriptExist(mUUIDs.front());  	}  	else if (item == std::string("can_im") || item == std::string("can_invite") || -	         item == std::string("can_share") || item == std::string("can_pay") || -			 item == std::string("can_zoom_in")) +	         item == std::string("can_share") || item == std::string("can_pay"))  	{  		return true;  	} diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index a07d7e4855..93c9cb02cb 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -171,6 +171,8 @@ with the same filename but different name    <texture name="Conv_toolbar_call_log" file_name="icons/Conv_toolbar_call_log.png" preload="false" />    <texture name="Conv_toolbar_close" file_name="icons/Conv_toolbar_close.png" preload="false" />    <texture name="Conv_toolbar_collapse" file_name="icons/Conv_toolbar_collapse.png" preload="false" /> +  <texture name="Conv_collapse_to_one_line" file_name="icons/collapse_to_one_line.png" preload="false" /> +  <texture name="Conv_expand_one_line" file_name="icons/expand_one_liner.png" preload="false" />    <texture name="Conv_toolbar_expand" file_name="icons/Conv_toolbar_expand.png" preload="false" />    <texture name="Conv_toolbar_hang_up" file_name="icons/Conv_toolbar_hang_up.png" preload="false" />    <texture name="Conv_toolbar_open_call" file_name="icons/Conv_toolbar_open_call.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 8f0574177f..1a9199f9e7 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -20,6 +20,12 @@      <floater.string name="call_btn_start">Conv_toolbar_open_call</floater.string>      <floater.string name="call_btn_stop">Conv_toolbar_hang_up</floater.string>      <floater.string +     name="collapseline_icon" +     value="Conv_collapse_to_one_line"/> +    <floater.string +     name="expandline_icon" +     value="Conv_expand_one_line"/> +    <floater.string       name="collapse_icon"       value="Conv_toolbar_collapse"/>      <floater.string @@ -65,14 +71,28 @@          top="0"          left="0"          height="355" -        width="394">  -     <panel +        width="394"> +   <layout_stack +   animate="true"  +   default_tab_group="2" +   follows="all" +  height="355" +  width="394" +  layout="topleft" +  orientation="vertical" +   name="main_stack" +  tab_group="1" +  top="0" +  left="0"> +   +     <layout_panel           follows="left|top|right"           layout="topleft"           name="toolbar_panel"           top="0"           left="0"           height="35" +         min_height="35"           width="394">                        <menu_button                   menu_filename="menu_im_session_showmodes.xml" @@ -180,12 +200,19 @@                   left_pad="5"                   name="tear_off_btn"                   width="31" /> -     </panel> +     </layout_panel> +     <layout_panel +      name="body_panel" +      follows="all" +      width="394"  +      height="235"  +      user_resize="false" +      auto_resize="true">    <layout_stack     animate="true"      default_tab_group="2"    follows="all" -  height="310" +  height="275"    width="394"    layout="topleft"    orientation="horizontal" @@ -198,7 +225,7 @@        follows="all"        min_width="115"        width="150"  -      height="310"  +      height="275"         user_resize="true"        auto_resize="true">        </layout_panel> @@ -208,7 +235,7 @@         tab_group="2"         follows="all"         top="0" -       height="310" +       height="275"  	   width="244"         layout="topleft"         user_resize="true" @@ -221,13 +248,13 @@           follows="all"           layout="topleft"           visible="true" -         height="275" +         height="240"           width="244">           <layout_stack            animate="true"             default_tab_group="2"            follows="all" -          height="275" +          height="240"            width="244"            layout="topleft"            visible="true" @@ -258,7 +285,7 @@                   width="230" />              </layout_panel>              <layout_panel -             height="248" +             height="233"               width="210"               layout="topleft"               follows="all" @@ -273,7 +300,7 @@                  font="SansSerifSmall"                  follows="all"                  visible="true" -                height="240" +                height="225"                  name="chat_history"                  parse_highlights="true"                  parse_urls="true" @@ -283,26 +310,90 @@              </layout_panel>             </layout_stack>             </panel> -            <chat_editor +    </layout_panel> +  </layout_stack> +  </layout_panel> +  <layout_panel +             height="35" +             layout="topleft" +             follows="left|right|bottom" +             left_delta="0" +             right="0" +             top_delta="0"               bottom="0" +             visible="true" +             user_resize="false" +             auto_resize="false" +             name="chat_layout_panel"> +   <layout_stack +   animate="true"  +   default_tab_group="2" +   follows="all" +   height="35" +   right="0" +   layout="topleft" +   orientation="horizontal" +   name="input_panels" +   top_pad="0" +   left="0"> +     <layout_panel +             height="35" +             layout="topleft" +             follows="left|right|bottom" +             left_delta="0" +             top_delta="0" +             bottom="0" +             visible="true" +             user_resize="false" +             auto_resize="true" +             name="input_editor_layout_panel"> +              <chat_editor +             top="6"               expand_lines_count="5"               follows="left|right|bottom" -	           font="SansSerifSmall" +               font="SansSerifSmall"               visible="true"               height="20"               is_expandable="true"               label="To"               text_tentative_color="TextFgTentativeColor" -             layout="bottomleft" +             layout="topleft"               name="chat_editor"               max_length="1023"               spellcheck="true"               tab_group="3" -             width="220" -             left="10" +             width="160" +             left="5" +             right="-5"               wrap="true">              </chat_editor> -    </layout_panel> +            </layout_panel> +            <layout_panel              +             height="35" +             layout="topleft" +             follows="left|right|bottom" +             left_delta="0" +             top_delta="0" +             bottom="0" +             width="35" +             visible="true" +             user_resize="false" +             auto_resize="false" +             name="input_button_layout_panel"> +            <button +                 follows="left|right|bottom" +                 height="25" +                 image_hover_unselected="Toolbar_Middle_Over" +                 image_overlay="Conv_expand_one_line" +                 image_selected="Toolbar_Middle_Selected" +                 image_unselected="Toolbar_Middle_Off" +                 layout="topleft" +                 name="minz_btn" +                 tool_tip="Shows/hides message panel" +                 width="28"/> +           </layout_panel> +  </layout_stack> +  </layout_panel>    </layout_stack>      </view>  </floater> | 
