diff options
216 files changed, 2733 insertions, 906 deletions
| diff --git a/indra/cmake/ExamplePlugin.cmake b/indra/cmake/ExamplePlugin.cmake new file mode 100644 index 0000000000..599787ad21 --- /dev/null +++ b/indra/cmake/ExamplePlugin.cmake @@ -0,0 +1,16 @@ +# -*- cmake -*- +include(Linking) +include(Prebuilt) + +if (STANDALONE) +    set(EXAMPLEPLUGIN OFF CACHE BOOL +        "EXAMPLEPLUGIN support for the llplugin/llmedia test apps.") +else (STANDALONE) +    set(EXAMPLEPLUGIN ON CACHE BOOL +        "EXAMPLEPLUGIN support for the llplugin/llmedia test apps.") +endif (STANDALONE) + +if (WINDOWS) +elseif (DARWIN) +elseif (LINUX) +endif (WINDOWS) diff --git a/indra/llcharacter/llvisualparam.cpp b/indra/llcharacter/llvisualparam.cpp index 9e4957342c..6232c7588b 100644 --- a/indra/llcharacter/llvisualparam.cpp +++ b/indra/llcharacter/llvisualparam.cpp @@ -173,7 +173,8 @@ LLVisualParam::LLVisualParam()  	mTargetWeight( 0.f ),  	mIsAnimating( FALSE ),  	mID( -1 ), -	mInfo( 0 ) +	mInfo( 0 ), +	mIsDummy(FALSE)  {  } @@ -251,6 +252,13 @@ void LLVisualParam::setWeight(F32 weight, BOOL set_by_user)  //-----------------------------------------------------------------------------  void LLVisualParam::setAnimationTarget(F32 target_value, BOOL set_by_user)  { +	// don't animate dummy parameters +	if (mIsDummy) +	{ +		setWeight(target_value, set_by_user); +		return; +	} +  	if (mInfo)  	{  		if (getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h index 0b516b9374..affc49debf 100644 --- a/indra/llcharacter/llvisualparam.h +++ b/indra/llcharacter/llvisualparam.h @@ -148,15 +148,19 @@ public:  	LLVisualParam*			getNextParam()		{ return mNext; }  	void					setNextParam( LLVisualParam *next ); -	virtual void			setAnimating(BOOL is_animating) { mIsAnimating = is_animating; } +	virtual void			setAnimating(BOOL is_animating) { mIsAnimating = is_animating && !mIsDummy; }  	BOOL					getAnimating() const { return mIsAnimating; } +	void					setIsDummy(BOOL is_self) { mIsDummy = is_self; } +  protected:  	F32					mCurWeight;			// current weight  	F32					mLastWeight;		// last weight  	LLVisualParam*		mNext;				// next param in a shared chain  	F32					mTargetWeight;		// interpolation target  	BOOL				mIsAnimating;	// this value has been given an interpolation target +	BOOL				mIsDummy;  // this is used to prevent dummy visual params from animating +  	S32					mID;				// id for storing weight/morphtarget compares compactly  	LLVisualParamInfo	*mInfo; diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index f2edd5c559..721e5670e7 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -963,30 +963,29 @@ bool LLStringUtil::formatDatetime(std::string& replacement, std::string token,  	// if never fell into those two ifs above, param must be utc  	if (secFromEpoch < 0) secFromEpoch = 0; -	LLDate * datetime = new LLDate((F64)secFromEpoch); +	LLDate datetime((F64)secFromEpoch);  	std::string code = LLStringOps::getDatetimeCode (token);  	// special case to handle timezone  	if (code == "%Z") {  		if (param == "utc") +		{  			replacement = "GMT"; -		else if (param == "slt") -			replacement = "SLT"; -		else if (param != "local") // *TODO Vadim: not local? then what? +		} +		else if (param == "local") +		{ +			replacement = "";		// user knows their own timezone +		} +		else +		{ +			// "slt" = Second Life Time, which is deprecated. +			// If not utc or user local time, fallback to Pacific time  			replacement = LLStringOps::getDaylightSavings() ? "PDT" : "PST"; - -		return true; -	} -	replacement = datetime->toHTTPDateString(code); - -	if (code.empty()) -	{ -		return false; -	} -	else -	{ +		}  		return true;  	} +	replacement = datetime.toHTTPDateString(code); +	return !code.empty();  }  // LLStringUtil::format recogizes the following patterns. diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index fd369730d6..a7946cacf5 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -486,6 +486,11 @@ void LLButton::onMouseLeave(S32 x, S32 y, MASK mask)  	mNeedsHighlight = FALSE;  } +void LLButton::setHighlight(bool b) +{ +	mNeedsHighlight = b; +} +  BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)  {  	if (!childrenHandleHover(x, y, mask)) diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 7fc4997133..85580a98bf 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -176,6 +176,7 @@ public:  	BOOL			getToggleState() const;  	void			setToggleState(BOOL b); +	void			setHighlight(bool b);  	void			setFlashing( BOOL b );  	BOOL			getFlashing() const		{ return mFlashing; } @@ -241,8 +242,8 @@ public:  	void		setForcePressedState(BOOL b) { mForcePressedState = b; }  protected: -	const LLPointer<LLUIImage>&	getImageUnselected() const	{ return mImageUnselected; } -	const LLPointer<LLUIImage>& getImageSelected() const	{ return mImageSelected; } +	LLPointer<LLUIImage> getImageUnselected() const	{ return mImageUnselected; } +	LLPointer<LLUIImage> getImageSelected() const	{ return mImageSelected; }  	LLFrameTimer	mMouseDownTimer; diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp index 8eccd709ce..d9b98b1c28 100644 --- a/indra/llui/lldraghandle.cpp +++ b/indra/llui/lldraghandle.cpp @@ -49,9 +49,9 @@  #include "lluictrlfactory.h"  const S32 LEADING_PAD = 5; -const S32 TITLE_PAD = 8; +const S32 TITLE_HPAD = 8;  const S32 BORDER_PAD = 1; -const S32 LEFT_PAD = BORDER_PAD + TITLE_PAD + LEADING_PAD; +const S32 LEFT_PAD = BORDER_PAD + TITLE_HPAD + LEADING_PAD;  const S32 RIGHT_PAD = BORDER_PAD + 32; // HACK: space for close btn and minimize btn  S32 LLDragHandle::sSnapMargin = 5; @@ -240,19 +240,20 @@ void LLDragHandleLeft::draw()  void LLDragHandleTop::reshapeTitleBox()  { +	static LLUICachedControl<S32> title_vpad("UIFloaterTitleVPad", 0);  	if( ! mTitleBox)  	{  		return;  	}  	const LLFontGL* font = LLFontGL::getFontSansSerif(); -	S32 title_width = font->getWidth( mTitleBox->getText() ) + TITLE_PAD; +	S32 title_width = font->getWidth( mTitleBox->getText() ) + TITLE_HPAD;  	if (getMaxTitleWidth() > 0)  		title_width = llmin(title_width, getMaxTitleWidth());  	S32 title_height = llround(font->getLineHeight());  	LLRect title_rect;  	title_rect.setLeftTopAndSize(   		LEFT_PAD,  -		getRect().getHeight() - BORDER_PAD, +		getRect().getHeight() - title_vpad,  		getRect().getWidth() - LEFT_PAD - RIGHT_PAD,  		title_height); diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 021e2e94ac..8c72b079ee 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -189,11 +189,14 @@ LLFloater::Params::Params()  	can_close("can_close", true),  	can_drag_on_left("can_drag_on_left", false),  	can_tear_off("can_tear_off", true), +	save_dock_state("save_dock_state", false),  	save_rect("save_rect", false),  	save_visibility("save_visibility", false), +	can_dock("can_dock", false), +	header_height("header_height", 0), +	legacy_header_height("legacy_header_height", 0),  	open_callback("open_callback"), -	close_callback("close_callback"), -	can_dock("can_dock", false) +	close_callback("close_callback")  {  	visible = false;  } @@ -219,7 +222,7 @@ void LLFloater::initClass()  static LLWidgetNameRegistry::StaticRegistrar sRegisterFloaterParams(&typeid(LLFloater::Params), "floater");  LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p) -:	LLPanel(), +:	LLPanel(),	// intentionally do not pass params here, see initFromParams  	mDragHandle(NULL),  	mTitle(p.title),  	mShortTitle(p.short_title), @@ -233,6 +236,8 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)  	mResizable(p.can_resize),  	mMinWidth(p.min_width),  	mMinHeight(p.min_height), +	mHeaderHeight(p.header_height), +	mLegacyHeaderHeight(p.legacy_header_height),  	mMinimized(FALSE),  	mForeground(FALSE),  	mFirstLook(TRUE), @@ -263,11 +268,8 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)  		mButtonsEnabled[i] = FALSE;  		mButtons[i] = NULL;  	} -	for (S32 i = 0; i < 4; i++)  -	{ -		mResizeBar[i] = NULL;  -		mResizeHandle[i] = NULL; -	} +	addDragHandle(); +	addResizeCtrls();  	initFromParams(p); @@ -280,10 +282,6 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)  // Note: Floaters constructed from XML call init() twice!  void LLFloater::initFloater()  { -	addDragHandle(); -	 -	addResizeCtrls(); -  	// Close button.  	if (mCanClose)  	{ @@ -323,9 +321,6 @@ void LLFloater::initFloater()  void LLFloater::addDragHandle()  { -	static LLUICachedControl<S32> floater_close_box_size ("UIFloaterCloseBoxSize", 0); -	S32 close_box_size = mCanClose ? floater_close_box_size : 0; -	  	if (!mDragHandle)  	{  		if (mDragOnLeft) @@ -346,6 +341,14 @@ void LLFloater::addDragHandle()  		}  		addChild(mDragHandle);  	} +	layoutDragHandle(); +} + +void LLFloater::layoutDragHandle() +{ +	static LLUICachedControl<S32> floater_close_box_size ("UIFloaterCloseBoxSize", 0); +	S32 close_box_size = mCanClose ? floater_close_box_size : 0; +	  	LLRect rect;  	if (mDragOnLeft)  	{ @@ -361,40 +364,17 @@ void LLFloater::addDragHandle()  }  void LLFloater::addResizeCtrls() -{ -	for (S32 i = 0; i < 4; i++)  -	{ -		if (mResizeBar[i]) -		{ -			removeChild(mResizeBar[i]); -			delete mResizeBar[i]; -			mResizeBar[i] = NULL; -		} -		if (mResizeHandle[i]) -		{ -			removeChild(mResizeHandle[i]); -			delete mResizeHandle[i]; -			mResizeHandle[i] = NULL; -		} -	} -	if( !mResizable ) -	{ -		return; -	} -	 +{	  	// Resize bars (sides) -	const S32 RESIZE_BAR_THICKNESS = 3;  	LLResizeBar::Params p;  	p.name("resizebar_left");  	p.resizing_view(this); -	p.rect(LLRect( 0, getRect().getHeight(), RESIZE_BAR_THICKNESS, 0));  	p.min_size(mMinWidth);  	p.side(LLResizeBar::LEFT);  	mResizeBar[LLResizeBar::LEFT] = LLUICtrlFactory::create<LLResizeBar>(p);  	addChild( mResizeBar[LLResizeBar::LEFT] );  	p.name("resizebar_top"); -	p.rect(LLRect( 0, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_BAR_THICKNESS));  	p.min_size(mMinHeight);  	p.side(LLResizeBar::TOP); @@ -402,15 +382,12 @@ void LLFloater::addResizeCtrls()  	addChild( mResizeBar[LLResizeBar::TOP] );  	p.name("resizebar_right"); -	p.rect(LLRect(getRect().getWidth() - RESIZE_BAR_THICKNESS, getRect().getHeight(), getRect().getWidth(), 0));  	p.min_size(mMinWidth); -	p.side(LLResizeBar::RIGHT); -	 +	p.side(LLResizeBar::RIGHT);	  	mResizeBar[LLResizeBar::RIGHT] = LLUICtrlFactory::create<LLResizeBar>(p);  	addChild( mResizeBar[LLResizeBar::RIGHT] );  	p.name("resizebar_bottom"); -	p.rect(LLRect(0, RESIZE_BAR_THICKNESS, getRect().getWidth(), 0));  	p.min_size(mMinHeight);  	p.side(LLResizeBar::BOTTOM);  	mResizeBar[LLResizeBar::BOTTOM] = LLUICtrlFactory::create<LLResizeBar>(p); @@ -421,27 +398,69 @@ void LLFloater::addResizeCtrls()  	// handles must not be mouse-opaque, otherwise they block hover events  	// to other buttons like the close box. JC  	handle_p.mouse_opaque(false); -	handle_p.rect(LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT, getRect().getWidth(), 0));  	handle_p.min_width(mMinWidth);  	handle_p.min_height(mMinHeight);  	handle_p.corner(LLResizeHandle::RIGHT_BOTTOM);  	mResizeHandle[0] = LLUICtrlFactory::create<LLResizeHandle>(handle_p);  	addChild(mResizeHandle[0]); -	handle_p.rect(LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_HANDLE_HEIGHT));  	handle_p.corner(LLResizeHandle::RIGHT_TOP);  	mResizeHandle[1] = LLUICtrlFactory::create<LLResizeHandle>(handle_p);  	addChild(mResizeHandle[1]); -	handle_p.rect(LLRect( 0, RESIZE_HANDLE_HEIGHT, RESIZE_HANDLE_WIDTH, 0 ));  	handle_p.corner(LLResizeHandle::LEFT_BOTTOM);  	mResizeHandle[2] = LLUICtrlFactory::create<LLResizeHandle>(handle_p);  	addChild(mResizeHandle[2]); -	handle_p.rect(LLRect( 0, getRect().getHeight(), RESIZE_HANDLE_WIDTH, getRect().getHeight() - RESIZE_HANDLE_HEIGHT ));  	handle_p.corner(LLResizeHandle::LEFT_TOP);  	mResizeHandle[3] = LLUICtrlFactory::create<LLResizeHandle>(handle_p);  	addChild(mResizeHandle[3]); + +	layoutResizeCtrls(); +} + +void LLFloater::layoutResizeCtrls() +{ +	LLRect rect; + +	// Resize bars (sides) +	const S32 RESIZE_BAR_THICKNESS = 3; +	rect = LLRect( 0, getRect().getHeight(), RESIZE_BAR_THICKNESS, 0); +	mResizeBar[LLResizeBar::LEFT]->setRect(rect); + +	rect = LLRect( 0, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_BAR_THICKNESS); +	mResizeBar[LLResizeBar::TOP]->setRect(rect); + +	rect = LLRect(getRect().getWidth() - RESIZE_BAR_THICKNESS, getRect().getHeight(), getRect().getWidth(), 0); +	mResizeBar[LLResizeBar::RIGHT]->setRect(rect); + +	rect = LLRect(0, RESIZE_BAR_THICKNESS, getRect().getWidth(), 0); +	mResizeBar[LLResizeBar::BOTTOM]->setRect(rect); + +	// Resize handles (corners) +	rect = LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT, getRect().getWidth(), 0); +	mResizeHandle[0]->setRect(rect); + +	rect = LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_HANDLE_HEIGHT); +	mResizeHandle[1]->setRect(rect); +	 +	rect = LLRect( 0, RESIZE_HANDLE_HEIGHT, RESIZE_HANDLE_WIDTH, 0 ); +	mResizeHandle[2]->setRect(rect); + +	rect = LLRect( 0, getRect().getHeight(), RESIZE_HANDLE_WIDTH, getRect().getHeight() - RESIZE_HANDLE_HEIGHT ); +	mResizeHandle[3]->setRect(rect); +} + +void LLFloater::enableResizeCtrls(bool enable) +{ +	for (S32 i = 0; i < 4; ++i) +	{ +		mResizeBar[i]->setVisible(enable); +		mResizeBar[i]->setEnabled(enable); + +		mResizeHandle[i]->setVisible(enable); +		mResizeHandle[i]->setEnabled(enable); +	}  }  // virtual @@ -483,6 +502,7 @@ LLFloater::~LLFloater()  	storeRectControl();  	setVisible(false); // We're not visible if we're destroyed  	storeVisibilityControl(); +	storeDockStateControl();  }  void LLFloater::storeRectControl() @@ -501,6 +521,15 @@ void LLFloater::storeVisibilityControl()  	}  } +void LLFloater::storeDockStateControl() +{ +	if( !sQuitting && mDocStateControl.size() > 1 ) +	{ +		LLUI::sSettingGroups["floater"]->setBOOL( mDocStateControl, isDocked() ); +	} +} + +  void LLFloater::setVisible( BOOL visible )  {  	LLPanel::setVisible(visible); // calls handleVisibilityChange() @@ -759,6 +788,16 @@ void LLFloater::applyRectControl()  	}  } +void LLFloater::applyDockState() +{ +	if (mDocStateControl.size() > 1) +	{ +		bool dockState = LLUI::sSettingGroups["floater"]->getBOOL(mDocStateControl); +		setDocked(dockState); +	} + +} +  void LLFloater::applyTitle()  {  	if (!mDragHandle) @@ -909,7 +948,8 @@ void LLFloater::handleReshape(const LLRect& new_rect, bool by_user)  void LLFloater::setMinimized(BOOL minimize)  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	const LLFloater::Params& default_params = LLFloater::getDefaultParams(); +	S32 floater_header_size = default_params.header_height;  	static LLUICachedControl<S32> minimized_width ("UIMinimizedWidth", 0);  	if (minimize == mMinimized) return; @@ -1082,7 +1122,8 @@ void LLFloater::setFocus( BOOL b )  void LLFloater::setRect(const LLRect &rect)  {  	LLPanel::setRect(rect); -	addDragHandle(); // re-add drag handle, sized based on rect +	layoutDragHandle(); +	layoutResizeCtrls();  }  // virtual @@ -1376,7 +1417,10 @@ void LLFloater::setDocked(bool docked, bool pop_on_undock)  		mButtonsEnabled[BUTTON_DOCK] = !mDocked;  		mButtonsEnabled[BUTTON_UNDOCK] = mDocked;  		updateButtons(); + +		storeDockStateControl();  	} +	  }  // static @@ -1389,9 +1433,9 @@ void LLFloater::onClickMinimize(LLFloater* self)  void LLFloater::onClickTearOff(LLFloater* self)  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0);  	if (!self)  		return; +	S32 floater_header_size = self->mHeaderHeight;  	LLMultiFloater* host_floater = self->getHost();  	if (host_floater) //Tear off  	{ @@ -1548,26 +1592,42 @@ void LLFloater::draw()  			shadow_color % alpha,   			llround(shadow_offset)); -		// No transparent windows in simple UI +		LLUIImage* image = NULL; +		LLColor4 color;  		if (isBackgroundOpaque())  		{ -			gl_rect_2d( left, top, right, bottom, getBackgroundColor() % alpha ); +			// NOTE: image may not be set +			image = getBackgroundImage(); +			color = getBackgroundColor();  		}  		else  		{ -			gl_rect_2d( left, top, right, bottom, getTransparentColor() % alpha ); +			image = getTransparentImage(); +			color = getTransparentColor();  		} -		if(hasFocus()  -			&& !getIsChrome()  -			&& !getCurrentTitle().empty()) +		if (image) +		{ +			// We're using images for this floater's backgrounds +			image->draw(getLocalRect(), UI_VERTEX_COLOR % alpha); +		} +		else  		{ -			static LLUIColor titlebar_focus_color = LLUIColorTable::instance().getColor("TitleBarFocusColor"); +			// We're not using images, use old-school flat colors +			gl_rect_2d( left, top, right, bottom, color % alpha ); +  			// draw highlight on title bar to indicate focus.  RDW -			const LLFontGL* font = LLFontGL::getFontSansSerif(); -			LLRect r = getRect(); -			gl_rect_2d_offset_local(0, r.getHeight(), r.getWidth(), r.getHeight() - (S32)font->getLineHeight() - 1,  -				titlebar_focus_color % alpha, 0, TRUE); +			if(hasFocus()  +				&& !getIsChrome()  +				&& !getCurrentTitle().empty()) +			{ +				static LLUIColor titlebar_focus_color = LLUIColorTable::instance().getColor("TitleBarFocusColor"); +				 +				const LLFontGL* font = LLFontGL::getFontSansSerif(); +				LLRect r = getRect(); +				gl_rect_2d_offset_local(0, r.getHeight(), r.getWidth(), r.getHeight() - (S32)font->getLineHeight() - 1,  +					titlebar_focus_color % alpha, 0, TRUE); +			}  		}  	} @@ -1617,18 +1677,6 @@ void LLFloater::draw()  		drawChild(focused_child);  	} -	if( isBackgroundVisible() ) -	{ -		// add in a border to improve spacialized visual aclarity ;) -		// use lines instead of gl_rect_2d so we can round the edges as per james' recommendation -		static LLUIColor focus_border_color = LLUIColorTable::instance().getColor("FloaterFocusBorderColor"); -		static LLUIColor unfocus_border_color = LLUIColorTable::instance().getColor("FloaterUnfocusBorderColor"); -		LLUI::setLineWidth(1.5f); -		LLColor4 outlineColor = gFocusMgr.childHasKeyboardFocus(this) ? focus_border_color : unfocus_border_color; -		gl_rect_2d_offset_local(0, getRect().getHeight() + 1, getRect().getWidth() + 1, 0, outlineColor % alpha, -LLPANEL_BORDER_WIDTH, FALSE); -		LLUI::setLineWidth(1.f); -	} -  	// update tearoff button for torn off floaters  	// when last host goes away  	if (mCanTearOff && !getHost()) @@ -1677,7 +1725,7 @@ void	LLFloater::setCanTearOff(BOOL can_tear_off)  void LLFloater::setCanResize(BOOL can_resize)  {  	mResizable = can_resize; -	addResizeCtrls(); +	enableResizeCtrls(can_resize);  }  void LLFloater::setCanDrag(BOOL can_drag) @@ -2113,7 +2161,8 @@ void LLFloaterView::focusFrontFloater()  void LLFloaterView::getMinimizePosition(S32 *left, S32 *bottom)  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	const LLFloater::Params& default_params = LLFloater::getDefaultParams(); +	S32 floater_header_size = default_params.header_height;  	static LLUICachedControl<S32> minimized_width ("UIMinimizedWidth", 0);  	S32 col = 0;  	LLRect snap_rect_local = getLocalSnapRect(); @@ -2488,6 +2537,11 @@ void LLFloater::setInstanceName(const std::string& name)  		{  			mVisibilityControl = LLFloaterReg::declareVisibilityControl(mInstanceName);  		} +		if(!mDocStateControl.empty()) +		{ +			mDocStateControl = LLFloaterReg::declareDockStateControl(mInstanceName); +		} +  	}  } @@ -2528,6 +2582,9 @@ void LLFloater::setupParamsForExport(Params& p, LLView* parent)  void LLFloater::initFromParams(const LLFloater::Params& p)  { +	// *NOTE: We have too many classes derived from LLFloater to retrofit them  +	// all to pass in params via constructors.  So we use this method. +  	 // control_name, tab_stop, focus_lost_callback, initial_value, rect, enabled, visible  	LLPanel::initFromParams(p); @@ -2539,11 +2596,12 @@ void LLFloater::initFromParams(const LLFloater::Params& p)  	setCanMinimize(p.can_minimize);  	setCanClose(p.can_close);  	setCanDock(p.can_dock); +	setCanResize(p.can_resize); +	setResizeLimits(p.min_width, p.min_height);  	mDragOnLeft = p.can_drag_on_left; -	mResizable = p.can_resize; -	mMinWidth = p.min_width; -	mMinHeight = p.min_height; +	mHeaderHeight = p.header_height; +	mLegacyHeaderHeight = p.legacy_header_height;  	mSingleInstance = p.single_instance;  	mAutoTile = p.auto_tile; @@ -2555,6 +2613,11 @@ void LLFloater::initFromParams(const LLFloater::Params& p)  	{  		mVisibilityControl = "t"; // flag to build mVisibilityControl name once mInstanceName is set  	} + +	if(p.save_dock_state) +	{ +		mDocStateControl = "t"; // flag to build mDocStateControl name once mInstanceName is set +	}  	// open callback   	if (p.open_callback.isProvided()) @@ -2599,6 +2662,23 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o  		LLFloater::setFloaterHost(last_host);  	} +	// HACK: When we changed the header height to 25 pixels in Viewer 2, rather +	// than re-layout all the floaters we use this value in pixels to make the +	// whole floater bigger and change the top-left coordinate for widgets. +	// The goal is to eventually set mLegacyHeaderHeight to zero, which would +	// make the top-left corner for widget layout the same as the top-left +	// corner of the window's content area.  James +	S32 header_stretch = (mHeaderHeight - mLegacyHeaderHeight); +	if (header_stretch > 0) +	{ +		// Stretch the floater vertically, don't move widgets +		LLRect rect = getRect(); +		rect.mTop += header_stretch; + +		// This will also update drag handle, title bar, close box, etc. +		setRect(rect); +	} +  	BOOL result;  	{  		LLFastTimer ft(POST_BUILD); @@ -2616,6 +2696,8 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o  	moveResizeHandlesToFront(); +	applyDockState(); +  	return true; // *TODO: Error checking  } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 2fdaecf59a..ef0d06a58e 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -124,7 +124,10 @@ public:  								can_tear_off,  								save_rect,  								save_visibility, +								save_dock_state,  								can_dock; +		Optional<S32>			header_height, +								legacy_header_height; // HACK see initFromXML()  		Optional<CommitCallbackParam> open_callback,  									  close_callback; @@ -209,6 +212,7 @@ public:  	bool			isDragOnLeft() const{ return mDragOnLeft; }  	S32				getMinWidth() const{ return mMinWidth; }  	S32				getMinHeight() const{ return mMinHeight; } +	S32				getHeaderHeight() const { return mHeaderHeight; }  	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask);  	virtual BOOL	handleRightMouseDown(S32 x, S32 y, MASK mask); @@ -277,8 +281,10 @@ protected:  	void			setRectControl(const std::string& rectname) { mRectControl = rectname; };  	void			applyRectControl(); +	void			applyDockState();  	void			storeRectControl();  	void			storeVisibilityControl(); +	void			storeDockStateControl();  	void		 	setKey(const LLSD& key);  	void		 	setInstanceName(const std::string& name); @@ -302,7 +308,10 @@ private:  	void			buildButtons();  	BOOL			offerClickToButton(S32 x, S32 y, MASK mask, EFloaterButtons index);  	void			addResizeCtrls(); +	void			layoutResizeCtrls(); +	void			enableResizeCtrls(bool enable);  	void 			addDragHandle(); +	void			layoutDragHandle();		// repair layout  public:  	// Called when floater is opened, passes mKey @@ -316,6 +325,7 @@ public:  protected:  	std::string		mRectControl;  	std::string		mVisibilityControl; +	std::string		mDocStateControl;  	LLSD			mKey;				// Key used for retrieving instances; set (for now) by LLFLoaterReg  	LLDragHandle*	mDragHandle; @@ -340,6 +350,8 @@ private:  	S32				mMinWidth;  	S32				mMinHeight; +	S32				mHeaderHeight;		// height in pixels of header for title, drag bar +	S32				mLegacyHeaderHeight;// HACK see initFloaterXML()  	BOOL			mMinimized;  	BOOL			mForeground; diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp index 3c5a8a6921..8bb9e0d9ff 100644 --- a/indra/llui/llfloaterreg.cpp +++ b/indra/llui/llfloaterreg.cpp @@ -127,7 +127,7 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)  				bool success = LLUICtrlFactory::getInstance()->buildFloater(res, xui_file, NULL);  				if (!success)  				{ -					llwarns << "Failed to buid floater type: '" << name << "'." << llendl; +					llwarns << "Failed to build floater type: '" << name << "'." << llendl;  					return NULL;  				} @@ -364,6 +364,26 @@ std::string LLFloaterReg::declareVisibilityControl(const std::string& name)  }  //static +std::string LLFloaterReg::declareDockStateControl(const std::string& name) +{ +	std::string controlname = getDockStateControlName(name); +	LLUI::sSettingGroups["floater"]->declareBOOL(controlname, FALSE, +												 llformat("Window Docking state for %s", name.c_str()), +												 TRUE); +	return controlname; + +} + +//static +std::string LLFloaterReg::getDockStateControlName(const std::string& name) +{ +	std::string res = std::string("floater_dock_") + name; +	LLStringUtil::replaceChar( res, ' ', '_' ); +	return res; +} + + +//static  void LLFloaterReg::registerControlVariables()  {  	// Iterate through alll registered instance names and register rect and visibility control variables diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h index 451bd1dbe3..634a235926 100644 --- a/indra/llui/llfloaterreg.h +++ b/indra/llui/llfloaterreg.h @@ -121,6 +121,10 @@ public:  	static std::string declareRectControl(const std::string& name);  	static std::string getVisibilityControlName(const std::string& name);  	static std::string declareVisibilityControl(const std::string& name); + +	static std::string declareDockStateControl(const std::string& name); +	static std::string getDockStateControlName(const std::string& name); +  	static void registerControlVariables();  	// Callback wrappers diff --git a/indra/llui/llmenubutton.cpp b/indra/llui/llmenubutton.cpp index 8dbcd6e229..a657ed039a 100644 --- a/indra/llui/llmenubutton.cpp +++ b/indra/llui/llmenubutton.cpp @@ -85,6 +85,8 @@ void LLMenuButton::toggleMenu()  void LLMenuButton::hideMenu()   {  +	if(!mMenu) +		return;  	mMenu->setVisible(FALSE);   } diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index cf013efca0..91e7e46195 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -2894,8 +2894,8 @@ void hide_top_view( LLView* view )  } -// x and y are the desired location for the popup, NOT necessarily the -// mouse location +// x and y are the desired location for the popup, in the spawning_view's +// coordinate frame, NOT necessarily the mouse location  // static  void LLMenuGL::showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y)  { @@ -3435,7 +3435,7 @@ void LLMenuHolderGL::setActivatedItem(LLMenuItemGL* item)  LLTearOffMenu::LLTearOffMenu(LLMenuGL* menup) :   	LLFloater(LLSD())  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	S32 floater_header_size = getHeaderHeight();  	setName(menup->getName());  	setTitle(menup->getLabel()); @@ -3479,7 +3479,6 @@ LLTearOffMenu::~LLTearOffMenu()  void LLTearOffMenu::draw()  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0);  	mMenu->setBackgroundVisible(isBackgroundOpaque());  	mMenu->needsArrange(); diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 48887ec352..09d9e407c7 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -505,7 +505,7 @@ public:  	void buildDrawLabels();  	void createJumpKeys(); -	// Show popup at a specific location. +	// Show popup at a specific location, in the spawn_view's coordinate frame  	static void showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y);  	// Whether to drop shadow menu bar  diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp index e8ce1a8d97..78738c826d 100644 --- a/indra/llui/llmultifloater.cpp +++ b/indra/llui/llmultifloater.cpp @@ -54,7 +54,8 @@ LLMultiFloater::LLMultiFloater(const LLSD& key, const LLFloater::Params& params)  void LLMultiFloater::buildTabContainer()  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	const LLFloater::Params& default_params = LLFloater::getDefaultParams(); +	S32 floater_header_size = default_params.header_height;  	LLTabContainer::Params p;  	p.name(std::string("Preview Tabs")); @@ -131,7 +132,8 @@ BOOL LLMultiFloater::closeAllFloaters()  void LLMultiFloater::growToFit(S32 content_width, S32 content_height)  {  	static LLUICachedControl<S32> tabcntr_close_btn_size ("UITabCntrCloseBtnSize", 0); -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	const LLFloater::Params& default_params = LLFloater::getDefaultParams(); +	S32 floater_header_size = default_params.header_height;  	S32 tabcntr_header_height = LLPANEL_BORDER_WIDTH + tabcntr_close_btn_size;  	S32 new_width = llmax(getRect().getWidth(), content_width + LLPANEL_BORDER_WIDTH * 2);  	S32 new_height = llmax(getRect().getHeight(), content_height + floater_header_size + tabcntr_header_height); @@ -432,6 +434,7 @@ void LLMultiFloater::onTabSelected()  void LLMultiFloater::setCanResize(BOOL can_resize)  {  	LLFloater::setCanResize(can_resize); +	if (!mTabContainer) return;  	if (isResizable() && mTabContainer->getTabPosition() == LLTabContainer::BOTTOM)  	{  		mTabContainer->setRightTabBtnOffset(RESIZE_HANDLE_WIDTH); @@ -455,13 +458,16 @@ BOOL LLMultiFloater::postBuild()  	}  	mTabContainer = getChild<LLTabContainer>("Preview Tabs"); +	 +	setCanResize(mResizable);  	return TRUE;  }  void LLMultiFloater::updateResizeLimits()  {  	static LLUICachedControl<S32> tabcntr_close_btn_size ("UITabCntrCloseBtnSize", 0); -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	const LLFloater::Params& default_params = LLFloater::getDefaultParams(); +	S32 floater_header_size = default_params.header_height;  	S32 tabcntr_header_height = LLPANEL_BORDER_WIDTH + tabcntr_close_btn_size;  	// initialize minimum size constraint to the original xml values.  	S32 new_min_width = mOrigMinWidth; diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 095200ddc3..0d340699c5 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -71,10 +71,12 @@ const LLPanel::Params& LLPanel::getDefaultParams()  LLPanel::Params::Params()  :	has_border("border", false),  	border(""), -	bg_opaque_color("bg_opaque_color"), -	bg_alpha_color("bg_alpha_color"),  	background_visible("background_visible", false),  	background_opaque("background_opaque", false), +	bg_opaque_color("bg_opaque_color"), +	bg_alpha_color("bg_alpha_color"), +	bg_opaque_image("bg_opaque_image"), +	bg_alpha_image("bg_alpha_image"),  	min_width("min_width", 100),  	min_height("min_height", 100),  	strings("string"), @@ -92,10 +94,12 @@ LLPanel::Params::Params()  LLPanel::LLPanel(const LLPanel::Params& p)  :	LLUICtrl(p), -	mBgColorAlpha(p.bg_alpha_color()), -	mBgColorOpaque(p.bg_opaque_color()),  	mBgVisible(p.background_visible),  	mBgOpaque(p.background_opaque), +	mBgOpaqueColor(p.bg_opaque_color()), +	mBgAlphaColor(p.bg_alpha_color()), +	mBgOpaqueImage(p.bg_opaque_image()), +	mBgAlphaImage(p.bg_alpha_image()),  	mDefaultBtn(NULL),  	mBorder(NULL),  	mLabel(p.label), @@ -103,6 +107,8 @@ LLPanel::LLPanel(const LLPanel::Params& p)  	mCommitCallbackRegistrar(false),  	mEnableCallbackRegistrar(false),  	mXMLFilename(p.filename) +	// *NOTE: Be sure to also change LLPanel::initFromParams().  We have too +	// many classes derived from LLPanel to retrofit them all to pass in params.  {  	setIsChrome(FALSE); @@ -178,19 +184,31 @@ void LLPanel::draw()  	// draw background  	if( mBgVisible )  	{ -		//RN: I don't see the point of this -		S32 left = 0;//LLPANEL_BORDER_WIDTH; -		S32 top = getRect().getHeight();// - LLPANEL_BORDER_WIDTH; -		S32 right = getRect().getWidth();// - LLPANEL_BORDER_WIDTH; -		S32 bottom = 0;//LLPANEL_BORDER_WIDTH; - +		LLRect local_rect = getLocalRect();  		if (mBgOpaque )  		{ -			gl_rect_2d( left, top, right, bottom, mBgColorOpaque.get() % alpha); +			// opaque, in-front look +			if (mBgOpaqueImage.notNull()) +			{ +				mBgOpaqueImage->draw( local_rect, UI_VERTEX_COLOR % alpha ); +			} +			else +			{ +				// fallback to flat colors when there are no images +				gl_rect_2d( local_rect, mBgOpaqueColor.get() % alpha); +			}  		}  		else  		{ -			gl_rect_2d( left, top, right, bottom, mBgColorAlpha.get() % alpha); +			// transparent, in-back look +			if (mBgAlphaImage.notNull()) +			{ +				mBgAlphaImage->draw( local_rect, UI_VERTEX_COLOR % alpha ); +			} +			else +			{ +				gl_rect_2d( local_rect, mBgAlphaColor.get() % alpha ); +			}  		}  	} @@ -443,7 +461,8 @@ void LLPanel::initFromParams(const LLPanel::Params& p)  	setBackgroundOpaque(p.background_opaque);  	setBackgroundColor(p.bg_opaque_color().get());  	setTransparentColor(p.bg_alpha_color().get()); -	 +	mBgOpaqueImage = p.bg_opaque_image(); +	mBgAlphaImage = p.bg_alpha_image();  }  static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup"); diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h index e8db68ffbb..c213809d68 100644 --- a/indra/llui/llpanel.h +++ b/indra/llui/llpanel.h @@ -48,6 +48,7 @@ const BOOL BORDER_YES = TRUE;  const BOOL BORDER_NO = FALSE;  class LLButton; +class LLUIImage;  /*   * General purpose concrete view base class. @@ -72,12 +73,15 @@ public:  		Optional<bool>			has_border;  		Optional<LLViewBorder::Params>	border; -		Optional<LLUIColor>		bg_opaque_color, -								bg_alpha_color; -  		Optional<bool>			background_visible,  								background_opaque; +		Optional<LLUIColor>		bg_opaque_color, +								bg_alpha_color; +		// opaque image is for "panel in foreground" look +		Optional<LLUIImage*>	bg_opaque_image, +								bg_alpha_image; +  		Optional<S32>			min_width,  								min_height; @@ -127,10 +131,12 @@ public:  	BOOL			hasBorder() const { return mBorder != NULL; }  	void			setBorderVisible( BOOL b ); -	void			setBackgroundColor( const LLColor4& color ) { mBgColorOpaque = color; } -	const LLColor4&	getBackgroundColor() const { return mBgColorOpaque; } -	void			setTransparentColor(const LLColor4& color) { mBgColorAlpha = color; } -	const LLColor4& getTransparentColor() const { return mBgColorAlpha; } +	void			setBackgroundColor( const LLColor4& color ) { mBgOpaqueColor = color; } +	const LLColor4&	getBackgroundColor() const { return mBgOpaqueColor; } +	void			setTransparentColor(const LLColor4& color) { mBgAlphaColor = color; } +	const LLColor4& getTransparentColor() const { return mBgAlphaColor; } +	LLPointer<LLUIImage> getBackgroundImage() const { return mBgOpaqueImage; } +	LLPointer<LLUIImage> getTransparentImage() const { return mBgAlphaImage; }  	void			setBackgroundVisible( BOOL b )	{ mBgVisible = b; }  	BOOL			isBackgroundVisible() const { return mBgVisible; }  	void			setBackgroundOpaque(BOOL b)		{ mBgOpaque = b; } @@ -248,10 +254,12 @@ protected:  	std::string		mHelpTopic;         // the name of this panel's help topic to display in the Help Viewer  private: -	LLUIColor		mBgColorAlpha; -	LLUIColor		mBgColorOpaque; -	BOOL			mBgVisible; -	BOOL			mBgOpaque; +	BOOL			mBgVisible;				// any background at all? +	BOOL			mBgOpaque;				// use opaque color or image +	LLUIColor		mBgOpaqueColor; +	LLUIColor		mBgAlphaColor; +	LLPointer<LLUIImage> mBgOpaqueImage;	// "panel in front" look +	LLPointer<LLUIImage> mBgAlphaImage;		// "panel in back" look  	LLViewBorder*	mBorder;  	LLButton*		mDefaultBtn;  	LLUIString		mLabel; diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index c8094f9c7c..34501ae080 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -38,10 +38,11 @@  // Library includes  #include "lltextbox.h"  #include "lliconctrl.h" +#include "llbutton.h"  #include "llmenugl.h"       // hideMenus()  #include "llui.h"			// positionViewNearMouse()  #include "llwindow.h" - +#include "lltrans.h"  //  // Constants  // @@ -155,7 +156,10 @@ LLToolTip::Params::Params()  	visible_time_near("visible_time_near", LLUI::sSettingGroups["config"]->getF32( "ToolTipVisibleTimeNear" )),  	visible_time_far("visible_time_far", LLUI::sSettingGroups["config"]->getF32( "ToolTipVisibleTimeFar" )),  	sticky_rect("sticky_rect"), -	image("image") +	image("image"), +	time_based_media("time_based_media", false), +	web_based_media("web_based_media", false), +	media_playing("media_playing", false)  {  	name = "tooltip";  	font = LLFontGL::getFontSansSerif(); @@ -167,7 +171,11 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  :	LLPanel(p),  	mMaxWidth(p.max_width),  	mHasClickCallback(p.click_callback.isProvided()), -	mPadding(p.padding) +	mPadding(p.padding), +	mTextBox(NULL), +	mInfoButton(NULL), +	mPlayMediaButton(NULL), +	mHomePageButton(NULL)  {  	LLTextBox::Params params;  	params.initial_value = "tip_text"; @@ -186,25 +194,82 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  	params.allow_html = false; // disallow hyperlinks in tooltips, as they want to spawn their own explanatory tooltips  	mTextBox = LLUICtrlFactory::create<LLTextBox> (params);  	addChild(mTextBox); - +	 +	S32 TOOLTIP_ICON_SIZE = 0; +	S32 TOOLTIP_PLAYBUTTON_SIZE = 0;  	if (p.image.isProvided())  	{ -		LLIconCtrl::Params icon_params; -		icon_params.name = "tooltip_icon"; +		LLButton::Params icon_params; +		icon_params.name = "tooltip_info";  		LLRect icon_rect;  		LLUIImage* imagep = p.image; -		const S32 TOOLTIP_ICON_SIZE = (imagep ? imagep->getWidth() : 16); +		TOOLTIP_ICON_SIZE = (imagep ? imagep->getWidth() : 16);  		icon_rect.setOriginAndSize(mPadding, mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE);  		icon_params.rect = icon_rect; -		icon_params.follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM; -		icon_params.image = p.image; -		icon_params.mouse_opaque = false; -		addChild(LLUICtrlFactory::create<LLIconCtrl>(icon_params)); - +		//icon_params.follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM; +		icon_params.image_unselected(imagep); +		icon_params.scale_image(true); +		icon_params.flash_color(icon_params.highlight_color()); +		mInfoButton  = LLUICtrlFactory::create<LLButton>(icon_params); +		if (p.click_callback.isProvided()) +		{ +			mInfoButton->setCommitCallback(boost::bind(p.click_callback())); +		} +		addChild(mInfoButton); +		  		// move text over to fit image in  		mTextBox->translate(TOOLTIP_ICON_SIZE + mPadding, 0);  	} - +	 +	if (p.time_based_media.isProvided() && p.time_based_media == true) +	{ +		LLButton::Params p_button; +		p_button.name(std::string("play_media")); +		TOOLTIP_PLAYBUTTON_SIZE = 16; +		LLRect button_rect; +		button_rect.setOriginAndSize((mPadding +TOOLTIP_ICON_SIZE+ mPadding ), mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE); +		p_button.rect = button_rect; +		p_button.image_selected.name("button_anim_pause.tga"); +		p_button.image_unselected.name("button_anim_play.tga"); +		p_button.scale_image(true); +		 +		mPlayMediaButton = LLUICtrlFactory::create<LLButton>(p_button);  +		if(p.click_playmedia_callback.isProvided()) +		{ +			mPlayMediaButton->setCommitCallback(boost::bind(p.click_playmedia_callback())); +		} +		if(p.media_playing.isProvided()) +		{ +			mPlayMediaButton->setToggleState(p.media_playing); +		} +		addChild(mPlayMediaButton); +		 +		// move text over to fit image in +		mTextBox->translate(TOOLTIP_PLAYBUTTON_SIZE + mPadding, 0); +	} +	 +	if (p.web_based_media.isProvided() && p.web_based_media == true) +	{ +		LLButton::Params p_w_button; +		p_w_button.name(std::string("home_page")); +		TOOLTIP_PLAYBUTTON_SIZE = 16; +		LLRect button_rect; +		button_rect.setOriginAndSize((mPadding +TOOLTIP_ICON_SIZE+ mPadding ), mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE); +		p_w_button.rect = button_rect; +		p_w_button.image_unselected.name("map_home.tga"); +		p_w_button.scale_image(true); +		 +		mHomePageButton = LLUICtrlFactory::create<LLButton>(p_w_button);  +		if(p.click_homepage_callback.isProvided()) +		{ +			mHomePageButton->setCommitCallback(boost::bind(p.click_homepage_callback())); +		} +		addChild(mHomePageButton); +		 +		// move text over to fit image in +		mTextBox->translate(TOOLTIP_PLAYBUTTON_SIZE + mPadding, 0); +	} +	  	if (p.click_callback.isProvided())  	{  		setMouseUpCallback(boost::bind(p.click_callback())); @@ -255,6 +320,10 @@ void LLToolTip::setVisible(BOOL visible)  BOOL LLToolTip::handleHover(S32 x, S32 y, MASK mask)  { +	//mInfoButton->setFlashing(true); +	if(mInfoButton) +		mInfoButton->setHighlight(true); +	  	LLPanel::handleHover(x, y, mask);  	if (mHasClickCallback)  	{ @@ -263,6 +332,14 @@ BOOL LLToolTip::handleHover(S32 x, S32 y, MASK mask)  	return TRUE;  } +void LLToolTip::onMouseLeave(S32 x, S32 y, MASK mask) +{ +	//mInfoButton->setFlashing(true); +	if(mInfoButton) +		mInfoButton->setHighlight(false); +	LLUICtrl::onMouseLeave(x, y, mask); +} +  void LLToolTip::draw()  {  	F32 alpha = 1.f; @@ -393,7 +470,9 @@ void LLToolTipMgr::show(const LLToolTip::Params& params)  		&& LLUI::getMouseIdleTime() > params.delay_time)	// the mouse has been still long enough  	{  		bool tooltip_changed = mLastToolTipParams.message() != params.message() -								|| mLastToolTipParams.pos() != params.pos(); +								|| mLastToolTipParams.pos() != params.pos() +								|| mLastToolTipParams.time_based_media() != params.time_based_media() +								|| mLastToolTipParams.web_based_media() != params.web_based_media();  		bool tooltip_shown = mToolTip   							 && mToolTip->getVisible()  diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h index 63e7249a12..4a5f60f93d 100644 --- a/indra/llui/lltooltip.h +++ b/indra/llui/lltooltip.h @@ -81,6 +81,13 @@ public:  		Optional<click_callback_t>	click_callback;  		Optional<LLUIImage*>		image; +		 +		 +		Optional<bool>				time_based_media; +		Optional<bool>				web_based_media; +		Optional<bool>				media_playing; +		Optional<click_callback_t>	click_playmedia_callback; +		Optional<click_callback_t>	click_homepage_callback;  		Optional<S32>				max_width;  		Optional<S32>				padding;  		Optional<bool>				wrap; @@ -89,7 +96,7 @@ public:  	};  	/*virtual*/ void draw();  	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); - +	/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);  	/*virtual*/ void setValue(const LLSD& value);  	/*virtual*/ void setVisible(BOOL visible); @@ -101,6 +108,10 @@ public:  private:  	class LLTextBox*	mTextBox; +	class LLButton*     mInfoButton; +	class LLButton*     mPlayMediaButton; +	class LLButton*     mHomePageButton; +  	LLFrameTimer	mFadeTimer;  	LLFrameTimer	mVisibleTimer;  	S32				mMaxWidth; diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt index d35afd8cbd..cc03d9cb72 100644 --- a/indra/media_plugins/CMakeLists.txt +++ b/indra/media_plugins/CMakeLists.txt @@ -9,3 +9,5 @@ add_subdirectory(gstreamer010)  if (WINDOWS OR DARWIN)      add_subdirectory(quicktime)  endif (WINDOWS OR DARWIN) + +add_subdirectory(example) diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt new file mode 100644 index 0000000000..4d82f2747c --- /dev/null +++ b/indra/media_plugins/example/CMakeLists.txt @@ -0,0 +1,74 @@ +# -*- cmake -*- + +project(media_plugin_example) + +include(00-Common) +include(LLCommon) +include(LLImage) +include(LLPlugin) +include(LLMath) +include(LLRender) +include(LLWindow) +include(Linking) +include(PluginAPI) +include(MediaPluginBase) +include(FindOpenGL) + +include(ExamplePlugin) + +include_directories( +    ${LLPLUGIN_INCLUDE_DIRS} +    ${MEDIA_PLUGIN_BASE_INCLUDE_DIRS} +    ${LLCOMMON_INCLUDE_DIRS} +    ${LLMATH_INCLUDE_DIRS} +    ${LLIMAGE_INCLUDE_DIRS} +    ${LLRENDER_INCLUDE_DIRS} +    ${LLWINDOW_INCLUDE_DIRS} +) + + +### media_plugin_example + +set(media_plugin_example_SOURCE_FILES +    media_plugin_example.cpp +    ) + +add_library(media_plugin_example +    SHARED +    ${media_plugin_example_SOURCE_FILES} +) + +target_link_libraries(media_plugin_example +  ${LLPLUGIN_LIBRARIES} +  ${MEDIA_PLUGIN_BASE_LIBRARIES} +  ${LLCOMMON_LIBRARIES} +  ${EXAMPLE_PLUGIN_LIBRARIES} +  ${PLUGIN_API_WINDOWS_LIBRARIES} +) + +add_dependencies(media_plugin_example +  ${LLPLUGIN_LIBRARIES} +  ${MEDIA_PLUGIN_BASE_LIBRARIES} +  ${LLCOMMON_LIBRARIES} +) + +if (WINDOWS) +  set_target_properties( +    media_plugin_example +    PROPERTIES +    LINK_FLAGS "/MANIFEST:NO" +    ) +endif (WINDOWS) + +if (DARWIN) +  # Don't prepend 'lib' to the executable name, and don't embed a full path in the library's install name +  set_target_properties( +    media_plugin_example +    PROPERTIES +    PREFIX "" +    BUILD_WITH_INSTALL_RPATH 1 +    INSTALL_NAME_DIR "@executable_path" +    LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp" +  ) + +endif (DARWIN)
\ No newline at end of file diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp new file mode 100644 index 0000000000..e873a0d034 --- /dev/null +++ b/indra/media_plugins/example/media_plugin_example.cpp @@ -0,0 +1,488 @@ +/** + * @file media_plugin_example.cpp + * @brief Example plugin for LLMedia API plugin system + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + * + * Copyright (c) 2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "llgl.h" +#include "llplugininstance.h" +#include "llpluginmessage.h" +#include "llpluginmessageclasses.h" +#include "media_plugin_base.h" + +#include <time.h> + +//////////////////////////////////////////////////////////////////////////////// +// +class MediaPluginExample : +		public MediaPluginBase +{ +	public: +		MediaPluginExample( LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data ); +		~MediaPluginExample(); + +		/*virtual*/ void receiveMessage( const char* message_string ); + +	private: +		bool init(); +		void update( int milliseconds ); +		void write_pixel( int x, int y, unsigned char r, unsigned char g, unsigned char b ); +		bool mFirstTime; + +		time_t mLastUpdateTime; +		enum Constants { ENumObjects = 10 }; +		unsigned char* mBackgroundPixels; +		int mColorR[ ENumObjects ]; +		int mColorG[ ENumObjects ]; +		int mColorB[ ENumObjects ]; +		int mXpos[ ENumObjects ]; +		int mYpos[ ENumObjects ]; +		int mXInc[ ENumObjects ]; +		int mYInc[ ENumObjects ]; +		int mBlockSize[ ENumObjects ]; +		bool mMouseButtonDown; +		bool mStopAction; +}; + +//////////////////////////////////////////////////////////////////////////////// +// +MediaPluginExample::MediaPluginExample( LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data ) : +	MediaPluginBase( host_send_func, host_user_data ) +{ +	mFirstTime = true; +	mWidth = 0; +	mHeight = 0; +	mDepth = 4; +	mPixels = 0; +	mMouseButtonDown = false; +	mStopAction = false; +	mLastUpdateTime = 0; +} + +//////////////////////////////////////////////////////////////////////////////// +// +MediaPluginExample::~MediaPluginExample() +{ +} + +//////////////////////////////////////////////////////////////////////////////// +// +void MediaPluginExample::receiveMessage( const char* message_string ) +{ +	LLPluginMessage message_in; + +	if ( message_in.parse( message_string ) >= 0 ) +	{ +		std::string message_class = message_in.getClass(); +		std::string message_name = message_in.getName(); + +		if ( message_class == LLPLUGIN_MESSAGE_CLASS_BASE ) +		{ +			if ( message_name == "init" ) +			{ +				LLPluginMessage message( "base", "init_response" ); +				LLSD versions = LLSD::emptyMap(); +				versions[ LLPLUGIN_MESSAGE_CLASS_BASE ] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION; +				versions[ LLPLUGIN_MESSAGE_CLASS_MEDIA ] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION; +				versions[ LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER ] = LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER_VERSION; +				message.setValueLLSD( "versions", versions ); + +				std::string plugin_version = "Example media plugin, Example Version 1.0.0.0"; +				message.setValue( "plugin_version", plugin_version ); +				sendMessage( message ); + +				// Plugin gets to decide the texture parameters to use. +				message.setMessage( LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params" ); +				message.setValueS32( "default_width", mWidth ); +				message.setValueS32( "default_height", mHeight ); +				message.setValueS32( "depth", mDepth ); +				message.setValueU32( "internalformat", GL_RGBA ); +				message.setValueU32( "format", GL_RGBA ); +				message.setValueU32( "type", GL_UNSIGNED_BYTE ); +				message.setValueBoolean( "coords_opengl", false ); +				sendMessage( message ); +			} +			else +			if ( message_name == "idle" ) +			{ +				// no response is necessary here. +				F64 time = message_in.getValueReal( "time" ); + +				// Convert time to milliseconds for update() +				update( time ); +			} +			else +			if ( message_name == "cleanup" ) +			{ +				// clean up here +			} +			else +			if ( message_name == "shm_added" ) +			{ +				SharedSegmentInfo info; +				info.mAddress = message_in.getValuePointer( "address" ); +				info.mSize = ( size_t )message_in.getValueS32( "size" ); +				std::string name = message_in.getValue( "name" ); + +				mSharedSegments.insert( SharedSegmentMap::value_type( name, info ) ); + +			} +			else +			if ( message_name == "shm_remove" ) +			{ +				std::string name = message_in.getValue( "name" ); + +				SharedSegmentMap::iterator iter = mSharedSegments.find( name ); +				if( iter != mSharedSegments.end() ) +				{ +					if ( mPixels == iter->second.mAddress ) +					{ +						// This is the currently active pixel buffer. +						// Make sure we stop drawing to it. +						mPixels = NULL; +						mTextureSegmentName.clear(); +					}; +					mSharedSegments.erase( iter ); +				} +				else +				{ +					//std::cerr << "MediaPluginExample::receiveMessage: unknown shared memory region!" << std::endl; +				}; + +				// Send the response so it can be cleaned up. +				LLPluginMessage message( "base", "shm_remove_response" ); +				message.setValue( "name", name ); +				sendMessage( message ); +			} +			else +			{ +				//std::cerr << "MediaPluginExample::receiveMessage: unknown base message: " << message_name << std::endl; +			}; +		} +		else +		if ( message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA ) +		{ +			if ( message_name == "size_change" ) +			{ +				std::string name = message_in.getValue( "name" ); +				S32 width = message_in.getValueS32( "width" ); +				S32 height = message_in.getValueS32( "height" ); +				S32 texture_width = message_in.getValueS32( "texture_width" ); +				S32 texture_height = message_in.getValueS32( "texture_height" ); + +				if ( ! name.empty() ) +				{ +					// Find the shared memory region with this name +					SharedSegmentMap::iterator iter = mSharedSegments.find( name ); +					if ( iter != mSharedSegments.end() ) +					{ +						mPixels = ( unsigned char* )iter->second.mAddress; +						mWidth = width; +						mHeight = height; + +						mTextureWidth = texture_width; +						mTextureHeight = texture_height; + +						init(); +					}; +				}; + +				LLPluginMessage message( LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_response" ); +				message.setValue( "name", name ); +				message.setValueS32( "width", width ); +				message.setValueS32( "height", height ); +				message.setValueS32( "texture_width", texture_width ); +				message.setValueS32( "texture_height", texture_height ); +				sendMessage( message ); +			} +			else +			if ( message_name == "load_uri" ) +			{ +				std::string uri = message_in.getValue( "uri" ); +				if ( ! uri.empty() ) +				{ +				}; +			} +			else +			if ( message_name == "mouse_event" ) +			{ +				std::string event = message_in.getValue( "event" ); +				S32 button = message_in.getValueS32( "button" ); + +				// left mouse button +				if ( button == 0 ) +				{ +					int mouse_x = message_in.getValueS32( "x" ); +					int mouse_y = message_in.getValueS32( "y" ); +					std::string modifiers = message_in.getValue( "modifiers" ); + +					if ( event == "move" ) +					{ +						if ( mMouseButtonDown ) +							write_pixel( mouse_x, mouse_y, rand() % 0x80 + 0x80, rand() % 0x80 + 0x80, rand() % 0x80 + 0x80 ); +					} +					else +					if ( event == "down" ) +					{ +						mMouseButtonDown = true; +					} +					else +					if ( event == "up" ) +					{ +						mMouseButtonDown = false; +					} +					else +					if ( event == "double_click" ) +					{ +					}; +				}; +			} +			else +			if ( message_name == "key_event" ) +			{ +				std::string event = message_in.getValue( "event" ); +				S32 key = message_in.getValueS32( "key" ); +				std::string modifiers = message_in.getValue( "modifiers" ); + +				if ( event == "down" ) +				{ +					if ( key == ' ') +					{ +						mLastUpdateTime = 0; +						update( 0 ); +					}; +				}; +			} +			else +			{ +				//std::cerr << "MediaPluginExample::receiveMessage: unknown media message: " << message_string << std::endl; +			}; +		} +		else +		if ( message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER ) +		{ +			if ( message_name == "browse_reload" ) +			{ +				mLastUpdateTime = 0; +				mFirstTime = true; +				mStopAction = false; +				update( 0 ); +			} +			else +			if ( message_name == "browse_stop" ) +			{ +				for( int n = 0; n < ENumObjects; ++n ) +					mXInc[ n ] = mYInc[ n ] = 0; + +				mStopAction = true; +				update( 0 ); +			} +			else +			{ +				//std::cerr << "MediaPluginExample::receiveMessage: unknown media_browser message: " << message_string << std::endl; +			}; +		} +		else +		{ +			//std::cerr << "MediaPluginExample::receiveMessage: unknown message class: " << message_class << std::endl; +		}; +	}; +} + +//////////////////////////////////////////////////////////////////////////////// +// +void MediaPluginExample::write_pixel( int x, int y, unsigned char r, unsigned char g, unsigned char b ) +{ +	// make sure we don't write outside the buffer +	if ( ( x < 0 ) || ( x >= mWidth ) || ( y < 0 ) || ( y >= mHeight ) ) +		return; +		 +	if ( mBackgroundPixels != NULL ) +	{ +		unsigned char *pixel = mBackgroundPixels; +		pixel += y * mWidth * mDepth; +		pixel += ( x * mDepth ); +		pixel[ 0 ] = b; +		pixel[ 1 ] = g; +		pixel[ 2 ] = r; + +		setDirty( x, y, x + 1, y + 1 ); +	}; +} + +//////////////////////////////////////////////////////////////////////////////// +// +void MediaPluginExample::update( int milliseconds ) +{ +	if ( mWidth < 1 || mWidth > 2048 || mHeight < 1 || mHeight > 2048 ) +		return; + +	if ( mPixels == 0 ) +			return; + +	if ( mFirstTime ) +	{ +		for( int n = 0; n < ENumObjects; ++n ) +		{ +			mXpos[ n ] = ( mWidth / 2 ) + rand() % ( mWidth / 16 ) - ( mWidth / 32 ); +			mYpos[ n ] = ( mHeight / 2 ) + rand() % ( mHeight / 16 ) - ( mHeight / 32 ); + +			mColorR[ n ] = rand() % 0x60 + 0x60; +			mColorG[ n ] = rand() % 0x60 + 0x60; +			mColorB[ n ] = rand() % 0x60 + 0x60; + +			mXInc[ n ] = 0; +			while ( mXInc[ n ] == 0 ) +				mXInc[ n ] = rand() % 7 - 3; + +			mYInc[ n ] = 0; +			while ( mYInc[ n ] == 0 ) +				mYInc[ n ] = rand() % 9 - 4; + +			mBlockSize[ n ] = rand() % 0x30 + 0x10; +		}; + +		delete [] mBackgroundPixels; +				 +		mBackgroundPixels = new unsigned char[ mWidth * mHeight * mDepth ]; + +		mFirstTime = false; +	}; + +	if ( mStopAction ) +		return; + +	if ( time( NULL ) > mLastUpdateTime + 3 ) +	{ +		const int num_squares = rand() % 20 + 4; +		int sqr1_r = rand() % 0x80 + 0x20; +		int sqr1_g = rand() % 0x80 + 0x20; +		int sqr1_b = rand() % 0x80 + 0x20; +		int sqr2_r = rand() % 0x80 + 0x20; +		int sqr2_g = rand() % 0x80 + 0x20; +		int sqr2_b = rand() % 0x80 + 0x20; + +		for ( int y1 = 0; y1 < num_squares; ++y1 ) +		{ +			for ( int x1 = 0; x1 < num_squares; ++x1 ) +			{ +				int px_start = mWidth * x1 / num_squares; +				int px_end = ( mWidth * ( x1 + 1 ) ) / num_squares; +				int py_start = mHeight * y1 / num_squares; +				int py_end = ( mHeight * ( y1 + 1 ) ) / num_squares; + +				for( int y2 = py_start; y2 < py_end; ++y2 ) +				{ +					for( int x2 = px_start; x2 < px_end; ++x2 ) +					{ +						int rowspan = mWidth * mDepth; + +						if ( ( y1 % 2 ) ^ ( x1 % 2 ) ) +						{ +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 0 ] = sqr1_r; +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 1 ] = sqr1_g; +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 2 ] = sqr1_b; +						} +						else +						{ +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 0 ] = sqr2_r; +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 1 ] = sqr2_g; +							mBackgroundPixels[ y2 * rowspan + x2 * mDepth + 2 ] = sqr2_b; +						}; +					}; +				}; +			}; +		}; + +		time( &mLastUpdateTime ); +	}; + +	memcpy( mPixels, mBackgroundPixels, mWidth * mHeight * mDepth ); + +	for( int n = 0; n < ENumObjects; ++n ) +	{ +		if ( rand() % 50 == 0 ) +		{ +				mXInc[ n ] = 0; +				while ( mXInc[ n ] == 0 ) +					mXInc[ n ] = rand() % 7 - 3; + +				mYInc[ n ] = 0; +				while ( mYInc[ n ] == 0 ) +					mYInc[ n ] = rand() % 9 - 4; +		}; + +		if ( mXpos[ n ] + mXInc[ n ] < 0 || mXpos[ n ] + mXInc[ n ] >= mWidth - mBlockSize[ n ] ) +			mXInc[ n ] =- mXInc[ n ]; + +		if ( mYpos[ n ] + mYInc[ n ] < 0 || mYpos[ n ] + mYInc[ n ] >= mHeight - mBlockSize[ n ] ) +			mYInc[ n ] =- mYInc[ n ]; + +		mXpos[ n ] += mXInc[ n ]; +		mYpos[ n ] += mYInc[ n ]; + +		for( int y = 0; y < mBlockSize[ n ]; ++y ) +		{ +			for( int x = 0; x < mBlockSize[ n ]; ++x ) +			{ +				mPixels[ ( mXpos[ n ] + x ) * mDepth + ( mYpos[ n ] + y ) * mDepth * mWidth + 0 ] = mColorR[ n ]; +				mPixels[ ( mXpos[ n ] + x ) * mDepth + ( mYpos[ n ] + y ) * mDepth * mWidth + 1 ] = mColorG[ n ]; +				mPixels[ ( mXpos[ n ] + x ) * mDepth + ( mYpos[ n ] + y ) * mDepth * mWidth + 2 ] = mColorB[ n ]; +			}; +		}; +	}; + +	setDirty( 0, 0, mWidth, mHeight ); +}; + +//////////////////////////////////////////////////////////////////////////////// +// +bool MediaPluginExample::init() +{ +	LLPluginMessage message( LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text" ); +	message.setValue( "name", "Example Plugin" ); +	sendMessage( message ); + +	return true; +}; + +//////////////////////////////////////////////////////////////////////////////// +// +int init_media_plugin( LLPluginInstance::sendMessageFunction host_send_func, +						void* host_user_data, +						LLPluginInstance::sendMessageFunction *plugin_send_func, +						void **plugin_user_data ) +{ +	MediaPluginExample* self = new MediaPluginExample( host_send_func, host_user_data ); +	*plugin_send_func = MediaPluginExample::staticReceiveMessage; +	*plugin_user_data = ( void* )self; + +	return 0; +} diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 7c9e27a760..3ce8ff3deb 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -207,14 +207,13 @@ private:  			// don't flip bitmap  			LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true ); -			// Set the background color to black -			LLQtWebKit::getInstance()->  			// set background color to be black - mostly for initial login page  			LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, 0x00, 0x00, 0x00 ); -			// go to the "home page"  			// Don't do this here -- it causes the dreaded "white flash" when loading a browser instance. -//			LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" ); +			// FIXME: Re-added this because navigating to a "page" initializes things correctly - especially +			// for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date. +			LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" );  			// set flag so we don't do this again  			mBrowserInitialized = true; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index a7681e4a1d..0133d2222d 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -185,6 +185,7 @@ set(viewer_SOURCE_FILES      llfloatermediasettings.cpp      llfloatermemleak.cpp      llfloaternamedesc.cpp +	llfloaternearbymedia.cpp      llfloaternotificationsconsole.cpp      llfloateropenobject.cpp      llfloaterparcel.cpp @@ -665,6 +666,7 @@ set(viewer_HEADER_FILES      llfloatermediasettings.h      llfloatermemleak.h      llfloaternamedesc.h +	llfloaternearbymedia.h      llfloaternotificationsconsole.h      llfloateropenobject.h      llfloaterparcel.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 6bc95b9cdb..c4722b772e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3631,6 +3631,17 @@        <key>Value</key>        <integer>1</integer>      </map> +    <key>IMShowControlPanel</key> +    <map> +      <key>Comment</key> +      <string>Show IM Control Panel</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> @@ -4875,7 +4886,7 @@        <key>Value</key>        <integer>10</integer>      </map> -    <key>ToastOpaqueTime</key> +    <key>ToastFadingTime</key>      <map>        <key>Comment</key>        <string>Number of seconds while a toast is fading </string> @@ -4887,6 +4898,29 @@        <integer>1</integer>      </map>      <key>StartUpToastLifeTime</key> +    <key>NearbyToastFadingTime</key> +    <map> +      <key>Comment</key> +      <string>Number of seconds while a nearby chat toast is fading </string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>S32</string> +      <key>Value</key> +      <integer>3</integer> +    </map> +    <key>NearbyToastLifeTime</key> +    <map> +      <key>Comment</key> +      <string>Number of seconds while a nearby chat toast exists</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>S32</string> +      <key>Value</key> +      <integer>23</integer> +    </map> +    <key>StartUpToastLifeTime</key>      <map>        <key>Comment</key>        <string>Number of seconds while a StartUp toast exist</string> @@ -8812,13 +8846,13 @@      <key>UICloseBoxFromTop</key>      <map>        <key>Comment</key> -      <string>Size of UI floater close box from top</string> +      <string>Distance from top of floater to top of close box icon, pixels</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key>        <string>S32</string>        <key>Value</key> -      <real>1</real> +      <real>5</real>      </map>      <key>UIExtraTriangleHeight</key>      <map> @@ -8853,17 +8887,6 @@        <key>Value</key>        <real>16</real>      </map> -    <key>UIFloaterHeaderSize</key> -    <map> -      <key>Comment</key> -      <string>Size of UI floater header size</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>S32</string> -      <key>Value</key> -      <real>18</real> -    </map>      <key>UIFloaterHPad</key>      <map>        <key>Comment</key> @@ -8886,16 +8909,16 @@        <key>Value</key>        <integer>0</integer>      </map> -    <key>UIFloaterVPad</key> +    <key>UIFloaterTitleVPad</key>      <map>        <key>Comment</key> -      <string>Size of UI floater vertical pad</string> +      <string>Distance from top of floater to top of title string, pixels</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key>        <string>S32</string>        <key>Value</key> -      <real>6</real> +      <real>7</real>      </map>      <key>UIImgDefaultEyesUUID</key>      <map> @@ -9007,17 +9030,6 @@        <key>Value</key>        <string>5748decc-f629-461c-9a36-a35a221fe21f</string>      </map> -    <key>UIImgDefaultTattooUUID</key> -    <map> -      <key>Comment</key> -      <string /> -      <key>Persist</key> -      <integer>0</integer> -      <key>Type</key> -      <string>String</string> -      <key>Value</key> -      <string>5748decc-f629-461c-9a36-a35a221fe21f</string> -    </map>      <key>UIImgDefaultUnderwearUUID</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index b9a0b4293d..380469f5b3 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1985,6 +1985,17 @@ bool LLAgentWearables::canWearableBeRemoved(const LLWearable* wearable) const  	return !(((type == WT_SHAPE) || (type == WT_SKIN) || (type == WT_HAIR) || (type == WT_EYES))  			 && (getWearableCount(type) <= 1) );		    } +void LLAgentWearables::animateAllWearableParams(F32 delta, BOOL set_by_user) +{ +	for( S32 type = 0; type < WT_COUNT; ++type ) +	{ +		for (S32 count = 0; count < (S32)getWearableCount((EWearableType)type); ++count) +		{ +			LLWearable *wearable = getWearable((EWearableType)type,count); +			wearable->animateParams(delta, set_by_user); +		} +	} +}  void LLAgentWearables::updateServer()  { diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 667cb94552..97de785c87 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -79,6 +79,8 @@ public:  	// Note: False for shape, skin, eyes, and hair, unless you have MORE than 1.  	bool			canWearableBeRemoved(const LLWearable* wearable) const; + +	void			animateAllWearableParams(F32 delta, BOOL set_by_user);  	//--------------------------------------------------------------------  	// Accessors diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 670f8717a2..bad61101c1 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -57,8 +57,6 @@ static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t4("chiclet_im_p2p");  static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t5("chiclet_im_group");  S32 LLNotificationChiclet::mUreadSystemNotifications = 0; -S32 LLNotificationChiclet::mUreadIMNotifications = 0; -  boost::signals2::signal<LLChiclet* (const LLUUID&),  		LLIMChiclet::CollectChicletCombiner<std::list<LLChiclet*> > > @@ -99,7 +97,6 @@ LLNotificationChiclet::LLNotificationChiclet(const Params& p)  	// connect counter handlers to the signals  	connectCounterUpdatersToSignal("notify");  	connectCounterUpdatersToSignal("groupnotify"); -	connectCounterUpdatersToSignal("notifytoast");  }  LLNotificationChiclet::~LLNotificationChiclet() @@ -113,16 +110,8 @@ void LLNotificationChiclet::connectCounterUpdatersToSignal(std::string notificat  	LLNotificationsUI::LLEventHandler* n_handler = manager->getHandlerForNotification(notification_type);  	if(n_handler)  	{ -		if(notification_type == "notifytoast") -		{ -			n_handler->setNewNotificationCallback(boost::bind(&LLNotificationChiclet::updateUreadIMNotifications, this)); -			n_handler->setDelNotification(boost::bind(&LLNotificationChiclet::updateUreadIMNotifications, this)); -		} -		else -		{ -			n_handler->setNewNotificationCallback(boost::bind(&LLNotificationChiclet::incUreadSystemNotifications, this)); -			n_handler->setDelNotification(boost::bind(&LLNotificationChiclet::decUreadSystemNotifications, this)); -		} +		n_handler->setNewNotificationCallback(boost::bind(&LLNotificationChiclet::incUreadSystemNotifications, this)); +		n_handler->setDelNotification(boost::bind(&LLNotificationChiclet::decUreadSystemNotifications, this));  	}  } @@ -147,12 +136,6 @@ void LLNotificationChiclet::setToggleState(BOOL toggled) {  	mButton->setToggleState(toggled);  } -void LLNotificationChiclet::updateUreadIMNotifications() -{ -	mUreadIMNotifications = gIMMgr->getNumberOfUnreadIM(); -	setCounter(mUreadSystemNotifications + mUreadIMNotifications); -} -  //////////////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////////////  ////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index d1153a075d..6eefd9829f 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -608,10 +608,9 @@ public:  	/*virtual*/ ~ LLNotificationChiclet(); -	// methods for updating a number of unread System or IM notifications -	void incUreadSystemNotifications() { setCounter(++mUreadSystemNotifications + mUreadIMNotifications); } -	void decUreadSystemNotifications() { setCounter(--mUreadSystemNotifications + mUreadIMNotifications); } -	void updateUreadIMNotifications(); +	// methods for updating a number of unread System notifications +	void incUreadSystemNotifications() { setCounter(++mUreadSystemNotifications); } +	void decUreadSystemNotifications() { setCounter(--mUreadSystemNotifications); }  	void setToggleState(BOOL toggled);  protected: @@ -622,7 +621,6 @@ protected:  	friend class LLUICtrlFactory;  	static S32 mUreadSystemNotifications; -	static S32 mUreadIMNotifications;  protected:  	LLButton* mButton; diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp index 45f4b4fbd0..527656ab6b 100644 --- a/indra/newview/lldriverparam.cpp +++ b/indra/newview/lldriverparam.cpp @@ -224,6 +224,7 @@ void LLDriverParam::setAvatar(LLVOAvatar *avatarp)  		}  	}  	*new_param = *this; +	new_param->setIsDummy(FALSE);  	return new_param;  } diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index ccfe7d4b64..8ac7f3fd7e 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -35,6 +35,7 @@  // Viewer includes  #include "llagent.h" +#include "llcallingcard.h"  #include "llfocusmgr.h"  #include "llfloaterreg.h"  #include "llviewercontrol.h" @@ -76,6 +77,7 @@ LLFloaterAvatarPicker::LLFloaterAvatarPicker(const LLSD& key)  	mCloseOnSelect(FALSE)  {  // 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_picker.xml"); +	mCommitCallbackRegistrar.add("Refresh.FriendList", boost::bind(&LLFloaterAvatarPicker::populateFriend, this));  }  BOOL LLFloaterAvatarPicker::postBuild() @@ -95,7 +97,11 @@ BOOL LLFloaterAvatarPicker::postBuild()  	LLScrollListCtrl* nearme = getChild<LLScrollListCtrl>("NearMe");  	nearme->setDoubleClickCallback(onBtnSelect, this);  	childSetCommitCallback("NearMe", onList, this); -	 + +	LLScrollListCtrl* friends = getChild<LLScrollListCtrl>("Friends"); +	friends->setDoubleClickCallback(onBtnSelect, this); +	childSetCommitCallback("Friends", onList, this); +  	childSetAction("Select", onBtnSelect, this);  	childDisable("Select"); @@ -119,6 +125,8 @@ BOOL LLFloaterAvatarPicker::postBuild()  	center(); +	populateFriend(); +  	return TRUE;  } @@ -159,25 +167,37 @@ void LLFloaterAvatarPicker::onBtnSelect(void* userdata)  	if(self->mCallback)  	{ +		std::string acvtive_panel_name; +		LLScrollListCtrl* list =  NULL;  		LLPanel* active_panel = self->childGetVisibleTab("ResidentChooserTabs"); - -		if(active_panel == self->getChild<LLPanel>("SearchPanel")) +		if(active_panel)  		{ -			std::vector<std::string>	avatar_names; -			std::vector<LLUUID>			avatar_ids; -			getSelectedAvatarData(self->getChild<LLScrollListCtrl>("SearchResults"), avatar_names, avatar_ids); -			self->mCallback(avatar_names, avatar_ids, self->mCallbackUserdata); +			acvtive_panel_name = active_panel->getName(); +		} +		if(acvtive_panel_name == "SearchPanel") +		{ +			list = self->getChild<LLScrollListCtrl>("SearchResults"); +		} +		else if(acvtive_panel_name == "NearMePanel") +		{ +			list =self->getChild<LLScrollListCtrl>("NearMe"); +		} +		else if (acvtive_panel_name == "FriendsPanel") +		{ +			list =self->getChild<LLScrollListCtrl>("Friends");  		} -		else if(active_panel == self->getChild<LLPanel>("NearMePanel")) + +		if(list)  		{  			std::vector<std::string>	avatar_names;  			std::vector<LLUUID>			avatar_ids; -			getSelectedAvatarData(self->getChild<LLScrollListCtrl>("NearMe"), avatar_names, avatar_ids); +			getSelectedAvatarData(list, avatar_names, avatar_ids);  			self->mCallback(avatar_names, avatar_ids, self->mCallbackUserdata);  		}  	}  	self->getChild<LLScrollListCtrl>("SearchResults")->deselectAllItems(TRUE);  	self->getChild<LLScrollListCtrl>("NearMe")->deselectAllItems(TRUE); +	self->getChild<LLScrollListCtrl>("Friends")->deselectAllItems(TRUE);  	if(self->mCloseOnSelect)  	{  		self->mCloseOnSelect = FALSE; @@ -268,6 +288,26 @@ void LLFloaterAvatarPicker::populateNearMe()  	}  } +void LLFloaterAvatarPicker::populateFriend() +{ +	LLScrollListCtrl* friends_scroller = getChild<LLScrollListCtrl>("Friends"); +	friends_scroller->deleteAllItems(); +	LLCollectAllBuddies collector; +	LLAvatarTracker::instance().applyFunctor(collector); +	LLCollectAllBuddies::buddy_map_t::iterator it; +	 +	 +	for(it = collector.mOnline.begin(); it!=collector.mOnline.end(); it++) +	{ +		friends_scroller->addStringUUIDItem(it->first, it->second); +	} +	for(it = collector.mOffline.begin(); it!=collector.mOffline.end(); it++) +	{ +			friends_scroller->addStringUUIDItem(it->first, it->second); +	} +	friends_scroller->sortByColumnIndex(0, TRUE); +} +  void LLFloaterAvatarPicker::draw()  {  	LLFloater::draw(); @@ -289,6 +329,10 @@ BOOL LLFloaterAvatarPicker::visibleItemsSelected() const  	{  		return getChild<LLScrollListCtrl>("NearMe")->getFirstSelectedIndex() >= 0;  	} +	else if(active_panel == getChild<LLPanel>("FriendsPanel")) +	{ +		return getChild<LLScrollListCtrl>("Friends")->getFirstSelectedIndex() >= 0; +	}  	return FALSE;  } @@ -321,6 +365,7 @@ void LLFloaterAvatarPicker::setAllowMultiple(BOOL allow_multiple)  {  	getChild<LLScrollListCtrl>("SearchResults")->setAllowMultipleSelection(allow_multiple);  	getChild<LLScrollListCtrl>("NearMe")->setAllowMultipleSelection(allow_multiple); +	getChild<LLScrollListCtrl>("Friends")->setAllowMultipleSelection(allow_multiple);  }  // static  diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h index 85aacb68a5..b8ace985d9 100644 --- a/indra/newview/llfloateravatarpicker.h +++ b/indra/newview/llfloateravatarpicker.h @@ -67,6 +67,7 @@ private:  		   void onTabChanged();  	void populateNearMe(); +	void populateFriend();  	BOOL visibleItemsSelected() const; // Returns true if any items in the current tab are selected.  	void find(); diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index dca0773139..d1317f7c36 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -268,8 +268,8 @@ void LLFloaterCamera::updateState()  	LLRect controls_rect;  	if (childGetRect(CONTROLS, controls_rect))  	{ -		static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); -		static S32 height = controls_rect.getHeight() - floater_header_size; +		S32 floater_header_size = getHeaderHeight(); +		S32 height = controls_rect.getHeight() - floater_header_size;  		S32 newHeight = rect.getHeight();  		if (showControls) diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp index 8e385fca78..73b79d8e13 100644 --- a/indra/newview/llfloatercolorpicker.cpp +++ b/indra/newview/llfloatercolorpicker.cpp @@ -561,7 +561,7 @@ void LLFloaterColorPicker::draw()  	// create rgb area outline  	gl_rect_2d ( mRGBViewerImageLeft,  				 mRGBViewerImageTop - mRGBViewerImageHeight, -				 mRGBViewerImageLeft + mRGBViewerImageWidth, +				 mRGBViewerImageLeft + mRGBViewerImageWidth + 1,  				 mRGBViewerImageTop,  				 LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ),  				 FALSE ); @@ -591,7 +591,7 @@ void LLFloaterColorPicker::draw()  	// draw luminance slider outline  	gl_rect_2d ( mLumRegionLeft,  				 mLumRegionTop - mLumRegionHeight, -				 mLumRegionLeft + mLumRegionWidth, +				 mLumRegionLeft + mLumRegionWidth + 1,  				 mLumRegionTop,  				 LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ),  				 FALSE ); @@ -607,7 +607,7 @@ void LLFloaterColorPicker::draw()  	// draw selected color swatch outline  	gl_rect_2d ( mSwatchRegionLeft,  				 mSwatchRegionTop - mSwatchRegionHeight, -				 mSwatchRegionLeft + mSwatchRegionWidth, +				 mSwatchRegionLeft + mSwatchRegionWidth + 1,  				 mSwatchRegionTop,  				 LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ),  				 FALSE ); diff --git a/indra/newview/llfloatergroupinvite.cpp b/indra/newview/llfloatergroupinvite.cpp index 3598479305..bf484c6343 100644 --- a/indra/newview/llfloatergroupinvite.cpp +++ b/indra/newview/llfloatergroupinvite.cpp @@ -81,7 +81,7 @@ void LLFloaterGroupInvite::impl::closeFloater(void* data)  LLFloaterGroupInvite::LLFloaterGroupInvite(const LLUUID& group_id)  :	LLFloater(group_id)  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	S32 floater_header_size = getHeaderHeight();  	LLRect contents;  	mImpl = new impl(group_id); @@ -114,7 +114,8 @@ LLFloaterGroupInvite::~LLFloaterGroupInvite()  // static  void LLFloaterGroupInvite::showForGroup(const LLUUID& group_id, std::vector<LLUUID> *agent_ids)  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	const LLFloater::Params& floater_params = LLFloater::getDefaultParams(); +	S32 floater_header_size = floater_params.header_height;  	LLRect contents;  	// Make sure group_id isn't null diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp index f2dff55044..f20fca1258 100644 --- a/indra/newview/llfloaternotificationsconsole.cpp +++ b/indra/newview/llfloaternotificationsconsole.cpp @@ -221,7 +221,8 @@ void LLFloaterNotificationConsole::removeChannel(const std::string& name)  //static   void LLFloaterNotificationConsole::updateResizeLimits()  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	const LLFloater::Params& floater_params = LLFloater::getDefaultParams(); +	S32 floater_header_size = floater_params.header_height;  	LLLayoutStack& stack = getChildRef<LLLayoutStack>("notification_channels");  	setResizeLimits(getMinWidth(), floater_header_size + HEADER_PADDING + ((NOTIFICATION_PANEL_HEADER_HEIGHT + 3) * stack.getNumPanels())); diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 3bec6f9e73..5fee84190b 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -49,6 +49,7 @@  #include "llfloaterreg.h"  #include "llfocusmgr.h"  #include "llmediaentry.h" +#include "llmediactrl.h"  #include "llmenugl.h"  #include "llpanelcontents.h"  #include "llpanelface.h" @@ -221,6 +222,7 @@ BOOL	LLFloaterTools::postBuild()  	mRadioGroupMove		= getChild<LLRadioGroup>("move_radio_group");  	mRadioGroupEdit		= getChild<LLRadioGroup>("edit_radio_group");  	mBtnGridOptions		= getChild<LLButton>("Options..."); +	mTitleMedia			= getChild<LLMediaCtrl>("title_media");  	mCheckSelectIndividual	= getChild<LLCheckBoxCtrl>("checkbox edit linked parts");	  	childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts")); @@ -304,6 +306,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)  	mCheckSnapToGrid(NULL),  	mBtnGridOptions(NULL), +	mTitleMedia(NULL),  	mTextGridMode(NULL),  	mComboGridMode(NULL),  	mCheckStretchUniform(NULL), @@ -335,7 +338,8 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)  	mPanelLandInfo(NULL),  	mTabLand(NULL), -	mDirty(TRUE) +	mDirty(TRUE), +	mNeedMediaTitle(TRUE)  {  	gFloaterTools = this; @@ -440,6 +444,9 @@ void LLFloaterTools::draw()  		mDirty = FALSE;  	} +	// grab media name/title and update the UI widget +	updateMediaTitle(); +  	//	mCheckSelectIndividual->set(gSavedSettings.getBOOL("EditLinkedParts"));  	LLFloater::draw();  } @@ -736,6 +743,10 @@ void LLFloaterTools::onClose(bool app_quitting)  	LLViewerJoystick::getInstance()->moveAvatar(false); +	// destroy media source used to grab media title +	if( mTitleMedia ) +		mTitleMedia->unloadMediaSource(); +      // Different from handle_reset_view in that it doesn't actually   	//   move the camera if EditCameraMovement is not set.  	gAgent.resetView(gSavedSettings.getBOOL("EditCameraMovement")); @@ -1108,6 +1119,7 @@ void LLFloaterTools::getMediaState()  	std::string multi_media_info_str = LLTrans::getString("Multiple Media");  	std::string media_title = ""; +	mNeedMediaTitle = false;  	// update UI depending on whether "object" (prim or face) has media  	// and whether or not you are allowed to edit it. @@ -1123,18 +1135,19 @@ void LLFloaterTools::getMediaState()  			// Media data is valid  			if(media_data_get!=default_media_data)  			{ -				//TODO: get media title -				//media_title =  media_data_get->getTitle(); -				//LLFloaterMediaSettings::getInstance()->mIdenticalValidMedia = true; +				// initial media title is the media URL (until we get the name)  				media_title = media_data_get.getHomeURL(); + +				// kick off a navigate and flag that we need to update the title +				navigateToTitleMedia( media_data_get.getHomeURL() ); +				mNeedMediaTitle = true;  			}  			// else all faces might be empty.  -			 -			  		}  		else // there' re Different Medias' been set on on the faces.  		{  			media_title = multi_media_info_str; +			mNeedMediaTitle = false;  		}  		childSetEnabled("media_tex",  bool_has_media & editable); @@ -1152,17 +1165,20 @@ void LLFloaterTools::getMediaState()  		if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia)  		{  			media_title = multi_media_info_str; +			mNeedMediaTitle = false;  		}  		else  		{  			// Media data is valid  			if(media_data_get!=default_media_data)  			{ -				//TODO: get media title -				//media_title =  media_data_get->getTitle(); +				// initial media title is the media URL (until we get the name)  				media_title = media_data_get.getHomeURL(); + +				// kick off a navigate and flag that we need to update the title +				navigateToTitleMedia( media_data_get.getHomeURL() ); +				mNeedMediaTitle = true;  			} -			  		}  		media_info->setEnabled(false); @@ -1253,12 +1269,63 @@ bool LLFloaterTools::deleteMediaConfirm(const LLSD& notification, const LLSD& re  	return false;  } +////////////////////////////////////////////////////////////////////////////// +//  void LLFloaterTools::clearMediaSettings()  {  	LLFloaterMediaSettings::getInstance();  	LLFloaterMediaSettings::clearValues(false);  } + +////////////////////////////////////////////////////////////////////////////// +// +void LLFloaterTools::navigateToTitleMedia( const std::string url ) +{ +	if ( mTitleMedia ) +	{ +		LLPluginClassMedia* media_plugin = mTitleMedia->getMediaPlugin(); +		if ( media_plugin ) +		{ +			// if it's a movie, we don't want to hear it +			media_plugin->setVolume( 0 ); +		}; +		mTitleMedia->navigateTo( url ); +	}; +} + +////////////////////////////////////////////////////////////////////////////// +// +void LLFloaterTools::updateMediaTitle() +{ +	// only get the media name if we need it +	if ( ! mNeedMediaTitle ) +		return; + +	// get plugin impl +	LLPluginClassMedia* media_plugin = mTitleMedia->getMediaPlugin(); +	if ( media_plugin ) +	{ +		// get the media name (asynchronous - must call repeatedly) +		std::string media_title = media_plugin->getMediaName(); + +		// only replace the title if what we get contains something +		if ( ! media_title.empty() ) +		{ +			// update the UI widget +			LLLineEditor* media_title_field = getChild<LLLineEditor>("media_info"); +			if ( media_title_field ) +			{ +				media_title_field->setText( media_title ); + +				// stop looking for a title when we get one +				// FIXME: check this is the right approach +				mNeedMediaTitle = false; +			}; +		}; +	}; +} +  //////////////////////////////////////////////////////////////////////////////  //  void LLFloaterTools::updateMediaSettings() diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index 59acef6071..a3e0cac034 100644 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -51,6 +51,7 @@ class LLRadioGroup;  class LLSlider;  class LLTabContainer;  class LLTextBox; +class LLMediaCtrl;  class LLTool;  class LLParcelSelection;  class LLObjectSelection; @@ -107,6 +108,8 @@ public:  	void onClickBtnAddMedia();  	void onClickBtnEditMedia();  	void clearMediaSettings(); +	void updateMediaTitle(); +	void navigateToTitleMedia( const std::string url );  	bool selectedMediaEditable();  private: @@ -182,6 +185,9 @@ public:  	LLParcelSelectionHandle	mParcelSelection;  	LLObjectSelectionHandle	mObjectSelection; +	LLMediaCtrl				*mTitleMedia; +	bool					mNeedMediaTitle; +  private:  	BOOL					mDirty; diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index ac743df4f1..2fe21f28de 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -865,7 +865,8 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)  	}  	else																// if it is a panel...  	{ -		static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +		const LLFloater::Params& floater_params = LLFloater::getDefaultParams(); +		S32 floater_header_size = floater_params.header_height;  		LLPanel::Params panel_params;  		LLPanel* panel = LLUICtrlFactory::create<LLPanel>(panel_params);	// create a new panel diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index f3fec70ac9..b21df87093 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -302,6 +302,8 @@ void LLIMFloater::onSlide()  	LLPanel* im_control_panel = getChild<LLPanel>("panel_im_control_panel");  	im_control_panel->setVisible(!im_control_panel->getVisible()); +	gSavedSettings.setBOOL("IMShowControlPanel", im_control_panel->getVisible()); +  	getChild<LLButton>("slide_left_btn")->setVisible(im_control_panel->getVisible());  	getChild<LLButton>("slide_right_btn")->setVisible(!im_control_panel->getVisible());  } @@ -344,6 +346,8 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)  				LLDockControl::TOP,  boost::bind(&LLIMFloater::getAllowedRect, floater, _1)));  	} +	floater->childSetVisible("panel_im_control_panel", gSavedSettings.getBOOL("IMShowControlPanel")); +  	return floater;  } @@ -405,8 +409,6 @@ bool LLIMFloater::toggle(const LLUUID& session_id)  	{  		// ensure the list of messages is updated when floater is made visible  		show(session_id); -		// update number of unread notifications in the SysWell -		LLBottomTray::getInstance()->getSysWell()->updateUreadIMNotifications();  		return true;  	}  } diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp index 29cca14a7b..050a61c79b 100644 --- a/indra/newview/llinspectobject.cpp +++ b/indra/newview/llinspectobject.cpp @@ -35,10 +35,12 @@  // Viewer  #include "llinspect.h" +#include "llmediaentry.h"  #include "llnotifications.h"	// *TODO: Eliminate, add LLNotificationsUtil wrapper  #include "llselectmgr.h"  #include "llslurl.h"  #include "llviewermenu.h"		// handle_object_touch(), handle_buy() +#include "llviewermedia.h"  #include "llviewerobjectlist.h"	// to select the requested object  // Linden libraries @@ -92,8 +94,10 @@ private:  	void updateName(LLSelectNode* nodep);  	void updateDescription(LLSelectNode* nodep);  	void updatePrice(LLSelectNode* nodep); -	  	void updateCreator(LLSelectNode* nodep); +	 +	void updateMediaCurrentURL();	 +	void updateSecureBrowsing();  	void onClickBuy();  	void onClickPay(); @@ -106,13 +110,17 @@ private:  private:  	LLUUID				mObjectID; +	S32					mObjectFace; +	viewer_media_t		mMediaImpl;  	LLSafeHandle<LLObjectSelection> mObjectSelection;  };  LLInspectObject::LLInspectObject(const LLSD& sd)  :	LLInspect( LLSD() ),	// single_instance, doesn't really need key -	mObjectID(),			// set in onOpen() -	mObjectSelection() +	mObjectID(NULL),			// set in onOpen() +	mObjectFace(0), +	mObjectSelection(NULL), +	mMediaImpl(NULL)  {  	// can't make the properties request until the widgets are constructed  	// as it might return immediately, so do it in postBuild. @@ -139,7 +147,7 @@ BOOL LLInspectObject::postBuild(void)  	getChild<LLUICtrl>("object_name")->setValue("");  	getChild<LLUICtrl>("object_creator")->setValue("");  	getChild<LLUICtrl>("object_description")->setValue(""); - +	getChild<LLUICtrl>("object_media_url")->setValue("");  	// Set buttons invisible until we know what this object can do  	hideButtons(); @@ -182,7 +190,11 @@ void LLInspectObject::onOpen(const LLSD& data)  	// Extract appropriate avatar id  	mObjectID = data["object_id"]; - +	 +	if(data.has("object_face")) +	{ +		mObjectFace = data["object_face"]; +	}  	// Position the inspector relative to the mouse cursor  	// Similar to how tooltips are positioned  	// See LLToolTipMgr::createToolTip @@ -213,6 +225,17 @@ void LLInspectObject::onOpen(const LLSD& data)  			}  		} functor;  		mObjectSelection->applyToNodes(&functor); +		 +		// Does this face have media? +		const LLTextureEntry* tep = obj->getTE(mObjectFace); +		if (!tep) +			return; +		 +		const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +		if(!mep) +			return; +		 +		mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());  	}  } @@ -243,6 +266,30 @@ void LLInspectObject::update()  	updateDescription(nodep);  	updateCreator(nodep);  	updatePrice(nodep); +	 +	LLViewerObject* obj = nodep->getObject(); +	if(!obj) +		return; +	 +	if ( mObjectFace < 0  +		||  mObjectFace >= obj->getNumTEs() ) +	{ +		return; +	} +	 +	// Does this face have media? +	const LLTextureEntry* tep = obj->getTE(mObjectFace); +	if (!tep) +		return; +	 +	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +	if(!mep) +		return; +	 +	mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +	 +	updateMediaCurrentURL(); +	updateSecureBrowsing();  }  void LLInspectObject::hideButtons() @@ -381,6 +428,40 @@ void LLInspectObject::updateDescription(LLSelectNode* nodep)  	}  } +void LLInspectObject::updateMediaCurrentURL() +{	 +	LLTextBox* textbox = getChild<LLTextBox>("object_media_url"); +	std::string media_url = ""; +	textbox->setValue(media_url); +	textbox->setToolTip(media_url); +	 +	if(mMediaImpl.notNull() && mMediaImpl->hasMedia()) +	{ +		LLStringUtil::format_map_t args; +		LLPluginClassMedia* media_plugin = NULL; +		media_plugin = mMediaImpl->getMediaPlugin(); +		if(media_plugin) +		{ +			if(media_plugin->pluginSupportsMediaTime()) +			{ +				args["[CurrentURL]"] =  mMediaImpl->getMediaURL(); +			} +			else +			{ +				args["[CurrentURL]"] =  media_plugin->getLocation(); +			} +			media_url = LLTrans::getString("CurrentURL", args); +			textbox->setText(media_url); +			textbox->setToolTip(media_url); +		} +	} +	else +	{ +		textbox->setText(media_url); +		textbox->setToolTip(media_url); +	} +} +  void LLInspectObject::updateCreator(LLSelectNode* nodep)  {  	// final information for display @@ -453,6 +534,40 @@ void LLInspectObject::updatePrice(LLSelectNode* nodep)  	getChild<LLUICtrl>("price_icon")->setVisible(show_price_icon);  } +void LLInspectObject::updateSecureBrowsing() +{ +	bool is_secure_browsing = false; +	 +	if(mMediaImpl.notNull()  +	   && mMediaImpl->hasMedia()) +	{ +		LLPluginClassMedia* media_plugin = NULL; +		std::string current_url = ""; +		media_plugin = mMediaImpl->getMediaPlugin(); +		if(media_plugin) +		{ +			if(media_plugin->pluginSupportsMediaTime()) +			{ +				current_url = mMediaImpl->getMediaURL(); +			} +			else +			{ +				current_url =  media_plugin->getLocation(); +			} +		} +		 +		std::string prefix =  std::string("https://"); +		std::string test_prefix = current_url.substr(0, prefix.length()); +		LLStringUtil::toLower(test_prefix);	 +		if(test_prefix == prefix) +		{ +			is_secure_browsing = true; +		} +	} +	getChild<LLUICtrl>("secure_browsing")->setVisible(is_secure_browsing); +} + +  void LLInspectObject::onClickBuy()  {  	handle_buy(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 3aa35d98f8..59f70ea1bd 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1,11 +1,11 @@ -/**  +/**   * @file llinventorybridge.cpp   * @brief Implementation of the Inventory-Folder-View-Bridge classes.   *   * $LicenseInfo:firstyear=2001&license=viewergpl$ - *  + *   * Copyright (c) 2001-2009, Linden Research, Inc. - *  + *   * Second Life Viewer Source Code   * The source code in this file ("Source Code") is provided by Linden Lab   * to you under the terms of the GNU General Public License, version 2.0 @@ -13,17 +13,17 @@   * ("Other License"), formally executed by you and Linden Lab.  Terms of   * the GPL can be found in doc/GPL-license.txt in this distribution, or   * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - *  + *   * There are special exceptions to the terms and conditions of the GPL as   * it is applied to this Source Code. View the full text of the exception   * in the file doc/FLOSS-exception.txt in this software distribution, or   * online at   * http://secondlifegrid.net/programs/open_source/licensing/flossexception - *  + *   * By copying, modifying or distributing this software, you acknowledge   * that you have read and understood your obligations described above,   * and agree to abide by those obligations. - *  + *   * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE. @@ -83,7 +83,7 @@  #include "llvoavatar.h"  #include "llwearable.h"  #include "llwearablelist.h" -#include "llviewermessage.h"  +#include "llviewermessage.h"  #include "llviewerregion.h"  #include "llvoavatarself.h"  #include "lltabcontainer.h" @@ -147,8 +147,8 @@ std::string ICON_NAME[ICON_NAME_COUNT] =  	"Inv_Undershirt",  	"Inv_Underpants",  	"Inv_Skirt", -	"inv_item_alpha.tga", -	"inv_item_tattoo.tga", +	"Inv_Alpha", +	"Inv_Tattoo",  	"Inv_Animation",  	"Inv_Gesture", @@ -237,7 +237,7 @@ void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string&  	{  		return;  	} -	 +  	LLInventoryModel::item_array_t item_array = model->collectLinkedItems(item_id);  	for (LLInventoryModel::item_array_t::iterator iter = item_array.begin();  		 iter != item_array.end(); @@ -245,7 +245,7 @@ void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string&  	{  		LLViewerInventoryItem *linked_item = (*iter);  		if (linked_item->getUUID() == item_id) continue; -		 +  		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(linked_item);  		new_item->rename(new_name);  		new_item->updateServer(FALSE); @@ -290,7 +290,7 @@ void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batc  	S32 count = batch.count();  	S32 i,j;  	for(i = 0; i < count; ++i) -	{	 +	{  		bridge = (LLInvFVBridge*)(batch.get(i));  		if(!bridge || !bridge->isItemRemovable()) continue;  		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID()); @@ -303,7 +303,7 @@ void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batc  		}  	}  	for(i = 0; i < count; ++i) -	{		 +	{  		bridge = (LLInvFVBridge*)(batch.get(i));  		if(!bridge || !bridge->isItemRemovable()) continue;  		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID()); @@ -506,7 +506,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const  	return TRUE;  } -void hideContextEntries(LLMenuGL& menu,  +void hideContextEntries(LLMenuGL& menu,  						const std::vector<std::string> &entries_to_show,  						const std::vector<std::string> &disabled_entries)  { @@ -523,8 +523,8 @@ void hideContextEntries(LLMenuGL& menu,  		{  			hideContextEntries(*branchp->getBranch(), entries_to_show, disabled_entries);  		} -		 -		 + +  		bool found = false;  		std::vector<std::string>::const_iterator itor2;  		for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2) @@ -552,8 +552,8 @@ void hideContextEntries(LLMenuGL& menu,  }  // Helper for commonly-used entries -void LLInvFVBridge::getClipboardEntries(bool show_asset_id,  -										std::vector<std::string> &items,  +void LLInvFVBridge::getClipboardEntries(bool show_asset_id, +										std::vector<std::string> &items,  										std::vector<std::string> &disabled_items, U32 flags)  {  	items.push_back(std::string("Rename")); @@ -565,7 +565,7 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,  	if (show_asset_id)  	{  		items.push_back(std::string("Copy Asset UUID")); -		if ( (! ( isItemPermissive() || gAgent.isGodlike() ) )  +		if ( (! ( isItemPermissive() || gAgent.isGodlike() ) )  			  || (flags & FIRST_SELECTED_ITEM) == 0)  		{  			disabled_items.push_back(std::string("Copy Asset UUID")); @@ -638,7 +638,7 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const  		{  			return FALSE;  		} -		 +  		*id = obj->getUUID();  		//object_ids.put(obj->getUUID()); @@ -808,7 +808,7 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,  			}  			new_listener = new LLLandmarkBridge(inventory, uuid, flags);  			break; -		 +  		case LLAssetType::AT_CALLINGCARD:  			if(!(inv_type == LLInventoryType::IT_CALLINGCARD))  			{ @@ -1100,7 +1100,7 @@ PermissionMask LLItemBridge::getPermissionMask() const  {  	LLViewerInventoryItem* item = getItem();  	PermissionMask perm_mask = 0; -	if(item)  +	if(item)  	{  		BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());  		BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID()); @@ -1126,9 +1126,9 @@ const std::string& LLItemBridge::getDisplayName() const  void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)  { -	if(item)  +	if(item)  	{ -		name.assign(item->getName());			 +		name.assign(item->getName());  	}  	else  	{ @@ -1137,9 +1137,9 @@ void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)  }  LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const -{  +{  	U8 font = LLFontGL::NORMAL; -	 +  	if( gAgentWearables.isWearingItem( mUUID ) )  	{  		// llinfos << "BOLD" << llendl; @@ -1165,7 +1165,7 @@ std::string LLItemBridge::getLabelSuffix() const  	static std::string BROKEN_LINK = LLTrans::getString("broken_link");  	std::string suffix;  	LLInventoryItem* item = getItem(); -	if(item)  +	if(item)  	{  		// it's a bit confusing to put nocopy/nomod/etc on calling cards.  		if(LLAssetType::AT_CALLINGCARD != item->getType() @@ -1294,9 +1294,9 @@ BOOL LLItemBridge::isItemCopyable() const  		{  			return FALSE;  		} -		 +  		// All items can be copied, not all can be pasted. -		// The only time an item can't be copied is if it's a link  +		// The only time an item can't be copied is if it's a link  		// return (item->getPermissions().allowCopyBy(gAgent.getID()));  		if (item->getIsLinkType())  		{ @@ -1348,7 +1348,7 @@ BOOL LLItemBridge::isItemPermissive() const  LLFolderBridge* LLFolderBridge::sSelf=NULL;  // Can be moved to another folder -BOOL LLFolderBridge::isItemMovable() const  +BOOL LLFolderBridge::isItemMovable() const  {  	LLInventoryObject* obj = getInventoryObject();  	if(obj) @@ -1367,7 +1367,7 @@ void LLFolderBridge::selectItem()  BOOL LLFolderBridge::isItemRemovable()  {  	LLInventoryModel* model = getInventoryModel(); -	if(!model)  +	if(!model)  	{  		return FALSE;  	} @@ -1478,7 +1478,7 @@ BOOL LLFolderBridge::isClipboardPasteable() const  		LLInventoryClipboard::instance().retrieve(objects);  		const LLViewerInventoryCategory *current_cat = getCategory(); -		// Search for the direct descendent of current Friends subfolder among all pasted items,  +		// Search for the direct descendent of current Friends subfolder among all pasted items,  		// and return false if is found.  		for(S32 i = objects.count() - 1; i >= 0; --i)  		{ @@ -1500,7 +1500,7 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const  	{  		return FALSE;  	} -	 +  	const LLInventoryModel* model = getInventoryModel();  	if (!model)  	{ @@ -1523,7 +1523,7 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const  			{  				const LLUUID &cat_id = cat->getUUID();  				// Don't allow recursive pasting -				if ((cat_id == current_cat_id) ||  +				if ((cat_id == current_cat_id) ||  					model->isObjectDescendentOf(current_cat_id, cat_id))  				{  					return FALSE; @@ -1549,7 +1549,7 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const  BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  											BOOL drop)  { -	// This should never happen, but if an inventory item is incorrectly parented,  +	// This should never happen, but if an inventory item is incorrectly parented,  	// the UI will get confused and pass in a NULL.  	if(!inv_cat) return FALSE; @@ -1611,7 +1611,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  					break;  				}  			} -			 +  			if( is_movable )  			{  				if( move_is_into_trash ) @@ -1642,7 +1642,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  			}  		} -		 +  		accept =	is_movable  					&& (mUUID != cat_id)								// Can't move a folder into itself  					&& (mUUID != inv_cat->getParentUUID())				// Avoid moves that would change nothing @@ -1663,7 +1663,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  				}  			}  			// if target is an outfit or current outfit folder we use link -			if (move_is_into_current_outfit || move_is_into_outfit)  +			if (move_is_into_current_outfit || move_is_into_outfit)  			{  #if SUPPORT_ENSEMBLES  				// BAP - should skip if dup. @@ -1686,7 +1686,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  			}  			else  			{ -				 +  				// Reparent the folder and restamp children if it's moving  				// into trash.  				LLInvFVBridge::changeCategoryParent( @@ -1723,7 +1723,7 @@ void warn_move_inventory(LLViewerObject* object, LLMoveInv* move_inv)  // Move/copy all inventory items from the Contents folder of an in-world  // object to the agent's inventory, inside a given category. -BOOL move_inv_category_world_to_agent(const LLUUID& object_id,  +BOOL move_inv_category_world_to_agent(const LLUUID& object_id,  									  const LLUUID& category_id,  									  BOOL drop,  									  void (*callback)(S32, void*), @@ -1750,7 +1750,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,  		llinfos << "Object contents not found for drop." << llendl;  		return FALSE;  	} -	 +  	BOOL accept = TRUE;  	BOOL is_move = FALSE; @@ -1836,7 +1836,7 @@ bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,  	{  		LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?  		// BAP remove AT_NONE support after ensembles are fully working? -		return (linked_category &&  +		return (linked_category &&  				((linked_category->getPreferredType() == LLAssetType::AT_NONE) ||  				 (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType()))));  	} @@ -1878,7 +1878,7 @@ public:  		gInventory.removeObserver(this);  		delete this;  	} -	 +  protected:  	LLUUID mCatID; @@ -1973,7 +1973,7 @@ void LLRightClickInventoryFetchDescendentsObserver::done()  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // Class LLInventoryWearObserver  // -// Observer for "copy and wear" operation to support knowing  +// Observer for "copy and wear" operation to support knowing  // when the all of the contents have been added to inventory.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  class LLInventoryCopyAndWearObserver : public LLInventoryObserver @@ -1995,7 +1995,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)  {  	if((mask & (LLInventoryObserver::ADD)) != 0)  	{ -		if (!mFolderAdded)  +		if (!mFolderAdded)  		{  			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs(); @@ -2003,7 +2003,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)  			std::set<LLUUID>::const_iterator id_end = changed_items.end();  			for (;id_it != id_end; ++id_it)  			{ -				if ((*id_it) == mCatID)  +				if ((*id_it) == mCatID)  				{  					mFolderAdded = TRUE;  					break; @@ -2011,7 +2011,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)  			}  		} -		if (mFolderAdded)  +		if (mFolderAdded)  		{  			LLViewerInventoryCategory* category = gInventory.getCategory(mCatID); @@ -2029,7 +2029,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)  					LLAppearanceManager::wearInventoryCategory(category, FALSE, TRUE);  					delete this;  				} -			}		 +			}  		}  	} @@ -2091,12 +2091,12 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model  		if(!model) return;  		LLViewerInventoryCategory* cat = getCategory();  		if(!cat) return; -		 +  		remove_inventory_category_from_avatar ( cat );  		return; -	}	 +	}  	else if ("purge" == action) -	{		 +	{  		purgeItem(model, mUUID);  		return;  	} @@ -2270,7 +2270,7 @@ void LLFolderBridge::pasteFromClipboard()  			{  				if(LLInventoryClipboard::instance().isCutMode())  				{ -					// move_inventory_item() is not enough,  +					// move_inventory_item() is not enough,  					//we have to update inventory locally too  					changeItemParent(model, dynamic_cast<LLViewerInventoryItem*>(item), parent_id, FALSE);  				} @@ -2347,7 +2347,7 @@ void LLFolderBridge::folderOptionsMenu()  	// BAP change once we're no longer treating regular categories as ensembles.  	const bool is_ensemble = category && (type == LLAssetType::AT_NONE ||  										  LLAssetType::lookupIsEnsembleCategoryType(type)); -	 +  	// calling card related functionality for folders.  	// Only enable calling-card related options for non-default folders. @@ -2361,7 +2361,7 @@ void LLFolderBridge::folderOptionsMenu()  			mItems.push_back(std::string("IM All Contacts In Folder"));  		}  	} -	 +  	// wearables related functionality for folders.  	//is_wearable  	LLFindWearables is_wearable; @@ -2416,7 +2416,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);  	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point) -	mDisabledItems.clear(); //adding code to clear out disabled members from previous  +	mDisabledItems.clear(); //adding code to clear out disabled members from previous  	if (lost_and_found_id == mUUID)  	  {  		// This is the lost+found folder. @@ -2458,13 +2458,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  			mItems.push_back(std::string("New Clothes"));  			mItems.push_back(std::string("New Body Parts"));  			mItems.push_back(std::string("Change Type")); -			 +  			LLViewerInventoryCategory *cat = getCategory();  			if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))  			{  				mDisabledItems.push_back(std::string("Change Type"));  			} -			 +  			getClipboardEntries(false, mItems, mDisabledItems, flags);  		}  		else @@ -2479,24 +2479,24 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		//Added by spatters to force inventory pull on right-click to display folder options correctly. 07-17-06  		mCallingCards = mWearables = FALSE; -		 +  		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);  		if (checkFolderForContentsOfType(model, is_callingcard))  		{  			mCallingCards=TRUE;  		} -		 +  		LLFindWearables is_wearable;  		LLIsType is_object( LLAssetType::AT_OBJECT );  		LLIsType is_gesture( LLAssetType::AT_GESTURE ); -		 +  		if (checkFolderForContentsOfType(model, is_wearable)  ||  			checkFolderForContentsOfType(model, is_object) ||  			checkFolderForContentsOfType(model, is_gesture) )  		{  			mWearables=TRUE;  		} -		 +  		mMenu = &menu;  		sSelf = this;  		LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE); @@ -2709,7 +2709,7 @@ void LLFolderBridge::modifyOutfit(BOOL append)  	if(!model) return;  	LLViewerInventoryCategory* cat = getCategory();  	if(!cat) return; -	 +  	// BAP - was:  	// wear_inventory_category_on_avatar( cat, append );  	LLAppearanceManager::wearInventoryCategory( cat, FALSE, append ); @@ -2735,8 +2735,8 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response  		}  		two_uuids_list_t::iterator move_it; -		for (move_it = move_inv->mMoveList.begin();  -			move_it != move_inv->mMoveList.end();  +		for (move_it = move_inv->mMoveList.begin(); +			move_it != move_inv->mMoveList.end();  			++move_it)  		{  			object->moveInventory(move_it->first, move_it->second); @@ -2845,7 +2845,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);  		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);  		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT); -		 +  		if(is_movable && move_is_into_trash)  		{  			switch(inv_item->getType()) @@ -2873,7 +2873,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  			is_movable = ! LLFriendCardsManager::instance()  				.isObjDirectDescendentOfCategory (inv_item, getCategory());  		} -  +  		LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE);  		// we can move item inside a folder only if this folder is Favorites. See EXT-719 @@ -2979,7 +2979,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())  			&& perm.allowTransferTo(gAgent.getID())))  //		   || gAgent.isGodlike()) -			 +  		{  			accept = TRUE;  		} @@ -3010,7 +3010,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  				LLNotifications::instance().forceResponse(params, 0);  			}  		} -		 +  	}  	else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)  	{ @@ -3063,11 +3063,11 @@ LLUIImagePtr LLTextureBridge::getIcon() const  {  	return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE);  } -	 +  void LLTextureBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -3086,7 +3086,7 @@ LLUIImagePtr LLSoundBridge::getIcon() const  void LLSoundBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -3155,7 +3155,7 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  // +=================================================+  LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) : -LLItemBridge(inventory, uuid)  +LLItemBridge(inventory, uuid)  {  	mVisited = FALSE;  	if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED) @@ -3244,7 +3244,7 @@ void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* mod  			LLSideTray::getInstance()->showPanel("panel_places", key);  		}  	} -	else  +	else  	{  		LLItemBridge::performAction(folder, model, action);  	} @@ -3268,7 +3268,7 @@ static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportFro  void LLLandmarkBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -3376,7 +3376,7 @@ std::string LLCallingCardBridge::getLabelSuffix() const  void LLCallingCardBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -3515,7 +3515,7 @@ BOOL LLCallingCardBridge::removeItem()  		LLAvatarActions::removeFriendDialog(getItem()->getCreatorUUID());  		return FALSE;  	} -	else  +	else  	{  		return LLItemBridge::removeItem();  	} @@ -3532,7 +3532,7 @@ LLUIImagePtr LLNotecardBridge::getIcon() const  void LLNotecardBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -3614,7 +3614,7 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode  void LLGestureBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -3716,7 +3716,7 @@ void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* mo  			LLPreviewAnim::e_activation_type activate = LLPreviewAnim::NONE;  			if ("playworld" == action) activate = LLPreviewAnim::PLAY;  			if ("playlocal" == action) activate = LLPreviewAnim::AUDITION; -			 +  			LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID));  			if (preview)  			{ @@ -3733,7 +3733,7 @@ void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* mo  void LLAnimationBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -3841,7 +3841,7 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model  void LLObjectBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -3853,7 +3853,7 @@ void LLObjectBridge::openItem()  }  LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const -{  +{  	U8 font = LLFontGL::NORMAL;  	LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); @@ -3867,7 +3867,7 @@ LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const  	{  		font |= LLFontGL::ITALIC;  	} -	 +  	return (LLFontGL::StyleFlags)font;  } @@ -3878,7 +3878,7 @@ std::string LLObjectBridge::getLabelSuffix() const  	{  		std::string attachment_point_name = avatar->getAttachedPointName(mUUID);  		LLStringUtil::toLower(attachment_point_name); -		 +  		LLStringUtil::format_map_t args;  		args["[ATTACHMENT_POINT]"] =  attachment_point_name.c_str();  		return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args); @@ -3925,7 +3925,7 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach  bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response)  {  	LLVOAvatar *avatarp = gAgent.getAvatarObject(); -		 +  	if (!avatarp->canAttachMoreObjects())  	{  		LLSD args; @@ -3938,7 +3938,7 @@ bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& respon  	if (option == 0/*YES*/)  	{  		LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID()); -		 +  		if (itemp)  		{  			LLMessageSystem* msg = gMessageSystem; @@ -3999,7 +3999,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  			{  				return;  			} -			 +  			if( avatarp->isWearingAttachment( mUUID ) )  			{  				items.push_back(std::string("Detach From Yourself")); @@ -4023,13 +4023,13 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  				LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE);  				LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE);  				LLVOAvatar *avatarp = gAgent.getAvatarObject(); -				if (attach_menu  -					&& (attach_menu->getChildCount() == 0)  -					&& attach_hud_menu  -					&& (attach_hud_menu->getChildCount() == 0)  +				if (attach_menu +					&& (attach_menu->getChildCount() == 0) +					&& attach_hud_menu +					&& (attach_hud_menu->getChildCount() == 0)  					&& avatarp)  				{ -					for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  +					for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  						 iter != avatarp->mAttachmentPoints.end(); )  					{  						LLVOAvatar::attachment_map_t::iterator curiter = iter++; @@ -4110,7 +4110,7 @@ LLUIImagePtr LLLSLTextBridge::getIcon() const  void LLLSLTextBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -4146,7 +4146,7 @@ void wear_add_inventory_item_on_avatar( LLInventoryItem* item )  	{  		lldebugs << "wear_add_inventory_item_on_avatar( " << item->getName()  				 << " )" << llendl; -			 +  		LLWearableList::instance().getAsset(item->getAssetUUID(),  							   item->getName(),  							   item->getType(), @@ -4160,8 +4160,8 @@ void remove_inventory_category_from_avatar( LLInventoryCategory* category )  	if(!category) return;  	lldebugs << "remove_inventory_category_from_avatar( " << category->getName()  			 << " )" << llendl; -			  -	 + +  	if( gFloaterCustomize )  	{  		gFloaterCustomize->askToSaveIfDirty( @@ -4236,8 +4236,8 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_  				}  			}  		} -		 -		 + +  		if (obj_count > 0)  		{  			for(i = 0; i  < obj_count; ++i) @@ -4332,7 +4332,7 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod  		{  			LLViewerInventoryItem* item = getItem();  			if (item) -			{	 +			{  				LLWearableList::instance().getAsset(item->getAssetUUID(),  													item->getName(),  													item->getType(), @@ -4347,7 +4347,7 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod  void LLWearableBridge::openItem()  {  	LLViewerInventoryItem* item = getItem(); -	 +  	if (item)  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); @@ -4431,7 +4431,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		getClipboardEntries(true, items, disabled_items, flags);  		items.push_back(std::string("Wearable Separator")); -		 +  		items.push_back(std::string("Wearable Wear"));  		items.push_back(std::string("Wearable Add"));  		items.push_back(std::string("Wearable Edit")); @@ -4462,7 +4462,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  						disabled_items.push_back(std::string("Wearable Add"));  					}  					else -					{	 +					{  						disabled_items.push_back(std::string("Take Off"));  					}  					break; @@ -4501,7 +4501,7 @@ void LLWearableBridge::wearOnAvatar()  {  	// Don't wear anything until initial wearables are loaded, can  	// destroy clothing items. -	if (!gAgentWearables.areWearablesLoaded())  +	if (!gAgentWearables.areWearablesLoaded())  	{  		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");  		return; @@ -4532,7 +4532,7 @@ void LLWearableBridge::wearAddOnAvatar()  {  	// Don't wear anything until initial wearables are loaded, can  	// destroy clothing items. -	if (!gAgentWearables.areWearablesLoaded())  +	if (!gAgentWearables.areWearablesLoaded())  	{  		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");  		return; @@ -4620,7 +4620,7 @@ BOOL LLWearableBridge::canEditOnAvatar(void* user_data)  	return (gAgentWearables.isWearingItem(self->mUUID));  } -// static  +// static  void LLWearableBridge::onEditOnAvatar(void* user_data)  {  	LLWearableBridge* self = (LLWearableBridge*)user_data; @@ -4658,7 +4658,7 @@ BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data)  	return FALSE;  } -// static  +// static  void LLWearableBridge::onRemoveFromAvatar(void* user_data)  {  	LLWearableBridge* self = (LLWearableBridge*)user_data; @@ -4689,7 +4689,7 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,  		if( gAgentWearables.isWearingItem( item_id ) )  		{  			EWearableType type = wearable->getType(); -	 +  			if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&&  				//!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )  			{ @@ -4733,7 +4733,7 @@ LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_  	case LLAssetType::AT_LANDMARK:  		action = new LLLandmarkBridgeAction(uuid,model);  		break; -		 +  	case LLAssetType::AT_CALLINGCARD:  		action = new LLCallingCardBridgeAction(uuid,model);  		break; @@ -4770,7 +4770,7 @@ LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_  	return action;  } -//static  +//static  void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,  								   const LLUUID& uuid,LLInventoryModel* model)  { @@ -4782,7 +4782,7 @@ void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,  	}  } -//static  +//static  void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)  {  	LLAssetType::EType asset_type = model->getItem(uuid)->getType(); @@ -4801,8 +4801,8 @@ LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const  	return NULL;  } -//virtual  -void	LLTextureBridgeAction::doIt()  +//virtual +void	LLTextureBridgeAction::doIt()  {  	if (getItem())  	{ @@ -4813,20 +4813,20 @@ void	LLTextureBridgeAction::doIt()  }  //virtual -void	LLSoundBridgeAction::doIt()  +void	LLSoundBridgeAction::doIt()  {  	LLViewerInventoryItem* item = getItem();  	if(item)  	{  		LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES);  	} -	 +  	LLInvFVBridgeAction::doIt();  } -//virtual  -void	LLLandmarkBridgeAction::doIt()  +//virtual +void	LLLandmarkBridgeAction::doIt()  {  	LLViewerInventoryItem* item = getItem();  	if( item ) @@ -4842,8 +4842,8 @@ void	LLLandmarkBridgeAction::doIt()  } -//virtual  -void	LLCallingCardBridgeAction::doIt()  +//virtual +void	LLCallingCardBridgeAction::doIt()  {  	LLViewerInventoryItem* item = getItem();  	if(item && item->getCreatorUUID().notNull()) @@ -4854,9 +4854,9 @@ void	LLCallingCardBridgeAction::doIt()  	LLInvFVBridgeAction::doIt();  } -//virtual  -void	 -LLNotecardBridgeAction::doIt()  +//virtual +void +LLNotecardBridgeAction::doIt()  {  	LLViewerInventoryItem* item = getItem();  	if (item) @@ -4867,8 +4867,8 @@ LLNotecardBridgeAction::doIt()  	LLInvFVBridgeAction::doIt();  } -//virtual  -void	LLGestureBridgeAction::doIt()  +//virtual +void	LLGestureBridgeAction::doIt()  {  	LLViewerInventoryItem* item = getItem();  	if (item) @@ -4880,8 +4880,8 @@ void	LLGestureBridgeAction::doIt()  	LLInvFVBridgeAction::doIt();  } -//virtual  -void	LLAnimationBridgeAction::doIt()  +//virtual +void	LLAnimationBridgeAction::doIt()  {  	LLViewerInventoryItem* item = getItem();  	if (item) @@ -4893,7 +4893,7 @@ void	LLAnimationBridgeAction::doIt()  } -//virtual  +//virtual  void	LLObjectBridgeAction::doIt()  {  	LLFloaterReg::showInstance("properties", mUUID); @@ -4902,8 +4902,8 @@ void	LLObjectBridgeAction::doIt()  } -//virtual  -void	LLLSLTextBridgeAction::doIt()  +//virtual +void	LLLSLTextBridgeAction::doIt()  {  	LLViewerInventoryItem* item = getItem();  	if (item) @@ -4933,7 +4933,7 @@ void LLWearableBridgeAction::wearOnAvatar()  {  	// Don't wear anything until initial wearables are loaded, can  	// destroy clothing items. -	if (!gAgentWearables.areWearablesLoaded())  +	if (!gAgentWearables.areWearablesLoaded())  	{  		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");  		return; @@ -4960,7 +4960,7 @@ void LLWearableBridgeAction::wearOnAvatar()  	}  } -//virtual  +//virtual  void LLWearableBridgeAction::doIt()  {  	if(isInTrash()) @@ -5036,7 +5036,7 @@ void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		items.push_back(std::string("Restore Item"));  	}  	else -	{	 +	{  		items.push_back(std::string("Delete"));  		if (!isItemRemovable())  		{ @@ -5086,7 +5086,7 @@ void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		items.push_back(std::string("Restore Item"));  	}  	else -	{	 +	{  		items.push_back(std::string("Goto Link"));  		items.push_back(std::string("Delete"));  		if (!isItemRemovable()) diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 9a05812847..e63daac4af 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -517,8 +517,8 @@ void	LLNavigationBar::showTeleportHistoryMenu()  	// *TODO: why to draw/update anything before showing the menu?  	mTeleportHistoryMenu->buildDrawLabels();  	mTeleportHistoryMenu->updateParent(LLMenuGL::sMenuContainer); -	LLRect btnBackRect = mBtnBack->getRect(); -	LLMenuGL::showPopup(this, mTeleportHistoryMenu, btnBackRect.mLeft, btnBackRect.mBottom); +	const S32 MENU_SPAWN_PAD = -1; +	LLMenuGL::showPopup(mBtnBack, mTeleportHistoryMenu, 0, MENU_SPAWN_PAD);  	// *HACK pass the mouse capturing to the drop-down menu  	gFocusMgr.setMouseCapture( NULL ); diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 217007fb15..32dc5e5927 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -224,7 +224,6 @@ BOOL LLNearbyChatBar::postBuild()  	mChatBox->setIgnoreTab(TRUE);  	mChatBox->setPassDelete(TRUE);  	mChatBox->setReplaceNewlinesWithSpaces(FALSE); -	mChatBox->setMaxTextLength(1023);  	mChatBox->setEnableLineHistory(TRUE);  	mOutputMonitor = getChild<LLOutputMonitorCtrl>("chat_zone_indicator"); diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 6b0d6d61e0..957513e154 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -162,6 +162,8 @@ bool	LLNearbyChatScreenChannel::createPoolToast()  	LLToast::Params p;  	p.panel = panel; +	p.lifetime_secs = gSavedSettings.getS32("NearbyToastLifeTime"); +	p.fading_time_secs = gSavedSettings.getS32("NearbyToastFadingTime");  	LLToast* toast = new LLToast(p);  @@ -326,6 +328,12 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg)  		initChannel();  	} +	//only messages from AGENTS +	if(CHAT_SOURCE_OBJECT == chat_msg.mSourceType) +	{ +		return;//dn't show toast for messages from objects +	} +  	LLUUID id;  	id.generate(); diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 3d0db71045..48a93f0d42 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -131,6 +131,9 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string)  	{  		LLAccordionCtrlTab* tab = *iter;  		tab->setVisible(true); + +		// expand accordion to see matched items in all ones. See EXT-2014. +		tab->changeOpenClose(false);  	}  } @@ -883,7 +886,7 @@ bool LLLandmarksPanel::handleDragAndDropToTrash(BOOL drop, EDragAndDropType carg  	return true;  } - +// static  void LLLandmarksPanel::doIdle(void* landmarks_panel)  {  	LLLandmarksPanel* panel = (LLLandmarksPanel* ) landmarks_panel; diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index 6a3617f008..a198499b47 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -134,6 +134,11 @@ void LLPanelMediaSettingsGeneral::draw()  		LLPluginClassMedia* media_plugin = mPreviewMedia->getMediaPlugin();
  		if( media_plugin )
  		{
 +			// turn off volume (if we can) for preview. Note: this really only
 +			// works for QuickTime movies right now - no way to control the 
 +			// volume of a flash app embedded in a page for example
 +			media_plugin->setVolume( 0 );
 +
  			// some controls are only appropriate for time or browser type plugins
  			// so we selectively enable/disable them - need to do it in draw
  			// because the information from plugins arrives assynchronously
 diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index ca7ebb1ad8..e4b32c4820 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -127,7 +127,7 @@ BOOL LLPanelPrimMediaControls::postBuild()  	scroll_left_ctrl->setMouseUpCallback(onScrollStop, this);  	LLButton* scroll_right_ctrl = getChild<LLButton>("scrollright");  	scroll_right_ctrl->setClickedCallback(onScrollRight, this); -	scroll_right_ctrl->setHeldDownCallback(onScrollLeftHeld, this); +	scroll_right_ctrl->setHeldDownCallback(onScrollRightHeld, this);  	scroll_right_ctrl->setMouseUpCallback(onScrollStop, this);  	LLButton* scroll_down_ctrl = getChild<LLButton>("scrolldown");  	scroll_down_ctrl->setClickedCallback(onScrollDown, this); @@ -258,7 +258,8 @@ void LLPanelPrimMediaControls::updateShape()          LLUICtrl* zoom_ctrl					= getChild<LLUICtrl>("zoom_frame");  		LLPanel* media_loading_panel		= getChild<LLPanel>("media_progress_indicator");  		LLUICtrl* media_address_ctrl		= getChild<LLUICtrl>("media_address"); -		LLUICtrl* media_play_slider_ctrl	= getChild<LLUICtrl>("media_play_position"); +		LLUICtrl* media_play_slider_panel	= getChild<LLUICtrl>("media_play_position"); +		LLUICtrl* media_play_slider_ctrl	= getChild<LLUICtrl>("media_play_slider");  		LLUICtrl* volume_ctrl				= getChild<LLUICtrl>("media_volume");  		LLButton* volume_btn				= getChild<LLButton>("media_volume_button");  		LLUICtrl* volume_up_ctrl			= getChild<LLUICtrl>("volume_up"); @@ -282,7 +283,7 @@ void LLPanelPrimMediaControls::updateShape()  		close_ctrl->setVisible(has_focus);  		open_ctrl->setVisible(true);  		media_address_ctrl->setVisible(has_focus && !mini_controls); -		media_play_slider_ctrl->setVisible(has_focus && !mini_controls); +		media_play_slider_panel->setVisible(has_focus && !mini_controls);  		volume_ctrl->setVisible(false);  		volume_up_ctrl->setVisible(false);  		volume_down_ctrl->setVisible(false); @@ -291,7 +292,7 @@ void LLPanelPrimMediaControls::updateShape()  		// Disable zoom if HUD  		zoom_ctrl->setEnabled(!objectp->isHUDAttachment());  		secure_lock_icon->setVisible(false); -		mCurrentURL = media_impl->getMediaURL(); +		mCurrentURL = media_impl->getCurrentMediaURL();  		back_ctrl->setEnabled((media_impl != NULL) && media_impl->canNavigateBack() && can_navigate);  		fwd_ctrl->setEnabled((media_impl != NULL) && media_impl->canNavigateForward() && can_navigate); @@ -309,8 +310,8 @@ void LLPanelPrimMediaControls::updateShape()  			fwd_ctrl->setEnabled(has_focus);  			media_address_ctrl->setVisible(false);  			media_address_ctrl->setEnabled(false); -			media_play_slider_ctrl->setVisible(!mini_controls); -			media_play_slider_ctrl->setEnabled(!mini_controls); +			media_play_slider_panel->setVisible(!mini_controls); +			media_play_slider_panel->setEnabled(!mini_controls);  			volume_ctrl->setVisible(has_focus);  			volume_up_ctrl->setVisible(has_focus); @@ -406,8 +407,8 @@ void LLPanelPrimMediaControls::updateShape()  			media_stop_ctrl->setVisible(FALSE);  			media_address_ctrl->setVisible(has_focus && !mini_controls);  			media_address_ctrl->setEnabled(has_focus && !mini_controls); -			media_play_slider_ctrl->setVisible(FALSE); -			media_play_slider_ctrl->setEnabled(FALSE); +			media_play_slider_panel->setVisible(FALSE); +			media_play_slider_panel->setEnabled(FALSE);  			volume_ctrl->setVisible(FALSE);  			volume_up_ctrl->setVisible(FALSE); @@ -472,7 +473,7 @@ void LLPanelPrimMediaControls::updateShape()  			}  		} -		if(media_plugin) +		if(media_impl)  		{  			//  			// Handle Scrolling @@ -480,16 +481,18 @@ void LLPanelPrimMediaControls::updateShape()  			switch (mScrollState)   			{  			case SCROLL_UP: -				media_plugin->scrollEvent(0, -1, MASK_NONE); +				media_impl->scrollWheel(0, -1, MASK_NONE);  				break;  			case SCROLL_DOWN: -				media_plugin->scrollEvent(0, 1, MASK_NONE); +				media_impl->scrollWheel(0, 1, MASK_NONE);  				break;  			case SCROLL_LEFT: -				media_impl->handleKeyHere(KEY_LEFT, MASK_NONE); +				media_impl->scrollWheel(1, 0, MASK_NONE); +//				media_impl->handleKeyHere(KEY_LEFT, MASK_NONE);  				break;  			case SCROLL_RIGHT: -				media_impl->handleKeyHere(KEY_RIGHT, MASK_NONE); +				media_impl->scrollWheel(-1, 0, MASK_NONE); +//				media_impl->handleKeyHere(KEY_RIGHT, MASK_NONE);  				break;  			case SCROLL_NONE:  			default: @@ -592,9 +595,9 @@ void LLPanelPrimMediaControls::updateShape()  			mLastCursorPos = cursor_pos_window;  		} -		if(isMouseOver()) +		if(isMouseOver() || hasFocus())  		{ -			// Never fade the controls if the mouse is over them. +			// Never fade the controls if the mouse is over them or they have keyboard focus.  			mFadeTimer.stop();  		}  		else if(!mClearFaceOnFade && (mInactivityTimer.getElapsedTimeF32() < mInactiveTimeout)) @@ -627,9 +630,13 @@ void LLPanelPrimMediaControls::draw()  		if(mFadeTimer.getElapsedTimeF32() >= mControlFadeTime)  		{ -			setVisible(FALSE);  			if(mClearFaceOnFade)  			{ +				// Hiding this object makes scroll events go missing after it fades out  +				// (see DEV-41755 for a full description of the train wreck). +				// Only hide the controls when we're untargeting. +				setVisible(FALSE); +  				mClearFaceOnFade = false;  				mTargetImplID = LLUUID::null;  				mTargetObjectID = LLUUID::null; @@ -758,20 +765,10 @@ void LLPanelPrimMediaControls::onClickHome()  void LLPanelPrimMediaControls::onClickOpen()  { -	LLViewerMediaImpl* impl =getTargetMediaImpl(); +	LLViewerMediaImpl* impl = getTargetMediaImpl();  	if(impl)  	{ -		if(impl->getMediaPlugin()) -		{	 -			if(impl->getMediaPlugin()->getLocation().empty()) -			{ -				LLWeb::loadURL(impl->getMediaURL()); -			} -			else -			{ -				LLWeb::loadURL( impl->getMediaPlugin()->getLocation()); -			} -		} +		LLWeb::loadURL(impl->getCurrentMediaURL());  	}	  } @@ -895,11 +892,11 @@ void LLPanelPrimMediaControls::onScrollUp(void* user_data)  	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data);  	this_panel->focusOnTarget(); -	LLPluginClassMedia* plugin = this_panel->getTargetMediaPlugin(); +	LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); -	if(plugin) +	if(impl)  	{ -		plugin->scrollEvent(0, -1, MASK_NONE); +		impl->scrollWheel(0, -1, MASK_NONE);  	}  }  void LLPanelPrimMediaControls::onScrollUpHeld(void* user_data) @@ -916,7 +913,8 @@ void LLPanelPrimMediaControls::onScrollRight(void* user_data)  	if(impl)  	{ -		impl->handleKeyHere(KEY_RIGHT, MASK_NONE); +		impl->scrollWheel(-1, 0, MASK_NONE); +//		impl->handleKeyHere(KEY_RIGHT, MASK_NONE);  	}  }  void LLPanelPrimMediaControls::onScrollRightHeld(void* user_data) @@ -934,7 +932,8 @@ void LLPanelPrimMediaControls::onScrollLeft(void* user_data)  	if(impl)  	{ -		impl->handleKeyHere(KEY_LEFT, MASK_NONE); +		impl->scrollWheel(1, 0, MASK_NONE); +//		impl->handleKeyHere(KEY_LEFT, MASK_NONE);  	}  }  void LLPanelPrimMediaControls::onScrollLeftHeld(void* user_data) @@ -948,11 +947,11 @@ void LLPanelPrimMediaControls::onScrollDown(void* user_data)  	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data);  	this_panel->focusOnTarget(); -	LLPluginClassMedia* plugin = this_panel->getTargetMediaPlugin(); +	LLViewerMediaImpl* impl = this_panel->getTargetMediaImpl(); -	if(plugin) +	if(impl)  	{ -		plugin->scrollEvent(0, 1, MASK_NONE); +		impl->scrollWheel(0, 1, MASK_NONE);  	}  }  void LLPanelPrimMediaControls::onScrollDownHeld(void* user_data) @@ -1000,6 +999,7 @@ void LLPanelPrimMediaControls::onInputURL(LLFocusableElement* caller, void *user  void LLPanelPrimMediaControls::setCurrentURL()  {	 +#ifdef USE_COMBO_BOX_FOR_MEDIA_URL  	LLComboBox* media_address_combo	= getChild<LLComboBox>("media_address_combo");  	// redirects will navigate momentarily to about:blank, don't add to history  	if (media_address_combo && mCurrentURL != "about:blank") @@ -1008,6 +1008,13 @@ void LLPanelPrimMediaControls::setCurrentURL()  		media_address_combo->add(mCurrentURL, ADD_SORTED);  		media_address_combo->selectByValue(mCurrentURL);  	} +#else   // USE_COMBO_BOX_FOR_MEDIA_URL +	LLLineEditor* media_address_url = getChild<LLLineEditor>("media_address_url"); +	if (media_address_url && mCurrentURL != "about:blank") +	{ +		media_address_url->setValue(mCurrentURL); +	} +#endif	// USE_COMBO_BOX_FOR_MEDIA_URL  }  void LLPanelPrimMediaControls::onCommitSlider() diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index 93a931dc78..419603e14e 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -427,7 +427,6 @@ void LLSysWellWindow::sessionRemoved(const LLUUID& sessionId)  {  	delIMRow(sessionId);  	reshapeWindow(); -	LLBottomTray::getInstance()->getSysWell()->updateUreadIMNotifications();  }  void LLSysWellWindow::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id) diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp index e1643af71d..74e0fa077e 100644 --- a/indra/newview/lltexlayerparams.cpp +++ b/indra/newview/lltexlayerparams.cpp @@ -42,8 +42,7 @@  //-----------------------------------------------------------------------------  LLTexLayerParam::LLTexLayerParam(LLTexLayerInterface *layer) :  	mTexLayer(layer), -	mAvatar(NULL), -	mIsWearableParam(TRUE) +	mAvatar(NULL)  {  	if (mTexLayer != NULL)  	{ @@ -56,8 +55,7 @@ LLTexLayerParam::LLTexLayerParam(LLTexLayerInterface *layer) :  }  LLTexLayerParam::LLTexLayerParam(LLVOAvatar *avatar) : -	mTexLayer(NULL), -	mIsWearableParam(FALSE) +	mTexLayer(NULL)  {  	mAvatar = avatar;  } @@ -177,7 +175,7 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user)  	{  		mCurWeight = new_weight; -		if ((mAvatar->getSex() & getSex()) && !mIsWearableParam) // only trigger a baked texture update if we're changing a wearable's visual param. +		if ((mAvatar->getSex() & getSex()) && (mAvatar->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param.  		{  			if (gAgent.cameraCustomizeAvatar())  			{ @@ -192,6 +190,13 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user)  void LLTexLayerParamAlpha::setAnimationTarget(F32 target_value, BOOL set_by_user)  {  +	// do not animate dummy parameters +	if (mIsDummy) +	{ +		setWeight(target_value, set_by_user); +		return; +	} +  	mTargetWeight = target_value;   	setWeight(target_value, set_by_user);   	mIsAnimating = TRUE; @@ -468,7 +473,7 @@ void LLTexLayerParamColor::setWeight(F32 weight, BOOL set_by_user)  			return;  		} -		if ((mAvatar->getSex() & getSex()) && !mIsWearableParam) // only trigger a baked texture update if we're changing a wearable's visual param. +		if ((mAvatar->getSex() & getSex()) && (mAvatar->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param.  		{  			onGlobalColorChanged(set_by_user);  			if (mTexLayer) diff --git a/indra/newview/lltexlayerparams.h b/indra/newview/lltexlayerparams.h index dcb108bbf6..98365864f9 100644 --- a/indra/newview/lltexlayerparams.h +++ b/indra/newview/lltexlayerparams.h @@ -49,7 +49,6 @@ public:  protected:  	LLTexLayerInterface*	mTexLayer;  	LLVOAvatar*             mAvatar; -	BOOL					mIsWearableParam;  };  //----------------------------------------------------------------------------- diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index b5aec1b80b..4940d9b5bb 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -458,7 +458,7 @@ BOOL LLFloaterTexturePicker::postBuild()  // virtual  void LLFloaterTexturePicker::draw()  { -	static LLUICachedControl<S32> floater_header_size ("UIFloaterHeaderSize", 0); +	S32 floater_header_size = getHeaderHeight();  	if (mOwner)  	{  		// draw cone of context pointing back to texture swatch	 diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 24824a095c..903df21e78 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -49,13 +49,15 @@ LLToast::Params::Params()  	enable_hide_btn("enable_hide_btn", true),  	force_show("force_show", false),  	force_store("force_store", false), +	fading_time_secs("fading_time_secs", gSavedSettings.getS32("ToastFadingTime")),  	lifetime_secs("lifetime_secs", gSavedSettings.getS32("NotificationToastLifeTime"))  {};  LLToast::LLToast(const LLToast::Params& p)   :	LLModalDialog(LLSD(), p.is_modal),  	mPanel(p.panel),  -	mToastLifetime(p.lifetime_secs),   +	mToastLifetime(p.lifetime_secs), +	mToastFadingTime(p.fading_time_secs),  	mNotificationID(p.notif_id),    	mSessionID(p.session_id),  	mCanFade(p.can_fade), @@ -127,7 +129,7 @@ bool LLToast::lifetimeHasExpired()  	if (mTimer.getStarted())  	{  		F32 elapsed_time = mTimer.getElapsedTimeF32(); -		if ((mToastLifetime - elapsed_time) <= gSavedSettings.getS32("ToastOpaqueTime"))  +		if ((mToastLifetime - elapsed_time) <= mToastFadingTime)   		{  			setBackgroundOpaque(FALSE);  		} diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index 0698c94880..b670f47045 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -63,7 +63,8 @@ public:  		Optional<LLUUID>				notif_id,	 //notification ID  										session_id;	 //im session ID  		Optional<LLNotificationPtr>		notification; -		Optional<F32>					lifetime_secs; +		Optional<F32>					lifetime_secs, +										fading_time_secs; // Number of seconds while a toast is fading  		Optional<toast_callback_t>		on_delete_toast,  										on_mouse_enter;  		Optional<bool>					can_fade, @@ -157,6 +158,7 @@ private:  	// timer counts a lifetime of a toast  	LLTimer		mTimer;  	F32			mToastLifetime; // in seconds +	F32			mToastFadingTime; // in seconds  	LLPanel*	mPanel;  	LLButton*	mHideBtn; diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 7c17699bf9..304f1dffaf 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -732,7 +732,47 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)  				{  					tooltip_msg.append( nodep->mName );  				} - +				 +				bool is_time_based_media = false; +				bool is_web_based_media = false; +				bool is_media_playing = false; +				 +				// Does this face have media? +				const LLTextureEntry* tep = hover_object->getTE(mHoverPick.mObjectFace); +				 +				if(tep) +				{ +					const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +					if (mep) +					{ +						viewer_media_t media_impl = mep ? LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()) : NULL; +						LLPluginClassMedia* media_plugin = NULL; +				 +						if (media_impl.notNull() && (media_impl->hasMedia())) +						{ +							LLStringUtil::format_map_t args; +					 +							media_plugin = media_impl->getMediaPlugin(); +							if(media_plugin) +							{	if(media_plugin->pluginSupportsMediaTime()) +								{ +									is_time_based_media = true; +									is_web_based_media = false; +									args["[CurrentURL]"] =  media_impl->getMediaURL(); +									is_media_playing = media_impl->isMediaPlaying(); +								} +								else +								{ +									is_time_based_media = false; +									is_web_based_media = true; +									args["[CurrentURL]"] =  media_plugin->getLocation(); +								} +								//tooltip_msg.append(LLTrans::getString("CurrentURL", args)); +							} +						} +					} +				} +				  				bool needs_tip = needs_tooltip(nodep);  				if (show_all_object_tips || needs_tip) @@ -741,8 +781,13 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)  					mPick = mHoverPick;  					LLToolTipMgr::instance().show(LLToolTip::Params()  						.message(tooltip_msg) -						.image(LLUI::getUIImage("Info")) -						.click_callback(boost::bind(showObjectInspector, hover_object->getID())) +						.image(LLUI::getUIImage("Info_Off")) +						.click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace)) +						.time_based_media(is_time_based_media) +						.web_based_media(is_web_based_media)						   +						.media_playing(is_media_playing)						   +						.click_playmedia_callback(boost::bind(playCurrentMedia, mHoverPick)) +						.click_homepage_callback(boost::bind(VisitHomePage, mHoverPick))						  						.visible_time_near(6.f)  						.visible_time_far(3.f)  						.wrap(false)); @@ -925,6 +970,20 @@ static void show_inspector(const char* inspector, const char* param, const LLUUI  	LLFloaterReg::showInstance(inspector, params);  } + +static void show_inspector(const char* inspector,  LLSD& params) +{ +	if (LLToolTipMgr::instance().toolTipVisible()) +	{ +		LLRect rect = LLToolTipMgr::instance().getToolTipRect(); +		params["pos"]["x"] = rect.mLeft; +		params["pos"]["y"] = rect.mTop; +	} +	 +	LLFloaterReg::showInstance(inspector, params); +} + +  // static  void LLToolPie::showAvatarInspector(const LLUUID& avatar_id)  { @@ -937,6 +996,114 @@ void LLToolPie::showObjectInspector(const LLUUID& object_id)  	show_inspector("inspect_object", "object_id", object_id);  } + +// static +void LLToolPie::showObjectInspector(const LLUUID& object_id, const S32& object_face) +{ +	LLSD params; +	params["object_id"] = object_id; +	params["object_face"] = object_face; +	show_inspector("inspect_object", params); +} + +// static +void LLToolPie::playCurrentMedia(const LLPickInfo& info) +{ +	//FIXME: how do we handle object in different parcel than us? +	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); +	if (!parcel) return; +	 +	LLPointer<LLViewerObject> objectp = info.getObject(); +	 +	// Early out cases.  Must clear media hover.  +	// did not hit an object or did not hit a valid face +	if ( objectp.isNull() || +		info.mObjectFace < 0 ||  +		info.mObjectFace >= objectp->getNumTEs() ) +	{ +		return; +	} +	 +	// Does this face have media? +	const LLTextureEntry* tep = objectp->getTE(info.mObjectFace); +	if (!tep) +		return; +	 +	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +	if(!mep) +		return; +	 +	LLPluginClassMedia* media_plugin = NULL; +	 +//	if (gSavedSettings.getBOOL("MediaOnAPrimUI")) +//	{		 +		viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +		 +		if(media_impl.notNull() && media_impl->hasMedia()) +		{ +			media_plugin = media_impl->getMediaPlugin(); +			 +			if (media_plugin && media_plugin->pluginSupportsMediaTime()) +			{ +				if(media_impl->isMediaPlaying()) +				{ +					media_impl->pause(); +				} +				else //if(media_impl->isMediaPaused()) +				{ +					media_impl->play(); +				} +				 +			} +					 +		} +//	 } + +} + +// static +void LLToolPie::VisitHomePage(const LLPickInfo& info) +{ +	//FIXME: how do we handle object in different parcel than us? +	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); +	if (!parcel) return; +	 +	LLPointer<LLViewerObject> objectp = info.getObject(); +	 +	// Early out cases.  Must clear media hover.  +	// did not hit an object or did not hit a valid face +	if ( objectp.isNull() || +		info.mObjectFace < 0 ||  +		info.mObjectFace >= objectp->getNumTEs() ) +	{ +		return; +	} +	 +	// Does this face have media? +	const LLTextureEntry* tep = objectp->getTE(info.mObjectFace); +	if (!tep) +		return; +	 +	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL; +	if(!mep) +		return; +	 +	LLPluginClassMedia* media_plugin = NULL; +	 +	viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +	 +	if(media_impl.notNull() && media_impl->hasMedia()) +	{ +		media_plugin = media_impl->getMediaPlugin(); +		 +		if (media_plugin && !(media_plugin->pluginSupportsMediaTime())) +		{ +			media_impl->navigateHome(); +		} +	} +} + +  void LLToolPie::handleDeselect()  {  	if(	hasMouseCapture() ) @@ -1035,12 +1202,17 @@ bool LLToolPie::handleMediaClick(const LLPickInfo& pick)  	// Does this face have media?  	const LLTextureEntry* tep = objectp->getTE(pick.mObjectFace); +	if(!tep) +		return false; +  	LLMediaEntry* mep = (tep->hasMedia()) ? tep->getMediaData() : NULL; +	 +	if(!mep) +		return false; +	  	viewer_media_t media_impl = mep ? LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()) : NULL; -	if (tep  -		&& mep -		&& gSavedSettings.getBOOL("MediaOnAPrimUI") +	if (gSavedSettings.getBOOL("MediaOnAPrimUI")  		&& media_impl.notNull())  	{  		if (!LLViewerMediaFocus::getInstance()->isFocusedOnFace(pick.getObject(), pick.mObjectFace) ) @@ -1085,6 +1257,9 @@ bool LLToolPie::handleMediaHover(const LLPickInfo& pick)  	// Does this face have media?  	const LLTextureEntry* tep = objectp->getTE(pick.mObjectFace); +	if(!tep) +		return false; +	  	const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;  	if (mep  		&& gSavedSettings.getBOOL("MediaOnAPrimUI")) diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h index 5faedbec5a..3660c68552 100644 --- a/indra/newview/lltoolpie.h +++ b/indra/newview/lltoolpie.h @@ -78,6 +78,10 @@ public:  	static void			showAvatarInspector(const LLUUID& avatar_id);  	static void			showObjectInspector(const LLUUID& object_id); +	static void			showObjectInspector(const LLUUID& object_id, const S32& object_face); +	static void			playCurrentMedia(const LLPickInfo& info); +	static void			VisitHomePage(const LLPickInfo& info); +	  private:  	BOOL outsideSlop		(S32 x, S32 y, S32 start_x, S32 start_y);  	BOOL pickLeftMouseDownCallback(); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index dace3f875f..9ca2d3f61d 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -80,6 +80,7 @@  #include "llfloatermap.h"  #include "llfloatermemleak.h"  #include "llfloaternamedesc.h" +#include "llfloaternearbymedia.h"  #include "llfloaternotificationsconsole.h"  #include "llfloateropenobject.h"  #include "llfloaterpay.h" @@ -187,6 +188,8 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("mute_object_by_name", "floater_mute_object.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGetBlockedObjectName>);  	LLFloaterReg::add("mini_map", "floater_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMap>);  	LLFloaterReg::add("syswell_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLSysWellWindow>); + +	LLFloaterReg::add("nearby_media", "floater_nearby_media.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNearbyMedia>);  	LLFloaterReg::add("notifications_console", "floater_notifications_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotificationConsole>); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 8bd74dcb04..b623185e0b 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -168,8 +168,7 @@ public:  		viewer_media_t mMediaImpl;  		bool mInitialized;  }; -typedef std::vector<LLViewerMediaImpl*> impl_list; -static impl_list sViewerMediaImplList; +static LLViewerMedia::impl_list sViewerMediaImplList;  static LLTimer sMediaCreateTimer;  static const F32 LLVIEWERMEDIA_CREATE_DELAY = 1.0f;  static F32 sGlobalVolume = 1.0f; @@ -183,8 +182,8 @@ static void add_media_impl(LLViewerMediaImpl* media)  //////////////////////////////////////////////////////////////////////////////////////////  static void remove_media_impl(LLViewerMediaImpl* media)  { -	impl_list::iterator iter = sViewerMediaImplList.begin(); -	impl_list::iterator end = sViewerMediaImplList.end(); +	LLViewerMedia::impl_list::iterator iter = sViewerMediaImplList.begin(); +	LLViewerMedia::impl_list::iterator end = sViewerMediaImplList.end();  	for(; iter != end; iter++)  	{ @@ -203,6 +202,7 @@ class LLViewerMediaMuteListObserver : public LLMuteListObserver  static LLViewerMediaMuteListObserver sViewerMediaMuteListObserver;  static bool sViewerMediaMuteListObserverInitialized = false; +static bool sInWorldMediaDisabled = false;  ////////////////////////////////////////////////////////////////////////////////////////// @@ -428,15 +428,34 @@ void LLViewerMedia::muteListChanged()  	}  } +////////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::setInWorldMediaDisabled(bool disabled) +{ +	sInWorldMediaDisabled = disabled; +} + +////////////////////////////////////////////////////////////////////////////////////////// +// static +bool LLViewerMedia::getInWorldMediaDisabled() +{ +	return sInWorldMediaDisabled; +} + +LLViewerMedia::impl_list &LLViewerMedia::getPriorityList() +{ +	return sViewerMediaImplList; +} +  // This is the predicate function used to sort sViewerMediaImplList by priority. -static inline bool compare_impl_interest(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2) +bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)  { -	if(i1->mIsMuted || i1->mMediaSourceFailed) +	if(i1->isForcedUnloaded())  	{  		// Muted or failed items always go to the end of the list, period.  		return false;  	} -	else if(i2->mIsMuted || i2->mMediaSourceFailed) +	else if(i2->isForcedUnloaded())  	{  		// Muted or failed items always go to the end of the list, period.  		return true; @@ -483,7 +502,7 @@ void LLViewerMedia::updateMedia()  	}  	// Sort the static instance list using our interest criteria -	std::stable_sort(sViewerMediaImplList.begin(), sViewerMediaImplList.end(), compare_impl_interest); +	std::stable_sort(sViewerMediaImplList.begin(), sViewerMediaImplList.end(), priorityComparitor);  	// Go through the list again and adjust according to priority.  	iter = sViewerMediaImplList.begin(); @@ -493,6 +512,7 @@ void LLViewerMedia::updateMedia()  	int impl_count_total = 0;  	int impl_count_interest_low = 0;  	int impl_count_interest_normal = 0; +	int i = 0;  #if 0	  	LL_DEBUGS("PluginPriority") << "Sorted impls:" << llendl; @@ -515,7 +535,7 @@ void LLViewerMedia::updateMedia()  		LLPluginClassMedia::EPriority new_priority = LLPluginClassMedia::PRIORITY_NORMAL; -		if(pimpl->mIsMuted || pimpl->mMediaSourceFailed || (impl_count_total > (int)max_instances)) +		if(pimpl->isForcedUnloaded() || (impl_count_total > (int)max_instances))  		{  			// Never load muted or failed impls.  			// Hard limit on the number of instances that will be loaded at one time @@ -583,6 +603,17 @@ void LLViewerMedia::updateMedia()  		}  		pimpl->setPriority(new_priority); +		 +		if(!pimpl->getUsedInUI()) +		{ +			// Any impls used in the UI should not be in the proximity list. +			pimpl->mProximity = -1; +		} +		else +		{ +			// Other impls just get the same ordering as the priority list (for now). +			pimpl->mProximity = i; +		}  #if 0		  		LL_DEBUGS("PluginPriority") << "    " << pimpl  @@ -595,6 +626,8 @@ void LLViewerMedia::updateMedia()  #endif  		total_cpu += pimpl->getCPUUsage(); +		 +		i++;  	}  	LL_DEBUGS("PluginPriority") << "Total reported CPU usage is " << total_cpu << llendl; @@ -641,6 +674,8 @@ LLViewerMediaImpl::LLViewerMediaImpl(	  const LLUUID& texture_id,  	mNeedsMuteCheck(false),  	mPreviousMediaState(MEDIA_NONE),  	mPreviousMediaTime(0.0f), +	mIsDisabled(false), +	mProximity(-1),  	mIsUpdated(false)  {  @@ -1023,6 +1058,16 @@ bool LLViewerMediaImpl::hasFocus() const  	return mHasFocus;  } +std::string LLViewerMediaImpl::getCurrentMediaURL() +{ +	if(!mCurrentMediaURL.empty()) +	{ +		return mCurrentMediaURL; +	} +	 +	return mMediaURL; +} +  //////////////////////////////////////////////////////////////////////////////////////////  void LLViewerMediaImpl::mouseDown(S32 x, S32 y, MASK mask, S32 button)  { @@ -1109,6 +1154,18 @@ void LLViewerMediaImpl::mouseDoubleClick(S32 x, S32 y, MASK mask, S32 button)  }  ////////////////////////////////////////////////////////////////////////////////////////// +void LLViewerMediaImpl::scrollWheel(S32 x, S32 y, MASK mask) +{ +	scaleMouse(&x, &y); +	mLastMouseX = x; +	mLastMouseY = y; +	if (mMediaSource) +	{ +		mMediaSource->scrollEvent(x, y, mask); +	} +} + +//////////////////////////////////////////////////////////////////////////////////////////  void LLViewerMediaImpl::onMouseCaptureLost()  {  	if (mMediaSource) @@ -1181,7 +1238,7 @@ void LLViewerMediaImpl::navigateForward()  //////////////////////////////////////////////////////////////////////////////////////////  void LLViewerMediaImpl::navigateReload()  { -	navigateTo(mMediaURL, "", true, false); +	navigateTo(getCurrentMediaURL(), "", true, false);  }  ////////////////////////////////////////////////////////////////////////////////////////// @@ -1203,6 +1260,9 @@ void LLViewerMediaImpl::navigateTo(const std::string& url, const std::string& mi  	mMediaURL = url;  	mMimeType = mime_type; +	// Clear the current media URL, since it will no longer be correct. +	mCurrentMediaURL.clear(); +	  	// if mime type discovery was requested, we'll need to do it when the media loads  	mNavigateRediscoverType = rediscover_type; @@ -1537,7 +1597,7 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage()  ////////////////////////////////////////////////////////////////////////////////////////// -LLUUID LLViewerMediaImpl::getMediaTextureID() +LLUUID LLViewerMediaImpl::getMediaTextureID() const  {  	return mTextureId;  } @@ -1625,6 +1685,27 @@ void LLViewerMediaImpl::resetPreviousMediaState()  }  ////////////////////////////////////////////////////////////////////////////////////////// +// +bool LLViewerMediaImpl::isForcedUnloaded() const +{ +	if(mIsMuted || mMediaSourceFailed || mIsDisabled) +	{ +		return true; +	} +	 +	if(sInWorldMediaDisabled) +	{ +		// When inworld media is disabled, all instances that aren't marked as "used in UI" will not be loaded. +		if(!mUsedInUI) +		{ +			return true; +		} +	} +	 +	return false; +} + +//////////////////////////////////////////////////////////////////////////////////////////  void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event)  {  	switch(event) @@ -1702,10 +1783,12 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla  			if(getNavState() == MEDIANAVSTATE_BEGUN)  			{ +				mCurrentMediaURL = plugin->getNavigateURI();  				setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED);  			}  			else if(getNavState() == MEDIANAVSTATE_SERVER_BEGUN)  			{ +				mCurrentMediaURL = plugin->getNavigateURI();  				setNavState(MEDIANAVSTATE_SERVER_COMPLETE_BEFORE_LOCATION_CHANGED);  			}  			else @@ -1721,10 +1804,12 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla  			if(getNavState() == MEDIANAVSTATE_BEGUN)  			{ +				mCurrentMediaURL = plugin->getLocation();  				setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED);  			}  			else if(getNavState() == MEDIANAVSTATE_SERVER_BEGUN)  			{ +				mCurrentMediaURL = plugin->getLocation();  				setNavState(MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED);  			}  			else diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index 4f0d39dd80..b04432730a 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -66,10 +66,15 @@ private:  	observerListType mObservers;  }; +class LLViewerMediaImpl; +  class LLViewerMedia  {  	LOG_CLASS(LLViewerMedia);  	public: + +		typedef std::vector<LLViewerMediaImpl*> impl_list; +  		// Special case early init for just web browser component  		// so we can show login screen.  See .cpp file for details. JC @@ -97,6 +102,14 @@ class LLViewerMedia  		static void mediaStop(void*);  		static F32 getVolume();	  		static void muteListChanged(); +		static void setInWorldMediaDisabled(bool disabled); +		static bool getInWorldMediaDisabled(); +				 +		// Returns the priority-sorted list of all media impls. +		static impl_list &getPriorityList(); +		 +		// This is the comparitor used to sort the list. +		static bool priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2);  };  // Implementation functions not exported into header file @@ -145,6 +158,7 @@ public:  	void mouseUp(const LLVector2& texture_coords, MASK mask, S32 button = 0);  	void mouseMove(const LLVector2& texture_coords, MASK mask);  	void mouseDoubleClick(S32 x,S32 y, MASK mask, S32 button = 0); +	void scrollWheel(S32 x, S32 y, MASK mask);  	void mouseCapture();  	void navigateBack(); @@ -158,7 +172,8 @@ public:  	bool handleUnicodeCharHere(llwchar uni_char);  	bool canNavigateForward();  	bool canNavigateBack(); -	std::string getMediaURL() { return mMediaURL; } +	std::string getMediaURL() const { return mMediaURL; } +	std::string getCurrentMediaURL();  	std::string getHomeURL() { return mHomeURL; }      void setHomeURL(const std::string& home_url) { mHomeURL = home_url; };  	std::string getMimeType() { return mMimeType; } @@ -166,7 +181,7 @@ public:  	void update();  	void updateImagesMediaStreams(); -	LLUUID getMediaTextureID(); +	LLUUID getMediaTextureID() const;  	void suspendUpdates(bool suspend) { mSuspendUpdates = suspend; };  	void setVisible(bool visible); @@ -177,6 +192,12 @@ public:  	bool hasMedia();  	bool isMediaFailed() { return mMediaSourceFailed; };  	void resetPreviousMediaState(); +	 +	void setDisabled(bool disabled) { mIsDisabled = disabled; }; +	bool isMediaDisabled() { return mIsDisabled; }; + +	// returns true if this instance should not be loaded (disabled, muted object, crashed, etc.) +	bool isForcedUnloaded() const;  	ECursorType getLastSetCursor() { return mLastSetCursor; }; @@ -236,6 +257,7 @@ public:  	void calculateInterest();  	F64 getInterest() const { return mInterest; };  	F64 getApproximateTextureInterest(); +	S32 getProximity() { return mProximity; };  	// Mark this object as being used in a UI panel instead of on a prim  	// This will be used as part of the interest sorting algorithm. @@ -272,9 +294,10 @@ public:  	LLPluginClassMedia* mMediaSource;  	LLUUID mTextureId;  	bool  mMovieImageHasMips; -	std::string mMediaURL; +	std::string mMediaURL;			// The last media url set with NavigateTo  	std::string mHomeURL;  	std::string mMimeType; +	std::string mCurrentMediaURL;	// The most current media url from the plugin (via the "location changed" or "navigate complete" events).  	S32 mLastMouseX;	// save the last mouse coord we get, so when we lose capture we can simulate a mouseup at that point.  	S32 mLastMouseY;  	S32 mMediaWidth; @@ -298,6 +321,8 @@ public:  	bool mNeedsMuteCheck;  	int mPreviousMediaState;  	F64 mPreviousMediaTime; +	bool mIsDisabled; +	S32 mProximity;  private:  	BOOL mIsUpdated ; diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index 5d0b77d4fb..0ef4679057 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -48,6 +48,9 @@  #include "llviewerparcelmgr.h"  #include "llweb.h"  #include "llmediaentry.h" +#include "llkeyboard.h" +#include "lltoolmgr.h" +  //  // LLViewerMediaFocus  // @@ -114,13 +117,16 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac  	}  	else  	{ -		if(mFocusedImplID != LLUUID::null) +		if(mFocusedImplID.notNull())  		{  			if(mMediaControls.get())  			{  				mMediaControls.get()->resetZoomLevel();  			} +		} +		if(hasFocus()) +		{  			gFocusMgr.setKeyboardFocus(NULL);  		} @@ -298,8 +304,9 @@ BOOL LLViewerMediaFocus::handleScrollWheel(S32 x, S32 y, S32 clicks)          // the scrollEvent() API's x and y are not the same as handleScrollWheel's x and y.          // The latter is the position of the mouse at the time of the event          // The former is the 'scroll amount' in x and y, respectively. -        // All we have for 'scroll amount' here is 'clicks', and no mask. -		media_impl->getMediaPlugin()->scrollEvent(0, clicks, /*mask*/0); +        // All we have for 'scroll amount' here is 'clicks'. +		// We're also not passed the keyboard modifier mask, but we can get that from gKeyboard. +		media_impl->getMediaPlugin()->scrollEvent(0, clicks, gKeyboard->currentMask(TRUE));  		retval = TRUE;  	}  	return retval; @@ -307,6 +314,30 @@ BOOL LLViewerMediaFocus::handleScrollWheel(S32 x, S32 y, S32 clicks)  void LLViewerMediaFocus::update()  { +	if(mFocusedImplID.notNull() || mFocusedObjectID.notNull()) +	{ +		// We have a focused impl/face. +		if(!getFocus()) +		{ +			// We've lost keyboard focus -- check to see whether the media controls have it +			if(mMediaControls.get() && mMediaControls.get()->hasFocus()) +			{ +				// the media controls have focus -- don't clear. +			} +			else +			{ +				// Someone else has focus -- back off. +				clearFocus(); +			} +		} +		else if(LLToolMgr::getInstance()->inBuildMode()) +		{ +			// Build tools are selected -- clear focus. +			clearFocus(); +		} +	} +	 +	  	LLViewerMediaImpl *media_impl = getFocusedMediaImpl();  	LLViewerObject *viewer_object = getFocusedObject();  	S32 face = mFocusedObjectFace; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index ec6ef92a54..8b7df63884 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1595,8 +1595,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  			// Claim to be from a local agent so it doesn't go into  			// console.  			chat.mText = name + separator_string + message.substr(message_offset); -			BOOL local_agent = TRUE; -			LLFloaterChat::addChat(chat, FALSE, local_agent); + +			LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD()); +			if(nearby_chat) +			{ +				nearby_chat->addMessage(chat); +			}  		}  		else  		{ diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index f9c95afc31..4bf66ba17e 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2448,28 +2448,20 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()  		}  		else  		{ -			F32 blend_frac = calc_bouncy_animation(appearance_anim_time / APPEARANCE_MORPH_TIME); -			F32 last_blend_frac = calc_bouncy_animation(mLastAppearanceBlendTime / APPEARANCE_MORPH_TIME); -			F32 morph_amt; -			if (last_blend_frac == 1.f) -			{ -				morph_amt = 1.f; -			} -			else -			{ -				morph_amt = (blend_frac - last_blend_frac) / (1.f - last_blend_frac); -			} - +			F32 morph_amt = calcMorphAmount();  			LLVisualParam *param; -			// animate only top level params -			for (param = getFirstVisualParam(); -				 param; -				 param = getNextVisualParam()) +			if (!isSelf())  			{ -				if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +				// animate only top level params for non-self avatars +				for (param = getFirstVisualParam(); +					 param; +					 param = getNextVisualParam())  				{ -					param->animate(morph_amt, mAppearanceAnimSetByUser); +					if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +					{ +						param->animate(morph_amt, mAppearanceAnimSetByUser); +					}  				}  			} @@ -2487,6 +2479,25 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()  	}  } +F32 LLVOAvatar::calcMorphAmount() +{ +	F32 appearance_anim_time = mAppearanceMorphTimer.getElapsedTimeF32(); +	F32 blend_frac = calc_bouncy_animation(appearance_anim_time / APPEARANCE_MORPH_TIME); +	F32 last_blend_frac = calc_bouncy_animation(mLastAppearanceBlendTime / APPEARANCE_MORPH_TIME); + +	F32 morph_amt; +	if (last_blend_frac == 1.f) +	{ +		morph_amt = 1.f; +	} +	else +	{ +		morph_amt = (blend_frac - last_blend_frac) / (1.f - last_blend_frac); +	} + +	return morph_amt; +} +  void LLVOAvatar::idleUpdateLipSync(bool voice_enabled)  {  	// Use the Lipsync_Ooh and Lipsync_Aah morphs for lip sync diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index e3add8aa78..f7c794defe 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -205,7 +205,7 @@ public:  	virtual BOOL 	updateCharacter(LLAgent &agent);  	void 			idleUpdateVoiceVisualizer(bool voice_enabled);  	void 			idleUpdateMisc(bool detailed_update); -	void 			idleUpdateAppearanceAnimation(); +	virtual void	idleUpdateAppearanceAnimation();  	void 			idleUpdateLipSync(bool voice_enabled);  	void 			idleUpdateLoadingEffect();  	void 			idleUpdateWindEffect(); @@ -250,6 +250,7 @@ protected:  	virtual BOOL	updateIsFullyLoaded();  	BOOL			processFullyLoadedChange(bool loading);  	void			updateRuthTimer(bool loading); +	F32 			calcMorphAmount();  private:  	BOOL			mFullyLoaded;  	BOOL			mPreviousFullyLoaded; @@ -276,7 +277,7 @@ public:  protected:  	static BOOL			parseSkeletonFile(const std::string& filename);  	void				buildCharacter(); -	BOOL				loadAvatar(); +	virtual BOOL		loadAvatar();  	BOOL				setupBone(const LLVOAvatarBoneInfo* info, LLViewerJoint* parent, S32 ¤t_volume_num, S32 ¤t_joint_num);  	BOOL				buildSkeleton(const LLVOAvatarSkeletonInfo *info); diff --git a/indra/newview/llvoavatardefines.cpp b/indra/newview/llvoavatardefines.cpp index 17b502ae80..5624f19c8d 100644 --- a/indra/newview/llvoavatardefines.cpp +++ b/indra/newview/llvoavatardefines.cpp @@ -68,9 +68,9 @@ LLVOAvatarDictionary::Textures::Textures()  	addEntry(TEX_EYES_ALPHA,                  new TextureEntry("eyes_alpha",       TRUE,  BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID",     WT_ALPHA));  	addEntry(TEX_HAIR_ALPHA,                  new TextureEntry("hair_alpha",       TRUE,  BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID",     WT_ALPHA)); -	addEntry(TEX_HEAD_TATTOO,                 new TextureEntry("head_tattoo",      TRUE,  BAKED_NUM_INDICES, "UIImgDefaultTattooUUID",     WT_TATTOO)); -	addEntry(TEX_UPPER_TATTOO,                new TextureEntry("upper_tattoo",     TRUE,  BAKED_NUM_INDICES, "UIImgDefaultTattooUUID",     WT_TATTOO)); -	addEntry(TEX_LOWER_TATTOO,                new TextureEntry("lower_tattoo",     TRUE,  BAKED_NUM_INDICES, "UIImgDefaultTattooUUID",     WT_TATTOO)); +	addEntry(TEX_HEAD_TATTOO,                 new TextureEntry("head_tattoo",      TRUE,  BAKED_NUM_INDICES, "",     WT_TATTOO)); +	addEntry(TEX_UPPER_TATTOO,                new TextureEntry("upper_tattoo",     TRUE,  BAKED_NUM_INDICES, "",     WT_TATTOO)); +	addEntry(TEX_LOWER_TATTOO,                new TextureEntry("lower_tattoo",     TRUE,  BAKED_NUM_INDICES, "",     WT_TATTOO));  	addEntry(TEX_HEAD_BAKED,                  new TextureEntry("head-baked",       FALSE, BAKED_HEAD));  	addEntry(TEX_UPPER_BAKED,                 new TextureEntry("upper-baked",      FALSE, BAKED_UPPER)); @@ -248,8 +248,6 @@ EBakedTextureIndex LLVOAvatarDictionary::findBakedByRegionName(std::string name)  //static  const LLUUID LLVOAvatarDictionary::getDefaultTextureImageID(ETextureIndex index)  { -	/* switch( index ) -		case TEX_UPPER_SHIRT:		return LLUUID( gSavedSettings.getString("UIImgDefaultShirtUUID") ); */  	const TextureEntry *texture_dict = getInstance()->getTexture(index);  	const std::string &default_image_name = texture_dict->mDefaultImageName;  	if (default_image_name == "") @@ -265,9 +263,6 @@ const LLUUID LLVOAvatarDictionary::getDefaultTextureImageID(ETextureIndex index)  // static  EWearableType LLVOAvatarDictionary::getTEWearableType(ETextureIndex index )  { -	/* switch(index) -		case TEX_UPPER_SHIRT: -			return WT_SHIRT; */  	return getInstance()->getTexture(index)->mWearableType;  } diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 4760d5a472..758db538a2 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -193,6 +193,25 @@ void LLVOAvatarSelf::markDead()  	LLVOAvatar::markDead();  } +/*virtual*/ BOOL LLVOAvatarSelf::loadAvatar() +{ +	BOOL success = LLVOAvatar::loadAvatar(); + +	// set all parameters sotred directly in the avatar to have +	// the isSelfParam to be TRUE - this is used to prevent +	// them from being animated or trigger accidental rebakes +	// when we copy params from the wearable to the base avatar. +	for (LLViewerVisualParam* param = (LLViewerVisualParam*) getFirstVisualParam();  +		 param; +		 param = (LLViewerVisualParam*) getNextVisualParam()) +	{ +		param->setIsDummy(TRUE); +	} + +	return success; +} + +  BOOL LLVOAvatarSelf::loadAvatarSelf()  {  	BOOL success = TRUE; @@ -704,16 +723,23 @@ void LLVOAvatarSelf::updateVisualParams()  		}  	} -	LLWearable *shape = gAgentWearables.getWearable(WT_SHAPE,0); -	if (shape) -	{ -		F32 gender = shape->getVisualParamWeight(80); // param 80 == gender -		setVisualParamWeight("male",gender ,TRUE); -	} -  	LLVOAvatar::updateVisualParams();  } +/*virtual*/ +void LLVOAvatarSelf::idleUpdateAppearanceAnimation() +{ +	// Animate all top-level wearable visual parameters +	gAgentWearables.animateAllWearableParams(calcMorphAmount(), mAppearanceAnimSetByUser); + +	// apply wearable visual params to avatar +	updateVisualParams(); + +	//allow avatar to process updates +	LLVOAvatar::idleUpdateAppearanceAnimation(); + +} +  // virtual  void LLVOAvatarSelf::requestStopMotion(LLMotion* motion)  { diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index a555d04a63..6e52b33634 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -57,6 +57,7 @@ public:  	virtual void			markDead();  	virtual void 		initInstance(); // Called after construction to initialize the class.  protected: +	/*virtual*/ BOOL		loadAvatar();  	BOOL					loadAvatarSelf();  	BOOL					buildSkeletonSelf(const LLVOAvatarSkeletonInfo *info);  	BOOL					buildMenus(); @@ -89,6 +90,7 @@ public:  	/*virtual*/ BOOL setVisualParamWeight(const char* param_name, F32 weight, BOOL set_by_user = FALSE );  	/*virtual*/ BOOL setVisualParamWeight(S32 index, F32 weight, BOOL set_by_user = FALSE );  	/*virtual*/ void updateVisualParams(); +	/*virtual*/ void idleUpdateAppearanceAnimation();  private:  	// helper function. Passed in param is assumed to be in avatar's parameter list. diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index a091028ec2..4cd29bb838 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -185,7 +185,9 @@ void LLWearable::createVisualParams()  			{  				delete mVisualParamIndexMap[param->getID()];  			} -			mVisualParamIndexMap[param->getID()] = param->cloneParam(this); +			LLViewerVisualParam *new_param = param->cloneParam(this); +			new_param->setIsDummy(FALSE); +			mVisualParamIndexMap[param->getID()] = new_param;  		}  	} @@ -668,21 +670,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater  	if( gFloaterCustomize && update_customize_floater )  	{ -		LLViewerInventoryItem* item; -		// MULTI_WEARABLE: -		item = (LLViewerInventoryItem*)gInventory.getItem(gAgentWearables.getWearableItemID(mType,0)); -		U32 perm_mask = PERM_NONE; -		BOOL is_complete = FALSE; -		if(item) -		{ -			perm_mask = item->getPermissions().getMaskOwner(); -			is_complete = item->isComplete(); -			if(!is_complete) -			{ -				item->fetchFromServer(); -			} -		} -		gFloaterCustomize->setWearable(mType, this, perm_mask, is_complete); +		gFloaterCustomize->setWearable(mType, 0);  		gFloaterCustomize->setCurrentWearableType( mType );  	} @@ -935,6 +923,17 @@ void LLWearable::getVisualParams(visual_param_vec_t &list)  	}  } +void LLWearable::animateParams(F32 delta, BOOL set_by_user) +{ +	for(visual_param_index_map_t::iterator iter = mVisualParamIndexMap.begin(); +		 iter != mVisualParamIndexMap.end(); +		 ++iter) +	{ +		LLVisualParam *param = (LLVisualParam*) iter->second; +		param->animate(delta, set_by_user); +	} +} +  LLColor4 LLWearable::getClothesColor(S32 te) const  {  	LLColor4 color; diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h index 01bd9652a5..96631811c5 100644 --- a/indra/newview/llwearable.h +++ b/indra/newview/llwearable.h @@ -119,6 +119,7 @@ public:  	F32					getVisualParamWeight(S32 index) const;  	LLVisualParam*		getVisualParam(S32 index) const;  	void				getVisualParams(visual_param_vec_t &list); +	void				animateParams(F32 delta, BOOL set_by_user);  	LLColor4			getClothesColor(S32 te) const;  	void 				setClothesColor( S32 te, const LLColor4& new_color, BOOL set_by_user ); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 287c997c65..1e0da13162 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -66,6 +66,9 @@  	 name="Blue"  	 value="0 0 1 1" />  	<color +	 name="Yellow" +	 value="1 1 0 1" /> +	<color  	 name="Unused?"  	 value="1 0 1 1" />  	<color @@ -408,10 +411,10 @@       reference="White" />      <color       name="MapAvatarColor" -     reference="White" /> +     reference="Green" />      <color       name="MapAvatarFriendColor" -     reference="Unused?" /> +     reference="Yellow" />      <color       name="MapAvatarSelfColor"       value="0.53125 0 0.498047 1" /> diff --git a/indra/newview/skins/default/textures/containers/Accordion_Selected.png b/indra/newview/skins/default/textures/containers/Accordion_Selected.pngBinary files differ new file mode 100644 index 0000000000..0616dea6a3 --- /dev/null +++ b/indra/newview/skins/default/textures/containers/Accordion_Selected.png diff --git a/indra/newview/skins/default/textures/icons/ForSale_Badge.png b/indra/newview/skins/default/textures/icons/ForSale_Badge.pngBinary files differ new file mode 100644 index 0000000000..5bee570cee --- /dev/null +++ b/indra/newview/skins/default/textures/icons/ForSale_Badge.png diff --git a/indra/newview/skins/default/textures/icons/Generic_Object_Small.png b/indra/newview/skins/default/textures/icons/Generic_Object_Small.pngBinary files differ new file mode 100644 index 0000000000..223874e631 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Generic_Object_Small.png diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.pngBinary files differ new file mode 100644 index 0000000000..f2ae828efc --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.pngBinary files differ new file mode 100644 index 0000000000..d454d4cd48 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png diff --git a/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png b/indra/newview/skins/default/textures/icons/YouAreHere_Badge.pngBinary files differ new file mode 100644 index 0000000000..c057e9743d --- /dev/null +++ b/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png diff --git a/indra/newview/skins/default/textures/map_avatar_8.tga b/indra/newview/skins/default/textures/map_avatar_8.tgaBinary files differ index 47c8cbed6f..28552f2237 100644 --- a/indra/newview/skins/default/textures/map_avatar_8.tga +++ b/indra/newview/skins/default/textures/map_avatar_8.tga diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index d3366cdcaa..79c70c4d8f 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -6,8 +6,10 @@    <texture name="Accordion_ArrowOpened_Press" file_name="containers/Accordion_ArrowOpened_Press.png" preload="false" />    <texture name="Accordion_Off" file_name="containers/Accordion_Off.png" preload="false" />    <texture name="Accordion_Press" file_name="containers/Accordion_Press.png" preload="false" /> +  <texture name="Accordion_Over" file_name="containers/Accordion_Over.png" preload="false" /> +  <texture name="Accordion_Selected" file_name="containers/Accordion_Selected.png" preload="false" /> - <texture name="Activate_Checkmark" file_name="taskpanel/Activate_Checkmark.png" preload="false" /> +<texture name="Activate_Checkmark" file_name="taskpanel/Activate_Checkmark.png" preload="false" />    <texture name="AddItem_Disabled" file_name="icons/AddItem_Disabled.png" preload="false" />    <texture name="AddItem_Off" file_name="icons/AddItem_Off.png" preload="false" /> @@ -54,11 +56,6 @@    <texture name="CameraView_Off" file_name="bottomtray/CameraView_Off.png" preload="false" />    <texture name="CameraView_Over" file_name="bottomtray/CameraView_Over.png" preload="false" /> -  <texture name="CameraPreset_Rear" file_name="camera_presets/camera_presets_rear.png" preload="false" /> -  <texture name="CameraPreset_3_4" file_name="camera_presets/camera_presets_3_4.png" preload="false" /> -  <texture name="CameraPreset_Front" file_name="camera_presets/camera_presets_front.png" preload="false" /> -  <texture name="CameraPreset_Mouselook" file_name="camera_presets/camera_presets_mouselook.png" preload="false" /> -    <texture name="Checkbox_Off_Disabled" file_name="widgets/Checkbox_Disabled.png" preload="true" />    <texture name="Checkbox_On_Disabled" file_name="widgets/Checkbox_On_Disabled.png" preload="true" />    <texture name="Checkbox_Off" file_name="widgets/Checkbox_Off.png" preload="true" /> @@ -93,15 +90,18 @@    <texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" />    <texture name="Favorite_Star_Over" file_name="navbar/Favorite_Star_Over.png" preload="false" /> -  <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" /> +  <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" />    <texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" /> +  <texture name="ForSale_Badge" file_name="icons/ForSale_Badge.png" preload="false" />    <texture name="ForwardArrow_Off" file_name="icons/ForwardArrow_Off.png" preload="false" />    <texture name="ForwardArrow_Press" file_name="icons/ForwardArrow_Press.png" preload="false" />    <texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" />    <texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" /> -  <texture name="Generic_Object" file_name="icons/Generic_Object.png" preload="false" /> +  <texture name="Generic_Object_Medium" file_name="icons/Generic_Object_Medium.png" preload="false" /> +  <texture name="Generic_Object_Small" file_name="icons/ Generic_Object_Small.png" preload="false" /> +  <texture name="Generic_Object_Large" file_name="icons/Generic_Object_Large.png" preload="false" />    <texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />    <texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" /> @@ -147,10 +147,12 @@    <texture name="Info_Over" file_name="icons/Info_Over.png" preload="false" />    <texture name="Info_Press" file_name="navbar/Info_Press.png" preload="false" /> -  <texture name="Inspector_Background" file_name="windows/Inspector_Background.png" preload="false" /> +  <texture name="Inspector_Background" file_name="windows/Inspector_Background.png" preload="false" +           scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" />    <texture name="Inspector_Hover" file_name="windows/Inspector_Hover.png" preload="false" />    <texture name="Inv_Acessories" file_name="icons/Inv_Accessories.png" preload="false" /> +  <texture name="Inv_Alpha" file_name="icons/Inv_Alpha.png" preload="false" />    <texture name="Inv_Animation" file_name="icons/Inv_Animation.png" preload="false" />    <texture name="Inv_BodyShape" file_name="icons/Inv_BodyShape.png" preload="false" />    <texture name="Inv_CallingCard" file_name="icons/Inv_CallingCard.png" preload="false" /> @@ -163,6 +165,8 @@    <texture name="Inv_Gloves" file_name="icons/Inv_Gloves.png" preload="false" />    <texture name="Inv_Hair" file_name="icons/Inv_Hair.png" preload="false" />    <texture name="Inv_Jacket" file_name="icons/Inv_Jacket.png" preload="false" /> +  <texture name="Inv_LookFolderOpen" file_name="icons/Inv_LookFolderOpen.png" preload="false" /> +  <texture name="Inv_LookFolderClosed" file_name="icons/Inv_LookFolderClosed.png" preload="false" />    <texture name="Inv_Landmark" file_name="icons/Inv_Landmark.png" preload="false" />    <texture name="Inv_Notecard" file_name="icons/Inv_Notecard.png" preload="false" />    <texture name="Inv_Object" file_name="icons/Inv_Object.png" preload="false" /> @@ -175,6 +179,7 @@    <texture name="Inv_Snapshot" file_name="icons/Inv_Snapshot.png" preload="false" />    <texture name="Inv_Socks" file_name="icons/Inv_Socks.png" preload="false" />    <texture name="Inv_Sound" file_name="icons/Inv_Sound.png" preload="false" /> +  <texture name="Inv_Tattoo" file_name="icons/Inv_Tattoo.png" preload="false" />    <texture name="Inv_Texture" file_name="icons/Inv_Texture.png" preload="false" />    <texture name="Inv_Trash" file_name="icons/Inv_Trash.png" preload="false" />    <texture name="Inv_Underpants" file_name="icons/Inv_Underpants.png" preload="false" /> @@ -228,9 +233,6 @@    <texture name="NearbyVoice_Lvl3" file_name="bottomtray/NearbyVoice_Lvl3.png" preload="false" />    <texture name="NearbyVoice_On" file_name="bottomtray/NearbyVoice_On.png" preload="false" /> -  <texture name="NoEntryLines" file_name="world/NoEntryLines.png" use_mips="true" preload="false" /> -  <texture name="NoEntryPassLines" file_name="world/NoEntryPassLines.png" use_mips="true" preload="false" /> -    <texture name="Object_Cone" file_name="build/Object_Cone.png" preload="false" />    <texture name="Object_Cube" file_name="build/Object_Cube.png" preload="false" />    <texture name="Object_Cylinder" file_name="build/Object_Cylinder.png" preload="false" /> @@ -258,42 +260,6 @@    <texture name="Overhead_M" file_name="world/Overhead_M.png" preload="false" />    <texture name="Overhead_S" file_name="world/Overhead_S.png" preload="false" /> -  <texture name="parcel_drk_Build" file_name="icons/parcel_drk_Build.png" preload="false" /> -  <texture name="parcel_drk_BuildNo" file_name="icons/parcel_drk_BuildNo.png" preload="false" /> -  <texture name="parcel_drk_Damage" file_name="icons/parcel_drk_Damage.png" preload="false" /> -  <texture name="parcel_drk_DamageNo" file_name="icons/parcel_drk_DamageNo.png" preload="false" /> -  <texture name="parcel_drk_Fly" file_name="icons/parcel_drk_Fly.png" preload="false" /> -  <texture name="parcel_drk_FlyNo" file_name="icons/parcel_drk_FlyNo.png" preload="false" /> -  <texture name="parcel_drk_ForSale" file_name="icons/parcel_drk_ForSale.png" preload="false" /> -  <texture name="parcel_drk_ForSaleNo" file_name="icons/parcel_drk_ForSaleNo.png" preload="false" /> -  <texture name="parcel_drk_M" file_name="icons/parcel_drk_M.png" preload="false" /> -  <texture name="parcel_drk_PG" file_name="icons/parcel_drk_PG.png" preload="false" /> -  <texture name="parcel_drk_Push" file_name="icons/parcel_drk_Push.png" preload="false" /> -  <texture name="parcel_drk_PushNo" file_name="icons/parcel_drk_PushNo.png" preload="false" /> -  <texture name="parcel_drk_R" file_name="icons/parcel_drk_R.png" preload="false" /> -  <texture name="parcel_drk_Scripts" file_name="icons/parcel_drk_Scripts.png" preload="false" /> -  <texture name="parcel_drk_ScriptsNo" file_name="icons/parcel_drk_ScriptsNo.png" preload="false" /> -  <texture name="parcel_drk_Voice" file_name="icons/parcel_drk_Voice.png" preload="false" /> -  <texture name="parcel_drk_VoiceNo" file_name="icons/parcel_drk_VoiceNo.png" preload="false" /> - -  <texture name="parcel_lght_Build" file_name="icons/parcel_lght_Build.png" preload="false" /> -  <texture name="parcel_lght_BuildNo" file_name="icons/parcel_lght_BuildNo.png" preload="false" /> -  <texture name="parcel_lght_Damage" file_name="icons/parcel_lght_Damage.png" preload="false" /> -  <texture name="parcel_lght_DamageNo" file_name="icons/parcel_lght_DamageNo.png" preload="false" /> -  <texture name="parcel_lght_Fly" file_name="icons/parcel_lght_Fly.png" preload="false" /> -  <texture name="parcel_lght_FlyNo" file_name="icons/parcel_lght_FlyNo.png" preload="false" /> -  <texture name="parcel_lght_ForSale" file_name="icons/parcel_lght_ForSale.png" preload="false" /> -  <texture name="parcel_lght_ForSaleNo" file_name="icons/parcel_lght_ForSaleNo.png" preload="false" /> -  <texture name="parcel_lght_M" file_name="icons/parcel_lght_M.png" preload="false" /> -  <texture name="parcel_lght_PG" file_name="icons/parcel_lght_PG.png" preload="false" /> -  <texture name="parcel_lght_Push" file_name="icons/parcel_lght_Push.png" preload="false" /> -  <texture name="parcel_lght_PushNo" file_name="icons/parcel_lght_PushNo.png" preload="false" /> -  <texture name="parcel_lght_R" file_name="icons/parcel_lght_R.png" preload="false" /> -  <texture name="parcel_lght_Scripts" file_name="icons/parcel_lght_Scripts.png" preload="false" /> -  <texture name="parcel_lght_ScriptsNo" file_name="icons/parcel_lght_ScriptsNo.png" preload="false" /> -  <texture name="parcel_lght_Voice" file_name="icons/parcel_lght_Voice.png" preload="false" /> -  <texture name="parcel_lght_VoiceNo" file_name="icons/parcel_lght_VoiceNo.png" preload="false" /> -    <texture name="Progress_1" file_name="icons/Progress_1.png" preload="false" />    <texture name="Progress_2" file_name="icons/Progress_2.png" preload="false" />    <texture name="Progress_3" file_name="icons/Progress_3.png" preload="false" /> @@ -437,7 +403,8 @@    <texture name="TextField_Active" file_name="widgets/TextField_Active.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />    <texture name="Toast_CloseBtn" file_name="windows/Toast_CloseBtn.png" preload="true" /> -  <texture name="Toast" file_name="windows/Toast.png" preload="true" /> +  <texture name="Toast_Background" file_name="windows/Toast_Background.png" preload="true" +           scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" />    <texture name="Tool_Create" file_name="build/Tool_Create.png" preload="false" />    <texture name="Tool_Dozer" file_name="build/Tool_Dozer.png" preload="false" /> @@ -472,18 +439,19 @@    <texture name="Widget_DownArrow" file_name="icons/Widget_DownArrow.png" preload="true" />    <texture name="Widget_UpArrow" file_name="icons/Widget_UpArrow.png" preload="true" /> -  <texture name="Window_Background" file_name="windows/Window_Background.png" preload="true" /> -  <texture name="Window_Foreground" file_name="windows/Window_Foreground.png" preload="true" /> - - - +  <texture name="Window_Background" file_name="windows/Window_Background.png" preload="true" +           scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" /> +  <texture name="Window_Foreground" file_name="windows/Window_Foreground.png" preload="true" +           scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" /> +  <texture name="Window_NoTitle_Background" file_name="windows/Window_NoTitle_Background.png" preload="true" +           scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" /> +  <texture name="Window_NoTitle_Foreground" file_name="windows/Window_NoTitle_Foreground.png" preload="true" +           scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" /> +  <texture name="YouAreHere_Badge" file_name="icons/YouAreHere_Badge.png" preload="false" />    <!--WARNING OLD ART *do not use*--> -  <texture name="Banner_ForSale" file_name="Banner_ForSale.png" preload="false" /> -  <texture name="Banner_YouAreHere" file_name="Banner_YouAreHere.png" preload="false" /> -    <texture name="btn_chatbar.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" />    <texture name="btn_chatbar_selected.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" /> @@ -601,6 +569,54 @@    <texture name="icon_popular.tga" />    <texture name="icon_top_pick.tga" /> +  <texture name="inv_folder_animation.tga" /> +  <texture name="inv_folder_bodypart.tga" /> +  <texture name="inv_folder_callingcard.tga" /> +  <texture name="inv_folder_clothing.tga" /> +  <texture name="inv_folder_current_outfit.tga" /> +  <texture name="inv_folder_gesture.tga" /> +  <texture name="inv_folder_landmark.tga" /> +  <texture name="inv_folder_lostandfound.tga" /> +  <texture name="inv_folder_my_outfits.tga" /> +  <texture name="inv_folder_notecard.tga" /> +  <texture name="inv_folder_object.tga" /> +  <texture name="inv_folder_outfit.tga" /> +  <texture name="inv_folder_plain_closed.tga" /> +  <texture name="inv_folder_script.tga" /> +  <texture name="inv_folder_snapshot.tga" /> +  <texture name="inv_folder_sound.tga" /> +  <texture name="inv_folder_texture.tga" /> +  <texture name="inv_folder_trash.tga" /> + +  <texture name="inv_item_animation.tga" /> +  <texture name="inv_item_skin.tga" /> +  <texture name="inv_item_callingcard_offline.tga" /> +  <texture name="inv_item_callingcard_online.tga" /> +  <texture name="inv_item_eyes.tga" /> +  <texture name="inv_item_gesture.tga" /> +  <texture name="inv_item_gloves.tga" /> +  <texture name="inv_item_hair.tga" /> +  <texture name="inv_item_jacket.tga" /> +  <texture name="inv_item_landmark.tga" /> +  <texture name="inv_item_landmark_visited.tga" /> +  <texture name="inv_item_linkitem.tga" /> +  <texture name="inv_item_linkfolder.tga" /> +  <texture name="inv_item_notecard.tga" /> +  <texture name="inv_item_object.tga" /> +  <texture name="inv_item_object_multi.tga" /> +  <texture name="inv_item_pants.tga" /> +  <texture name="inv_item_script.tga" /> +  <texture name="inv_item_shape.tga" /> +  <texture name="inv_item_shirt.tga" /> +  <texture name="inv_item_shoes.tga" /> +  <texture name="inv_item_skirt.tga" /> +  <texture name="inv_item_snapshot.tga" /> +  <texture name="inv_item_socks.tga" /> +  <texture name="inv_item_sound.tga" /> +  <texture name="inv_item_texture.tga" /> +  <texture name="inv_item_underpants.tga" /> +  <texture name="inv_item_undershirt.tga" /> +    <texture name="lag_status_critical.tga" />    <texture name="lag_status_good.tga" />    <texture name="lag_status_warning.tga" /> @@ -619,12 +635,45 @@    <texture name="media_icon.tga" file_name="icn_label_media.tga" />    <texture name="music_icon.tga" file_name="icn_label_music.tga" /> +  <texture name="NoEntryLines" file_name="world/NoEntryLines.png" use_mips="true" preload="false" /> +  <texture name="NoEntryPassLines" file_name="world/NoEntryPassLines.png" use_mips="true" preload="false" />    <texture name="notify_tip_icon.tga" />    <texture name="notify_caution_icon.tga" />    <texture name="notify_next.png" preload="true" />    <texture name="notify_box_icon.tga" /> +  <texture name="object_cone.tga" /> +  <texture name="object_cone_active.tga" /> +  <texture name="object_cube.tga" /> +  <texture name="object_cube_active.tga" /> +  <texture name="object_cylinder.tga" /> +  <texture name="object_cylinder_active.tga" /> +  <texture name="object_grass.tga" /> +  <texture name="object_grass_active.tga" /> +  <texture name="object_hemi_cone.tga" /> +  <texture name="object_hemi_cone_active.tga" /> +  <texture name="object_hemi_cylinder.tga" /> +  <texture name="object_hemi_cylinder_active.tga" /> +  <texture name="object_hemi_sphere.tga" /> +  <texture name="object_hemi_sphere_active.tga" /> +  <texture name="object_prism.tga" /> +  <texture name="object_prism_active.tga" /> +  <texture name="object_pyramid.tga" /> +  <texture name="object_pyramid_active.tga" /> +  <texture name="object_ring.tga" /> +  <texture name="object_ring_active.tga" /> +  <texture name="object_sphere.tga" /> +  <texture name="object_sphere_active.tga" /> +  <texture name="object_tetrahedron.tga" /> +  <texture name="object_tetrahedron_active.tga" /> +  <texture name="object_torus.tga" /> +  <texture name="object_torus_active.tga" /> +  <texture name="object_tree.tga" /> +  <texture name="object_tree_active.tga" /> +  <texture name="object_tube.tga" /> +  <texture name="object_tube_active.tga" /> +    <texture name="pixiesmall.j2c" use_mips="true" />    <texture name="script_error.j2c" use_mips="true" />    <texture name="silhouette.j2c" use_mips="true" /> @@ -640,6 +689,11 @@    <texture name="status_no_push.tga" />    <texture name="status_no_scripts.tga" /> +  <texture name="tool_dozer.tga" /> +  <texture name="tool_dozer_active.tga" /> +  <texture name="tool_zoom.tga" /> +  <texture name="tool_zoom_active.tga" /> +    <texture name="icn_active-speakers-dot-lvl0.tga" />    <texture name="icn_active-speakers-dot-lvl1.tga" />    <texture name="icn_active-speakers-dot-lvl2.tga" /> diff --git a/indra/newview/skins/default/textures/windows/Inspector_Background.png b/indra/newview/skins/default/textures/windows/Inspector_Background.pngBinary files differ index 807e8e553c..4c2a728ac5 100644 --- a/indra/newview/skins/default/textures/windows/Inspector_Background.png +++ b/indra/newview/skins/default/textures/windows/Inspector_Background.png diff --git a/indra/newview/skins/default/textures/windows/Toast_Background.png b/indra/newview/skins/default/textures/windows/Toast_Background.pngBinary files differ new file mode 100644 index 0000000000..f27d1a12ec --- /dev/null +++ b/indra/newview/skins/default/textures/windows/Toast_Background.png diff --git a/indra/newview/skins/default/textures/windows/Window_Background.png b/indra/newview/skins/default/textures/windows/Window_Background.pngBinary files differ index e9f15e76b9..db253900af 100644 --- a/indra/newview/skins/default/textures/windows/Window_Background.png +++ b/indra/newview/skins/default/textures/windows/Window_Background.png diff --git a/indra/newview/skins/default/textures/windows/Window_Foreground.png b/indra/newview/skins/default/textures/windows/Window_Foreground.pngBinary files differ index e76e9f3c79..b81ec5b43c 100644 --- a/indra/newview/skins/default/textures/windows/Window_Foreground.png +++ b/indra/newview/skins/default/textures/windows/Window_Foreground.png diff --git a/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png b/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.pngBinary files differ new file mode 100644 index 0000000000..a570ac06bd --- /dev/null +++ b/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png diff --git a/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png b/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.pngBinary files differ new file mode 100644 index 0000000000..d573e8c69a --- /dev/null +++ b/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index 6d64d13db7..3789369e74 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="440"   layout="topleft"   name="floater_aaa" diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 5cd11ba292..02c6ed1b20 100644 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="440"   layout="topleft"   name="floater_about" diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index aa0b4094b4..c245f877c7 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_tear_off="false"   height="420"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_activeim.xml b/indra/newview/skins/default/xui/en/floater_activeim.xml index f81250e7b9..1bc9cde044 100644 --- a/indra/newview/skins/default/xui/en/floater_activeim.xml +++ b/indra/newview/skins/default/xui/en/floater_activeim.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"  	name="floater_activeim"  	help_topic="floater_activeim"  	title="ACTIVE IM" diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml index 11773c34dc..ab3d5722f0 100644 --- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="556"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml index fb0994b4cd..aae6508041 100644 --- a/indra/newview/skins/default/xui/en/floater_auction.xml +++ b/indra/newview/skins/default/xui/en/floater_auction.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="412"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml index 0542d4509e..3f4f8b197f 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="350"   layout="topleft" @@ -85,6 +86,52 @@               top="52"               width="132" />          </panel> +        <panel +         border="none" +         height="150" +         label="Friends" +         layout="topleft" +         left="6" +         help_topic="avatarpicker_friends_tab" +         name="FriendsPanel" +         top="150" +         width="132"> +            <text +             type="string" +             length="1" +             follows="left|top" +             height="16" +             layout="topleft" +             left="10" +             name="InstructSelectFriend" +             top="15" +             width="200"> +                Select a friend(s): +            </text> +            <button +             follows="top|right" +             layout="topleft" +             right="-5" +             top ="5" +             height="20" +             width="20" +             name="RefreshFriends" +             picture_style="true" +             image_overlay="Refresh_Off"> +             <button.commit_callback  +              function="Refresh.FriendList"/> +            </button> +            <scroll_list +             follows="all" +             height="100" +             border="false" +             layout="topleft" +             left="0" +             name="Friends" +             sort_column="0" +             top_pad="5" +             width="132" /> +        </panel>          <panel           border="none" diff --git a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml index e677426ee5..4f2a36e518 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="950"   layout="topleft"   name="avatar_texture_debug" diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml index a60064fb37..1c83799e72 100644 --- a/indra/newview/skins/default/xui/en/floater_beacons.xml +++ b/indra/newview/skins/default/xui/en/floater_beacons.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="225"   layout="topleft"   name="beacons" diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml index 3e6845cfa5..bddbbdd3b2 100644 --- a/indra/newview/skins/default/xui/en/floater_build_options.xml +++ b/indra/newview/skins/default/xui/en/floater_build_options.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   follows="right"   height="170"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml index ef6af28786..02958bee74 100644 --- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_tear_off="false"   height="310"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_bumps.xml b/indra/newview/skins/default/xui/en/floater_bumps.xml index d1f6706875..2917096f3c 100644 --- a/indra/newview/skins/default/xui/en/floater_bumps.xml +++ b/indra/newview/skins/default/xui/en/floater_bumps.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="180"   layout="topleft"   name="floater_bumps" diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml index 718f83c9a2..aacc3ad8d0 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_contents.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="290"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml index 9b0b56d9cf..88712bda5e 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -1,12 +1,13 @@  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>  <floater + legacy_header_height="18"   can_minimize="false"   height="275"   layout="topleft" + title="Buy L$"   name="buy currency"   help_topic="buy_linden_dollars"   single_instance="true" - title="Buy L$"   width="350">      <floater.string       name="buy_currency"> diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml index 6d1c2c1cb9..8314549132 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="484"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml index 7930622e54..49ea3f5dd1 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_object.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="290"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index a713cc32a0..1b69418013 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_dock="true"   can_minimize="false"   can_close="true" diff --git a/indra/newview/skins/default/xui/en/floater_choose_group.xml b/indra/newview/skins/default/xui/en/floater_choose_group.xml index 371e239fdb..8b34fda96c 100644 --- a/indra/newview/skins/default/xui/en/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/en/floater_choose_group.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="258"   layout="topleft"   name="groups" diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml index f2146339a7..686b8dc40f 100644 --- a/indra/newview/skins/default/xui/en/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   follows="left|top"   height="380" diff --git a/indra/newview/skins/default/xui/en/floater_critical.xml b/indra/newview/skins/default/xui/en/floater_critical.xml index 5475a1cf6a..7b5451553f 100644 --- a/indra/newview/skins/default/xui/en/floater_critical.xml +++ b/indra/newview/skins/default/xui/en/floater_critical.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_close="false"   can_minimize="false"   height="500" diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml index 57f5800f2c..07d76f4810 100644 --- a/indra/newview/skins/default/xui/en/floater_customize.xml +++ b/indra/newview/skins/default/xui/en/floater_customize.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   follows="left|top"   height="540" diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml index b044cd41e6..b8fa104352 100644 --- a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="275"   layout="topleft"   name="Day Cycle Floater" diff --git a/indra/newview/skins/default/xui/en/floater_device_settings.xml b/indra/newview/skins/default/xui/en/floater_device_settings.xml index 8901608374..2b23980423 100644 --- a/indra/newview/skins/default/xui/en/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_device_settings.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="260"   layout="topleft"   name="floater_device_settings" diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml index cecd6c4ef7..7c22311f66 100644 --- a/indra/newview/skins/default/xui/en/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="150"   layout="topleft"   name="Environment Editor Floater" diff --git a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml index 4975111111..e4ac8fed77 100644 --- a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml +++ b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_close="true"   can_minimize="false"   height="250" diff --git a/indra/newview/skins/default/xui/en/floater_font_test.xml b/indra/newview/skins/default/xui/en/floater_font_test.xml index 66c207603b..8b14f691d6 100644 --- a/indra/newview/skins/default/xui/en/floater_font_test.xml +++ b/indra/newview/skins/default/xui/en/floater_font_test.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="800"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml index 7346c81e79..128d518e12 100644 --- a/indra/newview/skins/default/xui/en/floater_gesture.xml +++ b/indra/newview/skins/default/xui/en/floater_gesture.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="465"   name="gestures" diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml index 02754b25dd..97cb6e259c 100644 --- a/indra/newview/skins/default/xui/en/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="384"   layout="topleft"   name="godtools floater" diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml index fe04d1f627..cd98f21918 100644 --- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="224"   layout="topleft"   name="Hardware Settings Floater" @@ -131,7 +132,7 @@       layout="topleft"       left="10"       max_val="4096" -     name="GrapicsCardTextureMemory" +     name="GraphicsCardTextureMemory"       tool_tip="Amount of memory to allocate for textures. Defaults to video card memory. Reducing this may improve performance but may also make textures blurry."       top_pad="10"       width="300" /> diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml index 512b4c85a1..d2fe8d0e6d 100644 --- a/indra/newview/skins/default/xui/en/floater_help_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_hud.xml b/indra/newview/skins/default/xui/en/floater_hud.xml index 23e0ef50fd..6e8950c49a 100644 --- a/indra/newview/skins/default/xui/en/floater_hud.xml +++ b/indra/newview/skins/default/xui/en/floater_hud.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="292"   layout="topleft" 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 0037c6ef04..d9c3ff77d9 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   background_visible="true"   follows="left|top|right|bottom"   height="250" diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml index 4e4fe97e62..2562daf4b3 100644 --- a/indra/newview/skins/default/xui/en/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_image_preview.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="440"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml index 95e4247a05..dcb93c6e2f 100644 --- a/indra/newview/skins/default/xui/en/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/en/floater_incoming_call.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_close="false"   can_minimize="false"   can_tear_off="false" diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml index 339604e658..9f7723c51b 100644 --- a/indra/newview/skins/default/xui/en/floater_inspect.xml +++ b/indra/newview/skins/default/xui/en/floater_inspect.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="300"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml index 0f06558dd1..2011635790 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   can_resize="true"   height="563" diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml index e3e2decef7..4f0609c7f8 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   height="340"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml index 6556a14730..0042f97a8e 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="408"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml index c0bcfd2271..e2da059ace 100644 --- a/indra/newview/skins/default/xui/en/floater_joystick.xml +++ b/indra/newview/skins/default/xui/en/floater_joystick.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="500"   layout="topleft"   name="Joystick" diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml index 2966b47232..d98fdc5118 100644 --- a/indra/newview/skins/default/xui/en/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/en/floater_lagmeter.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="150"   layout="topleft"   name="floater_lagmeter" diff --git a/indra/newview/skins/default/xui/en/floater_land_holdings.xml b/indra/newview/skins/default/xui/en/floater_land_holdings.xml index dbafa56035..46d74b6aff 100644 --- a/indra/newview/skins/default/xui/en/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/en/floater_land_holdings.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="400"   layout="topleft"   name="land holdings floater" diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml index dc6c8302a0..93bbb0107e 100644 --- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   bevel_style="none"   border_style="line"   can_resize="true" diff --git a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml index fd2ee6ce5c..4dcf168605 100644 --- a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   follows="left|top"   height="400" diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml index a2b2e1ddf3..7b4c5f38a1 100644 --- a/indra/newview/skins/default/xui/en/floater_map.xml +++ b/indra/newview/skins/default/xui/en/floater_map.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   follows="top|right"   height="225" diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml index ad2c50c6d9..b11892be74 100644 --- a/indra/newview/skins/default/xui/en/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="440"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml index b96573b32a..4218c15408 100644 --- a/indra/newview/skins/default/xui/en/floater_media_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_media_settings.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater  +<floater + legacy_header_height="18"   bottom="-666"    can_close="true"    can_drag_on_left="false"  diff --git a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml index bd83da02aa..560acafd4f 100644 --- a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   follows="left|top"   height="175" diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 745385f153..02cbef5987 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -1,8 +1,9 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_dock="true"   can_close="true" - can_minimize="true" + can_minimize="false"   center_horiz="true"   follows="bottom"   height="110" @@ -37,7 +38,7 @@          Fly Backwards (press Down Arrow or S)      </string>      <panel -     border="true"  +     border="false"        height="83"       follows="left|top"        layout="topleft" @@ -135,7 +136,7 @@      </panel>  <!-- Width and height of this panel should be synchronized with panel_stand_stop_flying.xml -->      <panel -     border="true"  +     border="false"        height="27"       layout="topleft"       left="0" diff --git a/indra/newview/skins/default/xui/en/floater_mute_object.xml b/indra/newview/skins/default/xui/en/floater_mute_object.xml index 06a03ff340..33b1dac8a5 100644 --- a/indra/newview/skins/default/xui/en/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/en/floater_mute_object.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="130"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_my_friends.xml b/indra/newview/skins/default/xui/en/floater_my_friends.xml index 0ca4fc825a..689221b9c7 100644 --- a/indra/newview/skins/default/xui/en/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/en/floater_my_friends.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_close="false"   can_resize="true"   height="390" diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml index d24d1b7064..65dd4e74ff 100644 --- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml +++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater  +<floater + legacy_header_height="18"   can_minimize="true"   can_tear_off="false"   can_resize="false" diff --git a/indra/newview/skins/default/xui/en/floater_notification.xml b/indra/newview/skins/default/xui/en/floater_notification.xml index cd88ec2f3f..f9cb22055a 100644 --- a/indra/newview/skins/default/xui/en/floater_notification.xml +++ b/indra/newview/skins/default/xui/en/floater_notification.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="200"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml index 3783417cdb..03a2aad96d 100644 --- a/indra/newview/skins/default/xui/en/floater_notifications_console.xml +++ b/indra/newview/skins/default/xui/en/floater_notifications_console.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="500"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml index 17f7e9bf67..cc50f43339 100644 --- a/indra/newview/skins/default/xui/en/floater_openobject.xml +++ b/indra/newview/skins/default/xui/en/floater_openobject.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   default_tab_group="1"   height="350" diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml index 69525d48d2..b4becfa022 100644 --- a/indra/newview/skins/default/xui/en/floater_pay.xml +++ b/indra/newview/skins/default/xui/en/floater_pay.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="185"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml index acff55386b..8d230023cc 100644 --- a/indra/newview/skins/default/xui/en/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="220"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml index f65bb6f32f..eb0c22b9c4 100644 --- a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="180"   layout="topleft"   name="perm prefs" diff --git a/indra/newview/skins/default/xui/en/floater_post_process.xml b/indra/newview/skins/default/xui/en/floater_post_process.xml index 571f4149f0..46554beede 100644 --- a/indra/newview/skins/default/xui/en/floater_post_process.xml +++ b/indra/newview/skins/default/xui/en/floater_post_process.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="400"   layout="topleft"   name="Post-Process Floater" diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml index d93cad6dbd..b13bd1740c 100644 --- a/indra/newview/skins/default/xui/en/floater_postcard.xml +++ b/indra/newview/skins/default/xui/en/floater_postcard.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   can_minimize="false"   can_resize="true" diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml index 90a77b22b6..d2a2a7ce02 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   center_horiz="true"   center_vert="true"   default_tab_group="1" diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml index e34b87dbba..3b84358484 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   height="85"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_preview_classified.xml b/indra/newview/skins/default/xui/en/floater_preview_classified.xml index 07167c3ae4..7c8c6d7207 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_classified.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   height="510"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_preview_event.xml b/indra/newview/skins/default/xui/en/floater_preview_event.xml index 77fbe7c060..f5ab8c95d7 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_event.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   height="510"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml index 11c4e5d8fb..4f3978a5e3 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   height="460"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml index 43e4f8a348..fc838f27b4 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   follows="left|top"   height="155" diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml index 606ae1a82a..b489ae2e77 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   follows="left|top"   height="90" diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml index 4b4f611b59..8a07f3ad1e 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   follows="left|top"   height="155" diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml index d2b8455eab..3797055054 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   can_resize="true"   default_tab_group="1" diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml index 7a868a1fe9..95347f0dff 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   height="85"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml index 32f71da61a..e7abfb075a 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   can_resize="true"   follows="left|bottom" diff --git a/indra/newview/skins/default/xui/en/floater_region_info.xml b/indra/newview/skins/default/xui/en/floater_region_info.xml index 3fadc15616..ae01d0bdf4 100644 --- a/indra/newview/skins/default/xui/en/floater_region_info.xml +++ b/indra/newview/skins/default/xui/en/floater_region_info.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="512"   help_topic="regioninfo"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml index 884532c7a3..88f09b521c 100644 --- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="580"   layout="topleft"   name="floater_report_abuse" diff --git a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml index 2085b74a55..0029fcb09b 100644 --- a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml +++ b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   follows="left|top|right|bottom"   height="200" diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml index a415239867..c29a2f4516 100644 --- a/indra/newview/skins/default/xui/en/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_script_preview.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   can_resize="true"   height="550" diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml index 467dcfae20..8a44252426 100644 --- a/indra/newview/skins/default/xui/en/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/en/floater_script_queue.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   auto_tile="true"   can_resize="true"   height="400" diff --git a/indra/newview/skins/default/xui/en/floater_script_search.xml b/indra/newview/skins/default/xui/en/floater_script_search.xml index 545abc39a2..79c4438dd6 100644 --- a/indra/newview/skins/default/xui/en/floater_script_search.xml +++ b/indra/newview/skins/default/xui/en/floater_script_search.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   default_tab_group="1"   height="120"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index 296cde92e3..2f4d7c50a1 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_select_key.xml b/indra/newview/skins/default/xui/en/floater_select_key.xml index b89af0ef3e..31d133ff9b 100644 --- a/indra/newview/skins/default/xui/en/floater_select_key.xml +++ b/indra/newview/skins/default/xui/en/floater_select_key.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   border="true"   can_close="false"   can_minimize="false" diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml index 652ed96192..8fedd0a89f 100644 --- a/indra/newview/skins/default/xui/en/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="450"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_settings_debug.xml b/indra/newview/skins/default/xui/en/floater_settings_debug.xml index b7779687ec..02b3cee97c 100644 --- a/indra/newview/skins/default/xui/en/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/en/floater_settings_debug.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="215"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 551f570b52..4f2be37ade 100644 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   follows="left|top"   height="526" diff --git a/indra/newview/skins/default/xui/en/floater_sound_preview.xml b/indra/newview/skins/default/xui/en/floater_sound_preview.xml index 3b1eae9293..6145b722f1 100644 --- a/indra/newview/skins/default/xui/en/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_sound_preview.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="190"   layout="topleft"   name="Sound Preview" diff --git a/indra/newview/skins/default/xui/en/floater_statistics.xml b/indra/newview/skins/default/xui/en/floater_statistics.xml index 653bc942e5..ab783b0735 100644 --- a/indra/newview/skins/default/xui/en/floater_statistics.xml +++ b/indra/newview/skins/default/xui/en/floater_statistics.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   follows="right|top"   height="392" diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml index 205e6efe70..bdc2874281 100644 --- a/indra/newview/skins/default/xui/en/floater_stats.xml +++ b/indra/newview/skins/default/xui/en/floater_stats.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   follows="top|right"   height="400" diff --git a/indra/newview/skins/default/xui/en/floater_sys_well.xml b/indra/newview/skins/default/xui/en/floater_sys_well.xml index aef5707fd4..e1f07a49e7 100644 --- a/indra/newview/skins/default/xui/en/floater_sys_well.xml +++ b/indra/newview/skins/default/xui/en/floater_sys_well.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater  +<floater + legacy_header_height="18"   bevel_style="in"   left="0"   top="0"  diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml index 95de27e0ea..faf1a378f2 100644 --- a/indra/newview/skins/default/xui/en/floater_telehub.xml +++ b/indra/newview/skins/default/xui/en/floater_telehub.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="250"   layout="topleft"   name="telehub" diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml index ce17873a67..89a1ddda99 100644 --- a/indra/newview/skins/default/xui/en/floater_test_button.xml +++ b/indra/newview/skins/default/xui/en/floater_test_button.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="500"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml index 66a5b9267d..9977e85a9d 100644 --- a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_combobox.xml b/indra/newview/skins/default/xui/en/floater_test_combobox.xml index 956d5669b8..317d8f5ba8 100644 --- a/indra/newview/skins/default/xui/en/floater_test_combobox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_combobox.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml index ce20b03919..c954607ffe 100644 --- a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml +++ b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="false"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_layout.xml b/indra/newview/skins/default/xui/en/floater_test_layout.xml index 209859bb29..c6acb7c96e 100644 --- a/indra/newview/skins/default/xui/en/floater_test_layout.xml +++ b/indra/newview/skins/default/xui/en/floater_test_layout.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="500"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_line_editor.xml b/indra/newview/skins/default/xui/en/floater_test_line_editor.xml index 251ca4c9bf..e017d404c6 100644 --- a/indra/newview/skins/default/xui/en/floater_test_line_editor.xml +++ b/indra/newview/skins/default/xui/en/floater_test_line_editor.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_list_view.xml b/indra/newview/skins/default/xui/en/floater_test_list_view.xml index 98d6d5bda7..1d2086d9bc 100644 --- a/indra/newview/skins/default/xui/en/floater_test_list_view.xml +++ b/indra/newview/skins/default/xui/en/floater_test_list_view.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml b/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml index dd551b6d51..c6b4cca6b9 100644 --- a/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="200"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml b/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml index 35190c0e1a..7ef2d97cdc 100644 --- a/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml +++ b/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_slider.xml b/indra/newview/skins/default/xui/en/floater_test_slider.xml index 3545f88df7..57d8e686ce 100644 --- a/indra/newview/skins/default/xui/en/floater_test_slider.xml +++ b/indra/newview/skins/default/xui/en/floater_test_slider.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_spinner.xml b/indra/newview/skins/default/xui/en/floater_test_spinner.xml index c4e5bc9e99..3c44a4884d 100644 --- a/indra/newview/skins/default/xui/en/floater_test_spinner.xml +++ b/indra/newview/skins/default/xui/en/floater_test_spinner.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml index c33ab8aa70..f39d27761c 100644 --- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="400"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml index cc0fc34dd5..12d7e18762 100644 --- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml +++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml @@ -15,6 +15,7 @@      Otherwise specify location with left and top attributes.  -->  <floater + legacy_header_height="18"   can_dock="true"    can_resize="true"   title="Test Floater" diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index f2b701b88d..0a1f6e0e29 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   can_resize="true"   height="290" diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 29fe046ed3..e6ac39e40b 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -1,8 +1,11 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   follows="left|top|right"   height="570"   layout="topleft" + bg_opaque_image="Window_NoTitle_Foreground"  + bg_alpha_image="Window_NoTitle_Background"    name="toolbox floater"   help_topic="toolbox_floater"   save_rect="true" @@ -2735,8 +2738,19 @@  				<button.commit_callback  				function="BuildTool.EditMedia"/>  			</button> - -			<button +      <web_browser +        visible="false"  +        enabled="false"  +        border_visible="true" +        bottom_delta="0" +        follows="top|left" +        left="0" +        name="title_media" +        width="4" +        height="4" +        start_url="about:blank" +        decouple_texture_size="true" /> +     <button  			 follows="left|top"  			 font="SansSerifSmall"  			 height="19" diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml index 07ffc204f9..2f53422d51 100644 --- a/indra/newview/skins/default/xui/en/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="350"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml index 54facbb659..4e2cce1428 100644 --- a/indra/newview/skins/default/xui/en/floater_tos.xml +++ b/indra/newview/skins/default/xui/en/floater_tos.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_close="false"   can_minimize="false"   height="500" diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml index acd770cd38..380e51977f 100644 --- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   height="640"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_url_entry.xml b/indra/newview/skins/default/xui/en/floater_url_entry.xml index 6c1fb65bdd..1ab42cb140 100644 --- a/indra/newview/skins/default/xui/en/floater_url_entry.xml +++ b/indra/newview/skins/default/xui/en/floater_url_entry.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="87"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml index a860b1038c..9c55e8ea16 100644 --- a/indra/newview/skins/default/xui/en/floater_water.xml +++ b/indra/newview/skins/default/xui/en/floater_water.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="240"   layout="topleft"   name="Water Floater" diff --git a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml index ee67989d33..9a95e3dfef 100644 --- a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   border="true"   can_close="false"   can_minimize="false" diff --git a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml index 4f501b65f3..ef68d03a45 100644 --- a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml +++ b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_minimize="false"   height="108"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml index 2b3bc5f11a..0ea769921f 100644 --- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/en/floater_windlight_options.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   height="220"   layout="topleft"   name="WindLight floater" diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml index f37c0e9022..93755fa253 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater + legacy_header_height="18"   can_resize="true"   center_horiz="true"   center_vert="true" diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml index 181c80ebc7..6b13e2f1c7 100644 --- a/indra/newview/skins/default/xui/en/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml @@ -4,8 +4,9 @@    Single instance - only have one at a time, recycle it each spawn  -->  <floater + legacy_header_height="18"   bevel_style="in" - bg_opaque_color="MouseGray" + bg_opaque_image="Inspector_Background"    can_close="false"   can_minimize="false"   height="138" diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml index 5b166e83b8..db12daa6e0 100644 --- a/indra/newview/skins/default/xui/en/inspect_group.xml +++ b/indra/newview/skins/default/xui/en/inspect_group.xml @@ -4,8 +4,9 @@    Single instance - only have one at a time, recycle it each spawn  -->  <floater + legacy_header_height="18"   bevel_style="in" - bg_opaque_color="MouseGray" + bg_opaque_image="Inspector_Background"    can_close="false"   can_minimize="false"   height="138" diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml index 73a7bef77d..fe492e0ae8 100644 --- a/indra/newview/skins/default/xui/en/inspect_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_object.xml @@ -4,8 +4,9 @@    Single instance - only have one at a time, recycle it each spawn  -->  <floater + legacy_header_height="18"   bevel_style="in" - bg_opaque_color="MouseGray" + bg_opaque_image="Inspector_Background"    can_close="false"   can_minimize="false"   height="145" @@ -70,7 +71,7 @@ owner James Linden     width="150">  L$300,000    </text> -    <text +   <text     follows="all"     height="30"     left="8" @@ -83,24 +84,35 @@ This is a really long description for an object being as how it is at least 80 c    </text>    <!-- Overlapping buttons for all default actions.  Show "Buy" if    for sale, "Sit" if can sit, etc. --> +   <text +   follows="all" +   height="15" +   left_delta="0" +   name="object_media_url" +   top_pad="-5" +   width="291" +   max_length = "50"  +   use_ellipses="true" +   word_wrap="true"/>    +        <button -     follows="top|left" -     font="SansSerif" -     height="23" -     label="Buy" -     left="10" -     name="buy_btn" -     top="114" -     width="100" /> +   follows="top|left" +   font="SansSerif" +   height="20" +   label="Buy" +   left="10" +   name="buy_btn" +   top="114" +   width="75" />    <button     follows="top|left"     font="SansSerif" -   height="23" +   height="20"     label="Pay"     left_delta="0"     name="pay_btn"     top_delta="0" -   width="100" /> +   width="75" />    <button     follows="top|left"     font="SansSerif" @@ -109,16 +121,16 @@ This is a really long description for an object being as how it is at least 80 c     left_delta="0"     name="take_free_copy_btn"     top_delta="0" -   width="100" /> +   width="75" />    <button     follows="top|left"     font="SansSerifSmall" -   height="23" +   height="20"     label="Touch"     left_delta="0"     name="touch_btn"     top_delta="0" -   width="100" /> +   width="75" />    <button     follows="top|left"     font="SansSerif" @@ -127,17 +139,27 @@ This is a really long description for an object being as how it is at least 80 c     left_delta="0"     name="sit_btn"     top_delta="0" -   width="100" /> +   width="75" />    <button     follows="top|left"     font="SansSerifSmall" -   height="23" +   height="20"     label="Open"     left_delta="0"     name="open_btn"     top_delta="0" -   width="100" /> -  <!-- non-overlapping buttons here --> +   width="75" /> +  <icon +   name="secure_browsing" +   image_name="map_infohub.tga" +   left_delta="80" +   width="16" +   height="16" +   top_delta="2" +   tool_tip="Secure Browsing" +   follows="left|top"/>  +    + <!--  non-overlapping buttons here -->      <menu_button       follows="top|left"       height="18" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index a59a8b065f..3f63f493b1 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -167,6 +167,18 @@               function="Floater.Toggle"               parameter="active_speakers" />          </menu_item_check> +        <menu_item_check +         label="Nearby Media" +         layout="topleft" +         name="Nearby Media" +         shortcut="control|alt|N"> +            <menu_item_check.on_check +             function="Floater.Visible" +             parameter="nearby_media" /> +            <menu_item_check.on_click +             function="Floater.Toggle" +             parameter="nearby_media" /> +        </menu_item_check>          <!--menu_item_check           label="Block List"           layout="topleft" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index ac98907199..9aacb8a92c 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5837,15 +5837,11 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you a        <button         index="0"         name="Keep" -       text="OK"/> +       text="Accept"/>        <button         index="1"         name="Discard" -       text="Cancel"/> -      <button -       index="2" -       name="Mute" -       text="Block"/> +       text="No, thanks"/>      </form>    </notification> diff --git a/indra/newview/skins/default/xui/en/panel_chat_item.xml b/indra/newview/skins/default/xui/en/panel_chat_item.xml index 78f53562cd..05b04bbf8e 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_item.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_item.xml @@ -5,10 +5,10 @@    name="instant_message"    width="300"    height="180" -  background_opaque="false" -  background_visible="true" +  background_opaque="true" +  background_visible="false"    follows="left|top|right|bottom" -  bg_alpha_color="0.3 0.3 0.3 1.0"> +  bg_alpha_color="0.3 0.3 0.3 0">  	<panel width="250" height="30" background_visible="true" background_opaque="false" bg_alpha_color="0.0 0.0 0.0 1.0" name="msg_caption">    		<avatar_icon        		top="25" left="10" width="20" height="20" follows="left|top" 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 b002034a08..fedc49ae87 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -136,6 +136,7 @@         layout="topleft"         left="120"         top="18" +       max_length="512"         name="sl_description_edit"         width="173"         word_wrap="true"> @@ -188,6 +189,7 @@         height="100"         layout="topleft"         left="120" +       max_length="512"         top="142"         name="fl_description_edit"         width="173" diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml index 9bd240eccc..a85c55f9b2 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -1,15 +1,14 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel - border="true"   follows="all" - height="445" + height="412"   label="General"   class="panel_group_general"   layout="topleft" - left="1" + left="0" + top="0"   name="general_tab" - top="500" - width="280"> + width="313">      <panel.string       name="help_text">          The General tab contains general information about this group, a list of members, general Group Preferences and member options. @@ -18,7 +17,7 @@ Hover your mouse over the options for more help.      </panel.string>      <panel.string       name="group_info_unchanged"> -        General group information has changed. +        General group information has changed      </panel.string>      <panel.string       name="incomplete_member_data_str"> @@ -28,42 +27,28 @@ Hover your mouse over the options for more help.       type="string"       follows="left|top"       left="5" -     height="75" +     height="60"       layout="topleft"       max_length="511"       name="charter"       top="5" -     width="260" +     width="303"       word_wrap="true"> -        Group Charter +     Group Charter      </text_editor> -    <text -      follows="left|top" -     type="string" -     font="SansSerifBig" -     tool_tip="Owners are shown in bold." -     height="16" -     layout="topleft" -     left="5" -     name="text_owners_and_visible_members" -     text_color="EmphasisColor" -     top_pad="10" -     width="270"> -        Members -    </text>      <name_list       column_padding="0"       draw_heading="true"       follows="left|top" -     heading_height="14" -     height="80" +     heading_height="16" +     height="160"       layout="topleft"       left_delta="0"       name="visible_members"       top_pad="0" -     width="263"> +     width="303">          <name_list.columns -         label="Member Name" +         label="Member"           name="name"           relative_width="0.6" />          <name_list.columns @@ -71,27 +56,16 @@ Hover your mouse over the options for more help.           name="title"           relative_width="0.4" />        </name_list> -    <text -      follows="left|top" -      height="16" -     type="string" -     text_color="EmphasisColor" -     top_pad="10" -     font="SansSerifBig" -     layout="topleft" -     name="text_group_preferences"> -        Group Preferences -    </text>           <text           follows="left|top"           type="string" -         height="16" +         height="14"           layout="topleft"           left_delta="0"           name="active_title_label" -         top_pad="8" -         width="240"> -            My Active Title +         top_pad="5" +         width="303"> +            My Title          </text>          <combo_box           follows="left|top" @@ -100,58 +74,58 @@ Hover your mouse over the options for more help.           left_delta="0"           name="active_title"           tool_tip="Sets the title that appears in your avatar's name tag when this group is active." -         top_pad="0" -         width="240" /> +         top_pad="2" +         width="303" />          <check_box           height="16"           font="SansSerifSmall"           label="Receive notices"           layout="topleft" -         left_delta="0" +         left="5"           name="receive_notices"           tool_tip="Sets whether you want to receive Notices from this group.  Uncheck this box if this group is spamming you."           top_pad="5" -         width="240" /> +         width="303" />          <check_box           height="16"           label="Show in my profile"           layout="topleft" -         left_delta="0" +         left="5"           name="list_groups_in_profile"           tool_tip="Sets whether you want to show this group in your profile"           top_pad="5" -         width="240" /> +         width="303" />          <panel           background_visible="true"           bevel_style="in"           border="true"           bg_alpha_color="FloaterUnfocusBorderColor"           follows="left|top" -         height="125" +         height="93"           layout="topleft" -         left_delta="0" +         left="5"           name="preferences_container" -         top_pad="10" -         width="263"> +         top_pad="5" +         width="303">          <check_box           follows="right|top"           height="16"           label="Open enrollment"           layout="topleft" -         left_delta="0" +         left="10"           name="open_enrollement"           tool_tip="Sets whether this group allows new members to join without being invited."           top_pad="5"           width="90" />          <check_box           height="16" -         label="Enrollment fee:" +         label="Enrollment fee"           layout="topleft"           left_delta="0"           name="check_enrollment_fee"           tool_tip="Sets whether to require an enrollment fee to join the group"           top_pad="5" -         width="90" /> +         width="300" />          <spinner           decimal_digits="0"           follows="left|top" @@ -161,43 +135,38 @@ Hover your mouse over the options for more help.           label_width="20"           label="L$"           layout="topleft" -         left="25" +         right="-10"           max_val="99999" -         top_pad="5" +         left_pad="2"           name="spin_enrollment_fee"           tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked." -         top_delta="-2"           width="105" />          <check_box           height="16"           initial_value="true"           label="Show in search"           layout="topleft" -         left="4" +         left="10"           name="show_in_group_list"           tool_tip="Let people see this group in search results"           top_pad="4" -         width="90" /> +         width="300" />          <combo_box           height="20"           layout="topleft"           left_delta="0"           name="group_mature_check"           tool_tip="Sets whether your group information is considered mature" -         top_pad="10" -         width="240"> -            <combo_box.item -             label="- Select Mature -" -             name="select_mature" -             value="Select" /> -            <combo_box.item -             label="Mature Content" -             name="mature" -             value="Mature" /> +         top_pad="5" +         width="190">              <combo_box.item               label="PG Content"               name="pg"               value="Not Mature" /> -        </combo_box>   +             <combo_box.item +             label="Mature Content" +             name="mature" +             value="Mature" /> +        </combo_box>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index da6cf8891a..d8d47c4008 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -1,20 +1,22 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -  <panel - 	follows="left|top|right|bottom" -	height="660" -	label="Group Info" - 	layout="topleft" -	name="panel_group_info" -	border="false" -	width="300"> +background_visible="true" + follows="all" + height="570" + label="Group Info" + layout="topleft" + min_height="350" + left="0" + top="20" + name="GroupInfo" + width="333">      <panel.string       name="default_needs_apply_text"> -        There are unapplied changes on the current tab. +        There are unsaved changes to the current tab      </panel.string>      <panel.string       name="want_apply_text"> -        Do you want to apply these changes? +        Do you want to save these changes?      </panel.string>      <panel.string       name="group_join_btn"> @@ -25,34 +27,34 @@          Free      </panel.string>      <button -     layout="topleft" -     name="back" -     right="-9" -     top="0" -     width="25" -     height="25" -     label=""       follows="top|right" +     height="23"       image_overlay="BackArrow_Off" -     tab_stop="false" /> -    <text       layout="topleft" -     top="0" +     name="back" +     picture_style="true"       left="10" -     width="250" -     height="20" +     tab_stop="false" +     top="2" +     width="23" /> +    <text +     follows="top|left|right"       font="SansSerifHugeBold" +     height="26" +     layout="topleft" +     left_pad="10" +     name="group_name"       text_color="white" -     follows="top|left|right" -     mouse_opaque="true" -     use_ellipses="true" -     name="group_name">(Loading...)</text> +     top="0" +     value="(Loading...)" +     use_elipsis="true" +     width="300" />      <line_editor       follows="left|top"       font="SansSerif"       label="Type your new group name here"       layout="topleft" -     left_delta="0" +     left_delta="10"       max_length="35"       name="group_name_editor"       top_delta="5" @@ -64,7 +66,7 @@       height="113"       label=""       layout="topleft" -	 left="10" +     left="20"       name="insignia"       tool_tip="Click to choose a picture"       top_pad="5" @@ -79,7 +81,7 @@       name="prepend_founded_by"       top_delta="0"       width="140"> -      Founded by: +      Founder:      </text>      <name_box       follows="left|top" @@ -88,10 +90,12 @@       layout="topleft"       left_delta="0"       name="founder_name" -     top_pad="10" +     top_pad="2"       use_ellipses="true"       width="140" />      <text +    font="SansSerifBig" +    text_color="EmphasisColor"       type="string"       follows="left|top"       height="16" @@ -106,22 +110,84 @@      <button       follows="left|top"       left_delta="0" -     top_pad="10" -     height="20" +     top_pad="6" +     height="23"       label="Join now!"       label_selected="Join now!"       name="btn_join"       visible="true" -     width="85" /> -    <button -     top="632" -     height="20" -     font="SansSerifSmall" -     label="Save" -     label_selected="Save" -     name="btn_apply" -     left="5" -     width="65" /> +     width="120" /> +   <accordion +             follows="all" +             height="405" +             layout="topleft" +             left="0" +             name="groups_accordion" +             top_pad="20" +             width="333"> +             <accordion_tab +                 can_resize="false" +                 layout="topleft" +                 name="tab_general" +                 title="General"> +        <panel +        border="false" +         filename="panel_group_general.xml" +         layout="topleft" +         left="0" +         help_topic="group_general_tab" +         name="general_tab" +         top="0" +         width="333" /> +         </accordion_tab> +         <accordion_tab +                 can_resize="false" +                 expanded="false" +                 layout="topleft" +                 name="tab_roles" +                 title="Roles"> +        <panel +        border="false" +         filename="panel_group_roles.xml" +         layout="topleft" +         left="0" +         help_topic="group_roles_tab" +         name="roles_tab" +         top="0" +         width="333" /> +         </accordion_tab> +         <accordion_tab +                 can_resize="false" +                 expanded="false" +                 layout="topleft" +                 name="tab_notices" +                 title="Notices"> +        <panel +         filename="panel_group_notices.xml" +         layout="topleft" +         left="0" +         help_topic="group_notices_tab" +         name="notices_tab" +         top="0" +         width="333" /> +         </accordion_tab> +                  <accordion_tab +                 can_resize="false" +                 expanded="false" +                 layout="topleft" +                 name="tab_notices" +                 title="Land/Assets"> +        <panel +        border="false" +         filename="panel_group_land_money.xml" +         layout="topleft" +         left="0" +         help_topic="group_land_money_tab" +         name="land_money_tab" +         top="0" +         width="333" /> +         </accordion_tab> +         </accordion>      <button       follows="top|left"       height="20" @@ -129,41 +195,31 @@       layout="topleft"       name="btn_refresh"       picture_style="true" -     top="632" -     left="75" +     left="5"       width="20" /> +     <button +     height="20" +     font="SansSerifSmall" +     label="Save" +     label_selected="Save" +     name="btn_apply" +     left_pad="5" +     width="65" />      <button -     top="632"       height="20"       label="Create"       label_selected="Create"       name="btn_create" -     left="5" +     left_pad="5"       visible="false"       width="65" />      <button -	 top="632" -	 left="75"	  +     left_pad="5"       height="20"       label="Cancel"       label_selected="Cancel"       name="btn_cancel"       visible="false"       width="65" /> -      <accordion layout="topleft" left="2" width="296" top="135" height="500" follows="all" name="group_accordion"> -		<accordion_tab min_height="445" title="General" name="group_general_tab"> -        	<panel class="panel_group_general" filename="panel_group_general.xml" name="group_general_tab_panel"/> -		</accordion_tab> -		<accordion_tab min_height="380" title="Members & Roles" name="group_roles_tab" expanded="False" can_resize="false"> -        	<panel class="panel_group_roles" filename="panel_group_roles.xml" name="group_roles_tab_panel"/> -		</accordion_tab> -		<accordion_tab min_height="530" title="Notices" name="group_notices_tab" expanded="False" can_resize="false"> -			<panel class="panel_group_notices" filename="panel_group_notices.xml" name="group_notices_tab_panel"/> -		</accordion_tab> -		<accordion_tab min_height="270" title="Land & L$" name="group_land_tab" expanded="False" can_resize="false"> -			<panel class="panel_group_land_money" filename="panel_group_land_money.xml" name="group_land_tab_panel"/> -		</accordion_tab> -	  </accordion> -  </panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml index af1919bd8f..e2e4ca8b8f 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -1,20 +1,20 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel - border="true" - height="490" + border="false" + height="412"   label="Members & Roles"   layout="topleft" - left="1" + left="0" + top="0"   name="roles_tab" - top="490" - width="280"> + width="313">      <panel.string       name="default_needs_apply_text"> -        There are unapplied changes on the current sub-tab. +        There are unsaved changes to the current tab      </panel.string>      <panel.string       name="want_apply_text"> -        Do you want to apply these changes? +        Do you want to save these changes?      </panel.string>      <panel.string       name="help_text" /> @@ -160,17 +160,19 @@          </text>      </panel> -->      <tab_container +    border="true"       follows="left|top" -     height="180" +     height="260"       layout="topleft"       left="5"       name="roles_tab_container"       tab_position="top" -     top="10" -     width="265"> +     tab_height="20" +     top="0" +     width="303">          <panel -         border="true" -         height="165" +         border="false" +         height="260"           label="Members"           layout="topleft"           left="1" @@ -179,7 +181,7 @@           tool_tip="Members"           top="17"           class="panel_group_members_subtab" -         width="265"> +         width="300">              <panel.string               name="help_text">                  You can add or remove Roles assigned to Members. @@ -190,77 +192,56 @@ clicking on their names.           layout="topleft"           top="10"           left="4" -         width="255" +         width="280"           height="20"           follows="left|top|right"           max_length="250"           label="Filter Members"           name="filter_input"           font="SansSerif" /> -            <!--<line_editor -             border_style="line" -             border_thickness="1" -             follows="left|top" -             height="16" -             layout="topleft" -             left="4" -             max_length="63" -             name="search_text" -             top="10" -             width="90" /> -            <button -             font="SansSerifSmall" -             height="20" -             label="Search" -             layout="topleft" -             left_pad="5" -             name="search_button" -             top_delta="-2" -             width="80" /> -            <button +          <!--  <button               enabled="false"               font="SansSerifSmall"               height="20"               label="Show All"               layout="topleft" -             left_pad="0" +             left_pad="-90"               name="show_all_button" -             top_delta="0" -             width="80" /> --> +             top_delta="-6" +             width="80" />-->              <name_list               column_padding="0"               draw_heading="true" -             heading_height="14" -             height="100" +             heading_height="20" +             height="160"               follows="left|top"               layout="topleft" -             left="4" +             left="0"               multi_select="true"               name="member_list" -             top_pad="6" -             width="255"> +             top_pad="2" +             width="300">                  <name_list.columns                   label="Member"                   name="name" -                 width="90" /> +               relative_width="0.45" />                  <name_list.columns                   label="Donations"                   name="donated" -                 width="95" /> +         relative_width="0.3" />                  <name_list.columns                   label="Online"                   name="online" -                 width="80" /> +         relative_width="0.2" />              </name_list>              <button               height="20"               font="SansSerifSmall"               label="Invite"               layout="topleft" -             left_delta="0"               name="member_invite" -             top_pad="6" -             width="125" /> +             top_pad="3" +             width="100" />              <button               height="20"               font="SansSerifSmall" @@ -268,18 +249,17 @@ clicking on their names.               layout="topleft"               left_pad="5"               name="member_eject" -             top_delta="0" -             width="125" /> +             width="100" />              <icon               height="16" -             image_name="inv_folder_plain_closed.tga" +             image_name="Inv_FolderClosed"               layout="topleft"               name="power_folder_icon"               visible="false"               width="16" />          </panel>          <panel -         border="true" +         border="false"           height="164"           label="Roles"           layout="topleft" @@ -292,7 +272,7 @@ clicking on their names.              <panel.string               name="help_text">                  Roles have a title and an allowed list of Abilities -that Members can perform. Members can belong to  +that Members can perform. Members can belong to  one or more Roles. A group can have up to 10 Roles,  including the Everyone and Owner Roles.              </panel.string> @@ -302,7 +282,7 @@ including the Everyone and Owner Roles.              </panel.string>              <panel.string               name="power_folder_icon"> -                inv_folder_plain_closed.tga +                Inv_FolderClosed              </panel.string>              <panel.string               name="power_all_have_icon"> @@ -316,7 +296,7 @@ including the Everyone and Owner Roles.              layout="topleft"              top="10"              left="4" -            width="255" +            width="260"              height="20"              follows="left|top|right"              max_length="250" @@ -357,13 +337,13 @@ including the Everyone and Owner Roles.               column_padding="0"               draw_heading="true"               follows="left|top" -             heading_height="14" -             height="100" +             heading_height="20" +             height="150"               layout="topleft"               left="4"               name="role_list"               top_pad="4" -             width="255"> +             width="300">                  <scroll_list.columns                   label="Role"                   name="name" @@ -397,7 +377,7 @@ including the Everyone and Owner Roles.               width="125" />          </panel>          <panel -         border="true" +         border="false"           height="164"           label="Abilities"           layout="topleft" @@ -407,7 +387,7 @@ including the Everyone and Owner Roles.           class="panel_group_actions_subtab"           top="17"           tool_tip="You can view an Ability's Description and which Roles and Members can execute the Ability." -         width="265"> +         width="300">              <panel.string               name="help_text">                  Abilities allow Members in Roles to do specific @@ -486,13 +466,13 @@ things in this group. There's a broad variety of Abilities.          </panel>      </tab_container>      <panel -     height="190" +     height="150"       layout="topleft"       follows="left|top"       left="10"       name="members_footer" -     top_pad="10" -     width="265"> +     top_pad="2" +     width="300">          <text           type="string"           font="SansSerif" diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml index 00ede1fb2c..26d8304551 100644 --- a/indra/newview/skins/default/xui/en/panel_instant_message.xml +++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml @@ -1,15 +1,14 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel   background_visible="true" - bevel_style="in"   bg_alpha_color="0.3 0.3 0.3 0" - height="140" + height="175"   label="im_panel"   layout="topleft"   left="0"   name="im_panel"   top="0" - width="350"> + width="305">      <string       name="message_max_lines_count">          6 @@ -19,50 +18,52 @@       bevel_style="in"       bg_alpha_color="black"       follows="top" -     height="30" +     height="20"       label="im_header"       layout="topleft"       left="5"       name="im_header"       top="5" -     width="340"> +     width="295">          <avatar_icon           follows="right"           height="20"           image_name="icon_avatar_online.tga"           layout="topleft" -         left="5" +         left="0"           mouse_opaque="true"           name="avatar_icon" -         top="5" +         top="0"           width="20" />          <icon           follows="right"           height="20"           image_name="icon_top_pick.tga"           layout="topleft" -         left="5" +         left="0"           mouse_opaque="true"           name="sys_msg_icon" -         top="5" +         top="0"           width="20" />          <text           follows="left|right" -         font="SansSerifBigBold" +         font="SansSerifBold"           height="20"           layout="topleft" -         left_pad="10" +         left_pad="5"           name="user_name"           text_color="white"           top="5"           value="Darth Vader" -         width="250" /> +         width="295" /> +	 <!-- TIME STAMP -->          <text           follows="right" -         font="SansSerifBig" +         font="SansSerif"           height="20"           layout="topleft" -         left_pad="10" +	 halign="right" +         left="245"           name="time_box"           text_color="white"           top="5" @@ -71,25 +72,25 @@      </panel>      <text       follows="left|top|bottom|right" -     height="60" +     height="86"       layout="topleft"       left="10"       name="message"       text_color="white" -     top="40" +     top="33"       use_ellipses="true"       value="MESSAGE" -     width="330" +     width="285"       word_wrap="true"       max_length="350" />      <button       follows="bottom" -     font="SansSerifBigBold" +     font="SansSerifBold"       height="25" -     label="reply" +     label="Reply"       layout="topleft" -     left="120" +     left="97"       name="reply" -     top="110" +     top="137"       width="110" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml index af00b96d27..2182163da5 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml @@ -23,6 +23,7 @@       layout="topleft"       left_delta="7"       left="0" +     max_length="254"       name="chat_box"       tool_tip="Press Enter to say, Ctrl+Enter to shout"       top="0" diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml index 9c2829d92d..0d34aa0f08 100644 --- a/indra/newview/skins/default/xui/en/panel_notification.xml +++ b/indra/newview/skins/default/xui/en/panel_notification.xml @@ -1,37 +1,51 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel -  background_opaque="true" -  background_visible="false" +  background_opaque="false" +      border_visible="false" +  border = "false" +  border_drop_shadow_visible = "false" +  drop_shadow_visible = "false" +  background_visible="true"    bg_alpha_color="0.3 0.3 0.3 0" -  height="140" +  bg_opaque_color="0.3 0.3 0.3 0"    label="notification_panel"    layout="topleft"    left="0"    name="notification_panel"    top="0" -  width="350"> +  	height="10" +  width="305"> +  <!-- THIS PANEL CONTROLS TOAST HEIGHT? -->    <panel +      border_visible="false" +      drop_shadow="false" + bevel_style="none" + border_style="none" +  border = "false" +  border_drop_shadow_visible = "false" +  drop_shadow_visible = "false"      background_visible="true" -    bg_alpha_color="0.3 0.3 0.3 0" +  bg_alpha_color="0.3 0.3 0.3 0" +  bg_opaque_color="0.3 0.3 0.3 0"      follows="left|right|top" -    height="100" +    height="10"      label="info_panel"      layout="topleft"      left="0"      name="info_panel"      top="0" -    width="350"> -    <text +    width="305"> +  <!--  <text        border_visible="false"        follows="left|right|top|bottom"        font="SansSerif"        height="90"        layout="topleft" -      left="45" +      left="10"        name="text_box"        read_only="true"        text_color="white" -      top="5" +      top="10"        visible="false"         width="300"        wrap="true"/> @@ -47,40 +61,43 @@        top="5"        visible="false"        width="300" -      wrap="true"/> +      wrap="true"/>  -->      <text_editor +    	h_pad="0" +	v_pad="0"        bg_readonly_color="0.0 0.0 0.0 0"        border_visible="false" +	  border = "false" +	  border_drop_shadow_visible = "false" +	  drop_shadow_visible = "false"        embedded_items="false"        enabled="false"        follows="left|right|top|bottom"        font="SansSerif" -      height="90"        layout="topleft" -      left="45" +      left="10"        mouse_opaque="false"        name="text_editor_box"        read_only="true"        tab_stop="false"        text_color="white"        text_readonly_color="white" -      top="5" +      top="10"        visible="false" -      width="300" +      width="285"        wrap="true"/>    </panel>    <panel -    background_visible="true" -    bg_alpha_color="0.3 0.3 0.3 0" +    background_visible="false"      follows="left|right|bottom" -    height="40"      label="control_panel"      layout="topleft"      left="0" +    left_delta="-38"      name="control_panel" -    top_pad="0" -    width="350"> +    top="20">    </panel> +  <!--    <icon      follows="left|top"      height="32" @@ -90,5 +107,5 @@      mouse_opaque="false"      name="info_icon"      top="20" -    width="32" /> +    width="32" />  -->  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index f42bab14de..91dcdce23b 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -20,8 +20,9 @@      </panel.string>      <check_box       control_name="UseChatBubbles" +     follows="left|top"       height="16" -     label="Bubble Chat" +     label="Bubble chat"       layout="topleft"       left="30"       top="10" @@ -30,6 +31,7 @@      <slider       control_name="ChatBubbleOpacity" +     follows="left|top"       height="16"       increment="0.05"       initial_value="1" @@ -40,40 +42,24 @@       label_width="50"       name="bubble_chat_opacity"       width="200" /> - -   <!-- <check_box -     control_name="UIAutoScale" -     height="16" -     label="Resolution independent scale" -     layout="topleft" -     left="30" -     name="ui_auto_scale" -     top_pad="10" -     width="256" />--> -    <!-- -    <combo_box -     height="18" -     layout="topleft" -     left_pad="5" -     name="fullscreen combo" -     top_delta="-1" -     width="150" /-->      <text +     follows="left|top"       type="string"       length="1"       height="25"       layout="topleft"       left="30" -     top_pad="20" +     top_pad="5"       name="AspectRatioLabel1"       tool_tip="width / height"       label_width="50"       width="120"> -        Aspect Ratio +        Aspect ratio      </text>      <combo_box       allow_text_entry="true"       height="20" +     follows="left|top"       layout="topleft"       left_pad="0"       max_chars="100" @@ -104,6 +90,7 @@      </combo_box>      <check_box       control_name="FullScreenAutoDetectAspectRatio" +     follows="left|top"       height="25"       label="Auto-detect"       layout="topleft" @@ -113,14 +100,14 @@          <check_box.commit_callback           function="Pref.AutoDetectAspect" />      </check_box> -       <text +     follows="left|top"       type="string"       length="1"       height="10"       left="30"       name="heading1" -     top_pad="10" +     top_pad="5"       width="270">  Camera:  	</text> @@ -128,7 +115,7 @@ Camera:       can_edit_text="true"  	 control_name="CameraAngle"       decimal_digits="2" -     top_pad="10" +     top_pad="5"       follows="left|top"       height="16"       increment="0.025" @@ -159,56 +146,62 @@ Camera:       name="camera_offset_scale"       show_text="false"       width="240" -     top_pad="10"/> +     top_pad="5"/>       <text +     follows="left|top"       type="string"       length="1"       height="10"       left="30"       name="heading2" -     width="270"> +     width="270" +     top_pad="5">  Automatic positioning for:  	</text>          <check_box       control_name="EditCameraMovement"       height="20" +     follows="left|top"       label="Build/Edit"       layout="topleft"       left_delta="50"       name="edit_camera_movement"       tool_tip="Use automatic camera positioning when entering and exiting edit mode"       width="280" -     top_pad="10" /> +     top_pad="5" />      <check_box       control_name="AppearanceCameraMovement" +     follows="left|top"       height="16"       label="Appearance"       layout="topleft"       name="appearance_camera_movement"       tool_tip="Use automatic camera positioning while in edit mode"       width="242" /> -       <text +     follows="left|top"       type="string"       length="1"       height="10"       left="30"       name="heading3" -     top_pad="10" +     top_pad="5"       width="270">  Avatars:  	</text>      <check_box       control_name="FirstPersonAvatarVisible" +     follows="left|top"       height="20"       label="Show me in Mouselook"       layout="topleft"       left_delta="50"       name="first_person_avatar_visible"       width="256" -     top_pad="10"/> +     top_pad="0"/>      <check_box       control_name="ArrowKeysMoveAvatar" +     follows="left|top"       height="20"       label="Arrow keys always move me"       layout="topleft" @@ -218,6 +211,7 @@ Avatars:       top_pad="0"/>      <check_box       control_name="AllowTapTapHoldRun" +     follows="left|top"       height="20"       label="Tap-tap-hold to run"       layout="topleft" @@ -227,6 +221,7 @@ Avatars:       top_pad="0"/>      <check_box       control_name="LipSyncEnabled" +     follows="left|top"       height="20"       label="Move avatar lips when speaking"       layout="topleft" @@ -236,16 +231,18 @@ Avatars:       top_pad="0" />      <check_box       control_name="ShowScriptErrors" +     follows="left|top"       height="20"       label="Show script errors"       layout="topleft"       left="30"       name="show_script_errors"       width="256" -     top_pad="10"/> +     top_pad="5"/>      <radio_group  	 enabled_control="ShowScriptErrors"  	 control_name="ShowScriptErrorsLocation" +     follows="top|left"       draw_border="false"       height="40"       layout="topleft" @@ -259,17 +256,53 @@ Avatars:           layout="topleft"           left="3"           name="0" -         top="3" +         top="0"           width="315" />          <radio_item           height="16"           label="In window"           layout="topleft" -         left_delta="0" +         left_delta="175"           name="1" -         top_delta="16" +         top_delta="0"           width="315" />      </radio_group> - - +     <check_box +     follows="top|left" +     height="20" +     label="Use Push-to-talk in toggle mode" +     layout="topleft" +     left="30" +     name="push_to_talk_toggle_check" +     width="237" +     top_pad="-25" +     tool_tip="When in toggle mode, press and release the push-to-talk trigger to switch your microphone on and off. When not in toggle mode, the microphone is active only when the trigger is held down."/> +    <line_editor +     follows="top|left" +     height="19" +     left_delta="50" +     max_length="254" +     name="modifier_combo" +     label="Push-to-talk trigger" +     top_pad="0" +     width="280" /> +    <button +	follows="top|left" +	height="20" +	label="Set Key" +	left_delta="0" +        name="set_voice_hotkey_button" +	width="115" +	top_pad="5" /> +    <button +        bottom_delta="0" +	follows="left" +	font="SansSerif" +	halign="center" +	height="20" +	label="Middle Mouse Button" +	left_delta="120" +	mouse_opaque="true" +	name="set_voice_middlemouse_button" +	width="160" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 73a759a8ba..5af7d7d674 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -81,6 +81,7 @@               height="95"               layout="topleft"               left="107" +             max_length="512"               name="sl_description_edit"               top_pad="-3"               width="173" @@ -123,6 +124,7 @@               height="95"               layout="topleft"               left="107" +             max_length="512"               name="fl_description_edit"               top_pad="-3"               width="173" diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml index 2e500fc2aa..66237d585a 100644 --- a/indra/newview/skins/default/xui/en/panel_toast.xml +++ b/indra/newview/skins/default/xui/en/panel_toast.xml @@ -1,41 +1,49 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <!-- All our XML is utf-8 encoded. --> +<!-- All this does is establish the position of the "close" button on the toast. --> +  <floater + legacy_header_height="18"  	name="toast"  	title=""    visible="false"    layout="topleft" -	width="350" -	height="40" -  left="100" -  top="500" +	width="305" +  left="0" +  top="0"    follows="right|bottom"  -  bevel_style="in" +  bg_opaque_image="Toast_Background"  +  bg_alpha_image="Toast_Background"     can_minimize="false"    can_tear_off="false"    can_resize="false"    can_drag_on_left="false"    can_close="false"    can_dock="false"   +  border_visible = "false" +  border_drop_shadow_visible = "false" +  drop_shadow_visible = "false" +  border = "false"    > +  <!--    <text     visible="false"     follows="left|top|right|bottom"     font="SansSerifBold" -   height="28" +   height="40"     layout="topleft"     left="60"     name="toast_text"     word_wrap="true"     text_color="white" -   top="10" +   top="20"     width="290">      Toast text;    </text>    <icon -    top="4"  +    top="20"       left="10"       width="32"       height="32" @@ -47,24 +55,24 @@      image_name="notify_tip_icon.tga"      mouse_opaque="true"       name="icon" -  /> +  />-->    <button      layout="topleft" -    top="-5"  -    left="335"  -    width="20"  -    height="20"  +    top="-6"  +    left="293"  +    width="17"  +    height="17"       follows="top|right"      visible="false"       enabled="true"  -    mouse_opaque="true"  +    mouse_opaque="false"       name="hide_btn"       label=""       tab_stop="false" -    image_unselected="toast_hide_btn.tga"  -    image_disabled="toast_hide_btn.tga" -    image_selected="toast_hide_btn.tga"  -    image_hover_selected="toast_hide_btn.tga" -    image_disabled_selected="toast_hide_btn.tga" +    image_unselected="windows/Toast_CloseBtn.png"  +    image_disabled="windows/Toast_CloseBtn.png" +    image_selected="windows/Toast_CloseBtn.png"  +    image_hover_selected="windows/Toast_CloseBtn.png" +    image_disabled_selected="windows/Toast_CloseBtn.png"    />  </floater>  diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 4eacd72a7d..e842517853 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -74,6 +74,7 @@  	<string name="TooltipTeleportUrl">Click to teleport to this location</string>  	<string name="TooltipObjectIMUrl">Click to view this object's description</string>  	<string name="TooltipSLAPP">Click to run the secondlife:// command</string> +	<string name="CurrentURL" value=" CurrentURL: [CurrentURL]" />  	<!-- ButtonToolTips, llfloater.cpp -->  	<string name="BUTTON_CLOSE_DARWIN">Close (⌘W)</string> @@ -636,7 +637,7 @@ Sets the script timer to zero  float llGetAndResetTime()  Returns the script time in seconds and then resets the script timer to zero  	</string> -	<string name="LSLTipText_llSound" translate="false"> +	<string name="LSLTipText_llSoplayund" translate="false">  llSound(string sound, float volume, integer queue, integer loop)  Plays sound at volume and whether it should loop or not  	</string> @@ -2187,6 +2188,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh  	<!-- media -->  	<string name="Multiple Media">Multiple Media</string> +	<string name="Play Media">Play/Pause Media</string>  	<!-- OSMessageBox messages -->  	<string name="MBCmdLineError"> diff --git a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml index dabcb1038b..fcfe89c653 100644 --- a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml +++ b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml @@ -9,4 +9,5 @@      header_image="Accordion_Off"      header_image_over="Accordion_Over"      header_image_pressed="Accordion_Press" +    header_image_selected="Accordion_Selected"      /> diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml index 4a866c2eb2..6660fbf1a8 100644 --- a/indra/newview/skins/default/xui/en/widgets/floater.xml +++ b/indra/newview/skins/default/xui/en/widgets/floater.xml @@ -1,6 +1,10 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- See also settings.xml UIFloater* settings for configuration -->  <floater name="floater"           bg_opaque_color="FloaterFocusBackgroundColor"           bg_alpha_color="FloaterDefaultBackgroundColor" +         bg_opaque_image="Window_Foreground"  +         bg_alpha_image="Window_Background"            background_visible="true" -         background_opaque="false"/> +         background_opaque="false" +         header_height="25" /> diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml index b81a70b845..1bd5a5bda2 100644 --- a/indra/newview/skins/default/xui/en/widgets/panel.xml +++ b/indra/newview/skins/default/xui/en/widgets/panel.xml @@ -1,5 +1,10 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- Optional parameters: +  border - show border around panel +  bg_opaque_image - image name for "in-front" panel look +  bg_alpha_image - image name for "in-back" or transparent panel look +-->  <panel bg_opaque_color="PanelFocusBackgroundColor"         bg_alpha_color="PanelDefaultBackgroundColor"         background_visible="false" -       background_opaque="false"/>
\ No newline at end of file +       background_opaque="false"/> diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt index 88c4ba8ad9..53b981cccd 100644 --- a/indra/test_apps/llplugintest/CMakeLists.txt +++ b/indra/test_apps/llplugintest/CMakeLists.txt @@ -293,6 +293,7 @@ add_dependencies(llmediaplugintest    SLPlugin    media_plugin_quicktime    media_plugin_webkit +  media_plugin_example    ${LLPLUGIN_LIBRARIES}    ${LLMESSAGE_LIBRARIES}    ${LLCOMMON_LIBRARIES} @@ -369,6 +370,12 @@ if (DARWIN OR WINDOWS)      DEPENDS ${BUILT_QUICKTIME_PLUGIN}    ) +  get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION) +  add_custom_command(TARGET llmediaplugintest POST_BUILD +    COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN}  ${PLUGINS_DESTINATION_DIR} +    DEPENDS ${BUILT_EXAMPLE_PLUGIN} +  ) +      # copy over bookmarks file if llmediaplugintest gets built    get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION)    add_custom_command(TARGET llmediaplugintest POST_BUILD diff --git a/indra/test_apps/llplugintest/bookmarks.txt b/indra/test_apps/llplugintest/bookmarks.txt index ef34167b29..b8b83df386 100644 --- a/indra/test_apps/llplugintest/bookmarks.txt +++ b/indra/test_apps/llplugintest/bookmarks.txt @@ -34,3 +34,4 @@  (QT) Movie - The Informers,http://movies.apple.com/movies/independent/theinformers/theinformers_h.320.mov  (QT) Animated GIF,http://upload.wikimedia.org/wikipedia/commons/4/44/Optical.greysquares.arp-animated.gif  (QT) Apple Text Descriptors,http://ubrowser.com/tmp/apple_text.txt +(EX) Example Plugin,example://blah diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp index 553d1ab131..d987915bb8 100644 --- a/indra/test_apps/llplugintest/llmediaplugintest.cpp +++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp @@ -138,8 +138,6 @@ LLMediaPluginTest::LLMediaPluginTest( int app_window, int window_width, int wind  	mMediaBrowserControlBackButtonFlag( true ),  	mMediaBrowserControlForwardButtonFlag( true ),  	mHomeWebUrl( "http://www.google.com/" ) -	//mHomeWebUrl( "file:///C|/Program Files/QuickTime/Sample.mov" ) -	//mHomeWebUrl( "http://movies.apple.com/movies/wb/watchmen/watchmen-tlr2_480p.mov" )  {  	// debugging spam  	std::cout << std::endl << "             GLUT version: " << "3.7.6" << std::endl;	// no way to get real version from GLUT @@ -277,8 +275,6 @@ void LLMediaPluginTest::bindTexture(GLuint texture, GLint row_length, GLint alig  {  	glEnable( GL_TEXTURE_2D ); -//	std::cerr << "binding texture " << texture << std::endl; -	  	glBindTexture( GL_TEXTURE_2D, texture );  	glPixelStorei( GL_UNPACK_ROW_LENGTH, row_length );  	glPixelStorei( GL_UNPACK_ALIGNMENT, alignment ); @@ -410,7 +406,7 @@ void LLMediaPluginTest::draw( int draw_type )  			// only bother with pick if we have something to render  			// Actually, we need to pick even if we're not ready to render.    			// Otherwise you can't select and remove a panel which has gone bad. -//			if ( mMediaPanels[ panel ]->mReadyToRender ) +			//if ( mMediaPanels[ panel ]->mReadyToRender )  			{  				glMatrixMode( GL_TEXTURE );  				glPushMatrix(); @@ -621,10 +617,10 @@ void LLMediaPluginTest::idle()  	if ( mSelectedPanel )  	{  		// set volume based on slider if we have time media -//		if ( mGluiMediaTimeControlWindowFlag ) -//		{ -//			mSelectedPanel->mMediaSource->setVolume( (float)mMediaTimeControlVolume / 100.0f ); -//		}; +		//if ( mGluiMediaTimeControlWindowFlag ) +		//{ +		//	mSelectedPanel->mMediaSource->setVolume( (float)mMediaTimeControlVolume / 100.0f ); +		//};  		// NOTE: it is absurd that we need cache the state of GLUI controls  		//       but enabling/disabling controls drags framerate from 500+ @@ -1463,6 +1459,9 @@ std::string LLMediaPluginTest::mimeTypeFromUrl( std::string& url )  	else  	if ( url.find( ".txt" ) != std::string::npos )	// Apple Text descriptors  		mime_type = "video/quicktime"; +	else +	if ( url.find( "example://" ) != std::string::npos )	// Example plugin +		mime_type = "example/example";  	return mime_type;  } @@ -1487,6 +1486,9 @@ std::string LLMediaPluginTest::pluginNameFromMimeType( std::string& mime_type )  	else  	if ( mime_type == "text/html" )  		plugin_name = "media_plugin_webkit.dll"; +	else +	if ( mime_type == "example/example" ) +		plugin_name = "media_plugin_example.dll";  #elif LL_LINUX  	std::string plugin_name( "libmedia_plugin_null.so" ); @@ -1799,7 +1801,7 @@ void LLMediaPluginTest::getRandomMediaSize( int& width, int& height, std::string  	// adjust this random size if it's a browser so we get   	// a more useful size for testing..  -	if ( mime_type == "text/html" ) +	if ( mime_type == "text/html" || mime_type == "example/example"  )  	{  		width = ( ( rand() % 100 ) + 100 ) * 4;  		height = ( width * ( ( rand() % 400 ) + 1000 ) ) / 1000; | 
