diff options
| author | mberezhnoy <mberezhnoy@productengine.com> | 2013-04-19 17:50:48 +0300 | 
|---|---|---|
| committer | mberezhnoy <mberezhnoy@productengine.com> | 2013-04-19 17:50:48 +0300 | 
| commit | cfd132a0def48a3dff62aebc480feeb4639babea (patch) | |
| tree | 6d57e930162bf4d51652a07d18e68c4202e38734 | |
| parent | 6a339649844a6e016e35e440004a61d07dd490e6 (diff) | |
| parent | 09b70845e52f75a33c608062db6516784b31fa72 (diff) | |
merge
23 files changed, 421 insertions, 188 deletions
| diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 09e27a264a..d97569839a 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -507,22 +507,11 @@ LLFloater::~LLFloater()  {  	LLFloaterReg::removeInstance(mInstanceName, mKey); -//	delete mNotificationContext; -//	mNotificationContext = NULL; - -	//// am I not hosted by another floater? -	//if (mHostHandle.isDead()) -	//{ -	//	LLFloaterView* parent = (LLFloaterView*) getParent(); - -	//	if( parent ) -	//	{ -	//		parent->removeChild( this ); -	//	} -	//} - -	// Just in case we might still have focus here, release it. -	releaseFocus(); +	if( gFocusMgr.childHasKeyboardFocus(this)) +	{ +		// Just in case we might still have focus here, release it. +		releaseFocus(); +	}  	// This is important so that floaters with persistent rects (i.e., those  	// created with rect control rather than an LLRect) are restored in their @@ -2788,7 +2777,7 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out  	}  	// move window fully onscreen -	if (floater->translateIntoRect( getSnapRect(), allow_partial_outside ? FLOATER_MIN_VISIBLE_PIXELS : S32_MAX )) +	if (floater->translateIntoRect( gFloaterView->getRect(), allow_partial_outside ? FLOATER_MIN_VISIBLE_PIXELS : S32_MAX ))  	{  		floater->clearSnapTarget();  	} @@ -3258,6 +3247,11 @@ bool LLFloater::isShown() const      return ! isMinimized() && isInVisibleChain();  } +bool LLFloater::isDetachedAndNotMinimized() +{ +	return !getHost() && !isMinimized(); +} +  /* static */  bool LLFloater::isShown(const LLFloater* floater)  { diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 4dba1e645f..26ac4a98ad 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -238,6 +238,7 @@ public:  	void			center();  	LLMultiFloater* getHost(); +	bool isDetachedAndNotMinimized();  	void			applyTitle();  	std::string		getCurrentTitle() const; diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index e642883991..c89c0203b4 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -214,8 +214,15 @@ LLLayoutStack::Params::Params()  	open_time_constant("open_time_constant", 0.02f),  	close_time_constant("close_time_constant", 0.03f),  	resize_bar_overlap("resize_bar_overlap", 1), -	border_size("border_size", LLCachedControl<S32>(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0)) -{} +	border_size("border_size", LLCachedControl<S32>(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0)), +	show_drag_handle("show_drag_handle", false), +	drag_handle_first_indent("drag_handle_first_indent", 0), +	drag_handle_second_indent("drag_handle_second_indent", 0), +	drag_handle_thickness("drag_handle_thickness", 5), +	drag_handle_shift("drag_handle_shift", 2) +{ +	addSynonym(border_size, "drag_handle_gap"); +}  LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)   :	LLView(p), @@ -227,8 +234,14 @@ LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)  	mClip(p.clip),  	mOpenTimeConstant(p.open_time_constant),  	mCloseTimeConstant(p.close_time_constant), -	mResizeBarOverlap(p.resize_bar_overlap) -{} +	mResizeBarOverlap(p.resize_bar_overlap), +	mShowDragHandle(p.show_drag_handle), +	mDragHandleFirstIndent(p.drag_handle_first_indent), +	mDragHandleSecondIndent(p.drag_handle_second_indent), +	mDragHandleThickness(p.drag_handle_thickness), +	mDragHandleShift(p.drag_handle_shift) +{ +}  LLLayoutStack::~LLLayoutStack()  { @@ -262,6 +275,26 @@ void LLLayoutStack::draw()  			drawChild(panelp, 0, 0, !clip_rect.isEmpty());  		}  	} + +	const LLView::child_list_t * child_listp = getChildList(); +	BOOST_FOREACH(LLView * childp, * child_listp) +	{ +		LLResizeBar * resize_barp = dynamic_cast<LLResizeBar*>(childp); +		if (resize_barp && resize_barp->isShowDragHandle() && resize_barp->getVisible() && resize_barp->getRect().isValid()) +		{ +			LLRect screen_rect = resize_barp->calcScreenRect(); +			if (LLUI::getRootView()->getLocalRect().overlaps(screen_rect) && LLUI::sDirtyRect.overlaps(screen_rect)) +			{ +				LLUI::pushMatrix(); +				{ +					const LLRect& rb_rect(resize_barp->getRect()); +					LLUI::translate(rb_rect.mLeft, rb_rect.mBottom); +					resize_barp->draw(); +				} +				LLUI::popMatrix(); +			} +		} +	}  }  void LLLayoutStack::removeChild(LLView* view) @@ -390,7 +423,6 @@ void LLLayoutStack::updateLayout()  	BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)  	{  		F32 panel_dim = llmax(panelp->getExpandedMinDim(), panelp->mTargetDim); -		F32 panel_visible_dim = panelp->getVisibleDim();  		LLRect panel_rect;  		if (mOrientation == HORIZONTAL) @@ -407,27 +439,61 @@ void LLLayoutStack::updateLayout()  										getRect().getWidth(),  										llround(panel_dim));  		} -		panelp->setIgnoreReshape(true); -		panelp->setShape(panel_rect); -		panelp->setIgnoreReshape(false);  		LLRect resize_bar_rect(panel_rect); - +		LLResizeBar * resize_barp = panelp->getResizeBar(); +		bool show_drag_handle = resize_barp->isShowDragHandle();  		F32 panel_spacing = (F32)mPanelSpacing * panelp->getVisibleAmount(); +		F32 panel_visible_dim = panelp->getVisibleDim(); +		S32 panel_spacing_round = (S32)(llround(panel_spacing)); +  		if (mOrientation == HORIZONTAL)  		{ -			resize_bar_rect.mLeft = panel_rect.mRight - mResizeBarOverlap; -			resize_bar_rect.mRight = panel_rect.mRight + (S32)(llround(panel_spacing)) + mResizeBarOverlap; -  			cur_pos += panel_visible_dim + panel_spacing; + +			if (show_drag_handle && panel_spacing_round > mDragHandleThickness) +			{ +				resize_bar_rect.mLeft = panel_rect.mRight + mDragHandleShift; +				resize_bar_rect.mRight = resize_bar_rect.mLeft + mDragHandleThickness; +			} +			else +			{ +				resize_bar_rect.mLeft = panel_rect.mRight - mResizeBarOverlap; +				resize_bar_rect.mRight = panel_rect.mRight + panel_spacing_round + mResizeBarOverlap; +			} + +			if (show_drag_handle) +			{ +				resize_bar_rect.mBottom += mDragHandleSecondIndent; +				resize_bar_rect.mTop -= mDragHandleFirstIndent; +			} +  		}  		else //VERTICAL  		{ -			resize_bar_rect.mTop = panel_rect.mBottom + mResizeBarOverlap; -			resize_bar_rect.mBottom = panel_rect.mBottom - (S32)(llround(panel_spacing)) - mResizeBarOverlap; -  			cur_pos -= panel_visible_dim + panel_spacing; + +			if (show_drag_handle && panel_spacing_round > mDragHandleThickness) +			{ +				resize_bar_rect.mTop = panel_rect.mBottom - mDragHandleShift; +				resize_bar_rect.mBottom = resize_bar_rect.mTop - mDragHandleThickness; +			} +			else +			{ +				resize_bar_rect.mTop = panel_rect.mBottom + mResizeBarOverlap; +				resize_bar_rect.mBottom = panel_rect.mBottom - panel_spacing_round - mResizeBarOverlap; +			} + +			if (show_drag_handle) +			{ +				resize_bar_rect.mLeft += mDragHandleFirstIndent; +				resize_bar_rect.mRight -= mDragHandleSecondIndent; +			}  		} + +		panelp->setIgnoreReshape(true); +		panelp->setShape(panel_rect); +		panelp->setIgnoreReshape(false);  		panelp->mResizeBar->setShape(resize_bar_rect);  	} @@ -475,15 +541,13 @@ void LLLayoutStack::createResizeBar(LLLayoutPanel* panelp)  	{  		if (lp->mResizeBar == NULL)  		{ -			LLResizeBar::Side side = (mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM; -			LLRect resize_bar_rect = getRect(); -  			LLResizeBar::Params resize_params;  			resize_params.name("resize");  			resize_params.resizing_view(lp);  			resize_params.min_size(lp->getRelevantMinDim()); -			resize_params.side(side); +			resize_params.side((mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM);  			resize_params.snapping_enabled(false); +			resize_params.show_drag_handle(mShowDragHandle);  			LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params);  			lp->mResizeBar = resize_bar;  			LLView::addChild(resize_bar, 0); @@ -865,3 +929,4 @@ void LLLayoutStack::updateResizeBarLimits()  		previous_visible_panelp = visible_panelp;  	}  } + diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index 02c664f1a0..b570974bd6 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -62,6 +62,11 @@ public:  		Optional<F32>			open_time_constant,  								close_time_constant;  		Optional<S32>			resize_bar_overlap; +		Optional<bool>			show_drag_handle; +		Optional<S32>			drag_handle_first_indent; +		Optional<S32>			drag_handle_second_indent; +		Optional<S32>			drag_handle_thickness; +		Optional<S32>			drag_handle_shift;  		Params();  	}; @@ -126,6 +131,11 @@ private:  	F32  mCloseTimeConstant;  	bool mNeedsLayout;  	S32  mResizeBarOverlap; +	bool mShowDragHandle; +	S32  mDragHandleFirstIndent; +	S32  mDragHandleSecondIndent; +	S32  mDragHandleThickness; +	S32  mDragHandleShift;  }; // end class LLLayoutStack diff --git a/indra/llui/llresizebar.cpp b/indra/llui/llresizebar.cpp index 15e56cbfe5..e67b22c977 100644 --- a/indra/llui/llresizebar.cpp +++ b/indra/llui/llresizebar.cpp @@ -28,14 +28,53 @@  #include "llresizebar.h" +#include "lllocalcliprect.h"  #include "llmath.h"  #include "llui.h"  #include "llmenugl.h"  #include "llfocusmgr.h"  #include "llwindow.h" +class LLImagePanel : public LLPanel +{ +public: +	struct Params :	public LLInitParam::Block<Params, LLPanel::Params> +	{ +		Optional<bool> horizontal; +		Params() : horizontal("horizontal", false) {} +	}; +	LLImagePanel(const Params& p) : LLPanel(p), mHorizontal(p.horizontal) {} +	virtual ~LLImagePanel() {} + +	void draw() +	{ +		const LLRect& parent_rect = getParent()->getRect(); +		const LLRect& rect = getRect(); +		LLRect clip_rect( -rect.mLeft, parent_rect.getHeight() - rect.mBottom - 2 +						 , parent_rect.getWidth() - rect.mLeft - (mHorizontal ? 2 : 0), -rect.mBottom); +		LLLocalClipRect clip(clip_rect); +		LLPanel::draw(); +	} + +private: +	bool mHorizontal; +}; + +static LLDefaultChildRegistry::Register<LLImagePanel> t1("resize_bar_image_panel"); + +LLResizeBar::Params::Params() +:	max_size("max_size", S32_MAX), +	snapping_enabled("snapping_enabled", true), +	resizing_view("resizing_view"), +	side("side"), +	allow_double_click_snapping("allow_double_click_snapping", true), +	show_drag_handle("show_drag_handle", false) +{ +	name = "resize_bar"; +} +  LLResizeBar::LLResizeBar(const LLResizeBar::Params& p) -:	LLView(p), +:	LLPanel(p),  	mDragLastScreenX( 0 ),  	mDragLastScreenY( 0 ),  	mLastMouseScreenX( 0 ), @@ -46,7 +85,9 @@ LLResizeBar::LLResizeBar(const LLResizeBar::Params& p)  	mSnappingEnabled(p.snapping_enabled),  	mAllowDoubleClickSnapping(p.allow_double_click_snapping),  	mResizingView(p.resizing_view), -	mResizeListener(NULL) +	mResizeListener(NULL), +	mShowDragHandle(p.show_drag_handle), +	mImagePanel(NULL)  {  	setFollowsNone();  	// set up some generically good follow code. @@ -75,8 +116,37 @@ LLResizeBar::LLResizeBar(const LLResizeBar::Params& p)  	default:  		break;  	} + +	if (mShowDragHandle) +	{ +		LLViewBorder::Params border_params; +		border_params.border_thickness = 1; +		border_params.highlight_light_color = LLUIColorTable::instance().getColor("ResizebarBorderLight"); +		border_params.shadow_dark_color = LLUIColorTable::instance().getColor("ResizebarBorderDark"); + +		addBorder(border_params); +		setBorderVisible(TRUE); + +		LLImagePanel::Params image_panel; +		mDragHandleImage = LLUI::getUIImage(LLResizeBar::RIGHT == mSide ? "Vertical Drag Handle" : "Horizontal Drag Handle"); +		image_panel.bg_alpha_image = mDragHandleImage; +		image_panel.background_visible = true; +		image_panel.horizontal = (LLResizeBar::BOTTOM == mSide); +		mImagePanel = LLUICtrlFactory::create<LLImagePanel>(image_panel); +		setImagePanel(mImagePanel); +	}  } +BOOL LLResizeBar::postBuild() +{ +	if (mShowDragHandle) +	{ +		setBackgroundVisible(TRUE); +		setTransparentColor(LLUIColorTable::instance().getColor("ResizebarBody")); +	} + +	return LLPanel::postBuild(); +}  BOOL LLResizeBar::handleMouseDown(S32 x, S32 y, MASK mask)  { @@ -342,3 +412,39 @@ BOOL LLResizeBar::handleDoubleClick(S32 x, S32 y, MASK mask)  	return TRUE;  } +void LLResizeBar::setImagePanel(LLPanel * panelp) +{ +	const LLView::child_list_t * children = getChildList(); +	if (getChildCount() == 2) +	{ +		LLPanel * image_panelp = dynamic_cast<LLPanel*>(children->back()); +		if (image_panelp) +		{ +			removeChild(image_panelp); +			delete image_panelp; +		} +	} + +	addChild(panelp); +	sendChildToBack(panelp); +} + +LLPanel * LLResizeBar::getImagePanel() const +{ +	return getChildCount() > 0 ? (LLPanel *)getChildList()->back() : NULL; +} + +void LLResizeBar::draw() +{ +	if (mShowDragHandle) +	{ +		S32 image_width = mDragHandleImage->getTextureWidth(); +		S32 image_height = mDragHandleImage->getTextureHeight(); +		const LLRect& panel_rect = getRect(); +		S32 image_left = (panel_rect.getWidth() - image_width) / 2 - 1; +		S32 image_bottom = (panel_rect.getHeight() - image_height) / 2; +		mImagePanel->setRect(LLRect(image_left, image_bottom + image_height, image_left + image_width, image_bottom)); +	} + +	LLPanel::draw(); +} diff --git a/indra/llui/llresizebar.h b/indra/llui/llresizebar.h index 8190a95a71..bcf8ea0b40 100644 --- a/indra/llui/llresizebar.h +++ b/indra/llui/llresizebar.h @@ -27,15 +27,14 @@  #ifndef LL_RESIZEBAR_H  #define LL_RESIZEBAR_H -#include "llview.h" -#include "llcoord.h" +#include "llpanel.h" -class LLResizeBar : public LLView +class LLResizeBar : public LLPanel  {  public:  	enum Side { LEFT, TOP, RIGHT, BOTTOM }; -	struct Params : public LLInitParam::Block<Params, LLView::Params> +	struct Params : public LLInitParam::Block<Params, LLPanel::Params>  	{  		Mandatory<LLView*> resizing_view;  		Mandatory<Side>	side; @@ -44,24 +43,19 @@ public:  		Optional<S32>	max_size;  		Optional<bool>	snapping_enabled;  		Optional<bool>	allow_double_click_snapping; +		Optional<bool>	show_drag_handle; -		Params() -		:	max_size("max_size", S32_MAX), -			snapping_enabled("snapping_enabled", true), -			resizing_view("resizing_view"), -			side("side"), -			allow_double_click_snapping("allow_double_click_snapping", true) -		{ -			name = "resize_bar"; -		} +		Params();  	};  protected:  	LLResizeBar(const LLResizeBar::Params& p);  	friend class LLUICtrlFactory; + +	/*virtual*/ BOOL postBuild();  public: -//	virtual void	draw();  No appearance +	virtual void	draw();  	virtual BOOL	handleHover(S32 x, S32 y, MASK mask);  	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask);  	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask); @@ -72,20 +66,26 @@ public:  	void			setAllowDoubleClickSnapping(BOOL allow) { mAllowDoubleClickSnapping = allow; }  	bool			canResize() { return getEnabled() && mMaxSize > mMinSize; }  	void            setResizeListener(boost::function<void(void*)> listener) {mResizeListener = listener;} +	BOOL			isShowDragHandle() const { return mShowDragHandle; } +	void			setImagePanel(LLPanel * panelp); +	LLPanel *		getImagePanel() const;  private: -	S32				mDragLastScreenX; -	S32				mDragLastScreenY; -	S32				mLastMouseScreenX; -	S32				mLastMouseScreenY; -	LLCoordGL		mLastMouseDir; -	S32				mMinSize; -	S32				mMaxSize; -	const Side		mSide; -	BOOL			mSnappingEnabled; -	BOOL			mAllowDoubleClickSnapping; -	LLView*			mResizingView; -	boost::function<void(void*)>  mResizeListener; +	S32								mDragLastScreenX; +	S32								mDragLastScreenY; +	S32								mLastMouseScreenX; +	S32								mLastMouseScreenY; +	LLCoordGL						mLastMouseDir; +	S32								mMinSize; +	S32								mMaxSize; +	const Side						mSide; +	BOOL							mSnappingEnabled; +	BOOL							mAllowDoubleClickSnapping; +	BOOL							mShowDragHandle; +	LLView*							mResizingView; +	boost::function<void(void*)>	mResizeListener; +	LLPointer<LLUIImage>			mDragHandleImage; +	LLPanel *						mImagePanel;  };  #endif  // LL_RESIZEBAR_H diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index a815cfc176..def1277ba7 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -652,6 +652,10 @@ void LLTextBase::drawText()  			mSpellCheckEnd = end;  		}  	} +	else +	{ +		mMisspellRanges.clear(); +	}  	LLTextSegmentPtr cur_segment = *seg_iter; diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 094d502078..e0ab70bac7 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -45,6 +45,7 @@  #include "llenvmanager.h"  #include "llfirstuse.h"  #include "llfloatercamera.h" +#include "llfloaterimcontainer.h"  #include "llfloaterreg.h"  #include "llfloatertools.h"  #include "llgroupactions.h" @@ -90,6 +91,7 @@  #include "llworld.h"  #include "llworldmap.h"  #include "stringize.h" +#include "boost/foreach.hpp"  using namespace LLVOAvatarDefines; @@ -2002,7 +2004,16 @@ void LLAgent::endAnimationUpdateUI()  			{  				skip_list.insert(LLFloaterReg::findInstance("mini_map"));  			} -		 + +			LLFloaterIMContainer* im_box = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"); +			LLFloaterIMContainer::floater_list_t conversations; +			im_box->getDetachedConversationFloaters(conversations); +			BOOST_FOREACH(LLFloater* conversation, conversations) +			{ +				llinfos << "skip_list.insert(session_floater): " << conversation->getTitle() << llendl; +				skip_list.insert(conversation); +			} +  			gFloaterView->popVisibleAll(skip_list);  #endif  			mViewsPushed = FALSE; diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index b6c53e5e30..911e14bcd5 100755 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -340,16 +340,20 @@ void LLConversationViewSession::setVisibleIfDetached(BOOL visible)  {  	// Do this only if the conversation floater has been torn off (i.e. no multi floater host) and is not minimized  	// Note: minimized dockable floaters are brought to front hence unminimized when made visible and we don't want that here -	LLFolderViewModelItem* item = mViewModelItem; -	LLUUID session_uuid = dynamic_cast<LLConversationItem*>(item)->getUUID(); -	LLFloater* session_floater = LLFloaterIMSessionTab::getConversation(session_uuid); -	 -	if (session_floater && !session_floater->getHost() && !session_floater->isMinimized()) +	LLFloater* session_floater = getSessionFloater(); +	if (session_floater && session_floater->isDetachedAndNotMinimized())  	{  		session_floater->setVisible(visible);  	}  } +LLFloater* LLConversationViewSession::getSessionFloater() +{ +	LLFolderViewModelItem* item = mViewModelItem; +	LLUUID session_uuid = dynamic_cast<LLConversationItem*>(item)->getUUID(); +	return LLFloaterIMSessionTab::getConversation(session_uuid); +} +  LLConversationViewParticipant* LLConversationViewSession::findParticipant(const LLUUID& participant_id)  {  	// This is *not* a general tree parsing algorithm. We search only in the mItems list diff --git a/indra/newview/llconversationview.h b/indra/newview/llconversationview.h index 3eb2e63792..7e432804d0 100755 --- a/indra/newview/llconversationview.h +++ b/indra/newview/llconversationview.h @@ -87,6 +87,8 @@ public:  	/*virtual*/ void setFlashState(bool flash_state); +	LLFloater* getSessionFloater(); +  private:  	void onCurrentVoiceSessionChanged(const LLUUID& session_id); diff --git a/indra/newview/lldonotdisturbnotificationstorage.cpp b/indra/newview/lldonotdisturbnotificationstorage.cpp index 82affcf068..1cb650e4ea 100644 --- a/indra/newview/lldonotdisturbnotificationstorage.cpp +++ b/indra/newview/lldonotdisturbnotificationstorage.cpp @@ -215,7 +215,8 @@ void LLDoNotDisturbNotificationStorage::loadNotifications()          LLFloaterReg::showInstance("im_container");      } -	if(group_ad_hoc_toast_exists) +    bool isConversationLoggingAllowed = gSavedPerAccountSettings.getS32("KeepConversationLogTranscripts") > 0; +	if(group_ad_hoc_toast_exists && isConversationLoggingAllowed)  	{  		LLFloaterReg::showInstance("conversation");  	} diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 29a6060b0e..31bad41773 100644 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -54,6 +54,7 @@  #include "llworld.h"  #include "llsdserialize.h"  #include "llviewerobjectlist.h" +#include "boost/foreach.hpp"  //  // LLFloaterIMContainer @@ -660,6 +661,23 @@ void LLFloaterIMContainer::setVisible(BOOL visible)  	LLMultiFloater::setVisible(visible);  } +void LLFloaterIMContainer::getDetachedConversationFloaters(floater_list_t& floaters) +{ +	typedef conversations_widgets_map::value_type conv_pair; +	BOOST_FOREACH(conv_pair item, mConversationsWidgets) +	{ +		LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(item.second); +		if (widget) +		{ +			LLFloater* session_floater = widget->getSessionFloater(); +			if (session_floater && session_floater->isDetachedAndNotMinimized()) +			{ +				floaters.push_back(session_floater); +			} +		} +	} +} +  void LLFloaterIMContainer::setVisibleAndFrontmost(BOOL take_focus, const LLSD& key)  {  	LLMultiFloater::setVisibleAndFrontmost(take_focus, key); @@ -799,15 +817,12 @@ void LLFloaterIMContainer::assignResizeLimits()  	bool is_conv_pane_expanded = !mConversationsPane->isCollapsed();  	bool is_msg_pane_expanded = !mMessagesPane->isCollapsed(); -	// With two panels visible number of borders is three, because the borders -	// between the panels are merged into one -    S32 number_of_visible_borders = llmin((is_conv_pane_expanded? 2 : 0) + (is_msg_pane_expanded? 2 : 0), 3); -    S32 summary_width_of_visible_borders = number_of_visible_borders * LLPANEL_BORDER_WIDTH; -	S32 conv_pane_target_width = is_conv_pane_expanded? -			(is_msg_pane_expanded? -					mConversationsPane->getRect().getWidth() -					: mConversationsPane->getExpandedMinDim()) -			: mConversationsPane->getMinDim(); +    S32 summary_width_of_visible_borders = (is_msg_pane_expanded ? mConversationsStack->getPanelSpacing() : 0) + 1; + +	S32 conv_pane_target_width = is_conv_pane_expanded +		? ( is_msg_pane_expanded?mConversationsPane->getRect().getWidth():mConversationsPane->getExpandedMinDim() ) +		: mConversationsPane->getMinDim(); +  	S32 msg_pane_min_width  = is_msg_pane_expanded ? mMessagesPane->getExpandedMinDim() : 0;  	S32 new_min_width = conv_pane_target_width + msg_pane_min_width + summary_width_of_visible_borders; @@ -1947,23 +1962,28 @@ bool LLFloaterIMContainer::isScrolledOutOfSight(LLConversationViewSession* conve  BOOL LLFloaterIMContainer::handleKeyHere(KEY key, MASK mask )  { +	BOOL handled = FALSE; +  	if(mask == MASK_ALT)  	{  		if (KEY_RETURN == key )  		{  			expandConversation(); +			handled = TRUE;  		}  		if ((KEY_DOWN == key ) || (KEY_RIGHT == key))  		{  			selectNextorPreviousConversation(true); +			handled = TRUE;  		}  		if ((KEY_UP == key) || (KEY_LEFT == key))  		{  			selectNextorPreviousConversation(false); +			handled = TRUE;  		}  	} -	return TRUE; +	return handled;  }  bool LLFloaterIMContainer::selectAdjacentConversation(bool focus_selected) diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h index 060b81c603..ddcd1e4f7c 100644 --- a/indra/newview/llfloaterimcontainer.h +++ b/indra/newview/llfloaterimcontainer.h @@ -195,6 +195,8 @@ public:  	bool isScrolledOutOfSight(LLConversationViewSession* conversation_item_widget);  	boost::signals2::connection mMicroChangedSignal;  	S32 getConversationListItemSize() { return mConversationsWidgets.size(); } +	typedef std::list<LLFloater*> floater_list_t; +	void getDetachedConversationFloaters(floater_list_t& floaters);  private:  	LLConversationViewSession* createConversationItemWidget(LLConversationItem* item); diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp index 266b5b20ee..7e472466ed 100644 --- a/indra/newview/llfloaterimnearbychat.cpp +++ b/indra/newview/llfloaterimnearbychat.cpp @@ -568,7 +568,10 @@ void LLFloaterIMNearbyChat::sendChat( EChatType type )  			if (0 == channel)  			{  				// discard returned "found" boolean -				LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text); +				if(!LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text)) +				{ +					utf8_revised_text = utf8text; +				}  			}  			else  			{ @@ -582,7 +585,6 @@ void LLFloaterIMNearbyChat::sendChat( EChatType type )  			if (!utf8_revised_text.empty())  			{  				// Chat with animation -				utf8_revised_text = utf8text;  				sendChatFromViewer(utf8_revised_text, type, TRUE);  			}  		} diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index edc25a7d7e..6ed04f8716 100644 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -469,7 +469,10 @@ void LLFloaterIMSession::addP2PSessionParticipants(const LLSD& notification, con  	temp_ids.insert(temp_ids.end(), uuids.begin(), uuids.end());  	// then we can close the current session -	onClose(false); +	if(findInstance(mSessionID)) +	{ +		onClose(false); +	}  	// we start a new session so reset the initialization flag  	mSessionInitialized = false; diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index ce6e639305..4833484952 100644 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -212,7 +212,7 @@ void LLFloaterIMSessionTab::assignResizeLimits()  	mRightPartPanel->setIgnoreReshape(is_participants_pane_collapsed);      S32 participants_pane_target_width = is_participants_pane_collapsed? -    		0 : (mParticipantListPanel->getRect().getWidth() + LLPANEL_BORDER_WIDTH); +    		0 : (mParticipantListPanel->getRect().getWidth() + mParticipantListAndHistoryStack->getPanelSpacing());      S32 new_min_width = participants_pane_target_width + mRightPartPanel->getExpandedMinDim() + mFloaterExtraWidth; @@ -1083,21 +1083,26 @@ void LLFloaterIMSessionTab::saveCollapsedState()  }  BOOL LLFloaterIMSessionTab::handleKeyHere(KEY key, MASK mask )  { +	BOOL handled = FALSE; +  	if(mask == MASK_ALT)  	{  		LLFloaterIMContainer* floater_container = LLFloaterIMContainer::getInstance();  		if (KEY_RETURN == key && !isTornOff())  		{  			floater_container->expandConversation(); +			handled = TRUE;  		}  		if ((KEY_UP == key) || (KEY_LEFT == key))  		{  			floater_container->selectNextorPreviousConversation(false); +			handled = TRUE;  		}  		if ((KEY_DOWN == key ) || (KEY_RIGHT == key))  		{  			floater_container->selectNextorPreviousConversation(true); +			handled = TRUE;  		}  	} -	return TRUE; +	return handled;  } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index be508ad17d..45ff75bb34 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1798,6 +1798,7 @@ void LLViewerWindow::initBase()  	// Constrain floaters to inside the menu and status bar regions.  	gFloaterView = main_view->getChild<LLFloaterView>("Floater View"); +	gFloaterView->setFloaterSnapView(main_view->getChild<LLView>("floater_snap_region")->getHandle());  	gSnapshotFloaterView = main_view->getChild<LLSnapshotFloaterView>("Snapshot Floater View");  	// Console diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 0de217fc0d..ac1289c4b8 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -864,4 +864,19 @@    <color      name="blue"      value="0 0 1 1"/> + +  <!--Resize bar colors --> + +  <color +    name="ResizebarBorderLight" +    value="0.231 0.231 0.231 1"/> + +  <color +    name="ResizebarBorderDark" +    value="0.133 0.133 0.133 1"/> + +  <color +    name="ResizebarBody" +    value="0.208 0.208 0.208 1"/> +      </colors> diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 93c9cb02cb..d99c3a8bda 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -776,4 +776,7 @@ with the same filename but different name    <texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>    <texture name="Camera_Drag_Dot" file_name="world/CameraDragDot.png"/>    <texture name="NavBar Separator" file_name="navbar/separator.png"/> + +  <texture name="Horizontal Drag Handle" file_name="widgets/horizontal_drag_handle.png"/> +  <texture name="Vertical Drag Handle" file_name="widgets/vertical_drag_handle.png"/>  </textures> diff --git a/indra/newview/skins/default/textures/widgets/horizontal_drag_handle.png b/indra/newview/skins/default/textures/widgets/horizontal_drag_handle.pngBinary files differ new file mode 100644 index 0000000000..642eac4065 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/horizontal_drag_handle.png diff --git a/indra/newview/skins/default/textures/widgets/vertical_drag_handle.png b/indra/newview/skins/default/textures/widgets/vertical_drag_handle.pngBinary files differ new file mode 100644 index 0000000000..b06b70cf36 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/vertical_drag_handle.png diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml index 65f623a47e..3e8c6c76cc 100644 --- a/indra/newview/skins/default/xui/en/floater_im_container.xml +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -25,23 +25,27 @@      <layout_stack       animate="true"        bottom="-1" +     drag_handle_gap="6" +     drag_handle_first_indent="27" +     drag_handle_second_indent="10"       follows="all"       layout="topleft"       left="0"       name="conversations_stack"       orientation="horizontal"       right="-1" +     show_drag_handle="true"       top="0">          <layout_panel           auto_resize="false"           user_resize="true"                   name="conversations_layout_panel"           min_dim="38" -         expanded_min_dim="156"> +         expanded_min_dim="136">              <layout_stack               animate="false"                follows="left|top|right" -             height="35" +             height="27"               layout="topleft"               left="0"               name="conversations_pane_buttons_stack" @@ -50,7 +54,6 @@               top="0">                  <layout_panel                   auto_resize="true" -                 height="35"                   name="conversations_pane_buttons_expanded">                      <menu_button                       follows="top|left" @@ -64,7 +67,7 @@                       left="5"                       name="sort_btn"                       tool_tip="View/sort options" -                     top="5" +                     top="1"                       width="31" />                      <button                       follows="top|left" @@ -74,7 +77,7 @@                       image_selected="Toolbar_Middle_Selected"                       image_unselected="Toolbar_Middle_Off"                       layout="topleft" -                     top="5" +                     top="1"                       left_pad="2"                       name="add_btn"                       tool_tip="Start a new conversation" @@ -87,7 +90,7 @@                       image_selected="Toolbar_Middle_Selected"                       image_unselected="Toolbar_Middle_Off"                       layout="topleft" -                     top="5" +                     top="1"                       left_pad="2"                       name="speak_btn"                       tool_tip="Speak with people using your microphone" @@ -95,9 +98,8 @@                  </layout_panel>                  <layout_panel                   auto_resize="false" -                 height="35"                   name="conversations_pane_buttons_collapsed" -                 width="41"> +                 width="31">                      <button                       follows="right|top"                       height="25" @@ -106,8 +108,8 @@                       image_selected="Toolbar_Middle_Selected"                       image_unselected="Toolbar_Middle_Off"                       layout="topleft" -                     top="5" -                     left="1" +                     top="1" +                     left="0"                       name="expand_collapse_btn"                       tool_tip="Collapse/Expand this list"                       width="31" /> @@ -119,7 +121,7 @@               layout="topleft"               name="conversations_list_panel"               opaque="true" -             top="35" +             top_pad="0"               left="5"               right="-1"/>          </layout_panel> @@ -127,7 +129,7 @@           auto_resize="true"           user_resize="true"           name="messages_layout_panel" -         expanded_min_dim="222"> +         expanded_min_dim="232">              <panel_container               bottom="-1"               follows="all" @@ -136,44 +138,44 @@               name="im_box_tab_container"               right="-1"               top="0"> -             <panel -               bottom="-1" -               follows="all" -               layout="topleft" -               name="stub_panel" -               opaque="true" -               top_pad="0" -               left="0" -               right="-1"> -                 <button -                 follows="right|top" -                 height="25" -                 image_hover_unselected="Toolbar_Middle_Over" -                 image_overlay="Conv_toolbar_collapse" -                 image_selected="Toolbar_Middle_Selected" -                 image_unselected="Toolbar_Middle_Off" +                <panel +                 bottom="-1" +                 follows="all"                   layout="topleft" -                 top="5" -                 right="-10" -                 name="stub_collapse_btn" -                 tool_tip="Collapse this pane" -                 width="31" /> -                 <text -                   type="string" -                   clip_partial="false" -                   follows="left|top|right" -                   layout="topleft" -                   left="15" -                   right="-15" -                   name="stub_textbox" -                   top="25" -                   height="40" -                   valign="center" -                   parse_urls="true" -                   wrap="true"> -                   This conversation is in a separate window.   [secondlife:/// Bring it back.] -                 </text> -             </panel> +                 name="stub_panel" +                 opaque="true" +                 top_pad="0" +                 left="0" +                 right="-1"> +                    <button +                     follows="right|top" +                     height="25" +                     image_hover_unselected="Toolbar_Middle_Over" +                     image_overlay="Conv_toolbar_collapse" +                     image_selected="Toolbar_Middle_Selected" +                     image_unselected="Toolbar_Middle_Off" +                     layout="topleft" +                     top="1" +                     right="-10" +                     name="stub_collapse_btn" +                     tool_tip="Collapse this pane" +                     width="31" /> +                    <text +                     type="string" +                     clip_partial="false" +                     follows="left|top|right" +                     layout="topleft" +                     left="15" +                     right="-15" +                     name="stub_textbox" +                     top="25" +                     height="40" +                     valign="center" +                     parse_urls="true" +                     wrap="true"> +                         This conversation is in a separate window.   [secondlife:/// Bring it back.] +                    </text> +                </panel>              </panel_container>          </layout_panel>      </layout_stack> 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 f8ab2dbcbb..c0ed2e6a78 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -70,27 +70,23 @@       top="0"       left="0"       right="-1" -     bottom="-3"> +     bottom="-1">          <layout_stack           animate="false"  +         bottom="-1"           default_tab_group="2"           follows="all" -         right="-5" -         bottom="-1" -         top="0"           left="3" -         border_size="0"           layout="topleft" -         orientation="vertical"           name="main_stack" -         tab_group="1"> +         right="-3" +         orientation="vertical" +         tab_group="1" +         top="0">              <layout_panel               auto_resize="false" -             user_resize="false"               name="toolbar_panel" -             height="35" -             right="-1" -             left="1"> +             height="25">                  <menu_button                   menu_filename="menu_im_session_showmodes.xml"                   follows="top|left" @@ -103,7 +99,7 @@                   left="5"                   name="view_options_btn"                   tool_tip="View/sort options" -                 top="5" +                 top="1"                   width="31" />                  <menu_button                   menu_filename="menu_im_conversation.xml" @@ -114,7 +110,7 @@                   image_selected="Toolbar_Middle_Selected"                   image_unselected="Toolbar_Middle_Off"                   layout="topleft" -                 top="5" +                 top="1"                   left_pad="2"                   name="gear_btn"                   visible="false" @@ -129,7 +125,7 @@                   image_selected="Toolbar_Middle_Selected"                   image_unselected="Toolbar_Middle_Off"                   layout="topleft" -                 top="5" +                 top="1"                   left_pad="2"                   name="add_btn"                   tool_tip="Add someone to this conversation" @@ -142,7 +138,7 @@                   image_selected="Toolbar_Middle_Selected"                   image_unselected="Toolbar_Middle_Off"                   layout="topleft" -                 top="5" +                 top="1"                   left_pad="2"                   name="voice_call_btn"                   tool_tip="Open voice connection" @@ -167,8 +163,8 @@                   image_selected="Toolbar_Middle_Selected"                   image_unselected="Toolbar_Middle_Off"                   layout="topleft" -                 top="5" -                 right="-67" +                 top="1" +                 right="-70"                   name="close_btn"                   tool_tip="End this conversation"                   width="31" /> @@ -180,7 +176,7 @@                   image_selected="Toolbar_Middle_Selected"                   image_unselected="Toolbar_Middle_Off"                   layout="topleft" -                 top="5" +                 top="1"                   left_pad="2"                   name="expand_collapse_btn"                   tool_tip="Collapse/Expand this pane" @@ -195,20 +191,21 @@                   layout="topleft"                   left_pad="2"                   name="tear_off_btn" -                 top="5" +                 top="1"                   width="31" />              </layout_panel>              <layout_panel               name="body_panel" -             top="1" -             bottom="-1" -             auto_resize="true" -             user_resize="false"> +             height="235">                  <layout_stack                   default_tab_group="2" +                 drag_handle_gap="6" +                 drag_handle_first_indent="0" +                 drag_handle_second_indent="1"                   follows="all"                   orientation="horizontal"                   name="im_panels" +                 show_drag_handle="true"                   tab_group="1"                   top="0"                   right="-1" @@ -220,14 +217,12 @@                       min_dim="0"                       width="150"                        user_resize="true" -                     auto_resize="false"  -                     bottom="-1" /> +                     auto_resize="false" />                      <layout_panel                       default_tab_group="3"                       tab_group="2"                       name="right_part_holder" -                     min_width="221" -                     bottom="-1"> +                     min_width="221">                          <layout_stack                           animate="true"                            default_tab_group="2" @@ -236,7 +231,7 @@                           name="translate_and_chat_stack"                           tab_group="1"                           top="0" -                         left="0" +                         left="1"                           right="-1"                           bottom="-1">                              <layout_panel @@ -262,7 +257,7 @@                                   parse_highlights="true"                                   parse_urls="true"                                   right="-1" -                                 left="5" +                                 left="0"                                   top="0"                                   bottom="-1" />                              </layout_panel> @@ -271,12 +266,8 @@                  </layout_stack>              </layout_panel>              <layout_panel -             top_delta="0" -             top="0" -             height="30" -             bottom="-1" +             height="35"               auto_resize="false" -             user_resize="false"               name="chat_layout_panel">                  <layout_stack                   animate="false" @@ -285,15 +276,11 @@                   orientation="horizontal"                   name="input_panels"                   top="0" -                 bottom="-2" +                 bottom="-1"                   left="0"                   right="-1">                      <layout_panel -                     name="input_editor_layout_panel" -                     auto_resize="true" -                     user_resize="false" -                     top="0" -                     bottom="-1"> +                     name="input_editor_layout_panel">                          <chat_editor                           layout="topleft"                           expand_lines_count="5" @@ -306,32 +293,27 @@                           max_length="1023"                           spellcheck="true"                           tab_group="3" -                         top="1" -                         bottom="-2" -                         left="4" -                         right="-4" +                         bottom="-8" +                         left="5" +                         right="-5"                           wrap="true" />                      </layout_panel>                      <layout_panel                       auto_resize="false" -                     user_resize="false"                       name="input_button_layout_panel" -                     width="30" -                     top="0" -                     bottom="-1"> +                     width="32">                          <button -                         layout="topleft"                           left="1" -                         right="-1" -                         top="1" -                         height="22" +                         top="4" +                         height="25"                           follows="left|right|top"                           image_hover_unselected="Toolbar_Middle_Over"                           image_overlay="Conv_expand_one_line"                           image_selected="Toolbar_Middle_Selected"                           image_unselected="Toolbar_Middle_Off"                           name="minz_btn" -                         tool_tip="Shows/hides message panel" /> +                         tool_tip="Shows/hides message panel" +                         width="28" />                      </layout_panel>                  </layout_stack>              </layout_panel> | 
