diff options
Diffstat (limited to 'indra')
116 files changed, 2135 insertions, 1100 deletions
| diff --git a/indra/cmake/DragDrop.cmake b/indra/cmake/DragDrop.cmake new file mode 100644 index 0000000000..c0424396e5 --- /dev/null +++ b/indra/cmake/DragDrop.cmake @@ -0,0 +1,23 @@ +# -*- cmake -*- + +if (VIEWER) + +  set(OS_DRAG_DROP ON CACHE BOOL "Build the viewer with OS level drag and drop turned on or off") + +  if (OS_DRAG_DROP) + +    if (WINDOWS) +      add_definitions(-DLL_OS_DRAGDROP_ENABLED=1) +    endif (WINDOWS) + +    if (DARWIN) +      add_definitions(-DLL_OS_DRAGDROP_ENABLED=1) +    endif (DARWIN) + +    if (LINUX) +      add_definitions(-DLL_OS_DRAGDROP_ENABLED=0) +    endif (LINUX) + +  endif (OS_DRAG_DROP) + +endif (VIEWER) diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h index 5a4c644859..09812de2b8 100644 --- a/indra/llcommon/llerror.h +++ b/indra/llcommon/llerror.h @@ -242,7 +242,7 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;  	do { \  		static LLError::CallSite _site( \  			level, __FILE__, __LINE__, typeid(_LL_CLASS_TO_LOG), __FUNCTION__, broadTag, narrowTag, once);\ -		if (_site.shouldLog()) \ +		if (LL_UNLIKELY(_site.shouldLog()))			\  		{ \  			std::ostringstream* _out = LLError::Log::out(); \  			(*_out) diff --git a/indra/llcommon/llpointer.h b/indra/llcommon/llpointer.h index 2c37eadcc6..e6c736a263 100644 --- a/indra/llcommon/llpointer.h +++ b/indra/llcommon/llpointer.h @@ -95,7 +95,6 @@ public:  	bool notNull() const						{ return (mPointer != NULL); }  	operator Type*()       const				{ return mPointer; } -	operator const Type*() const				{ return mPointer; }  	bool operator !=(Type* ptr) const           { return (mPointer != ptr); 	}  	bool operator ==(Type* ptr) const           { return (mPointer == ptr); 	}  	bool operator ==(const LLPointer<Type>& ptr) const           { return (mPointer == ptr.mPointer); 	} diff --git a/indra/llcommon/llrefcount.cpp b/indra/llcommon/llrefcount.cpp index 33b6875fb0..c90b52f482 100644 --- a/indra/llcommon/llrefcount.cpp +++ b/indra/llcommon/llrefcount.cpp @@ -35,6 +35,17 @@  #include "llerror.h" +LLRefCount::LLRefCount(const LLRefCount& other) +:	mRef(0) +{ +} + +LLRefCount& LLRefCount::operator=(const LLRefCount&) +{ +	// do nothing, since ref count is specific to *this* reference +	return *this; +} +  LLRefCount::LLRefCount() :  	mRef(0)  { diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h index 9ab844eb22..a18f6706a9 100644 --- a/indra/llcommon/llrefcount.h +++ b/indra/llcommon/llrefcount.h @@ -41,22 +41,20 @@  class LL_COMMON_API LLRefCount  { -private: -	LLRefCount(const LLRefCount& other); // no implementation -private: -	LLRefCount& operator=(const LLRefCount&); // no implementation  protected: +	LLRefCount(const LLRefCount& other); +	LLRefCount& operator=(const LLRefCount&);  	virtual ~LLRefCount(); // use unref()  public:  	LLRefCount(); -	void ref() +	void ref() const  	{   		mRef++;   	}  -	S32 unref() +	S32 unref() const  	{  		llassert(mRef >= 1);  		if (0 == --mRef)  @@ -67,13 +65,15 @@ public:  		return mRef;  	}	 +	//NOTE: when passing around a const LLRefCount object, this can return different results +	// at different types, since mRef is mutable  	S32 getNumRefs() const  	{  		return mRef;  	}  private:  -	S32	mRef;  +	mutable S32	mRef;   };  #endif diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h index 7a5d51ff76..209b506c30 100644 --- a/indra/llmath/llmath.h +++ b/indra/llmath/llmath.h @@ -203,7 +203,7 @@ inline S32 llfloor( F32 f )  		}  		return result;  #else -		return (S32)floor(f); +		return (S32)floorf(f);  #endif  } diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 8bcc4723ae..36ac3ff119 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1693,11 +1693,11 @@ void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in)  		return;  	} -	U32 pick_width = width/2; -	U32 pick_height = height/2; +	U32 pick_width = width/2 + 1; +	U32 pick_height = height/2 + 1; -	U32 size = llmax(pick_width, (U32) 1) * llmax(pick_height, (U32) 1); -	size = size/8 + 1; +	U32 size = pick_width * pick_height; +	size = (size + 7) / 8; // pixelcount-to-bits  	mPickMask = new U8[size];  	mPickMaskWidth = pick_width;  	mPickMaskHeight = pick_height; @@ -1745,8 +1745,8 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)  		llassert(mPickMaskWidth > 0 && mPickMaskHeight > 0); -		S32 x = (S32)(u * mPickMaskWidth); -		S32 y = (S32)(v * mPickMaskHeight); +		S32 x = llfloor(u * mPickMaskWidth); +		S32 y = llfloor(v * mPickMaskHeight);  		if (LL_UNLIKELY(x >= mPickMaskWidth))  		{ diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp index 74438b184a..57baf28dab 100644 --- a/indra/llui/lldockablefloater.cpp +++ b/indra/llui/lldockablefloater.cpp @@ -146,7 +146,7 @@ void LLDockableFloater::setVisible(BOOL visible)  	if (visible)  	{ -		LLFloater::setFrontmost(TRUE); +		LLFloater::setFrontmost(getAutoFocus());  	}  	LLFloater::setVisible(visible);  } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 8c9dacbd20..2166d8db8a 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -301,6 +301,7 @@ protected:  	const LLRect&	getExpandedRect() const { return mExpandedRect; }  	void			setAutoFocus(BOOL focus) { mAutoFocus = focus; } // whether to automatically take focus when opened +	BOOL			getAutoFocus() const { return mAutoFocus; }  	LLDragHandle*	getDragHandle() const { return mDragHandle; }  	void			destroy() { die(); } // Don't call this directly.  You probably want to call closeFloater() diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index 20a1ab7af3..28f3788817 100644 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -270,13 +270,19 @@ void LLSpinCtrl::clear()  	mbHasBeenSet = FALSE;  } - +void LLSpinCtrl::updateLabelColor() +{ +	if( mLabelBox ) +	{ +		mLabelBox->setColor( getEnabled() ? mTextEnabledColor.get() : mTextDisabledColor.get() ); +	} +}  void LLSpinCtrl::updateEditor()  {  	LLLocale locale(LLLocale::USER_LOCALE); -	// Don't display very small negative values as -0.000 +	// Don't display very small negative valu	es as -0.000  	F32 displayed_value = clamp_precision((F32)getValue().asReal(), mPrecision);  //	if( S32( displayed_value * pow( 10, mPrecision ) ) == 0 ) @@ -339,10 +345,7 @@ void LLSpinCtrl::setEnabled(BOOL b)  {  	LLView::setEnabled( b );  	mEditor->setEnabled( b ); -	if( mLabelBox ) -	{ -		mLabelBox->setColor( b ? mTextEnabledColor.get() : mTextDisabledColor.get() ); -	} +	updateLabelColor();  } @@ -390,6 +393,7 @@ void LLSpinCtrl::setLabel(const LLStringExplicit& label)  	{  		llwarns << "Attempting to set label on LLSpinCtrl constructed without one " << getName() << llendl;  	} +	updateLabelColor();  }  void LLSpinCtrl::setAllowEdit(BOOL allow_edit) diff --git a/indra/llui/llspinctrl.h b/indra/llui/llspinctrl.h index 0e610b7741..00d6f86f83 100644 --- a/indra/llui/llspinctrl.h +++ b/indra/llui/llspinctrl.h @@ -81,8 +81,8 @@ public:  	virtual void	setPrecision(S32 precision);  	void			setLabel(const LLStringExplicit& label); -	void			setLabelColor(const LLColor4& c)			{ mTextEnabledColor = c; } -	void			setDisabledLabelColor(const LLColor4& c)	{ mTextDisabledColor = c; } +	void			setLabelColor(const LLColor4& c)			{ mTextEnabledColor = c; updateLabelColor(); } +	void			setDisabledLabelColor(const LLColor4& c)	{ mTextDisabledColor = c; updateLabelColor();}  	void			setAllowEdit(BOOL allow_edit);  	virtual void	onTabInto(); @@ -103,6 +103,7 @@ public:  	void			onDownBtn(const LLSD& data);  private: +	void			updateLabelColor();  	void			updateEditor();  	void			reportInvalidData(); diff --git a/indra/llui/llstyle.h b/indra/llui/llstyle.h index ee9ca730e9..2067e8e8be 100644 --- a/indra/llui/llstyle.h +++ b/indra/llui/llstyle.h @@ -59,11 +59,12 @@ public:  	void setColor(const LLColor4 &color) { mColor = color; }  	const LLColor4& getReadOnlyColor() const { return mReadOnlyColor; } +	void setReadOnlyColor(const LLColor4& color) { mReadOnlyColor = color; }  	BOOL isVisible() const;  	void setVisible(BOOL is_visible); -	LLFontGL::ShadowType getShadowType() { return mDropShadow; } +	LLFontGL::ShadowType getShadowType() const { return mDropShadow; }  	void setFont(const LLFontGL* font);  	const LLFontGL* getFont() const; @@ -116,5 +117,6 @@ private:  };  typedef LLPointer<LLStyle> LLStyleSP; +typedef LLPointer<const LLStyle> LLStyleConstSP;  #endif  // LL_LLSTYLE_H diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 978bd317e2..259522a932 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -292,9 +292,13 @@ bool LLTextBase::truncate()  	return did_truncate;  } -LLStyle::Params LLTextBase::getDefaultStyle() +LLStyle::Params LLTextBase::getDefaultStyleParams()  { -	return LLStyle::Params().color(mFgColor.get()).readonly_color(mReadOnlyFgColor.get()).font(mDefaultFont).drop_shadow(mFontShadow); +	return LLStyle::Params() +		.color(LLUIColor(&mFgColor)) +		.readonly_color(LLUIColor(&mReadOnlyFgColor)) +		.font(mDefaultFont) +		.drop_shadow(mFontShadow);  }  void LLTextBase::onValueChange(S32 start, S32 end) @@ -308,7 +312,6 @@ void LLTextBase::drawSelectionBackground()  	// Draw selection even if we don't have keyboard focus for search/replace  	if( hasSelection() && !mLineInfoList.empty())  	{ -		LLWString text = getWText();  		std::vector<LLRect> selection_rects;  		S32 selection_left		= llmin( mSelectionStart, mSelectionEnd ); @@ -407,7 +410,7 @@ void LLTextBase::drawCursor()  		&& gFocusMgr.getAppHasFocus()  		&& !mReadOnly)  	{ -		LLWString wtext = getWText(); +		const LLWString &wtext = getWText();  		const llwchar* text = wtext.c_str();  		LLRect cursor_rect = getLocalRectFromDocIndex(mCursorPos); @@ -493,7 +496,6 @@ void LLTextBase::drawCursor()  void LLTextBase::drawText()  { -	LLWString text = getWText();  	const S32 text_len = getLength();  	if( text_len <= 0 )  	{ @@ -620,7 +622,8 @@ S32 LLTextBase::insertStringNoUndo(S32 pos, const LLWString &wstr, LLTextBase::s  	else  	{  		// create default editable segment to hold new text -		default_segment = new LLNormalTextSegment( new LLStyle(getDefaultStyle()), pos, pos + insert_len, *this); +		LLStyleConstSP sp(new LLStyle(getDefaultStyleParams())); +		default_segment = new LLNormalTextSegment( sp, pos, pos + insert_len, *this);  	}  	// shift remaining segments to right @@ -744,7 +747,8 @@ void LLTextBase::createDefaultSegment()  	// ensures that there is always at least one segment  	if (mSegments.empty())  	{ -		LLTextSegmentPtr default_segment = new LLNormalTextSegment( new LLStyle(getDefaultStyle()), 0, getLength() + 1, *this); +		LLStyleConstSP sp(new LLStyle(getDefaultStyleParams())); +		LLTextSegmentPtr default_segment = new LLNormalTextSegment( sp, 0, getLength() + 1, *this);  		mSegments.insert(default_segment);  		default_segment->linkToDocument(this);  	} @@ -774,7 +778,8 @@ void LLTextBase::insertSegment(LLTextSegmentPtr segment_to_insert)  			cur_segmentp->setEnd(segment_to_insert->getStart());  			// advance to next segment  			// insert remainder of old segment -			LLTextSegmentPtr remainder_segment = new LLNormalTextSegment( cur_segmentp->getStyle(), segment_to_insert->getStart(), old_segment_end, *this); +			LLStyleConstSP sp = cur_segmentp->getStyle(); +			LLTextSegmentPtr remainder_segment = new LLNormalTextSegment( sp, segment_to_insert->getStart(), old_segment_end, *this);  			mSegments.insert(cur_seg_iter, remainder_segment);  			remainder_segment->linkToDocument(this);  			// insert new segment before remainder of old segment @@ -1010,16 +1015,6 @@ void LLTextBase::draw()  void LLTextBase::setColor( const LLColor4& c )  {  	mFgColor = c; -	//textsegments have own style property ,  -	//so we have to update it also to apply changes, EXT-4433 -	for(segment_set_t::iterator it = mSegments.begin(); it != mSegments.end(); it++) -	{ -		LLTextSegment* segment = it->get();  -		if(segment) -		{ -			segment->setColor(mFgColor); -		} -	}  }  //virtual  @@ -1119,7 +1114,6 @@ void LLTextBase::reflow(S32 start_index)  		S32 line_start_index = 0;  		const S32 text_available_width = mVisibleTextRect.getWidth() - mHPad;  // reserve room for margin  		S32 remaining_pixels = text_available_width; -		LLWString text(getWText());  		S32 line_count = 0;  		// find and erase line info structs starting at start_index and going to end of document @@ -1521,16 +1515,7 @@ std::string LLTextBase::getText() const  void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, const LLStyle::Params& input_params)  {  	LLStyle::Params style_params(input_params); -	style_params.fillFrom(getDefaultStyle()); - -	if (!style_params.font.isProvided()) -	{ -		style_params.font = mDefaultFont; -	} -	if (!style_params.drop_shadow.isProvided()) -	{ -		style_params.drop_shadow = mFontShadow; -	} +	style_params.fillFrom(getDefaultStyleParams());  	S32 part = (S32)LLTextParser::WHOLE;  	if(mParseHTML) @@ -1547,13 +1532,7 @@ void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, c  			LLStyle::Params link_params = style_params;  			link_params.color = match.getColor();  			link_params.readonly_color =  match.getColor(); -			// apply font name from requested style_params -			std::string font_name = LLFontGL::nameFromFont(style_params.font()); -			std::string font_size = LLFontGL::sizeFromFont(style_params.font()); -			link_params.font.name(font_name); -			link_params.font.size(font_size);  			link_params.font.style("UNDERLINE"); -			  			link_params.link_href = match.getUrl();  			// output the text before the Url @@ -1630,9 +1609,9 @@ void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, c  	}  } -void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepend_newline, S32 highlight_part, const LLStyle::Params& stylep) +void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepend_newline, S32 highlight_part, const LLStyle::Params& style_params)  { -	if (new_text.empty()) return; +	if (new_text.empty()) return;                                                                                   	// Save old state  	S32 selection_start = mSelectionStart; @@ -1650,7 +1629,7 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepen  	if (mParseHighlights && highlight)  	{ -		LLStyle::Params highlight_params = stylep; +		LLStyle::Params highlight_params(style_params);  		LLSD pieces = highlight->parsePartialLineHighlights(new_text, highlight_params.color(), (LLTextParser::EHighlightPosition)highlight_part);  		for (S32 i = 0; i < pieces.size(); i++) @@ -1670,7 +1649,8 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepen  				wide_text = utf8str_to_wstring(pieces[i]["text"].asString());  			}  			S32 cur_length = getLength(); -			LLTextSegmentPtr segmentp = new LLNormalTextSegment(new LLStyle(highlight_params), cur_length, cur_length + wide_text.size(), *this); +			LLStyleConstSP sp(new LLStyle(highlight_params)); +			LLTextSegmentPtr segmentp = new LLNormalTextSegment(sp, cur_length, cur_length + wide_text.size(), *this);  			segment_vec_t segments;  			segments.push_back(segmentp);  			insertStringNoUndo(cur_length, wide_text, &segments); @@ -1694,7 +1674,8 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepen  		segment_vec_t segments;  		S32 segment_start = old_length;  		S32 segment_end = old_length + wide_text.size(); -		segments.push_back(new LLNormalTextSegment(new LLStyle(stylep), segment_start, segment_end, *this )); +		LLStyleConstSP sp(new LLStyle(style_params)); +		segments.push_back(new LLNormalTextSegment(sp, segment_start, segment_end, *this ));  		insertStringNoUndo(getLength(), wide_text, &segments);  	} @@ -1738,7 +1719,7 @@ void LLTextBase::replaceUrlLabel(const std::string &url,  	for (it = mSegments.begin(); it != mSegments.end(); ++it)  	{  		LLTextSegment *seg = *it; -		const LLStyleSP style = seg->getStyle(); +		LLStyleConstSP style = seg->getStyle();  		// update segment start/end length in case we replaced text earlier  		S32 seg_length = seg->getEnd() - seg->getStart(); @@ -1775,7 +1756,7 @@ void LLTextBase::setWText(const LLWString& text)  	setText(wstring_to_utf8str(text));  } -LLWString LLTextBase::getWText() const +const LLWString& LLTextBase::getWText() const  {      return getViewModel()->getDisplay();  } @@ -2231,9 +2212,9 @@ bool LLTextSegment::canEdit() const { return false; }  void LLTextSegment::unlinkFromDocument(LLTextBase*) {}  void LLTextSegment::linkToDocument(LLTextBase*) {}  const LLColor4& LLTextSegment::getColor() const { return LLColor4::white; } -void LLTextSegment::setColor(const LLColor4 &color) {} -const LLStyleSP LLTextSegment::getStyle() const {static LLStyleSP sp(new LLStyle()); return sp; } -void LLTextSegment::setStyle(const LLStyleSP &style) {} +//void LLTextSegment::setColor(const LLColor4 &color) {} +LLStyleConstSP LLTextSegment::getStyle() const {static LLStyleConstSP sp(new LLStyle()); return sp; } +void LLTextSegment::setStyle(LLStyleConstSP style) {}  void LLTextSegment::setToken( LLKeywordToken* token ) {}  LLKeywordToken*	LLTextSegment::getToken() const { return NULL; }  void LLTextSegment::setToolTip( const std::string &msg ) {} @@ -2258,7 +2239,7 @@ BOOL LLTextSegment::hasMouseCapture() { return FALSE; }  // LLNormalTextSegment  // -LLNormalTextSegment::LLNormalTextSegment( const LLStyleSP& style, S32 start, S32 end, LLTextBase& editor )  +LLNormalTextSegment::LLNormalTextSegment( LLStyleConstSP style, S32 start, S32 end, LLTextBase& editor )   :	LLTextSegment(start, end),  	mStyle( style ),  	mToken(NULL), @@ -2470,7 +2451,7 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt  	if (num_chars > 0)  	{  		height = mFontHeight; -		LLWString text = mEditor.getWText(); +		const LLWString &text = mEditor.getWText();  		// if last character is a newline, then return true, forcing line break  		llwchar last_char = text[mStart + first_char + num_chars - 1];  		if (last_char == '\n') @@ -2497,7 +2478,7 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt  S32	LLNormalTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const  { -	LLWString text = mEditor.getWText(); +	const LLWString &text = mEditor.getWText();  	return mStyle->getFont()->charFromPixelOffset(text.c_str(), mStart + start_offset,  											   (F32)segment_local_x_coord,  											   F32_MAX, @@ -2507,12 +2488,12 @@ S32	LLNormalTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset,  S32	LLNormalTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const  { -	LLWString text = mEditor.getWText(); +	const LLWString &text = mEditor.getWText();  	LLUIImagePtr image = mStyle->getImage();  	if( image.notNull())  	{ -		num_pixels -= image->getWidth(); +		num_pixels = llmax(0, num_pixels - image->getWidth());  	}  	// search for newline and if found, truncate there diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index dc3671eab1..b5c7fab67a 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -145,7 +145,7 @@ public:  	// wide-char versions  	void					setWText(const LLWString& text); -	LLWString       		getWText() const; +	const LLWString&       	getWText() const;  	void					appendText(const std::string &new_text, bool prepend_newline, const LLStyle::Params& input_params = LLStyle::Params());  	// force reflow of text @@ -185,7 +185,6 @@ public:  	bool					scrolledToEnd();  	const LLFontGL*			getDefaultFont() const					{ return mDefaultFont; } -	LLStyle::Params			getDefaultStyle();  public:  	// Fired when a URL link is clicked @@ -282,7 +281,8 @@ protected:  	void							createDefaultSegment();  	virtual void					updateSegments();  	void							insertSegment(LLTextSegmentPtr segment_to_insert); -	 +	LLStyle::Params					getDefaultStyleParams(); +  	//  manage lines  	S32								getLineStart( S32 line ) const;  	S32								getLineEnd( S32 line ) const; @@ -389,9 +389,9 @@ public:  	virtual void				linkToDocument(class LLTextBase* editor);  	virtual const LLColor4&		getColor() const; -	virtual void 				setColor(const LLColor4 &color); -	virtual const LLStyleSP		getStyle() const; -	virtual void 				setStyle(const LLStyleSP &style); +	//virtual void 				setColor(const LLColor4 &color); +	virtual LLStyleConstSP		getStyle() const; +	virtual void 				setStyle(LLStyleConstSP style);  	virtual void				setToken( LLKeywordToken* token );  	virtual LLKeywordToken*		getToken() const;  	virtual void				setToolTip(const std::string& tooltip); @@ -427,7 +427,7 @@ protected:  class LLNormalTextSegment : public LLTextSegment  {  public: -	LLNormalTextSegment( const LLStyleSP& style, S32 start, S32 end, LLTextBase& editor ); +	LLNormalTextSegment( LLStyleConstSP style, S32 start, S32 end, LLTextBase& editor );  	LLNormalTextSegment( const LLColor4& color, S32 start, S32 end, LLTextBase& editor, BOOL is_visible = TRUE);  	~LLNormalTextSegment(); @@ -437,9 +437,8 @@ public:  	/*virtual*/ F32					draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect);  	/*virtual*/ bool				canEdit() const { return true; }  	/*virtual*/ const LLColor4&		getColor() const					{ return mStyle->getColor(); } -	/*virtual*/ void 				setColor(const LLColor4 &color)		{ mStyle->setColor(color); } -	/*virtual*/ const LLStyleSP		getStyle() const					{ return mStyle; } -	/*virtual*/ void 				setStyle(const LLStyleSP &style)	{ mStyle = style; } +	/*virtual*/ LLStyleConstSP		getStyle() const					{ return mStyle; } +	/*virtual*/ void 				setStyle(LLStyleConstSP style)	{ mStyle = style; }  	/*virtual*/ void				setToken( LLKeywordToken* token )	{ mToken = token; }  	/*virtual*/ LLKeywordToken*		getToken() const					{ return mToken; }  	/*virtual*/ BOOL				getToolTip( std::string& msg ) const; @@ -457,7 +456,7 @@ protected:  protected:  	class LLTextBase&	mEditor; -	LLStyleSP			mStyle; +	LLStyleConstSP		mStyle;  	S32					mFontHeight;  	LLKeywordToken* 	mToken;  	std::string     	mTooltip; diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 06ba0d80e9..e76fee9f17 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -2404,7 +2404,7 @@ void LLTextEditor::replaceUrlLabel(const std::string &url,  	for (it = mSegments.begin(); it != mSegments.end(); ++it)  	{  		LLTextSegment *seg = *it; -		const LLStyleSP style = seg->getStyle(); +		LLStyleConstSP style = seg->getStyle();  		// update segment start/end length in case we replaced text earlier  		S32 seg_length = seg->getEnd() - seg->getStart(); @@ -2573,13 +2573,16 @@ void LLTextEditor::updateLinkSegments()  			// if the link's label (what the user can edit) is a valid Url,  			// then update the link's HREF to be the same as the label text.  			// This lets users edit Urls in-place. -			LLStyleSP style = static_cast<LLStyleSP>(segment->getStyle()); +			LLStyleConstSP style = segment->getStyle(); +			LLStyle* new_style = new LLStyle(*style);  			LLWString url_label = wtext.substr(segment->getStart(), segment->getEnd()-segment->getStart());  			if (LLUrlRegistry::instance().hasUrl(url_label))  			{  				std::string new_url = wstring_to_utf8str(url_label);  				LLStringUtil::trim(new_url); -				style->setLinkHREF(new_url); +				new_style->setLinkHREF(new_url); +				LLStyleConstSP sp(new_style); +				segment->setStyle(sp);  			}  		}  	} diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index d0ed3b6fca..76f07373b4 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -1911,10 +1911,10 @@ namespace LLInitParam  	void TypedParam<LLUIColor>::setBlockFromValue()  	{  		LLColor4 color = mData.mValue.get(); -		red = color.mV[VRED]; -		green = color.mV[VGREEN]; -		blue = color.mV[VBLUE]; -		alpha = color.mV[VALPHA]; +		red.set(color.mV[VRED], false); +		green.set(color.mV[VGREEN], false); +		blue.set(color.mV[VBLUE], false); +		alpha.set(color.mV[VALPHA], false);  		control.set("", false);  	} @@ -1965,9 +1965,9 @@ namespace LLInitParam  	{  		if (mData.mValue)  		{ -			name = LLFontGL::nameFromFont(mData.mValue); -			size = LLFontGL::sizeFromFont(mData.mValue); -			style = LLFontGL::getStringFromStyle(mData.mValue->getFontDesc().getStyle()); +			name.set(LLFontGL::nameFromFont(mData.mValue), false); +			size.set(LLFontGL::sizeFromFont(mData.mValue), false); +			style.set(LLFontGL::getStringFromStyle(mData.mValue->getFontDesc().getStyle()), false);  		}  	} @@ -2073,8 +2073,8 @@ namespace LLInitParam  	void TypedParam<LLCoordGL>::setBlockFromValue()  	{ -		x = mData.mValue.mX; -		y = mData.mValue.mY; +		x.set(mData.mValue.mX, false); +		y.set(mData.mValue.mY, false);  	} diff --git a/indra/llui/lluicolortable.h b/indra/llui/lluicolortable.h index 59be0c4f9a..c87695f456 100644 --- a/indra/llui/lluicolortable.h +++ b/indra/llui/lluicolortable.h @@ -94,7 +94,7 @@ private:  	bool loadFromFilename(const std::string& filename);  	// consider using sorted vector, can be much faster -	typedef std::map<std::string, LLColor4>  string_color_map_t; +	typedef std::map<std::string, LLUIColor>  string_color_map_t;  	void clearTable(string_color_map_t& table);  	void setColor(const std::string& name, const LLColor4& color, string_color_map_t& table); diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp index 966d919dc7..8cd6460b66 100644 --- a/indra/llui/lluiimage.cpp +++ b/indra/llui/lluiimage.cpp @@ -182,11 +182,11 @@ namespace LLInitParam  	{  		if (mData.mValue == NULL)  		{ -			name = "none"; +			name.set("none", false);  		}  		else  		{ -			name = mData.mValue->getName(); +			name.set(mData.mValue->getName(), false);  		}  	} diff --git a/indra/llui/llviewmodel.h b/indra/llui/llviewmodel.h index c8a9b52cca..992365d44d 100644 --- a/indra/llui/llviewmodel.h +++ b/indra/llui/llviewmodel.h @@ -107,7 +107,8 @@ public:  	// New functions      /// Get the stored value in string form -    LLWString getDisplay() const { return mDisplay; } +    const LLWString& getDisplay() const { return mDisplay; } +      /**       * Set the display string directly (see LLTextEditor). What the user is       * editing is actually the LLWString value rather than the underlying diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt index 7b1cab696f..77c6fa57b6 100644 --- a/indra/llwindow/CMakeLists.txt +++ b/indra/llwindow/CMakeLists.txt @@ -12,6 +12,7 @@ project(llwindow)  include(00-Common)  include(DirectX) +include(DragDrop)  include(LLCommon)  include(LLImage)  include(LLMath) @@ -102,11 +103,13 @@ if (WINDOWS)         llwindowwin32.cpp         lldxhardware.cpp         llkeyboardwin32.cpp +       lldragdropwin32.cpp         )    list(APPEND llwindow_HEADER_FILES         llwindowwin32.h         lldxhardware.h         llkeyboardwin32.h +       lldragdropwin32.h         )    list(APPEND llwindow_LINK_LIBRARIES         comdlg32     # Common Dialogs for ChooseColor diff --git a/indra/llwindow/lldragdropwin32.cpp b/indra/llwindow/lldragdropwin32.cpp new file mode 100644 index 0000000000..9b80fe0a84 --- /dev/null +++ b/indra/llwindow/lldragdropwin32.cpp @@ -0,0 +1,370 @@ +/** + * @file lldragdrop32.cpp + * @brief Handler for Windows specific drag and drop (OS to client) code + * + * $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 + * ("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://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. + * $/LicenseInfo$ + */ + +#if LL_WINDOWS + +#if LL_OS_DRAGDROP_ENABLED + +#include "linden_common.h" + +#include "llwindowwin32.h" +#include "llkeyboardwin32.h" +#include "llwindowcallbacks.h" +#include "lldragdropwin32.h" + +class LLDragDropWin32Target:  +	public IDropTarget +{ +	public: +		//////////////////////////////////////////////////////////////////////////////// +		// +		LLDragDropWin32Target( HWND  hWnd ) : +			mRefCount( 1 ), +			mAppWindowHandle( hWnd ), +			mAllowDrop( false) +		{ +		}; + +		virtual ~LLDragDropWin32Target() +		{ +		}; + +		//////////////////////////////////////////////////////////////////////////////// +		// +		ULONG __stdcall AddRef( void ) +		{ +			return InterlockedIncrement( &mRefCount ); +		}; + +		//////////////////////////////////////////////////////////////////////////////// +		// +		ULONG __stdcall Release( void ) +		{ +			LONG count = InterlockedDecrement( &mRefCount ); +				 +			if ( count == 0 ) +			{ +				delete this; +				return 0; +			} +			else +			{ +				return count; +			}; +		}; + +		//////////////////////////////////////////////////////////////////////////////// +		// +		HRESULT __stdcall QueryInterface( REFIID iid, void** ppvObject ) +		{ +			if ( iid == IID_IUnknown || iid == IID_IDropTarget ) +			{ +				AddRef(); +				*ppvObject = this; +				return S_OK; +			} +			else +			{ +				*ppvObject = 0; +				return E_NOINTERFACE; +			}; +		}; + +		//////////////////////////////////////////////////////////////////////////////// +		// +		HRESULT __stdcall DragEnter( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) +		{ +			FORMATETC fmtetc = { CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; + +			// support CF_TEXT using a HGLOBAL? +			if ( S_OK == pDataObject->QueryGetData( &fmtetc ) ) +			{ +				mAllowDrop = true; +				mDropUrl = std::string(); +				mIsSlurl = false; + +				STGMEDIUM stgmed; +				if( S_OK == pDataObject->GetData( &fmtetc, &stgmed ) ) +				{ +					PVOID data = GlobalLock( stgmed.hGlobal ); +					mDropUrl = std::string( (char*)data ); +					// XXX MAJOR MAJOR HACK! +					LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(mAppWindowHandle, GWL_USERDATA); +					if (NULL != window_imp) +					{ +						LLCoordGL gl_coord( 0, 0 ); + +						POINT pt2; +						pt2.x = pt.x; +						pt2.y = pt.y; +						ScreenToClient( mAppWindowHandle, &pt2 ); + +						LLCoordWindow cursor_coord_window( pt2.x, pt2.y ); +						window_imp->convertCoords(cursor_coord_window, &gl_coord); +						MASK mask = gKeyboard->currentMask(TRUE); + +						LLWindowCallbacks::DragNDropResult result = window_imp->completeDragNDropRequest( gl_coord, mask,  +							LLWindowCallbacks::DNDA_START_TRACKING, mDropUrl ); + +						switch (result) +						{ +						case LLWindowCallbacks::DND_COPY: +							*pdwEffect = DROPEFFECT_COPY; +							break; +						case LLWindowCallbacks::DND_LINK: +							*pdwEffect = DROPEFFECT_LINK; +							break; +						case LLWindowCallbacks::DND_MOVE: +							*pdwEffect = DROPEFFECT_MOVE; +							break; +						case LLWindowCallbacks::DND_NONE: +						default: +							*pdwEffect = DROPEFFECT_NONE; +							break; +						} +					}; + +					GlobalUnlock( stgmed.hGlobal ); +					ReleaseStgMedium( &stgmed ); +				}; +				SetFocus( mAppWindowHandle ); +			} +			else +			{ +				mAllowDrop = false; +				*pdwEffect = DROPEFFECT_NONE; +			}; + +			return S_OK; +		}; + +		//////////////////////////////////////////////////////////////////////////////// +		// +		HRESULT __stdcall DragOver( DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) +		{ +			if ( mAllowDrop ) +			{ +				// XXX MAJOR MAJOR HACK! +				LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(mAppWindowHandle, GWL_USERDATA); +				if (NULL != window_imp) +				{ +					LLCoordGL gl_coord( 0, 0 ); + +					POINT pt2; +					pt2.x = pt.x; +					pt2.y = pt.y; +					ScreenToClient( mAppWindowHandle, &pt2 ); + +					LLCoordWindow cursor_coord_window( pt2.x, pt2.y ); +					window_imp->convertCoords(cursor_coord_window, &gl_coord); +					MASK mask = gKeyboard->currentMask(TRUE); + +					LLWindowCallbacks::DragNDropResult result = window_imp->completeDragNDropRequest( gl_coord, mask,  +						LLWindowCallbacks::DNDA_TRACK, mDropUrl ); +					 +					switch (result) +					{ +					case LLWindowCallbacks::DND_COPY: +						*pdwEffect = DROPEFFECT_COPY; +						break; +					case LLWindowCallbacks::DND_LINK: +						*pdwEffect = DROPEFFECT_LINK; +						break; +					case LLWindowCallbacks::DND_MOVE: +						*pdwEffect = DROPEFFECT_MOVE; +						break; +					case LLWindowCallbacks::DND_NONE: +					default: +						*pdwEffect = DROPEFFECT_NONE; +						break; +					} +				}; +			} +			else +			{ +				*pdwEffect = DROPEFFECT_NONE; +			}; + +			return S_OK; +		}; + +		//////////////////////////////////////////////////////////////////////////////// +		// +		HRESULT __stdcall DragLeave( void ) +		{ +			// XXX MAJOR MAJOR HACK! +			LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(mAppWindowHandle, GWL_USERDATA); +			if (NULL != window_imp) +			{ +				LLCoordGL gl_coord( 0, 0 ); +				MASK mask = gKeyboard->currentMask(TRUE); +				window_imp->completeDragNDropRequest( gl_coord, mask, LLWindowCallbacks::DNDA_STOP_TRACKING, mDropUrl ); +			}; +			return S_OK; +		}; + +		//////////////////////////////////////////////////////////////////////////////// +		// +		HRESULT __stdcall Drop( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) +		{ +			if ( mAllowDrop ) +			{ +				// window impl stored in Window data (neat!) +				LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong( mAppWindowHandle, GWL_USERDATA ); +				if ( NULL != window_imp ) +				{ +					LLCoordGL gl_coord( 0, 0 ); + +					POINT pt_client; +					pt_client.x = pt.x; +					pt_client.y = pt.y; +					ScreenToClient( mAppWindowHandle, &pt_client ); + +					LLCoordWindow cursor_coord_window( pt_client.x, pt_client.y ); +					window_imp->convertCoords(cursor_coord_window, &gl_coord); +					llinfos << "### (Drop) URL is: " << mDropUrl << llendl; +					llinfos << "###        raw coords are: " << pt.x << " x " << pt.y << llendl; +					llinfos << "###	    client coords are: " << pt_client.x << " x " << pt_client.y << llendl; +					llinfos << "###         GL coords are: " << gl_coord.mX << " x " << gl_coord.mY << llendl; +					llinfos << llendl; + +					// no keyboard modifier option yet but we could one day +					MASK mask = gKeyboard->currentMask( TRUE ); + +					// actually do the drop +					LLWindowCallbacks::DragNDropResult result = window_imp->completeDragNDropRequest( gl_coord, mask,  +						LLWindowCallbacks::DNDA_DROPPED, mDropUrl ); + +					switch (result) +					{ +					case LLWindowCallbacks::DND_COPY: +						*pdwEffect = DROPEFFECT_COPY; +						break; +					case LLWindowCallbacks::DND_LINK: +						*pdwEffect = DROPEFFECT_LINK; +						break; +					case LLWindowCallbacks::DND_MOVE: +						*pdwEffect = DROPEFFECT_MOVE; +						break; +					case LLWindowCallbacks::DND_NONE: +					default: +						*pdwEffect = DROPEFFECT_NONE; +						break; +					} +				}; +			} +			else +			{ +				*pdwEffect = DROPEFFECT_NONE; +			}; + +			return S_OK; +		}; + +	//////////////////////////////////////////////////////////////////////////////// +	// +	private: +		LONG mRefCount; +		HWND mAppWindowHandle; +		bool mAllowDrop; +		std::string mDropUrl; +		bool mIsSlurl; +		friend class LLWindowWin32; +}; + +//////////////////////////////////////////////////////////////////////////////// +// +LLDragDropWin32::LLDragDropWin32() : +	mDropTarget( NULL ), +	mDropWindowHandle( NULL ) + +{ +} + +//////////////////////////////////////////////////////////////////////////////// +// +LLDragDropWin32::~LLDragDropWin32() +{ +} + +//////////////////////////////////////////////////////////////////////////////// +// +bool LLDragDropWin32::init( HWND hWnd ) +{ +	if ( NOERROR != OleInitialize( NULL ) ) +		return FALSE;  + +	mDropTarget = new LLDragDropWin32Target( hWnd ); +	if ( mDropTarget ) +	{ +		HRESULT result = CoLockObjectExternal( mDropTarget, TRUE, FALSE ); +		if ( S_OK == result ) +		{ +			result = RegisterDragDrop( hWnd, mDropTarget ); +			if ( S_OK != result ) +			{ +				// RegisterDragDrop failed +				return false; +			}; + +			// all ok +			mDropWindowHandle = hWnd; +		} +		else +		{ +			// Unable to lock OLE object +			return false; +		}; +	}; + +	// success +	return true; +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLDragDropWin32::reset() +{ +	if ( mDropTarget ) +	{ +		RevokeDragDrop( mDropWindowHandle ); +		CoLockObjectExternal( mDropTarget, FALSE, TRUE ); +		mDropTarget->Release();   +	}; +	 +	OleUninitialize(); +} + +#endif // LL_OS_DRAGDROP_ENABLED + +#endif // LL_WINDOWS + diff --git a/indra/llwindow/lldragdropwin32.h b/indra/llwindow/lldragdropwin32.h new file mode 100644 index 0000000000..9686626d7c --- /dev/null +++ b/indra/llwindow/lldragdropwin32.h @@ -0,0 +1,80 @@ +/** + * @file lldragdrop32.cpp + * @brief Handler for Windows specific drag and drop (OS to client) code + * + * $LicenseInfo:firstyear=2004&license=viewergpl$ + * + * Copyright (c) 2004-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://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. + * $/LicenseInfo$ + */ + +#if LL_WINDOWS + +#if LL_OS_DRAGDROP_ENABLED + +#ifndef LL_LLDRAGDROP32_H +#define LL_LLDRAGDROP32_H + +#include <windows.h> +#include <ole2.h> + +class LLDragDropWin32 +{ +	public: +		LLDragDropWin32(); +		~LLDragDropWin32(); + +		bool init( HWND hWnd ); +		void reset(); + +	private: +		IDropTarget* mDropTarget; +		HWND mDropWindowHandle; +}; +#endif // LL_LLDRAGDROP32_H + +#else // LL_OS_DRAGDROP_ENABLED + +#ifndef LL_LLDRAGDROP32_H +#define LL_LLDRAGDROP32_H + +#include <windows.h> +#include <ole2.h> + +// imposter class that does nothing  +class LLDragDropWin32 +{ +	public: +		LLDragDropWin32() {}; +		~LLDragDropWin32() {}; + +		bool init( HWND hWnd ) { return false; }; +		void reset() { }; +}; +#endif // LL_LLDRAGDROP32_H + +#endif // LL_OS_DRAGDROP_ENABLED + +#endif // LL_WINDOWS diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp index 72f9997149..6d9f012cc3 100644 --- a/indra/llwindow/llwindowcallbacks.cpp +++ b/indra/llwindow/llwindowcallbacks.cpp @@ -163,6 +163,11 @@ void LLWindowCallbacks::handleDataCopy(LLWindow *window, S32 data_type, void *da  {  } +LLWindowCallbacks::DragNDropResult LLWindowCallbacks::handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, DragNDropAction action, std::string data ) +{ +	return LLWindowCallbacks::DND_NONE; +} +  BOOL LLWindowCallbacks::handleTimerEvent(LLWindow *window)  {  	return FALSE; diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h index abc66c42a2..42add8dde0 100644 --- a/indra/llwindow/llwindowcallbacks.h +++ b/indra/llwindow/llwindowcallbacks.h @@ -71,6 +71,21 @@ public:  	virtual BOOL handleTimerEvent(LLWindow *window);  	virtual BOOL handleDeviceChange(LLWindow *window); +	enum DragNDropAction { +		DNDA_START_TRACKING = 0,// Start tracking an incoming drag +		DNDA_TRACK,				// User is dragging an incoming drag around the window +		DNDA_STOP_TRACKING,		// User is no longer dragging an incoming drag around the window (may have either cancelled or dropped on the window) +		DNDA_DROPPED			// User dropped an incoming drag on the window (this is the "commit" event) +	}; +	 +	enum DragNDropResult { +		DND_NONE = 0,	// No drop allowed +		DND_MOVE,		// Drop accepted would result in a "move" operation +		DND_COPY,		// Drop accepted would result in a "copy" operation +		DND_LINK		// Drop accepted would result in a "link" operation +	}; +	virtual DragNDropResult handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, DragNDropAction action, std::string data); +	  	virtual void handlePingWatchdog(LLWindow *window, const char * msg);  	virtual void handlePauseWatchdog(LLWindow *window);  	virtual void handleResumeWatchdog(LLWindow *window); diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index ed62faece6..9ccd4c7f97 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -278,6 +278,8 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks,  	mMoveEventCampartorUPP = NewEventComparatorUPP(staticMoveEventComparator);  	mGlobalHandlerRef = NULL;  	mWindowHandlerRef = NULL; +	 +	mDragOverrideCursor = -1;  	// We're not clipping yet  	SetRect( &mOldMouseClip, 0, 0, 0, 0 ); @@ -499,8 +501,11 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits  		// Set up window event handlers (some window-related events ONLY go to window handlers.)  		InstallStandardEventHandler(GetWindowEventTarget(mWindow)); -		InstallWindowEventHandler (mWindow, mEventHandlerUPP, GetEventTypeCount (WindowHandlerEventList), WindowHandlerEventList, (void*)this, &mWindowHandlerRef); // add event handler - +		InstallWindowEventHandler(mWindow, mEventHandlerUPP, GetEventTypeCount (WindowHandlerEventList), WindowHandlerEventList, (void*)this, &mWindowHandlerRef); // add event handler +#if LL_OS_DRAGDROP_ENABLED +		InstallTrackingHandler( dragTrackingHandler, mWindow, (void*)this );		 +		InstallReceiveHandler( dragReceiveHandler, mWindow, (void*)this ); +#endif // LL_OS_DRAGDROP_ENABLED  	}  	{ @@ -2174,11 +2179,8 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e  						}  						else  						{ -							MASK mask = 0; -							if(modifiers & shiftKey) { mask |= MASK_SHIFT; } -							if(modifiers & (cmdKey | controlKey)) { mask |= MASK_CONTROL; } -							if(modifiers & optionKey) { mask |= MASK_ALT; } - +							MASK mask = LLWindowMacOSX::modifiersToMask(modifiers); +							  							llassert( actualType == typeUnicodeText );  							// The result is a UTF16 buffer.  Pass the characters in turn to handleUnicodeChar. @@ -2795,6 +2797,14 @@ void LLWindowMacOSX::setCursor(ECursorType cursor)  {  	OSStatus result = noErr; +	if (mDragOverrideCursor != -1)  +	{ +		// A drag is in progress...remember the requested cursor and we'll +		// restore it when it is done +		mCurrentCursor = cursor; +		return; +	} +		  	if (cursor == UI_CURSOR_ARROW  		&& mBusyCount > 0)  	{ @@ -3379,3 +3389,174 @@ std::vector<std::string> LLWindowMacOSX::getDynamicFallbackFontList()  	return std::vector<std::string>();  } +// static +MASK LLWindowMacOSX::modifiersToMask(SInt16 modifiers) +{ +	MASK mask = 0; +	if(modifiers & shiftKey) { mask |= MASK_SHIFT; } +	if(modifiers & (cmdKey | controlKey)) { mask |= MASK_CONTROL; } +	if(modifiers & optionKey) { mask |= MASK_ALT; } +	return mask; +}	 + +#if LL_OS_DRAGDROP_ENABLED + +OSErr LLWindowMacOSX::dragTrackingHandler(DragTrackingMessage message, WindowRef theWindow, +						  void * handlerRefCon, DragRef drag) +{ +	OSErr result = noErr; +	LLWindowMacOSX *self = (LLWindowMacOSX*)handlerRefCon; + +	lldebugs << "drag tracking handler, message = " << message << llendl; +	 +	switch(message) +	{ +		case kDragTrackingInWindow: +			result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_TRACK); +		break; +		 +		case kDragTrackingEnterHandler: +			result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_START_TRACKING); +		break; +		 +		case kDragTrackingLeaveHandler: +			result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_STOP_TRACKING); +		break; +		 +		default: +		break; +	} +	 +	return result; +} + +OSErr LLWindowMacOSX::dragReceiveHandler(WindowRef theWindow, void * handlerRefCon,	 +										 DragRef drag) +{	 +	LLWindowMacOSX *self = (LLWindowMacOSX*)handlerRefCon; +	return self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_DROPPED); + +} + +OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDropAction action) +{	 +	OSErr result = dragNotAcceptedErr;	// overall function result +	OSErr err = noErr;	// for local error handling +	 +	// Get the mouse position and modifiers of this drag. +	SInt16 modifiers, mouseDownModifiers, mouseUpModifiers; +	::GetDragModifiers(drag, &modifiers, &mouseDownModifiers, &mouseUpModifiers); +	MASK mask = LLWindowMacOSX::modifiersToMask(modifiers); +	 +	Point mouse_point; +	// This will return the mouse point in global screen coords +	::GetDragMouse(drag, &mouse_point, NULL); +	LLCoordScreen screen_coords(mouse_point.h, mouse_point.v); +	LLCoordGL gl_pos; +	convertCoords(screen_coords, &gl_pos); +	 +	// Look at the pasteboard and try to extract an URL from it +	PasteboardRef   pasteboard; +	if(GetDragPasteboard(drag, &pasteboard) == noErr) +	{ +		ItemCount num_items = 0; +		// Treat an error here as an item count of 0 +		(void)PasteboardGetItemCount(pasteboard, &num_items); +		 +		// Only deal with single-item drags. +		if(num_items == 1) +		{ +			PasteboardItemID item_id = NULL; +			CFArrayRef flavors = NULL; +			CFDataRef data = NULL; +			 +			err = PasteboardGetItemIdentifier(pasteboard, 1, &item_id); // Yes, this really is 1-based. +			 +			// Try to extract an URL from the pasteboard +			if(err == noErr) +			{ +				err = PasteboardCopyItemFlavors( pasteboard, item_id, &flavors); +			} +			 +			if(err == noErr) +			{ +				if(CFArrayContainsValue(flavors, CFRangeMake(0, CFArrayGetCount(flavors)), kUTTypeURL)) +				{ +					// This is an URL. +					err = PasteboardCopyItemFlavorData(pasteboard, item_id, kUTTypeURL, &data); +				} +				else if(CFArrayContainsValue(flavors, CFRangeMake(0, CFArrayGetCount(flavors)), kUTTypeUTF8PlainText)) +				{ +					// This is a string that might be an URL. +					err = PasteboardCopyItemFlavorData(pasteboard, item_id, kUTTypeUTF8PlainText, &data); +				} +				 +			} +			 +			if(flavors != NULL) +			{ +				CFRelease(flavors); +			} + +			if(data != NULL) +			{ +				std::string url; +				url.assign((char*)CFDataGetBytePtr(data), CFDataGetLength(data)); +				CFRelease(data); +				 +				if(!url.empty()) +				{ +					LLWindowCallbacks::DragNDropResult res =  +						mCallbacks->handleDragNDrop(this, gl_pos, mask, action, url); +					 +					switch (res) { +						case LLWindowCallbacks::DND_NONE:		// No drop allowed +							if (action == LLWindowCallbacks::DNDA_TRACK) +							{ +								mDragOverrideCursor = kThemeNotAllowedCursor; +							} +							else { +								mDragOverrideCursor = -1; +							} +							break; +						case LLWindowCallbacks::DND_MOVE:		// Drop accepted would result in a "move" operation +							mDragOverrideCursor = kThemePointingHandCursor; +							result = noErr; +							break; +						case LLWindowCallbacks::DND_COPY:		// Drop accepted would result in a "copy" operation +							mDragOverrideCursor = kThemeCopyArrowCursor; +							result = noErr; +							break; +						case LLWindowCallbacks::DND_LINK:		// Drop accepted would result in a "link" operation: +							mDragOverrideCursor = kThemeAliasArrowCursor; +							result = noErr; +							break; +						default: +							mDragOverrideCursor = -1; +							break; +					} +					// This overrides the cursor being set by setCursor. +					// This is a bit of a hack workaround because lots of areas +					// within the viewer just blindly set the cursor. +					if (mDragOverrideCursor == -1) +					{ +						// Restore the cursor +						ECursorType temp_cursor = mCurrentCursor; +						// get around the "setting the same cursor" code in setCursor() +						mCurrentCursor = UI_CURSOR_COUNT;  + 						setCursor(temp_cursor); +					} +					else { +						// Override the cursor +						SetThemeCursor(mDragOverrideCursor); +					} + +				} +			} +		} +	} +	 +	return result; +} + +#endif // LL_OS_DRAGDROP_ENABLED diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h index fbfa07fab4..377f10b6d4 100644 --- a/indra/llwindow/llwindowmacosx.h +++ b/indra/llwindow/llwindowmacosx.h @@ -34,6 +34,7 @@  #define LL_LLWINDOWMACOSX_H  #include "llwindow.h" +#include "llwindowcallbacks.h"  #include "lltimer.h" @@ -159,8 +160,15 @@ protected:  	void adjustCursorDecouple(bool warpingMouse = false);  	void fixWindowSize(void);  	void stopDockTileBounce(); - - +	static MASK modifiersToMask(SInt16 modifiers); +	 +#if LL_OS_DRAGDROP_ENABLED +	static OSErr dragTrackingHandler(DragTrackingMessage message, WindowRef theWindow, +									 void * handlerRefCon, DragRef theDrag); +	static OSErr dragReceiveHandler(WindowRef theWindow, void * handlerRefCon,	DragRef theDrag); +	OSErr handleDragNDrop(DragRef theDrag, LLWindowCallbacks::DragNDropAction action); +#endif // LL_OS_DRAGDROP_ENABLED +	  	//  	// Platform specific variables  	// @@ -193,11 +201,13 @@ protected:  	U32			mFSAASamples;  	BOOL		mForceRebuild; +	S32			mDragOverrideCursor; +	  	F32			mBounceTime;  	NMRec		mBounceRec;  	LLTimer		mBounceTimer; -	// Imput method management through Text Service Manager. +	// Input method management through Text Service Manager.  	TSMDocumentID	mTSMDocument;  	BOOL		mLanguageTextInputAllowed;  	ScriptCode	mTSMScriptCode; diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index b591111b75..57a4921d92 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -38,6 +38,7 @@  // LLWindow library includes  #include "llkeyboardwin32.h" +#include "lldragdropwin32.h"  #include "llpreeditor.h"  #include "llwindowcallbacks.h" @@ -52,6 +53,7 @@  #include <mapi.h>  #include <process.h>	// for _spawn  #include <shellapi.h> +#include <fstream>  #include <Imm.h>  // Require DirectInput version 8 @@ -383,6 +385,9 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,  	gKeyboard = new LLKeyboardWin32();  	gKeyboard->setCallbacks(callbacks); +	// Initialize the Drag and Drop functionality +	mDragDrop = new LLDragDropWin32; +  	// Initialize (boot strap) the Language text input management,  	// based on the system's (user's) default settings.  	allowLanguageTextInput(mPreeditor, FALSE); @@ -620,6 +625,8 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,  LLWindowWin32::~LLWindowWin32()  { +	delete mDragDrop; +  	delete [] mWindowTitle;  	mWindowTitle = NULL; @@ -671,6 +678,8 @@ void LLWindowWin32::close()  		return;  	} +	mDragDrop->reset(); +  	// Make sure cursor is visible and we haven't mangled the clipping state.  	setMouseClipping(FALSE);  	showCursor(); @@ -1349,6 +1358,11 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO  	}  	SetWindowLong(mWindowHandle, GWL_USERDATA, (U32)this); + +	// register this window as handling drag/drop events from the OS +	DragAcceptFiles( mWindowHandle, TRUE ); + +	mDragDrop->init( mWindowHandle );  	//register joystick timer callback  	SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer @@ -2354,11 +2368,15 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  			return 0;  		case WM_COPYDATA: -			window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_COPYDATA"); -			// received a URL -			PCOPYDATASTRUCT myCDS = (PCOPYDATASTRUCT) l_param; -			window_imp->mCallbacks->handleDataCopy(window_imp, myCDS->dwData, myCDS->lpData); +			{ +				window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_COPYDATA"); +				// received a URL +				PCOPYDATASTRUCT myCDS = (PCOPYDATASTRUCT) l_param; +				window_imp->mCallbacks->handleDataCopy(window_imp, myCDS->dwData, myCDS->lpData); +			};  			return 0;			 + +			break;  		}  	window_imp->mCallbacks->handlePauseWatchdog(window_imp);	 @@ -3528,6 +3546,13 @@ static LLWString find_context(const LLWString & wtext, S32 focus, S32 focus_leng  	return wtext.substr(start, end - start);  } +// final stage of handling drop requests - both from WM_DROPFILES message +// for files and via IDropTarget interface requests. +LLWindowCallbacks::DragNDropResult LLWindowWin32::completeDragNDropRequest( const LLCoordGL gl_coord, const MASK mask, LLWindowCallbacks::DragNDropAction action, const std::string url ) +{ +	return mCallbacks->handleDragNDrop( this, gl_coord, mask, action, url ); +} +  // Handle WM_IME_REQUEST message.  // If it handled the message, returns TRUE.  Otherwise, FALSE.  // When it handled the message, the value to be returned from diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index e4e9179db7..6aca31b63e 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -39,6 +39,8 @@  #include <windows.h>  #include "llwindow.h" +#include "llwindowcallbacks.h" +#include "lldragdropwin32.h"  // Hack for async host by name  #define LL_WM_HOST_RESOLVED      (WM_APP + 1) @@ -114,6 +116,8 @@ public:  	/*virtual*/ void interruptLanguageTextInput();  	/*virtual*/ void spawnWebBrowser(const std::string& escaped_url); +	LLWindowCallbacks::DragNDropResult completeDragNDropRequest( const LLCoordGL gl_coord, const MASK mask, LLWindowCallbacks::DragNDropAction action, const std::string url ); +  	static std::vector<std::string> getDynamicFallbackFontList();  protected: @@ -205,6 +209,8 @@ protected:  	LLPreeditor		*mPreeditor; +	LLDragDropWin32* mDragDrop; +  	friend class LLWindowManager;  }; diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp index d908c85da6..fb0a04dc58 100644 --- a/indra/llxuixml/llinitparam.cpp +++ b/indra/llxuixml/llinitparam.cpp @@ -84,8 +84,7 @@ namespace LLInitParam  	// BaseBlock  	//  	BaseBlock::BaseBlock() -	:	mLastChangedParam(0), -		mChangeVersion(0), +	:	mChangeVersion(0),  		mBlockDescriptor(NULL)  	{} @@ -348,7 +347,6 @@ namespace LLInitParam  			if (deserialize_func && deserialize_func(*paramp, p, name_stack, name_stack.first == name_stack.second ? -1 : name_stack.first->second))  			{ -				mLastChangedParam = (*it)->mParamHandle;  				return true;  			}  		} @@ -417,9 +415,11 @@ namespace LLInitParam  	void BaseBlock::setLastChangedParam(const Param& last_param, bool user_provided)  	{  -		mLastChangedParam = getHandleFromParam(&last_param);  +		if (user_provided) +		{  		mChangeVersion++;  	} +	}  	const std::string& BaseBlock::getParamName(const BlockDescriptor& block_data, const Param* paramp) const  	{ @@ -472,7 +472,6 @@ namespace LLInitParam  			{  				Param* paramp = getParamFromHandle(it->mParamHandle);  				param_changed |= merge_func(*paramp, *other_paramp, true); -				mLastChangedParam = it->mParamHandle;  			}  		}  		return param_changed; @@ -493,7 +492,6 @@ namespace LLInitParam  			{  				Param* paramp = getParamFromHandle(it->mParamHandle);  				param_changed |= merge_func(*paramp, *other_paramp, false); -				mLastChangedParam = it->mParamHandle;  			}  		}  		return param_changed; diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index a84e47f998..d264cea3b2 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -472,7 +472,6 @@ namespace LLInitParam  		// Blocks can override this to do custom tracking of changes  		virtual void setLastChangedParam(const Param& last_param, bool user_provided); -		const Param* getLastChangedParam() const { return mLastChangedParam ? getParamFromHandle(mLastChangedParam) : NULL; }  		S32 getLastChangeVersion() const { return mChangeVersion; }  		bool isDefault() const { return mChangeVersion == 0; } @@ -507,7 +506,6 @@ namespace LLInitParam  		bool fillFromImpl(BlockDescriptor& block_data, const BaseBlock& other);  		// can be updated in getters -		mutable param_handle_t	mLastChangedParam;  		mutable S32				mChangeVersion;  		BlockDescriptor*		mBlockDescriptor;	// most derived block descriptor @@ -1734,6 +1732,7 @@ namespace LLInitParam  		void set(value_assignment_t val, bool flag_as_provided = true)  		{  			Param::enclosingBlock().setLastChangedParam(*this, flag_as_provided); +			  			// set param version number to be up to date, so we ignore block contents  			mData.mLastParamVersion = BaseBlock::getLastChangeVersion(); diff --git a/indra/llxuixml/lluicolor.cpp b/indra/llxuixml/lluicolor.cpp index 424d878a6b..0049ec055c 100644 --- a/indra/llxuixml/lluicolor.cpp +++ b/indra/llxuixml/lluicolor.cpp @@ -16,13 +16,15 @@ LLUIColor::LLUIColor()  {  } -LLUIColor::LLUIColor(const LLColor4* color) -	:mColorPtr(color) + +LLUIColor::LLUIColor(const LLColor4& color) +:	mColor(color),  +	mColorPtr(NULL)  {  } -LLUIColor::LLUIColor(const LLColor4& color) -	:mColor(color), mColorPtr(NULL) +LLUIColor::LLUIColor(const LLUIColor* color) +:	mColorPtr(color)  {  } @@ -32,14 +34,14 @@ void LLUIColor::set(const LLColor4& color)  	mColorPtr = NULL;  } -void LLUIColor::set(const LLColor4* color) +void LLUIColor::set(const LLUIColor* color)  {  	mColorPtr = color;  }  const LLColor4& LLUIColor::get() const  { -	return (mColorPtr == NULL ? mColor : *mColorPtr); +	return (mColorPtr == NULL ? mColor : mColorPtr->get());  }  LLUIColor::operator const LLColor4& () const diff --git a/indra/llxuixml/lluicolor.h b/indra/llxuixml/lluicolor.h index bb0f786326..0ef2f78b24 100644 --- a/indra/llxuixml/lluicolor.h +++ b/indra/llxuixml/lluicolor.h @@ -22,11 +22,11 @@ class LLUIColor  {  public:  	LLUIColor(); -	LLUIColor(const LLColor4* color);  	LLUIColor(const LLColor4& color); +	LLUIColor(const LLUIColor* color);  	void set(const LLColor4& color); -	void set(const LLColor4* color); +	void set(const LLUIColor* color);  	const LLColor4& get() const; @@ -38,7 +38,7 @@ public:  private:  	friend struct LLInitParam::ParamCompare<LLUIColor, false>; -	const LLColor4* mColorPtr; +	const LLUIColor* mColorPtr;  	LLColor4 mColor;  }; @@ -47,7 +47,7 @@ namespace LLInitParam  	template<>  	struct ParamCompare<LLUIColor, false>  	{ -		static bool equals(const class LLUIColor& a, const class LLUIColor& b); +		static bool equals(const LLUIColor& a, const LLUIColor& b);  	};  } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index d9155377c1..4340ac1f01 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -8,6 +8,7 @@ include(BuildVersion)  include(DBusGlib)  include(DirectX)  include(OpenSSL) +include(DragDrop)  include(ELFIO)  include(FMOD)  include(OPENAL) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 54e6f0966d..9e561bdf96 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5549,6 +5549,17 @@        <key>Value</key>        <integer>0</integer>      </map> +	<key>PrimMediaDragNDrop</key> +	<map> +		<key>Comment</key> +		<string>Enable drag and drop of URLs onto prim faces</string> +		<key>Persist</key> +		<integer>1</integer> +		<key>Type</key> +		<string>Boolean</string> +		<key>Value</key> +		<integer>1</integer> +	</map>      <key>PrimMediaMaxRetries</key>      <map>        <key>Comment</key> @@ -10908,6 +10919,17 @@        <key>Value</key>        <integer>0</integer>      </map> +	<key>SLURLDragNDrop</key> +	<map> +		<key>Comment</key> +		<string>Enable drag and drop of SLURLs onto the viewer</string> +		<key>Persist</key> +		<integer>1</integer> +		<key>Type</key> +		<string>Boolean</string> +		<key>Value</key> +		<integer>1</integer> +	</map>      <key>soundsbeacon</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 8f4ce4498e..5088c65122 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1081,7 +1081,6 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up  		// MULTI-WEARABLES: revisit if more than one per type is allowed.  		else if (areMatchingWearables(vitem,inv_item))  		{ -			gAgentWearables.removeWearable(inv_item->getWearableType(),true,0);  			if (inv_item->getIsLinkType())  			{  				gInventory.purgeObject(inv_item->getUUID()); diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index a58a562378..aeed4fee08 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -57,11 +57,11 @@ public:  	struct Params : public LLInitParam::Block<Params, LLFlatListView::Params>   	{ -		Optional<bool> ignore_online_status; // show all items as online -		Optional<bool> show_last_interaction_time; // show most recent interaction time. *HACK: move this to a derived class -		Optional<bool> show_info_btn; -		Optional<bool> show_profile_btn; -		Optional<bool> show_speaking_indicator; +		Optional<bool>	ignore_online_status, // show all items as online +						show_last_interaction_time, // show most recent interaction time. *HACK: move this to a derived class +						show_info_btn, +						show_profile_btn, +						show_speaking_indicator;  		Params();  	}; diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 2bcd097717..846b2843dd 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -48,6 +48,17 @@ S32 LLAvatarListItem::sLeftPadding = 0;  S32 LLAvatarListItem::sRightNamePadding = 0;  S32 LLAvatarListItem::sChildrenWidths[LLAvatarListItem::ALIC_COUNT]; +static LLWidgetNameRegistry::StaticRegistrar sRegisterAvatarListItemParams(&typeid(LLAvatarListItem::Params), "avatar_list_item"); + +LLAvatarListItem::Params::Params() +:	default_style("default_style"), +	voice_call_invited_style("voice_call_invited_style"), +	voice_call_joined_style("voice_call_joined_style"), +	voice_call_left_style("voice_call_left_style"), +	online_style("online_style"), +	offline_style("offline_style") +{}; +  LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/)  :	LLPanel(), @@ -166,9 +177,30 @@ void LLAvatarListItem::setHighlight(const std::string& highlight)  void LLAvatarListItem::setState(EItemState item_style)  { -	item_style_map_t& item_styles_params_map = getItemStylesParams(); +	const LLAvatarListItem::Params& params = LLUICtrlFactory::getDefaultParams<LLAvatarListItem>(); -	mAvatarNameStyle = item_styles_params_map[item_style]; +	switch(item_style) +	{ +	default: +	case IS_DEFAULT: +		mAvatarNameStyle = params.default_style(); +		break; +	case IS_VOICE_INVITED: +		mAvatarNameStyle = params.voice_call_invited_style(); +		break; +	case IS_VOICE_JOINED: +		mAvatarNameStyle = params.voice_call_joined_style(); +		break; +	case IS_VOICE_LEFT: +		mAvatarNameStyle = params.voice_call_left_style(); +		break; +	case IS_ONLINE: +		mAvatarNameStyle = params.online_style(); +		break; +	case IS_OFFLINE: +		mAvatarNameStyle = params.offline_style(); +		break; +	}  	// *NOTE: You cannot set the style on a text box anymore, you must  	// rebuild the text.  This will cause problems if the text contains @@ -353,58 +385,6 @@ std::string LLAvatarListItem::formatSeconds(U32 secs)  }  // static -LLAvatarListItem::item_style_map_t& LLAvatarListItem::getItemStylesParams() -{ -	static item_style_map_t item_styles_params_map; -	if (!item_styles_params_map.empty()) return item_styles_params_map; - -	LLPanel::Params params = LLUICtrlFactory::getDefaultParams<LLPanel>(); -	LLPanel* params_panel = LLUICtrlFactory::create<LLPanel>(params); - -	BOOL sucsess = LLUICtrlFactory::instance().buildPanel(params_panel, "panel_avatar_list_item_params.xml"); - -	if (sucsess) -	{ - -		item_styles_params_map.insert( -			std::make_pair(IS_DEFAULT, -			params_panel->getChild<LLTextBox>("default_style")->getDefaultStyle())); - -		item_styles_params_map.insert( -			std::make_pair(IS_VOICE_INVITED, -			params_panel->getChild<LLTextBox>("voice_call_invited_style")->getDefaultStyle())); - -		item_styles_params_map.insert( -			std::make_pair(IS_VOICE_JOINED, -			params_panel->getChild<LLTextBox>("voice_call_joined_style")->getDefaultStyle())); - -		item_styles_params_map.insert( -			std::make_pair(IS_VOICE_LEFT, -			params_panel->getChild<LLTextBox>("voice_call_left_style")->getDefaultStyle())); - -		item_styles_params_map.insert( -			std::make_pair(IS_ONLINE, -			params_panel->getChild<LLTextBox>("online_style")->getDefaultStyle())); - -		item_styles_params_map.insert( -			std::make_pair(IS_OFFLINE, -			params_panel->getChild<LLTextBox>("offline_style")->getDefaultStyle())); -	} -	else -	{ -		item_styles_params_map.insert(std::make_pair(IS_DEFAULT, LLStyle::Params())); -		item_styles_params_map.insert(std::make_pair(IS_VOICE_INVITED, LLStyle::Params())); -		item_styles_params_map.insert(std::make_pair(IS_VOICE_JOINED, LLStyle::Params())); -		item_styles_params_map.insert(std::make_pair(IS_VOICE_LEFT, LLStyle::Params())); -		item_styles_params_map.insert(std::make_pair(IS_ONLINE, LLStyle::Params())); -		item_styles_params_map.insert(std::make_pair(IS_OFFLINE, LLStyle::Params())); -	} -	if (params_panel) params_panel->die(); - -	return item_styles_params_map; -} - -// static  LLAvatarListItem::icon_color_map_t& LLAvatarListItem::getItemIconColorMap()  {  	static icon_color_map_t item_icon_color_map; diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index 61c0a8660e..426d80e0a8 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -46,6 +46,18 @@ class LLAvatarIconCtrl;  class LLAvatarListItem : public LLPanel, public LLFriendObserver  {  public: +	struct Params : public LLInitParam::Block<Params, LLPanel::Params> +	{ +		Optional<LLStyle::Params>	default_style, +									voice_call_invited_style, +									voice_call_joined_style, +									voice_call_left_style, +									online_style, +									offline_style; + +		Params(); +	}; +  	typedef enum e_item_state_type {  		IS_DEFAULT,  		IS_VOICE_INVITED, @@ -143,9 +155,6 @@ private:  	std::string formatSeconds(U32 secs); -	typedef std::map<EItemState, LLStyle::Params> item_style_map_t; -	static item_style_map_t& getItemStylesParams(); -  	typedef std::map<EItemState, LLColor4> icon_color_map_t;  	static icon_color_map_t& getItemIconColorMap(); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index d0108c1b1c..d11859767f 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -518,7 +518,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  			chatters += *it;  			if (++it != mUnreadChatSources.end())  			{ -				chatters += ","; +				chatters += ", ";  			}  		}  		LLStringUtil::format_map_t args; diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 9f6412c0ab..e0a9e080fa 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -169,8 +169,7 @@ void LLExpandableTextBox::LLTextBoxEx::showExpandText()  		std::pair<S32, S32> visible_lines = getVisibleLines(true);  		S32 last_line = visible_lines.second - 1; -		LLStyle::Params expander_style = getDefaultStyle(); -		expander_style.font.name(LLFontGL::nameFromFont(expander_style.font)); +		LLStyle::Params expander_style(getDefaultStyleParams());  		expander_style.font.style = "UNDERLINE";  		expander_style.color = LLUIColorTable::instance().getColor("HTMLLinkColor");  		LLExpanderSegment* expanderp = new LLExpanderSegment(new LLStyle(expander_style), getLineStart(last_line), getLength() + 1, mExpanderLabel, *this); @@ -186,8 +185,8 @@ void LLExpandableTextBox::LLTextBoxEx::hideExpandText()  	if (mExpanderVisible)  	{  		// this will overwrite the expander segment and all text styling with a single style -		LLNormalTextSegment* segmentp = new LLNormalTextSegment( -											new LLStyle(getDefaultStyle()), 0, getLength() + 1, *this); +		LLStyleConstSP sp(new LLStyle(getDefaultStyleParams())); +		LLNormalTextSegment* segmentp = new LLNormalTextSegment(sp, 0, getLength() + 1, *this);  		insertSegment(segmentp);  		mExpanderVisible = false; diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp index 2e0ae3265e..f3c6b286ab 100644 --- a/indra/newview/llfloaterhelpbrowser.cpp +++ b/indra/newview/llfloaterhelpbrowser.cpp @@ -85,13 +85,22 @@ void LLFloaterHelpBrowser::onClose(bool app_quitting)  void LLFloaterHelpBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)  { -	if(event == MEDIA_EVENT_LOCATION_CHANGED) +	switch (event)   	{ +	case MEDIA_EVENT_LOCATION_CHANGED:  		setCurrentURL(self->getLocation()); -	} -	else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE) -	{ -		// nothing yet +		break; + +	case MEDIA_EVENT_NAVIGATE_BEGIN: +		childSetText("status_text", getString("loading_text")); +		break; +		 +	case MEDIA_EVENT_NAVIGATE_COMPLETE: +		childSetText("status_text", getString("done_text")); +		break; + +	default: +		break;  	}  } diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index 568f4b254e..051ab585e2 100644 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -142,8 +142,8 @@ void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation )  	// Rotation is in radians.  	// Rotation of 0 means x = 1, y = 0 on the unit circle. -	F32 map_half_height = (F32)(getRect().getHeight() / 2); -	F32 map_half_width = (F32)(getRect().getWidth() / 2); +	F32 map_half_height = (F32)(getRect().getHeight() / 2) - getHeaderHeight()/2; +	F32 map_half_width = (F32)(getRect().getWidth() / 2) ;  	F32 text_half_height = (F32)(text_box->getRect().getHeight() / 2);  	F32 text_half_width = (F32)(text_box->getRect().getWidth() / 2);  	F32 radius = llmin( map_half_height - text_half_height, map_half_width - text_half_width ); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index a0031f0193..b6e9fb3f6c 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -2084,6 +2084,10 @@ void LLFloaterSnapshot::draw()  			S32 offset_x = (getRect().getWidth() - previewp->getThumbnailWidth()) / 2 ;  			S32 offset_y = thumbnail_rect.mBottom + (thumbnail_rect.getHeight() - previewp->getThumbnailHeight()) / 2 ; +			if (! gSavedSettings.getBOOL("AdvanceSnapshot")) +			{ +				offset_y += getUIWinHeightShort() - getUIWinHeightLong(); +			}  			glMatrixMode(GL_MODELVIEW);  			gl_draw_scaled_image(offset_x, offset_y,  diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 645f8ef054..c6e12476bd 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -1091,7 +1091,9 @@ void LLFloaterUIPreview::onClickEditFloater()  		char *args2 = new char[args.size() + 1];	// Windows requires that the second parameter to CreateProcessA be a writable (non-const) string...  		strcpy(args2, args.c_str()); -		if(!CreateProcessA(exe_path.c_str(), args2, NULL, NULL, FALSE, 0, NULL, exe_dir.c_str(), &sinfo, &pinfo)) +		// we don't want the current directory to be the executable directory, since the file path is now relative. By using +		// NULL for the current directory instead of exe_dir.c_str(), the path to the target file will work.  +		if(!CreateProcessA(exe_path.c_str(), args2, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo))  		{  			// DWORD dwErr = GetLastError();  			std::string warning = "Creating editor process failed!"; diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index e94e875bad..753e0c71a6 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -509,6 +509,20 @@ void LLIMFloater::setVisible(BOOL visible)  	}  } +BOOL LLIMFloater::getVisible() +{ +	if(isChatMultiTab()) +	{ +		LLIMFloaterContainer* im_container = LLIMFloaterContainer::getInstance(); +		// Tabbed IM window is "visible" when we minimize it. +		return !im_container->isMinimized() && im_container->getVisible(); +	} +	else +	{ +		return LLTransientDockableFloater::getVisible(); +	} +} +  //static  bool LLIMFloater::toggle(const LLUUID& session_id)  { @@ -584,6 +598,9 @@ void LLIMFloater::updateMessages()  	{  //		LLUIColor chat_color = LLUIColorTable::instance().getColor("IMChatColor"); +		LLSD chat_args; +		chat_args["use_plain_text_chat_history"] = use_plain_text_chat_history; +  		std::ostringstream message;  		std::list<LLSD>::const_reverse_iterator iter = messages.rbegin();  		std::list<LLSD>::const_reverse_iterator iter_end = messages.rend(); @@ -613,7 +630,7 @@ void LLIMFloater::updateMessages()  				chat.mText = message;  			} -			mChatHistory->appendMessage(chat, use_plain_text_chat_history); +			mChatHistory->appendMessage(chat, chat_args);  			mLastMessageIndex = msg["index"].asInteger();  		}  	} diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index 9552b30737..2f034d02b8 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -58,6 +58,7 @@ public:  	// LLView overrides  	/*virtual*/ BOOL postBuild();  	/*virtual*/ void setVisible(BOOL visible); +	/*virtual*/ BOOL getVisible();  	// Check typing timeout timer.  	/*virtual*/ void draw(); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index a82d7e53ab..d2155d58f9 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1467,6 +1467,7 @@ LLCallDialog::LLCallDialog(const LLSD& payload)  	  mPayload(payload),  	  mLifetime(DEFAULT_LIFETIME)  { +	setAutoFocus(FALSE);  }  void LLCallDialog::getAllowedRect(LLRect& rect) @@ -1798,7 +1799,7 @@ BOOL LLIncomingCallDialog::postBuild()  	childSetAction("Accept", onAccept, this);  	childSetAction("Reject", onReject, this);  	childSetAction("Start IM", onStartIM, this); -	childSetFocus("Accept"); +	setDefaultBtn("Accept");  	std::string notify_box_type = mPayload["notify_box_type"].asString();  	if(notify_box_type != "VoiceInviteGroup" && notify_box_type != "VoiceInviteAdHoc") @@ -2425,7 +2426,7 @@ void LLIMMgr::inviteToSession(  		}  		else  		{ -			LLFloaterReg::showInstance("incoming_call", payload, TRUE); +			LLFloaterReg::showInstance("incoming_call", payload, FALSE);  		}  		mPendingInvitations[session_id.asString()] = LLSD();  	} @@ -2438,7 +2439,7 @@ void LLIMMgr::onInviteNameLookup(LLSD payload, const LLUUID& id, const std::stri  	std::string notify_box_type = payload["notify_box_type"].asString(); -	LLFloaterReg::showInstance("incoming_call", payload, TRUE); +	LLFloaterReg::showInstance("incoming_call", payload, FALSE);  }  //*TODO disconnects all sessions diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index e04d3ec5a0..e8a4899a0b 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4634,6 +4634,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  			{  				case LLAssetType::AT_CLOTHING:  					items.push_back(std::string("Take Off")); +					// Fallthrough since clothing and bodypart share wear options  				case LLAssetType::AT_BODYPART:  					if (get_is_item_worn(item->getUUID()))  					{ diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 6c8b786d19..b04fe4c007 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -721,14 +721,12 @@ void LLLocationInputCtrl::refreshParcelIcons()  		}  		bool allow_buy      = vpm->canAgentBuyParcel(current_parcel, false); -		bool allow_voice	= agent_region->isVoiceEnabled() && current_parcel->getParcelFlagAllowVoice(); -		bool allow_fly		= !agent_region->getBlockFly() && current_parcel->getAllowFly(); -		bool allow_push		= !agent_region->getRestrictPushObject() && !current_parcel->getRestrictPushObject(); -		bool allow_build	= current_parcel->getAllowModify(); // true when anyone is allowed to build. See EXT-4610. -		bool allow_scripts	= !(agent_region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) && -							  !(agent_region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) && -							  current_parcel->getAllowOtherScripts(); -		bool allow_damage	= agent_region->getAllowDamage() || current_parcel->getAllowDamage(); +		bool allow_voice	= vpm->allowAgentVoice(agent_region, current_parcel); +		bool allow_fly		= vpm->allowAgentFly(agent_region, current_parcel); +		bool allow_push		= vpm->allowAgentPush(agent_region, current_parcel); +		bool allow_build	= vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610. +		bool allow_scripts	= vpm->allowAgentScripts(agent_region, current_parcel); +		bool allow_damage	= vpm->allowAgentDamage(agent_region, current_parcel);  		// Most icons are "block this ability"  		mForSaleBtn->setVisible(allow_buy); diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 9f04558d50..8c875c9b63 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -162,7 +162,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)  				localRectToScreen(cell_rect, &sticky_rect);  				// Spawn at right side of cell -				LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop ); +				LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop + (sticky_rect.getHeight()-16)/2 );  				LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small");  				// Should we show a group or an avatar inspector? diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index 16218f6d53..e2a748a1c5 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -153,7 +153,7 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi  {  	const std::string name = LLHandlerUtil::getSubstitutionName(notification); -	const std::string session_name = notification->getPayload().has( +	std::string session_name = notification->getPayload().has(  			"SESSION_NAME") ? notification->getPayload()["SESSION_NAME"].asString() : name;  	// don't create IM p2p session with objects, it's necessary condition to log @@ -162,6 +162,12 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi  	{  		LLUUID from_id = notification->getPayload()["from_id"]; +		//*HACK for ServerObjectMessage the sesson name is really weird, see EXT-4779 +		if (SERVER_OBJECT_MESSAGE == notification->getName()) +		{ +			session_name = "chat"; +		} +  		if(to_file_only)  		{  			logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(), diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index 3b42fc1508..26509e0328 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -251,6 +251,11 @@ void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id)  {  	if (speaker_id.isNull() || speaker_id == mSpeakerId) return; +	if (mSpeakerId.notNull()) +	{ +		// Unregister previous registration to avoid crash. EXT-4782. +		LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); +	}  	mSpeakerId = speaker_id;  	LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this); diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 906f091090..1bc7f7a499 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -223,7 +223,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	LLComboBox* combo = getChild<LLComboBox>("start_location_combo"); -	if(!LLStartUp::getStartSLURL().isValid()) +	if(!LLStartUp::getStartSLURL().isLocation())  	{  		LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation")));  	} diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 9b31ef23a2..9e5f9da0ea 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -340,8 +340,10 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  	std::string on = getString("on");  	std::string off = getString("off"); +	LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance(); +  	// Processing parcel characteristics -	if (region->isVoiceEnabled() && parcel->getParcelFlagAllowVoice()) +	if (vpm->allowAgentVoice(region, parcel))  	{  		mVoiceIcon->setValue(icon_voice);  		mVoiceText->setText(on); @@ -352,7 +354,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mVoiceText->setText(off);  	} -	if (!region->getBlockFly() && parcel->getAllowFly()) +	if (vpm->allowAgentFly(region, parcel))  	{  		mFlyIcon->setValue(icon_fly);  		mFlyText->setText(on); @@ -363,18 +365,18 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mFlyText->setText(off);  	} -	if (region->getRestrictPushObject() || parcel->getRestrictPushObject()) +	if (vpm->allowAgentPush(region, parcel))  	{ -		mPushIcon->setValue(icon_push_no); -		mPushText->setText(off); +		mPushIcon->setValue(icon_push); +		mPushText->setText(on);  	}  	else  	{ -		mPushIcon->setValue(icon_push); -		mPushText->setText(on); +		mPushIcon->setValue(icon_push_no); +		mPushText->setText(off);  	} -	if (parcel->getAllowModify()) +	if (vpm->allowAgentBuild(parcel))  	{  		mBuildIcon->setValue(icon_build);  		mBuildText->setText(on); @@ -385,20 +387,18 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mBuildText->setText(off);  	} -	if ((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) || -	    (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) || -	    !parcel->getAllowOtherScripts()) +	if (vpm->allowAgentScripts(region, parcel))  	{ -		mScriptsIcon->setValue(icon_scripts_no); -		mScriptsText->setText(off); +		mScriptsIcon->setValue(icon_scripts); +		mScriptsText->setText(on);  	}  	else  	{ -		mScriptsIcon->setValue(icon_scripts); -		mScriptsText->setText(on); +		mScriptsIcon->setValue(icon_scripts_no); +		mScriptsText->setText(off);  	} -	if (region->getAllowDamage() || parcel->getAllowDamage()) +	if (vpm->allowAgentDamage(region, parcel))  	{  		mDamageIcon->setValue(icon_damage);  		mDamageText->setText(on); @@ -461,12 +461,8 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  	S32 claim_price;  	S32 rent_price;  	F32 dwell; -	BOOL for_sale = parcel->getForSale(); -	LLViewerParcelMgr::getInstance()->getDisplayInfo(&area, -													 &claim_price, -													 &rent_price, -													 &for_sale, -													 &dwell); +	BOOL for_sale; +	vpm->getDisplayInfo(&area, &claim_price, &rent_price, &for_sale, &dwell);  	if (for_sale)  	{  		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID(); diff --git a/indra/newview/llslurl.h b/indra/newview/llslurl.h index c12ace17fd..b3d15f5eb8 100644 --- a/indra/newview/llslurl.h +++ b/indra/newview/llslurl.h @@ -86,6 +86,7 @@ public:  	LLSD        getAppPath() const { return mAppPath; }  	bool        isValid() const { return mType != INVALID; } +	bool        isLocation() const { return (mType == LAST_LOCATION) || (mType == HOME_LOCATION) || (mType == LOCATION); }  	bool operator==(const LLSLURL& rhs);  	bool operator!=(const LLSLURL&rhs); diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp index 0aeef6ac40..aaceda4325 100644 --- a/indra/newview/llspeakingindicatormanager.cpp +++ b/indra/newview/llspeakingindicatormanager.cpp @@ -114,6 +114,13 @@ private:  	void switchSpeakerIndicators(const speaker_ids_t& speakers_uuids, BOOL switch_on);  	/** +	 * Ensures that passed instance of Speaking Indicator does not exist among registered ones. +	 * If yes, it will be removed. +	 */ +	void ensureInstanceDoesNotExist(LLSpeakingIndicator* const speaking_indicator); + + +	/**  	 * Multimap with all registered speaking indicators  	 */  	speaking_indicators_mmap_t mSpeakingIndicators; @@ -135,7 +142,11 @@ void SpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_i  {  	// do not exclude agent's indicators. They should be processed in the same way as others. See EXT-3889. -	LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << LL_ENDL; +	LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << "|"<< speaking_indicator << LL_ENDL; + + +	ensureInstanceDoesNotExist(speaking_indicator); +  	speaking_indicator_value_t value_type(speaker_id, speaking_indicator);  	mSpeakingIndicators.insert(value_type); @@ -148,12 +159,14 @@ void SpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_i  void SpeakingIndicatorManager::unregisterSpeakingIndicator(const LLUUID& speaker_id, const LLSpeakingIndicator* const speaking_indicator)  { +	LL_DEBUGS("SpeakingIndicator") << "Unregistering indicator: " << speaker_id << "|"<< speaking_indicator << LL_ENDL;  	speaking_indicators_mmap_t::iterator it;  	it = mSpeakingIndicators.find(speaker_id);  	for (;it != mSpeakingIndicators.end(); ++it)  	{  		if (it->second == speaking_indicator)  		{ +			LL_DEBUGS("SpeakingIndicator") << "Unregistered." << LL_ENDL;  			mSpeakingIndicators.erase(it);  			break;  		} @@ -231,6 +244,32 @@ void SpeakingIndicatorManager::switchSpeakerIndicators(const speaker_ids_t& spea  	}  } +void SpeakingIndicatorManager::ensureInstanceDoesNotExist(LLSpeakingIndicator* const speaking_indicator) +{ +	LL_DEBUGS("SpeakingIndicator") << "Searching for an registered indicator instance: " << speaking_indicator << LL_ENDL; +	speaking_indicators_mmap_t::iterator it = mSpeakingIndicators.begin(); +	for (;it != mSpeakingIndicators.end(); ++it) +	{ +		if (it->second == speaking_indicator) +		{ +			LL_DEBUGS("SpeakingIndicator") << "Found" << LL_ENDL; +			break; +		} +	} + +	// It is possible with LLOutputMonitorCtrl the same instance of indicator is registered several +	// times with different UUIDs. This leads to crash after instance is destroyed because the +	// only one (specified by UUID in unregisterSpeakingIndicator()) is removed from the map. +	// So, using stored deleted pointer leads to crash. See EXT-4782. +	if (it != mSpeakingIndicators.end()) +	{ +		llwarns << "The same instance of indicator has already been registered, removing it: " << it->first << "|"<< speaking_indicator << llendl; +		llassert(it == mSpeakingIndicators.end()); +		mSpeakingIndicators.erase(it); +	} +} + +  /************************************************************************/  /*         LLSpeakingIndicatorManager namespace implementation          */  /************************************************************************/ diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 49caaf18f3..e63653769e 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -242,10 +242,29 @@ void audio_update_wind(bool force_update)  		// outside the fade-in.  		F32 master_volume  = gSavedSettings.getBOOL("MuteAudio") ? 0.f : gSavedSettings.getF32("AudioLevelMaster");  		F32 ambient_volume = gSavedSettings.getBOOL("MuteAmbient") ? 0.f : gSavedSettings.getF32("AudioLevelAmbient"); +		F32 max_wind_volume = master_volume * ambient_volume; -		F32 wind_volume = master_volume * ambient_volume; -		gAudiop->mMaxWindGain = wind_volume; -		 +		const F32 WIND_SOUND_TRANSITION_TIME = 2.f; +		// amount to change volume this frame +		F32 volume_delta = (LLFrameTimer::getFrameDeltaTimeF32() / WIND_SOUND_TRANSITION_TIME) * max_wind_volume; +		if (force_update)  +		{ +			// initialize wind volume (force_update) by using large volume_delta +			// which is sufficient to completely turn off or turn on wind noise +			volume_delta = max_wind_volume; +		} + +		// mute wind when not flying +		if (gAgent.getFlying()) +		{ +			// volume increases by volume_delta, up to no more than max_wind_volume +			gAudiop->mMaxWindGain = llmin(gAudiop->mMaxWindGain + volume_delta, max_wind_volume); +		} +		else +		{ +			// volume decreases by volume_delta, down to no less than 0 +			gAudiop->mMaxWindGain = llmax(gAudiop->mMaxWindGain - volume_delta, 0.f); +		}  		last_camera_water_height = camera_water_height;  		gAudiop->updateWind(gRelativeWindVec, camera_water_height); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 62928e9275..d95450e506 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -870,8 +870,7 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f  		////////////////////////////////////////////////////////////////////////////////  		// Don't highlight if it's in certain "quiet" folders which don't need UI   		// notification (e.g. trash, cof, lost-and-found). -		const BOOL user_is_away = gAwayTimer.getStarted(); -		if(!user_is_away) +		if(!gAgent.getAFK())  		{  			const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);  			if (parent) diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index b85b42c710..7ec650629d 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -666,31 +666,38 @@ bool LLViewerParcelMgr::allowAgentBuild() const  	}  } +// Return whether anyone can build on the given parcel +bool LLViewerParcelMgr::allowAgentBuild(const LLParcel* parcel) const +{ +	return parcel->getAllowModify(); +} +  bool LLViewerParcelMgr::allowAgentVoice() const  { -	LLViewerRegion* region = gAgent.getRegion(); +	return allowAgentVoice(gAgent.getRegion(), mAgentParcel); +} + +bool LLViewerParcelMgr::allowAgentVoice(const LLViewerRegion* region, const LLParcel* parcel) const +{  	return region && region->isVoiceEnabled() -		&& mAgentParcel	&& mAgentParcel->getParcelFlagAllowVoice(); +		&& parcel	&& parcel->getParcelFlagAllowVoice();  } -bool LLViewerParcelMgr::allowAgentFly() const +bool LLViewerParcelMgr::allowAgentFly(const LLViewerRegion* region, const LLParcel* parcel) const  { -	LLViewerRegion* region = gAgent.getRegion();  	return region && !region->getBlockFly() -		&& mAgentParcel && mAgentParcel->getAllowFly(); +		&& parcel && parcel->getAllowFly();  }  // Can the agent be pushed around by LLPushObject? -bool LLViewerParcelMgr::allowAgentPush() const +bool LLViewerParcelMgr::allowAgentPush(const LLViewerRegion* region, const LLParcel* parcel) const  { -	LLViewerRegion* region = gAgent.getRegion();  	return region && !region->getRestrictPushObject() -		&& mAgentParcel && !mAgentParcel->getRestrictPushObject(); +		&& parcel && !parcel->getRestrictPushObject();  } -bool LLViewerParcelMgr::allowAgentScripts() const +bool LLViewerParcelMgr::allowAgentScripts(const LLViewerRegion* region, const LLParcel* parcel) const  { -	LLViewerRegion* region = gAgent.getRegion();  	// *NOTE: This code does not take into account group-owned parcels  	// and the flag to allow group-owned scripted objects to run.  	// This mirrors the traditional menu bar parcel icon code, but is not @@ -698,15 +705,14 @@ bool LLViewerParcelMgr::allowAgentScripts() const  	return region  		&& !(region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS)  		&& !(region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) -		&& mAgentParcel -		&& mAgentParcel->getAllowOtherScripts(); +		&& parcel +		&& parcel->getAllowOtherScripts();  } -bool LLViewerParcelMgr::allowAgentDamage() const +bool LLViewerParcelMgr::allowAgentDamage(const LLViewerRegion* region, const LLParcel* parcel) const  { -	LLViewerRegion* region = gAgent.getRegion();  	return (region && region->getAllowDamage()) -		|| (mAgentParcel && mAgentParcel->getAllowDamage()); +		|| (parcel && parcel->getAllowDamage());  }  BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 379190789b..98be8e2c7b 100644 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -171,26 +171,28 @@ public:  	// Can this agent build on the parcel he is on?  	// Used for parcel property icons in nav bar.  	bool	allowAgentBuild() const; +	bool	allowAgentBuild(const LLParcel* parcel) const;  	// Can this agent speak on the parcel he is on?  	// Used for parcel property icons in nav bar.  	bool	allowAgentVoice() const; -	 +	bool	allowAgentVoice(const LLViewerRegion* region, const LLParcel* parcel) const; +  	// Can this agent start flying on this parcel?  	// Used for parcel property icons in nav bar. -	bool	allowAgentFly() const; +	bool	allowAgentFly(const LLViewerRegion* region, const LLParcel* parcel) const;  	// Can this agent be pushed by llPushObject() on this parcel?  	// Used for parcel property icons in nav bar. -	bool	allowAgentPush() const; +	bool	allowAgentPush(const LLViewerRegion* region, const LLParcel* parcel) const;  	// Can scripts written by non-parcel-owners run on the agent's current  	// parcel?  Used for parcel property icons in nav bar. -	bool	allowAgentScripts() const; +	bool	allowAgentScripts(const LLViewerRegion* region, const LLParcel* parcel) const;  	// Can the agent be damaged here?  	// Used for parcel property icons in nav bar. -	bool	allowAgentDamage() const; +	bool	allowAgentDamage(const LLViewerRegion* region, const LLParcel* parcel) const;  	F32		getHoverParcelWidth() const		  				{ return F32(mHoverEastNorth.mdV[VX] - mHoverWestSouth.mdV[VX]); } diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 2e92512b31..ea8af223c3 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -246,7 +246,7 @@ public:  		return FALSE;   	} -	/*virtual*/ const LLStyleSP		getStyle() const { return mStyle; } +	/*virtual*/ LLStyleConstSP		getStyle() const { return mStyle; }  private:  	LLUIImagePtr	mImage; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 0c756d122c..32bd623bd9 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -51,6 +51,7 @@  #include "llviewquery.h"  #include "llxmltree.h" +#include "llslurl.h"  //#include "llviewercamera.h"  #include "llrender.h" @@ -80,6 +81,8 @@  #include "timing.h"  #include "llviewermenu.h"  #include "lltooltip.h" +#include "llmediaentry.h" +#include "llurldispatcher.h"  // newview includes  #include "llagent.h" @@ -795,6 +798,132 @@ BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window,  LLCoordGL pos, MAS    	// Always handled as far as the OS is concerned.  	return TRUE;  } + +LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *window, LLCoordGL pos, MASK mask, LLWindowCallbacks::DragNDropAction action, std::string data) +{ +	LLWindowCallbacks::DragNDropResult result = LLWindowCallbacks::DND_NONE; + +	const bool prim_media_dnd_enabled = gSavedSettings.getBOOL("PrimMediaDragNDrop"); +	const bool slurl_dnd_enabled = gSavedSettings.getBOOL("SLURLDragNDrop"); +	 +	if ( prim_media_dnd_enabled || slurl_dnd_enabled ) +	{ +		switch(action) +		{ +			// Much of the handling for these two cases is the same. +			case LLWindowCallbacks::DNDA_TRACK: +			case LLWindowCallbacks::DNDA_DROPPED: +			case LLWindowCallbacks::DNDA_START_TRACKING: +			{ +				bool drop = (LLWindowCallbacks::DNDA_DROPPED == action); +					 +				if (slurl_dnd_enabled) +				{ +				  LLSLURL dropped_slurl(data); +				  if(dropped_slurl.isLocation()) +				    if (drop) +				      { +					LLURLDispatcher::dispatch( dropped_slurl.getSLURLString(), NULL, true ); +					return LLWindowCallbacks::DND_MOVE; +				      }; +				} + +				if (prim_media_dnd_enabled) +				{ +					LLPickInfo pick_info = pickImmediate( pos.mX, pos.mY,  TRUE /*BOOL pick_transparent*/ ); + +					LLUUID object_id = pick_info.getObjectID(); +					S32 object_face = pick_info.mObjectFace; +					std::string url = data; + +					lldebugs << "Object: picked at " << pos.mX << ", " << pos.mY << " - face = " << object_face << " - URL = " << url << llendl; + +					LLVOVolume *obj = dynamic_cast<LLVOVolume*>(static_cast<LLViewerObject*>(pick_info.getObject())); +				 +					if (obj && obj->permModify() && !obj->getRegion()->getCapability("ObjectMedia").empty()) +					{ +						LLTextureEntry *te = obj->getTE(object_face); +						if (te) +						{ +							if (drop) +							{ +								if (! te->hasMedia()) +								{ +									// Create new media entry +									LLSD media_data; +									// XXX Should we really do Home URL too? +									media_data[LLMediaEntry::HOME_URL_KEY] = url; +									media_data[LLMediaEntry::CURRENT_URL_KEY] = url; +									media_data[LLMediaEntry::AUTO_PLAY_KEY] = true; +									obj->syncMediaData(object_face, media_data, true, true); +									// XXX This shouldn't be necessary, should it ?!? +									if (obj->getMediaImpl(object_face)) +										obj->getMediaImpl(object_face)->navigateReload(); +									obj->sendMediaDataUpdate(); +								 +									result = LLWindowCallbacks::DND_COPY; +								} +								else { +									// Check the whitelist +									if (te->getMediaData()->checkCandidateUrl(url)) +									{ +										// just navigate to the URL +										if (obj->getMediaImpl(object_face)) +										{ +											obj->getMediaImpl(object_face)->navigateTo(url); +										} +										else { +											// This is very strange.  Navigation should +											// happen via the Impl, but we don't have one. +											// This sends it to the server, which /should/ +											// trigger us getting it.  Hopefully. +											LLSD media_data; +											media_data[LLMediaEntry::CURRENT_URL_KEY] = url; +											obj->syncMediaData(object_face, media_data, true, true); +											obj->sendMediaDataUpdate(); +										} +										result = LLWindowCallbacks::DND_LINK; +									} +								} +								LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject); +								mDragHoveredObject = NULL; +							 +							} +							else { +								// Check the whitelist, if there's media (otherwise just show it) +								if (te->getMediaData() == NULL || te->getMediaData()->checkCandidateUrl(url)) +								{ +									if ( obj != mDragHoveredObject) +									{ +										// Highlight the dragged object +										LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject); +										mDragHoveredObject = obj; +										LLSelectMgr::getInstance()->highlightObjectOnly(mDragHoveredObject); +									} +									result = (! te->hasMedia()) ? LLWindowCallbacks::DND_COPY : LLWindowCallbacks::DND_LINK; +								} +							} +						} +					} +				} +			} +			break; +			 +			case LLWindowCallbacks::DNDA_STOP_TRACKING: +				// The cleanup case below will make sure things are unhilighted if necessary. +			break; +		} + +		if (prim_media_dnd_enabled && +			result == LLWindowCallbacks::DND_NONE && !mDragHoveredObject.isNull()) +		{ +			LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject); +			mDragHoveredObject = NULL; +		} +	} +	 +	return result; +}  BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask)  { diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index c0a9180b53..98d2958d9a 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -166,7 +166,8 @@ public:  	/*virtual*/ BOOL handleRightMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask);  	/*virtual*/ BOOL handleMiddleMouseDown(LLWindow *window,  LLCoordGL pos, MASK mask);  	/*virtual*/ BOOL handleMiddleMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask); -	/*virtual*/ void handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask); +	/*virtual*/ LLWindowCallbacks::DragNDropResult handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, LLWindowCallbacks::DragNDropAction action, std::string data); +				void handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask);  	/*virtual*/ void handleMouseLeave(LLWindow *window);  	/*virtual*/ void handleResize(LLWindow *window,  S32 x,  S32 y);  	/*virtual*/ void handleFocus(LLWindow *window); @@ -472,6 +473,10 @@ protected:  	static std::string sSnapshotDir;  	static std::string sMovieBaseName; +	 +private: +	// Object temporarily hovered over while dragging +	LLPointer<LLViewerObject>	mDragHoveredObject;  };	  void toggle_flying(void*); diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 73c9065a06..d16f59b844 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -2588,7 +2588,7 @@ void LLVivoxVoiceClient::buildLocalAudioUpdates(std::ostringstream &stream)  	if(mSpeakerMuteDirty)  	{ -		const char *muteval = ((mSpeakerVolume == 0)?"true":"false"); +	  const char *muteval = ((mSpeakerVolume <= scale_speaker_volume(0))?"true":"false");  		mSpeakerMuteDirty = false; @@ -5149,7 +5149,8 @@ void LLVivoxVoiceClient::setVoiceVolume(F32 volume)  	if(scaled_volume != mSpeakerVolume)  	{ -		if((scaled_volume == 0) || (mSpeakerVolume == 0)) +	  int min_volume = scale_speaker_volume(0); +		if((scaled_volume == min_volume) || (mSpeakerVolume == min_volume))  		{  			mSpeakerMuteDirty = true;  		} diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 219b3dbeb6..ec196245a1 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -47,7 +47,7 @@  	<color  	 name="Black"  	 value="0 0 0 1" /> -	<color +	<colork  	 name="Black_10"  	 value="0 0 0 0.1" />  	<color @@ -77,6 +77,16 @@  	<color  	name="Purple"  	value="1 0 1 1" /> +	<color +	name="Lime" +	value=".8 1 .73 1" /> +	<color +	name="LtYellow" +	value="1 1 .79 1" /> +	<color +	name="LtOrange" +	value="1 .85 .73 1" /> +    <!-- This color name makes potentially unused colors show up bright purple.    Leave this here until all Unused? are removed below, otherwise    the viewer generates many warnings on startup. --> @@ -97,7 +107,7 @@       value="1 0.82 0.46 1" />      <color       name="AlertCautionTextColor" -     reference="Yellow" /> +     reference="LtYellow" />      <color       name="AgentLinkColor"       reference="White" /> @@ -226,10 +236,10 @@       reference="White" />      <color       name="ColorPaletteEntry16" -     reference="White" /> +     reference="LtYellow" />      <color       name="ColorPaletteEntry17" -     reference="White" /> +     reference="LtGreen" />      <color       name="ColorPaletteEntry18"       reference="LtGray" /> @@ -544,7 +554,7 @@       reference="White" />      <color       name="ObjectChatColor" -     reference="EmphasisColor" /> +     reference="EmphasisColor_35" />      <color       name="OverdrivenColor"       reference="Red" /> @@ -592,7 +602,7 @@       value="0.39 0.39 0.39 1" />      <color       name="ScriptErrorColor" -     value="0.82 0.27 0.27 1" /> +     value="Red" />      <color       name="ScrollBGStripeColor"       reference="Transparent" /> @@ -649,7 +659,7 @@       reference="FrogGreen" />      <color       name="SystemChatColor" -     reference="White" /> +     reference="LtGray" />      <color       name="TextBgFocusColor"       reference="White" /> @@ -703,7 +713,7 @@       reference="White" />      <color       name="llOwnerSayChatColor" -     reference="LtGray" /> +     reference="LtYellow" />      <!-- New Colors -->      <color diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.pngBinary files differ index 28ff6ba976..9e7291d6fb 100644 --- a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.pngBinary files differ index 0455a52fdc..e0b18b2451 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.pngBinary files differ index be0c379d84..101aaa42b1 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png +++ b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.pngBinary files differ index ed4a512e04..c27f18e3c7 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_M_Dark.pngBinary files differ index 2f5871b8ff..60e6a00a25 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Light.png b/indra/newview/skins/default/textures/icons/Parcel_M_Light.pngBinary files differ index 724ac22744..55f97f3b4e 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_M_Light.png +++ b/indra/newview/skins/default/textures/icons/Parcel_M_Light.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.pngBinary files differ index f0565f02dd..11ab1f1e60 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Light.pngBinary files differ index f32b0570a1..b536762ddc 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png +++ b/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_R_Dark.pngBinary files differ index e0e6e14cca..bf618752f6 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Light.png b/indra/newview/skins/default/textures/icons/Parcel_R_Light.pngBinary files differ index efca6776da..a67bbd0cc5 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_R_Light.png +++ b/indra/newview/skins/default/textures/icons/Parcel_R_Light.png diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml index c8f6c613af..4fc2b698d8 100644 --- a/indra/newview/skins/default/xui/en/floater_beacons.xml +++ b/indra/newview/skins/default/xui/en/floater_beacons.xml @@ -25,7 +25,7 @@           name="label_show"           text_color="White"           type="string"> -            Show: +            Show :           </text>          <check_box           control_name="renderbeacons" @@ -117,6 +117,7 @@          <check_box           control_name="soundsbeacon"           height="16" +         left="0"           label="Sound sources"           layout="topleft"           name="sounds" > 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 0daef29bc5..2fa112af8c 100644 --- a/indra/newview/skins/default/xui/en/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml @@ -13,20 +13,19 @@       type="string"       length="1"       follows="left|top" -     font="SansSerif" -     height="10" +     height="20"       layout="topleft" -     left="12" +     left="10"       mouse_opaque="false"       name="r_val_text" -     top="35" +     top="25"       width="413">          Red:      </text>      <spinner       decimal_digits="0"       follows="left" -     height="16" +     height="20"       increment="1"       initial_value="128"       layout="topleft" @@ -39,20 +38,18 @@       type="string"       length="1"       follows="left|top" -     font="SansSerif" -     height="10" +     height="20"       layout="topleft" -     left="12" +     left="10"       mouse_opaque="false"       name="g_val_text" -     top="56"       width="413">          Green:      </text>      <spinner       decimal_digits="0"       follows="left" -     height="16" +     height="20"       increment="1"       initial_value="128"       layout="topleft" @@ -65,20 +62,18 @@       type="string"       length="1"       follows="left|top" -     font="SansSerif" -     height="10" +     height="20"       layout="topleft" -     left="12" +     left="10"       mouse_opaque="false"       name="b_val_text" -     top="77"       width="413">          Blue:      </text>      <spinner       decimal_digits="0"       follows="left" -     height="16" +     height="20"       increment="1"       initial_value="128"       layout="topleft" @@ -91,20 +86,18 @@       type="string"       length="1"       follows="left|top" -     font="SansSerif" -     height="10" +     height="20"       layout="topleft" -     left="12" +     left="10"       mouse_opaque="false"       name="h_val_text" -     top="108"       width="413">          Hue:      </text>      <spinner       decimal_digits="0"       follows="left" -     height="16" +     height="20"       increment="1"       initial_value="180"       layout="topleft" @@ -117,20 +110,18 @@       type="string"       length="1"       follows="left|top" -     font="SansSerif" -     height="10" +     height="20"       layout="topleft" -     left="12" +     left="10"       mouse_opaque="false"       name="s_val_text" -     top="129"       width="413">          Sat:      </text>      <spinner       decimal_digits="0"       follows="left" -     height="16" +     height="20"       increment="1"       initial_value="50"       layout="topleft" @@ -143,20 +134,18 @@       type="string"       length="1"       follows="left|top" -     font="SansSerif" -     height="10" +     height="20"       layout="topleft" -     left="12" +     left="10"       mouse_opaque="false"       name="l_val_text" -     top="150"       width="413">          Lum:      </text>      <spinner       decimal_digits="0"       follows="left" -     height="16" +     height="20"       increment="1"       initial_value="50"       layout="topleft" @@ -170,11 +159,11 @@       height="20"       label="Apply now"       layout="topleft" -     left="12" +     left="10"       name="apply_immediate"       top_pad="185"       width="100" /> -         <button +    <button       follows="left|bottom"       height="28"       image_selected="eye_button_active.tga" @@ -185,7 +174,7 @@       width="28" />      <button       follows="right|bottom" -     height="20" +     height="23"       label="OK"       label_selected="OK"       layout="topleft" @@ -195,7 +184,7 @@       width="100" />      <button       follows="right|bottom" -     height="20" +     height="23"       label="Cancel"       label_selected="Cancel"       layout="topleft" @@ -209,7 +198,7 @@       follows="left|top"       height="16"       layout="topleft" -     left="12" +     left="10"       name="Current color:"       top="172"       width="110"> @@ -221,7 +210,7 @@       follows="left|top"       height="16"       layout="topleft" -     left="12" +     left="10"       name="(Drag below to save.)"       top_pad="66"       width="130"> 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 e83bc1555c..be32e917e5 100644 --- a/indra/newview/skins/default/xui/en/floater_help_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml @@ -4,8 +4,8 @@   can_resize="true"   height="480"   layout="topleft" - min_height="140" - min_width="467" + min_height="150" + min_width="500"   name="floater_help_browser"   help_topic="floater_help_browser"   save_rect="true" @@ -13,37 +13,44 @@   title="HELP BROWSER"   width="620">      <floater.string -     name="home_page_url"> -        http://www.secondlife.com +     name="loading_text"> +        Loading...      </floater.string>      <floater.string -     name="support_page_url"> -        http://support.secondlife.com +     name="done_text">      </floater.string>      <layout_stack       bottom="480"       follows="left|right|top|bottom"       layout="topleft" -     left="10" +     left="5"       name="stack1"       top="20" -     width="600"> +     width="610">          <layout_panel -         height="1"           layout="topleft"           left_delta="0" -         name="external_controls"           top_delta="0" +         name="external_controls"           user_resize="false"           width="590">              <web_browser -             bottom="-4" +             bottom="-11"               follows="left|right|top|bottom"               layout="topleft"               left="0"               name="browser"               top="0" +             height="500"               width="590" /> +            <text +             follows="bottom|left" +             height="16" +             layout="topleft" +             left_delta="2" +             name="status_text" +             top_pad="5" +             width="150" />          </layout_panel>      </layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml index ff9f0daee6..e187eabd3a 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory.xml @@ -12,11 +12,11 @@   save_rect="true"   save_visibility="true"   single_instance="false" - title="INVENTORY" + title="MY INVENTORY"   width="467">      <floater.string       name="Title"> -        Inventory +        MY INVENTORY      </floater.string>      <floater.string       name="TitleFetching"> 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 e94717fe32..990be55847 100644 --- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml @@ -5,7 +5,7 @@   border_style="line"   can_resize="true"   follows="left|top" - height="570" + height="580"   layout="topleft"   min_height="271"   min_width="290" @@ -13,7 +13,7 @@   help_topic="script_ed_float"   save_rect="true"   title="SCRIPT: NEW SCRIPT" - width="500"> + width="508">      <floater.string       name="not_allowed">          You can not view or edit this script, since it has been set as "no copy". You need full permissions to view or edit a script inside an object. @@ -24,19 +24,31 @@      </floater.string>      <floater.string       name="Title"> -        Script: [NAME] +        SCRIPT: [NAME]      </floater.string> +    <panel +     bevel_style="none" +      +     border_style="line" +     follows="left|top|right|bottom" +     height="522" +     layout="topleft" +     left="10" +     name="script ed panel" +     top="20" +     width="497" />      <button -     follows="right|bottom" -     height="20" +     follows="left|bottom" +     height="23"       label="Reset"       label_selected="Reset"       layout="topleft" -     left="358"       name="Reset" -     top="545" -     width="128" /> +     left="10" +     width="61" />      <check_box +    left_delta="71" +    top_delta="3"       enabled="false"       follows="left|bottom"       font="SansSerif" @@ -44,30 +56,17 @@       initial_value="true"       label="Running"       layout="topleft" -     left_delta="-350"       name="running" -     top_delta="2"       width="100" />      <check_box -     enabled="false" +    left_delta="75" +     enabled="true"       follows="left|bottom"       font="SansSerif"       height="18"       initial_value="true"       label="Mono"       layout="topleft" -     left_delta="70"       name="mono" -     top_delta="0"       width="100" /> -    <panel -     bevel_style="none" -     border_style="line" -     follows="left|top|right|bottom" -     height="506" -     layout="topleft" -     left="1" -     name="script ed panel" -     top="18" -     width="497" />  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml index 3ddb7bc349..1903e7c714 100644 --- a/indra/newview/skins/default/xui/en/floater_map.xml +++ b/indra/newview/skins/default/xui/en/floater_map.xml @@ -6,7 +6,7 @@   center_horiz="true"   center_vert="true"   follows="top|right" - height="225" + height="218"   layout="topleft"   min_height="60"   min_width="174" @@ -55,116 +55,116 @@      </floater.string>      <net_map       bg_color="NetMapBackgroundColor" -     bottom="225"       follows="top|left|bottom|right"       layout="topleft"       left="0"       mouse_opaque="false"       name="Net Map" -     right="198" -     top="2" /> +     width="200" +     height="200" +     top="18"/>      <text       type="string"       length="1" -     bottom="225" +     bottom="218"       label="N"       layout="topleft"       left="0"       name="floater_map_north"       right="10"       text_color="1 1 1 0.7" -     top="215"> +     top="209">          N      </text>      <text       type="string"       length="1" -     bottom="225" +     bottom="218"       label="E"       layout="topleft"       left="0"       name="floater_map_east"       right="10"       text_color="1 1 1 0.7" -     top="215"> +     top="209">          E      </text>      <text       type="string"       length="1" -     bottom="225" +     bottom="205"       label="W"       layout="topleft"       left="0"       name="floater_map_west"       right="11"       text_color="1 1 1 0.7" -     top="215"> +     top="195">          W      </text>      <text       type="string"       length="1" -     bottom="225" +     bottom="218"       label="S"       layout="topleft"       left="0"       name="floater_map_south"       right="10"       text_color="1 1 1 0.7" -     top="215"> +     top="209">          S      </text>      <text       type="string"       length="1" -     bottom="225" +     bottom="218"       label="SE"       layout="topleft"       left="0"       name="floater_map_southeast"       right="20"       text_color="1 1 1 0.7" -     top="215"> +     top="209">          SE      </text>      <text       type="string"       length="1" -     bottom="225" +     bottom="218"       label="NE"       layout="topleft"       left="0"       name="floater_map_northeast"       right="20"       text_color="1 1 1 0.7" -     top="215"> +     top="209">          NE      </text>      <text       type="string"       length="1" -     bottom="225" +     bottom="218"       label="SW"       layout="topleft"       left="0"       name="floater_map_southwest"       right="20"       text_color="1 1 1 0.7" -     top="215"> +     top="209">          SW      </text>      <text       type="string"       length="1" -     bottom="225" +     bottom="218"       label="NW"       layout="topleft"       left="0"       name="floater_map_northwest"       right="20"       text_color="1 1 1 0.7" -     top="215"> +     top="209">          NW      </text>  </floater> 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 bbfb362337..6dc073728b 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml @@ -38,7 +38,7 @@       width="170" />      <button       height="20" -     label="Play in World" +     label="Play Inworld"       label_selected="Stop"       layout="topleft"       left="10" 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 68a78d5017..f3be8c4131 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml @@ -38,8 +38,8 @@      <button       follows="left|top"       height="22" -     label="Play in World" -     label_selected="Play in World" +     label="Play Inworld" +     label_selected="Play Inworld"       layout="topleft"       name="Sound play btn"       sound_flags="0" 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 bb0702c353..d0cd00d147 100644 --- a/indra/newview/skins/default/xui/en/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_script_preview.xml @@ -3,26 +3,24 @@   legacy_header_height="18"   auto_tile="true"   can_resize="true" - height="550" + height="570"   layout="topleft" - left_delta="343"   min_height="271"   min_width="290"   name="preview lsl text"   help_topic="preview_lsl_text"   save_rect="true"   title="SCRIPT: ROTATION SCRIPT" - top_delta="0" - width="500"> + width="508">      <floater.string       name="Title"> -        Script: [NAME] +        SCRIPT: [NAME]      </floater.string>      <panel       follows="left|top|right|bottom" -     height="508" +     height="522"       layout="topleft" -     left="0" +     left="10"       name="script panel"       top="42"       width="497" /> 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 c828f6b284..1935edfcc1 100644 --- a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml @@ -72,83 +72,4 @@       name="font_checkbox"       top_pad="14"       width="150" /> - -<chiclet_im_p2p - height="25" - name="im_p2p_chiclet" - show_speaker="false" - width="25"> -    <chiclet_im_p2p.chiclet_button -     height="25" -     image_selected="PushButton_Selected" -     image_unselected="PushButton_Off" -     name="chiclet_button" -     tab_stop="false" -     width="25"/> -    <chiclet_im_p2p.speaker -     auto_update="true" -     draw_border="false" -     height="25" -     left="25" -     name="speaker" -     visible="false" -     width="20" /> -    <chiclet_im_p2p.avatar_icon -     bottom="3" -     follows="left|top|bottom" -     height="20" -     left="2" -     mouse_opaque="false" -     name="avatar_icon" -     width="21" /> -    <chiclet_im_p2p.unread_notifications -     height="25" -     font_halign="center" -     left="25" -     mouse_opaque="false" -     name="unread" -     text_color="white" -     v_pad="5" -     visible="false" -     width="20"/> -    <chiclet_im_p2p.new_message_icon -  bottom="11" -  height="14" -  image_name="Unread_Chiclet" -  left="12" -  name="new_message_icon" -  visible="false" -  width="14" /> -</chiclet_im_p2p> - - -<chiclet_offer - height="25" - name="offer_chiclet" - width="25"> - <chiclet_offer.chiclet_button -  height="25" -  image_selected="PushButton_Selected" -  image_unselected="PushButton_Off" -  name="chiclet_button" -  tab_stop="false" -  width="25"/> - <chiclet_offer.icon -  bottom="3" -  default_icon="Generic_Object_Small" -  follows="all" -  height="19" -  left="3" -  mouse_opaque="false" -  name="chiclet_icon" -  width="19" /> - <chiclet_offer.new_message_icon -  bottom="11" -  height="14" -  image_name="Unread_Chiclet" -  left="12" -  name="new_message_icon" -  visible="false" -  width="14" /> -</chiclet_offer>  </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 65c9c2a8fa..e1df50bf58 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -403,7 +403,7 @@        height="16"        image_name="map_track_16.tga"        layout="topleft" -      left="5" +      left="3"        top="11"        mouse_opaque="true"        name="friends_icon" @@ -415,7 +415,7 @@       label="Online Friends"       layout="topleft"       top_delta="-4" -     left_pad="5" +     left_pad="7"       max_chars="60"       name="friend combo"       tool_tip="Show friends on map" @@ -433,7 +433,7 @@       height="16"       image_name="map_track_16.tga"       layout="topleft" -     left="5" +     left="3"       top_pad="8"       mouse_opaque="true"       name="landmark_icon" @@ -445,7 +445,7 @@       label="My Landmarks"       layout="topleft"       top_delta="-3" -     left_pad="5" +     left_pad="7"       max_chars="64"       name="landmark combo"       tool_tip="Landmark to show on map" @@ -463,7 +463,7 @@       height="16"       image_name="map_track_16.tga"       layout="topleft" -     left="5" +     left="3"       top_pad="7"       mouse_opaque="true"       name="region_icon" @@ -476,7 +476,7 @@       label="Regions by Name"       layout="topleft"       top_delta="-2" -     left_pad="5" +     left_pad="7"       name="location"       select_on_focus="true"       tool_tip="Type the name of a region" @@ -497,6 +497,19 @@  		<button.commit_callback  		function="WMap.Location" />      </button> +   <button +     image_overlay="Refresh_Off" +     follows="top|right" +     height="23" +     layout="topleft" +     left="0" +     name="Clear" +     tool_tip="Clear tracking lines and reset map" +     top_pad="5" +     width="23"> +		<button.commit_callback +		function="WMap.Clear" /> +    </button>      <scroll_list       draw_stripes="false"       bg_writeable_color="MouseGray" @@ -505,7 +518,7 @@       layout="topleft"       left="28"       name="search_results" -     top_pad="5" +     top_pad="-23"       width="209"       sort_column="1">          <scroll_list.columns @@ -545,19 +558,6 @@  		<button.commit_callback  		function="WMap.CopySLURL" />      </button> -   <!-- <button -     follows="right|bottom" -     height="23" -     label="Clear" -     layout="topleft" -     left="10" -     name="Clear" -     tool_tip="Stop tracking" -     top_pad="5" -     width="105"> -		<button.commit_callback -		function="WMap.Clear" /> -    </button>-->      <button       enabled="false"       follows="right|bottom" diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 1e10467148..1993af6730 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -516,7 +516,7 @@       layout="topleft"        name="Animation Separator" />      <menu_item_call -     label="Play in World" +     label="Play Inworld"       layout="topleft"       name="Animation Play">          <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index bbe6892b27..ba74104594 100644 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -60,6 +60,7 @@          </menu_item_call>      </menu>      <menu +      visible="false"       create_jump_keys="true"       label="Debug"       name="Debug" diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml index 35518cd13b..56028bb2e5 100644 --- a/indra/newview/skins/default/xui/en/menu_object.xml +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -87,16 +87,6 @@           label="Remove >"           name="Remove">     <menu_item_call -     enabled="false" -     label="Take" -     name="Pie Object Take"> -        <menu_item_call.on_click -         function="Tools.BuyOrTake" /> -        <menu_item_call.on_enable -         function="Tools.EnableBuyOrTake" -         parameter="Buy,Take" /> -    </menu_item_call> -   <menu_item_call           enabled="false"           label="Report Abuse"           name="Report Abuse..."> @@ -134,6 +124,16 @@      </menu_item_call>      </context_menu>     <menu_item_separator layout="topleft" /> +    <menu_item_call +     enabled="false" +     label="Take" +     name="Pie Object Take"> +        <menu_item_call.on_click +         function="Tools.BuyOrTake" /> +        <menu_item_call.on_enable +         function="Tools.EnableBuyOrTake" +         parameter="Buy,Take" /> +    </menu_item_call>     <menu_item_call     enabled="false"     label="Take Copy" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index a98a049c17..7a4f63bfe4 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -662,6 +662,18 @@            <menu_item_call.on_enable               function="Tools.EnableUnlink" />          </menu_item_call> +        <menu_item_check +             label="Edit Linked Parts" +             layout="topleft" +             name="Edit Linked Parts"> +                <menu_item_check.on_check +                 control="EditLinkedParts" /> +                <menu_item_check.on_click +                 function="Tools.EditLinkedParts" +                 parameter="EditLinkedParts" /> +                <menu_item_check.on_enable +                 function="Tools.EnableToolNotPie" /> +            </menu_item_check>          <menu_item_separator             layout="topleft" />          <menu_item_call @@ -799,18 +811,6 @@           layout="topleft"           name="Options"           tear_off="true"> -            <menu_item_check -             label="Edit Linked Parts" -             layout="topleft" -             name="Edit Linked Parts"> -                <menu_item_check.on_check -                 control="EditLinkedParts" /> -                <menu_item_check.on_click -                 function="Tools.EditLinkedParts" -                 parameter="EditLinkedParts" /> -                <menu_item_check.on_enable -                 function="Tools.EnableToolNotPie" /> -            </menu_item_check>              <menu_item_call               label="Set Default Upload Permissions"               layout="topleft" @@ -819,10 +819,10 @@                   function="Floater.Toggle"                   parameter="perm_prefs" />              </menu_item_call> -			<menu_item_check -			   label="Show Advanced Permissions" -			   layout="topleft" -			   name="DebugPermissions"> +	   <menu_item_check +	       label="Show Advanced Permissions" +	       layout="topleft" +	       name="DebugPermissions">  			  <menu_item_check.on_check  				 function="CheckControl"  				 parameter="DebugPermissions" /> @@ -832,13 +832,7 @@  			</menu_item_check>              <menu_item_separator               layout="topleft" /> -            <menu -             create_jump_keys="true" -             label="Selection" -             layout="topleft" -             name="Selection" -             tear_off="true"> -                <menu_item_check +            <menu_item_check                   label="Select Only My Objects"                   layout="topleft"                   name="Select Only My Objects"> @@ -866,14 +860,9 @@                       control="RectangleSelectInclusive" />                      <menu_item_check.on_click                       function="Tools.SelectBySurrounding" /> -                </menu_item_check> -            </menu> -            <menu -             create_jump_keys="true" -             label="Show" -             layout="topleft" -             name="Show" -             tear_off="true"> +            </menu_item_check> +          <menu_item_separator +           layout="topleft" />                  <menu_item_check                   label="Show Hidden Selection"                   layout="topleft" @@ -902,13 +891,8 @@                       function="ToggleControl"                       parameter="ShowSelectionBeam" />                  </menu_item_check> -            </menu> -            <menu -             create_jump_keys="true" -             label="Grid" -             layout="topleft" -             name="Grid" -             tear_off="true"> +        <menu_item_separator +           layout="topleft" />                  <menu_item_check                   label="Snap to Grid"                   layout="topleft" @@ -953,7 +937,6 @@                      <menu_item_call.on_enable                       function="Tools.EnableToolNotPie" />                  </menu_item_call> -            </menu>          </menu>          <menu           create_jump_keys="true" 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 8268937e7f..8f7750628e 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -60,32 +60,33 @@   <scroll_container       color="DkGray2"       follows="all" -     height="505" +     height="493"       min_height="300"       layout="topleft" -     left="0" +     left="9" +     width="290"       name="profile_scroll"       reserve_scroll_corner="true"       opaque="true" -     top="0"> +     top="10">        <panel           name="scroll_content_panel"           follows="left|top|right"           layout="topleft"           top="0" -     height="505" +     height="493"       min_height="300"           left="0" -         width="313"> +         width="290">      <panel       name="data_panel"       follows="left|top|right"           layout="topleft"           top="0" -     height="505" +     height="493"       min_height="300"           left="0" -         width="313"> +         width="290">       <panel         name="lifes_images_panel"           follows="left|top|right" @@ -93,7 +94,7 @@           layout="topleft"           top="0"           left="0" -         width="285"> +         width="290">  	 <panel           follows="left|top"           height="117" @@ -101,25 +102,26 @@           left="10"           name="second_life_image_panel"           top="0" -         width="285"> +         width="280">            <text               follows="left|top|right"  	     font.style="BOLD"               height="15"               layout="topleft"               left="0" +             top="10"              name="second_life_photo_title_text"               text_color="white"               value="[SECOND_LIFE]:" -             width="170" /> +             width="100" />              <texture_picker               allow_no_texture="true"               default_image_name="None"               enabled="false"               follows="top|left" -             height="117" +             height="124"               layout="topleft" -             left="0" +             left="1"               name="2nd_life_pic"               top_pad="0"               width="102" /> @@ -140,13 +142,13 @@         length="1"         follows="left|top|right"         font="SansSerifSmall" -       height="100" +       height="102"         layout="topleft" -       left="120" -       top="18" +       left="123" +       top="25"         max_length="512"         name="sl_description_edit" -       width="173" +       width="157"         word_wrap="true">        </text_editor>        <panel @@ -163,18 +165,19 @@               height="15"               layout="topleft"               left="0" +             top_pad="10"              name="real_world_photo_title_text"               text_color="white"               value="Real World:" -             width="173" /> +             width="100" />              <texture_picker               allow_no_texture="true"               default_image_name="None"               enabled="false"               follows="top|left" -             height="117" +             height="124"               layout="topleft" -             left="0" +             left="1"               name="real_world_pic"               top_pad="0"               width="102" /> @@ -194,13 +197,13 @@         length="1"         follows="left|top|right"         font="SansSerifSmall" -       height="100" +       height="102"         layout="topleft" -       left="120" +       left="123"         max_length="512" -       top="142" +       top="157"         name="fl_description_edit" -       width="173" +       width="157"         word_wrap="true">        </text_editor>        <text @@ -215,7 +218,7 @@         name="title_homepage_text"         text_color="white"         top_pad="10" -       width="285"> +       width="100">            Homepage:        </text>        <line_editor @@ -227,19 +230,19 @@         top_pad="0"         value="http://"         name="homepage_edit" -       width="285"> +       width="270">        </line_editor>        <check_box         follows="left|top"         font="SansSerifSmall"         label="Show me in Search results"         layout="topleft" -       left="10" +       left="8"         name="show_in_search_checkbox"         height="15"         text_enabled_color="white" -       top_pad="10" -       width="240" /> +       top_pad="12" +       width="100" />        <text           follows="left|top"           font="SansSerifSmall" @@ -249,9 +252,19 @@           left="10"           name="title_acc_status_text"           text_color="white" -         top_pad="5" +         top_pad="10"           value="My Account:" -         width="285" /> +         width="100" /> +        <text +         follows="left|top|right" +         height="15" +         layout="topleft" +         left="10" +         name="acc_status_text" +         top_pad="5" +         value="Resident. No payment info on file." +         width="200" +         word_wrap="true" />          <text           type="string"           follows="left|top" @@ -261,17 +274,7 @@           left="10"           name="my_account_link"           value="[[URL] Go to My Dashboard]" -         width="285" /> -        <text -         follows="left|top|right" -         height="20" -         layout="topleft" -         left="10" -         name="acc_status_text" -         top_pad="5" -         value="Resident. No payment info on file." -         width="285" -         word_wrap="true" /> +         width="200" />          <text           follows="left|top"           font="SansSerifSmall" @@ -281,26 +284,16 @@           left="10"           name="title_partner_text"           text_color="white" -         top_pad="0" +         top_pad="10"           value="My Partner:"           width="150" /> -        <text -         follows="left|top" -         height="15" -         halign="right" -         layout="topleft" -         left_pad="10" -         right="-10" -         name="partner_edit_link" -         value="[[URL] Edit]" -         width="50" />          <panel           follows="left|top|right"           height="15"           layout="topleft"           left="10"           name="partner_data_panel" -         width="285"> +         width="200">              <name_box               follows="left|top|right"               height="30" @@ -310,36 +303,43 @@               link="true"               name="partner_text"               top="0" -             width="285" +             width="200"               word_wrap="true" />           </panel> +        <text +         follows="left|top" +         height="15" +         layout="topleft" +         left="10" +         name="partner_edit_link" +         value="[[URL] Edit]" +         width="50" />      </panel>      </panel>      </scroll_container>      <panel         follows="bottom|left" -       height="20" -       left="10" +       height="28" +       left="0"         name="profile_me_buttons_panel" -       top_pad="5" -       width="303"> +       top_pad="0" +       width="313">          <button           follows="bottom|left" -         height="19" +         height="23"           label="Save Changes"           layout="topleft" -         left="0" +         left="9"           name="save_btn" -         top="0" -         width="130" /> +         top="5" +         width="152" />          <button           follows="bottom|left" -         height="19" +         height="23"           label="Cancel"           layout="topleft" -         left_pad="10" +         left_pad="4"           name="cancel_btn" -         right="-1" -         width="130" /> +         width="152" />      </panel>  </panel> 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 b903032ed5..618167181f 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -1,12 +1,11 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel - follows="all" -     height="395"   label="General" + follows="all" + height="604" + width="313"   class="panel_group_general" - layout="topleft" - name="general_tab" - width="323"> + name="general_tab">      <panel.string       name="help_text">          The General tab contains general information about this group, a list of members, general Group Preferences and member options. @@ -25,12 +24,14 @@ Hover your mouse over the options for more help.       type="string"       follows="left|top|right"       left="5" -     height="60" +     height="150"       layout="topleft"       max_length="511"       name="charter"       top="5"       right="-1" +    bg_readonly_color="DkGray2" +    text_readonly_color="White"       word_wrap="true">       Group Charter      </text_editor> @@ -38,8 +39,8 @@ Hover your mouse over the options for more help.       column_padding="0"       draw_heading="true"       follows="left|top|right" -     heading_height="20" -     height="156" +     heading_height="23" +     height="200"       layout="topleft"       left="0"       name="visible_members" @@ -63,17 +64,29 @@ Hover your mouse over the options for more help.           height="12"           layout="left|top|right"           left="5" +         text_color="EmphasisColor" +         name="my_group_settngs_label" +         top_pad="10" +         width="300"> +           Me +        </text> +         <text +         follows="left|top|right" +         type="string" +         height="12" +         layout="left|top|right" +         left="10"           name="active_title_label"           top_pad="5"           width="300"> -            My Title +            My title:          </text>          <combo_box           follows="left|top|right" -         height="20" +         height="23"           layout="topleft" -         left="5" -     right="-5" +         left="10" +         right="-5"           name="active_title"           tool_tip="Sets the title that appears in your avatar's name tag when this group is active."           top_pad="2" /> @@ -82,7 +95,7 @@ Hover your mouse over the options for more help.           font="SansSerifSmall"           label="Receive group notices"           layout="topleft" -         left="5" +         left="10"           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" @@ -91,36 +104,46 @@ Hover your mouse over the options for more help.           height="16"           label="Show in my profile"           layout="topleft" -         left="5" +         left="10"           name="list_groups_in_profile"           tool_tip="Sets whether you want to show this group in your profile"           top_pad="5"           width="295" /> -        <panel +   <panel           background_visible="true"           bevel_style="in"           border="true"           bg_alpha_color="FloaterUnfocusBorderColor"           follows="left|top|right" -         height="88" +         height="140" +         width="313"           layout="topleft" -         left="2" -         right="-1" +         left="0"           name="preferences_container" -         top_pad="2"> +         top_pad="5"> +        <text +         follows="left|top|right" +         type="string" +         height="12" +         layout="left|top|right" +         left="5" +         text_color="EmphasisColor" +         name="group_settngs_label" +         width="300"> +         Group +        </text>          <check_box           follows="right|top|left"           height="16" -         label="Open enrollment" +         label="Anyone can join"           layout="topleft"           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="Cost to join"           layout="topleft"           left_delta="0"           name="check_enrollment_fee" @@ -129,27 +152,26 @@ Hover your mouse over the options for more help.           width="300" />          <spinner           decimal_digits="0" -         follows="left|top|right" +         follows="left|top"           halign="left" -         height="16" +         height="23"           increment="1"           label_width="15"           label="L$"           layout="topleft" -         right="-30"           max_val="99999" -         left_pad="0" +         left="30"           name="spin_enrollment_fee"           tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked." -         width="80" /> -         <combo_box -         follows="left|top|right" -         height="20" +         width="170" /> +        <combo_box +         follows="left|top" +         height="23"           layout="topleft"           left="10"           name="group_mature_check"           tool_tip="Sets whether your group contains information rated as Moderate" -         top_pad="0" +         top_pad="4"           width="190">              <combo_box.item               label="General Content" @@ -161,7 +183,7 @@ Hover your mouse over the options for more help.               value="Mature" />          </combo_box>          <check_box -         follows="left|top|right" +         follows="left|top"           height="16"           initial_value="true"           label="Show in search" @@ -171,5 +193,6 @@ Hover your mouse over the options for more help.           tool_tip="Let people see this group in search results"           top_pad="4"           width="300" /> +      </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 1968d96205..9727c54c6b 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 @@ -2,17 +2,17 @@  <panel  background_visible="true"   follows="all" - height="635" - label="Group Info" + height="570" + label="Group Profile"   layout="topleft" - min_height="460" + min_height="350"   left="0"   top="20"   name="GroupInfo" - width="323"> + width="313">      <panel.string       name="default_needs_apply_text"> -        There are unsaved changes to the current tab +        There are unsaved changes      </panel.string>      <panel.string       name="want_apply_text"> @@ -26,6 +26,14 @@ background_visible="true"       name="group_join_free">          Free      </panel.string> +    <panel +      name="group_info_top" +      follows="top|left" +      top="0" +      left="0" +      height="129" +      width="313" +      layout="topleft">      <button       follows="top|right"       height="23" @@ -37,18 +45,19 @@ background_visible="true"       top="2"       width="23" />      <text -     allow_html="false" -     follows="top|left|right" -     font="SansSerifHugeBold" -     height="26"       layout="topleft" -     left_pad="10"       name="group_name" -     text_color="white" -     top="0"       value="(Loading...)" +      font="SansSerifHuge" +      height="20" +      left_pad="5" +     text_color="white" +      top="3"       use_ellipses="true" -     width="300" /> +      width="270" +      follows="top|left" +      word_wrap="true" +      mouse_opaque="false"/>      <line_editor       follows="left|top"       font="SansSerif" @@ -58,7 +67,7 @@ background_visible="true"       max_length="35"       name="group_name_editor"       top_delta="5" -     width="250" +     width="270"       height="20"       visible="false" />      <texture_picker @@ -66,22 +75,25 @@ background_visible="true"       height="113"       label=""       layout="topleft" -     left="20" +     left="10"       name="insignia"       no_commit_on_selection="true"       tool_tip="Click to choose a picture"       top_pad="5"       width="100" />      <text +      font="SansSerifSmall" +      text_color="White_50" +      width="190" +      follows="top|left" +      layout="topleft" +      mouse_opaque="false"       type="string" -     follows="left|top"       height="16"       length="1" -     layout="topleft"       left_pad="10"       name="prepend_founded_by" -     top_delta="0" -     width="140"> +     top_delta="0">        Founder:      </text>      <name_box @@ -94,9 +106,9 @@ background_visible="true"       name="founder_name"       top_pad="2"       use_ellipses="true" -     width="140" /> +     width="190" />      <text -    font="SansSerifBig" +    font="SansSerifMedium"      text_color="EmphasisColor"       type="string"       follows="left|top" @@ -106,7 +118,7 @@ background_visible="true"       name="join_cost_text"       top_pad="10"       visible="true" -     width="140"> +     width="190">        Free      </text>      <button @@ -118,17 +130,31 @@ background_visible="true"       name="btn_join"       visible="true"       width="120" /> +    </panel> +   <layout_stack +     name="layout" +     orientation="vertical" +      follows="all" +     left="0" +     top_pad="0" +     height="437" +     width="313" +     border_size="0"> +   <layout_panel +      name="group_accordions" +      follows="all" +      layout="topleft" +      auto_resize="true" +      >     <accordion +     left="0" +     top="0"             single_expansion="true"               follows="all" -             height="478"               layout="topleft" -             left="0" -             name="groups_accordion" -             top_pad="10" -             width="323"> +             name="groups_accordion">               <accordion_tab -            expanded="false" +            expanded="true"              layout="topleft"              name="group_general_tab"              title="General"> @@ -138,12 +164,13 @@ background_visible="true"               filename="panel_group_general.xml"               layout="topleft"               left="0" +             follows="all"               help_topic="group_general_tab"               name="group_general_tab_panel"               top="0" />           </accordion_tab>           <accordion_tab -            expanded="true" +            expanded="false"              layout="topleft"              name="group_roles_tab"              title="Roles"> @@ -186,28 +213,37 @@ background_visible="true"           top="0" />           </accordion_tab>           </accordion> -   <panel +   </layout_panel> +   <layout_panel +         height="25" +         layout="topleft" +         auto_resize="false" +         left="0"     name="button_row" -   height="23"     follows="bottom|left" -   top_pad="-1" -   width="323"> +   width="313">     <button -     follows="top|left" -     height="22" +    follows="bottom|left" +     height="23"       image_overlay="Refresh_Off"       layout="topleft" -     left="10" +     left="5" +     top="0"       name="btn_refresh"       width="23" />      <button -     height="22" -     label="Create" -     label_selected="New group" +    follows="bottom|left" +                 height="18" +                 image_selected="AddItem_Press" +                 image_unselected="AddItem_Off" +                 image_disabled="AddItem_Disabled" +                 layout="topleft" +                 left_pad="2" +                 top_delta="3"       name="btn_create" -     left_pad="10" -     visible="false" -     width="100" /> +               visible="true" +                 tool_tip="Create a new Group" +                 width="18" />     <!-- <button       left_pad="10"       height="20" @@ -217,28 +253,30 @@ background_visible="true"       visible="false"       width="65" />-->       <button -     follows="bottom|right"           -     label="Group Chat" +      follows="bottom|left" +     label="Chat"       name="btn_chat" -     right="-184"       left_pad="2"      -     height="22"           -     width="85" /> +     height="23" +     top_delta="-3" +     width="60" />       <button -     follows="bottom|right"           -     label="Group Call" +         follows="bottom|left" +         left_pad="2" +         height="23"       name="btn_call" -     right="-97" -     left_pad="2"      -     height="22"           -     width="85" /> +     label="Group Call" +         layout="topleft" +         tool_tip="Call this group" +         width="95" />       <button -     height="22" +     follows="bottom|left" +     height="23"       label="Save"       label_selected="Save"       name="btn_apply" -     left_pad="10" -     right="-10" +     left_pad="2"       width="85" /> -     </panel> +     </layout_panel> +  </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml index db156f7877..38b0f234d5 100644 --- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml @@ -2,13 +2,13 @@  <panel   border="false"   follows="all" - height="420" + height="500"   label="Land & L$"   layout="topleft"   left="0"   name="land_money_tab"   top="0" - width="310"> + width="313">      <panel.string       name="help_text">     A warning appears until the Total Land in Use is less than or = to the Total Contribution. @@ -41,16 +41,24 @@       width="260">          Group Owned Land      </text> --> +   <panel +          name="layout_panel_landmoney" +          follows="top|left|right" +          left="0" +          right="-1" +          height="250" +          width="313" +          >      <scroll_list       draw_heading="true"       follows="top|left|right" -     heading_height="20"       height="130"       layout="topleft"       left="0" +     right="-1"       top="0"       name="group_parcel_list" -     width="310"> +     width="313">          <scroll_list.columns           label="Parcel"           name="name" @@ -67,16 +75,12 @@           label="Area"           name="area"           width="50" /> -        <scroll_list.columns -         label="" -         name="hidden" -         width="-1" />      </scroll_list>      <text       type="string"       follows="left|top"       halign="right" -     height="15" +     height="16"       layout="topleft"       left="0"       name="total_contributed_land_label" @@ -87,30 +91,30 @@      text_color="EmphasisColor"       type="string"       follows="left|top" -     height="15" +     height="16"       layout="topleft"       left_pad="5"       name="total_contributed_land_value"       top_delta="0" -     width="120"> +     width="90">          [AREA] m²      </text>      <button       follows="top" -     height="20" +     height="23"       label="Map"       label_selected="Map"       layout="topleft"       name="map_button" -     right="-5" +     top_delta="-4"       left_pad="0" -     width="95" +     width="60"       enabled="false" />      <text       type="string"       follows="left|top"       halign="right" -     height="15" +     height="16"       layout="topleft"       left="0"       name="total_land_in_use_label" @@ -122,7 +126,7 @@      text_color="EmphasisColor"       type="string"       follows="left|top" -     height="15" +     height="16"       layout="topleft"       left_pad="5"       name="total_land_in_use_value" @@ -134,7 +138,7 @@       type="string"       follows="left|top"       halign="right" -     height="15" +     height="16"       layout="topleft"       left="0"       name="land_available_label" @@ -146,7 +150,7 @@      text_color="EmphasisColor"       type="string"       follows="left|top" -     height="15" +     height="16"       layout="topleft"       left_pad="5"       name="land_available_value" @@ -158,7 +162,7 @@       type="string"       follows="left|top"       halign="right" -     height="15" +     height="16"       layout="topleft"       left="0"       name="your_contribution_label" @@ -190,21 +194,22 @@       <text       type="string"       follows="left|top" -     halign="right" -     height="12" +     halign="left" +     height="16"       layout="topleft"       left="140"       name="your_contribution_max_value"       top_pad="2" -     width="95"> +     width="170">          ([AMOUNT] max)      </text>      <icon -     height="18" -     image_name="BuyArrow_Over" +     height="16" +     image_name="Parcel_Exp_Color"       layout="topleft"       left="75"       name="group_over_limit_icon" +     color="Green"       top_pad="0"       visible="true"       width="18" /> @@ -212,12 +217,11 @@       follows="left|top"       type="string"       word_wrap="true" -     font="SansSerifSmall"       height="20"       layout="topleft"       left_pad="2"       name="group_over_limit_text" -     text_color="EmphasisColor" +     text_color="ColorPaletteEntry29"       top_delta="0"       width="213">          More land credits are needed to support land in use @@ -235,39 +239,39 @@       width="100">          Group L$      </text> +    </panel>      <tab_container       follows="all" -     height="180" +     height="230"       halign="center"       layout="topleft"       left="0" +     right="-1"       name="group_money_tab_container"       tab_position="top" -     tab_height="20"       top_pad="2" -     tab_min_width="75" -     width="310"> +     tab_min_width="90" +     width="313">          <panel           border="false"           follows="all" -         height="180"           label="PLANNING"           layout="topleft"           left="0"           help_topic="group_money_planning_tab"           name="group_money_planning_tab" -         top="5" -         width="300"> +         top="0" +         width="313">              <text_editor               type="string"               follows="all" -             height="140" +             height="200"               layout="topleft"               left="0"               max_length="4096"               name="group_money_planning_text"               top="2" -             width="300" +             width="313"               word_wrap="true">                  Loading...              </text_editor> @@ -275,92 +279,88 @@        <panel           border="false"           follows="all" -         height="180"           label="DETAILS"           layout="topleft"           left="0"           help_topic="group_money_details_tab"           name="group_money_details_tab"           top="0" -         width="300"> +         width="313">            <text_editor               type="string"               follows="all" -             height="140" +             height="185"               layout="topleft"               left="0"               max_length="4096"               name="group_money_details_text"               top="2" -             width="300" +             width="313"               word_wrap="true">                  Loading...              </text_editor> - -          <button -             height="20" -             image_overlay="Arrow_Left_Off" -             layout="topleft" -             left="5" -             name="earlier_details_button" -             tool_tip="Go back in time" -             top_pad="10" -             width="25" />              <button -             height="20" -             image_overlay="Arrow_Right_Off" -             layout="topleft" -             left_pad="5" -             name="later_details_button" -             tool_tip="Go forward in time" -             top_delta="0" -             width="25" />   - - -      </panel> +	     follows="left|top" +	     height="18" +	     image_overlay="Arrow_Left_Off" +	     layout="topleft" +	     name="earlier_details_button" +	     tool_tip="Back" +             left="200" +             top_pad="0" +	     width="25" /> +             <button +	     follows="left|top" +	     height="18" +	     image_overlay="Arrow_Right_Off" +	     layout="topleft" +       name="later_details_button" +	     tool_tip="Next" +             left_pad="15" +	     width="25" /> +        </panel>        <panel           border="false"           follows="all" -         height="180"           label="SALES"           layout="topleft" -         left_delta="0" +         left="0"           help_topic="group_money_sales_tab" -         mouse_opaque="false"           name="group_money_sales_tab"           top="0" -         width="300"> +         width="313">              <text_editor               type="string"               follows="all" -             height="130" +             height="185"               layout="topleft"               left="0"               max_length="4096"               name="group_money_sales_text"               top="2" -             width="300" +             width="313"               word_wrap="true">                  Loading...              </text_editor> -            <button -             height="20" -             image_overlay="Arrow_Left_Off" -             layout="topleft" -             left="5" -             name="earlier_sales_button" -             tool_tip="Go back in time" -             top_pad="10" -             width="25" /> -            <button -             height="20" -             image_overlay="Arrow_Right_Off" -             layout="topleft" -             left_pad="5" -             name="later_sales_button" -             tool_tip="Go forward in time" -             top_delta="0" -             width="25" /> +           <button +	     follows="left|top" +	     height="18" +	     image_overlay="Arrow_Left_Off" +	     layout="topleft" +	     name="earlier_sales_button" +	     tool_tip="Back" +             left="200" +             top_pad="0" +	     width="25" /> +             <button +	     follows="left|top" +	     height="18" +	     image_overlay="Arrow_Right_Off" +	     layout="topleft" +	     left_pad="15" +         name="later_sales_button" +	     tool_tip="Next" +	     width="25" />          </panel>      </tab_container>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml index 0d9c2c2162..5f46ad7860 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml @@ -1,13 +1,13 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel   follows="all" - height="463" + height="530"   label="Notices"   layout="topleft"   left="0"   name="notices_tab"   top="0" - width="310"> + width="313">      <panel.string       name="help_text">          Notices let you send a message and an optionally attached item. @@ -23,26 +23,28 @@ You can turn off Notices on the General tab.       type="string"       word_wrap="true"       height="24" -     halign="right" +     halign="left"       layout="topleft" +     text_color="White_50"       left="5"       name="lbl2" +     right="-1"       top="5"       width="300">       Notices are kept for 14 days.  Maximum 200 per group daily      </text>      <scroll_list -      follows="left|top" +     follows="left|top|right"       column_padding="0"       draw_heading="true" -     heading_height="16" -     height="125" +     height="175"       layout="topleft" -     left="2" +     left="0" +     right="-1"       name="notice_list"       top_pad="0" -     width="300"> +     width="313">          <scroll_list.columns           label=""           name="icon" @@ -71,8 +73,8 @@ Maximum 200 per group daily       visible="false">          None found      </text> -         <button -       follows="bottom|left" +      <button +       follows="top|left"         height="18"         image_selected="AddItem_Press"         image_unselected="AddItem_Off" @@ -85,24 +87,25 @@ Maximum 200 per group daily         width="18" />       <button       follows="top|left" -     height="22" +     height="23"       image_overlay="Refresh_Off"       layout="topleft"       name="refresh_notices" -     right="-5" +     left_pad="230"       tool_tip="Refresh list of notices"       top_delta="0"       width="23" />      <panel -     follows="left|top" +     follows="left|top|right"       height="280"       label="Create New Notice"       layout="topleft"       left="0" +     right="-1"       top_pad="0"       visible="true"       name="panel_create_new_notice" -     width="300"> +         width="313">          <text           follows="left|top"           type="string" @@ -204,13 +207,16 @@ Maximum 200 per group daily           width="72" />          <button           follows="left|top" -         height="23" -         label="Remove"           layout="topleft" -         left="70" +         left="140"           name="remove_attachment" -         top_delta="45" -         width="90" /> +         top_delta="50" +                 height="18" +                 image_selected="TrashItem_Press" +                 image_unselected="TrashItem_Off" +                 image_disabled="TrashItem_Disabled" +                 tool_tip="Remove attachment from your notification" +                 width="18" />          <button           follows="left|top"           height="23" @@ -231,18 +237,19 @@ Maximum 200 per group daily           width="280" />     </panel>      <panel -     follows="left|top" +     follows="left|top|right"       height="280"       label="View Past Notice"       layout="topleft"       left="0" +     right="-1"       visible="false"       name="panel_view_past_notice" -     top="180" -     width="300"> +     top="230" +    width="313">          <text           type="string" -         font="SansSerifBig" +         font="SansSerifMedium"           height="16"           layout="topleft"           left="10" @@ -280,7 +287,7 @@ Maximum 200 per group daily           border_style="line"           border_thickness="1"           enabled="false" -         height="16" +         height="20"           layout="topleft"           left_pad="3"           max_length="63" @@ -301,40 +308,35 @@ Maximum 200 per group daily              Message:          </text>          <text_editor +                     follows="top|left|right"           enabled="false"           height="160"           layout="topleft" -         left="10" +         left="0" +         right="-1"           max_length="511"           name="view_message" -         top_delta="-35" -         width="285" +         top_delta="-40" +         width="313"           word_wrap="true" />          <line_editor           enabled="false" -         height="16" +         height="20"           layout="topleft" -         left_delta="0" +         left="5"           max_length="63"           mouse_opaque="false"           name="view_inventory_name"           top_pad="8" -         width="285" /> -        <icon -         height="16" -         layout="topleft" -         left_delta="0" -         name="view_inv_icon" -         top_delta="0" -         width="16" /> +         width="250"/>          <button           follows="left|top"           height="23" -         label="Open attachment" +         label="Open Attachment"           layout="topleft" -         right="-10" +         left="5"           name="open_attachment"           top_pad="5" -         width="135" /> +         width="180" />          </panel>  </panel> 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 5f6b670cd2..f19057cae3 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -1,16 +1,16 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel   follows="all" - height="552" + height="680"   label="Members & Roles"   layout="topleft"   left="0"   top="0"   name="roles_tab" - width="310"> + width="313">      <panel.string       name="default_needs_apply_text"> -        There are unsaved changes to the current tab +        There are unsaved changes      </panel.string>      <panel.string       name="want_apply_text"> @@ -20,17 +20,18 @@       name="help_text" />      <tab_container      border="false" -     follows="left|top" +     follows="left|top|right"       height="552"       halign="center"       layout="topleft"       left="0" +     right="-1"       name="roles_tab_container"       tab_position="top" -     tab_height="20" -     tab_min_width="75" +     tab_height="22" +     tab_min_width="90"       top="0" -     width="310"> +     width="313">          <panel           border="false"           follows="all" @@ -38,11 +39,11 @@           label="MEMBERS"           layout="topleft"           left="0" +         right="-1"           help_topic="roles_members_tab"           name="members_sub_tab"           tool_tip="Members" -         class="panel_group_members_subtab" -         width="310"> +         class="panel_group_members_subtab">              <panel.string               name="help_text">                  You can add or remove Roles assigned to Members. @@ -65,24 +66,23 @@ clicking on their names.           layout="topleft"           top="5"           left="5" -         width="280" -         height="20" -         follows="top" -         max_length="250" +         right="-5" +         height="22" +         search_button_visible="false" +         follows="left|top|right"           label="Filter Members"           name="filter_input" />              <name_list -             column_padding="0" +             column_padding="2"               draw_heading="true" -             heading_height="20"               height="240" -             follows="left|top" +             follows="left|top|right"               layout="topleft"               left="0" +             right="-1"               multi_select="true"               name="member_list" -             top_pad="2" -             width="300"> +             top_pad="5">                  <name_list.columns                   label="Member"                   name="name" @@ -94,33 +94,33 @@ clicking on their names.                  <name_list.columns                   label="Status"                   name="online" -         relative_width="0.15" /> +                 relative_width="0.14" />              </name_list>              <button -             height="20" -             follows="bottom|left" +             height="23" +             follows="top|left"               label="Invite" -             left="5" +             left="0"               name="member_invite"               width="100" />              <button -             height="20" +             height="23"               label="Eject" -             left_pad="5" -             right="-5" +             follows="top|left" +             left_pad="10"               name="member_eject"               width="100" />          </panel>          <panel           border="false" -         height="230" +         height="303"           label="ROLES"           layout="topleft"           left="0" +         right="-1"           help_topic="roles_roles_tab"           name="roles_sub_tab" -         class="panel_group_roles_subtab" -         width="310"> +         class="panel_group_roles_subtab">             <!-- <button               enabled="false"               height="20" @@ -157,22 +157,23 @@ including the Everyone and Owner Roles.           layout="topleft"           top="5"           left="5" -         width="280" -         height="20" +         right="-5" +         height="22" +         search_button_visible="false"           follows="left|top|right" -         max_length="250"           label="Filter Roles"           name="filter_input" />              <scroll_list               column_padding="0"               draw_heading="true"               draw_stripes="false" -             follows="left|top" -             heading_height="20" -             height="170" +             heading_height="23" +             height="130"               layout="topleft"               search_column="1"               left="0" +             follows="left|top|right" +             right="-1"               name="role_list"               top_pad="2"               width="310"> @@ -190,28 +191,29 @@ including the Everyone and Owner Roles.                 relative_width="0.15"  />              </scroll_list>              <button -            follows="bottom|left" -             height="20" +            follows="top|left" +             height="23"               label="New Role"               layout="topleft" -             left="5" +             left="0"               name="role_create" -             width="100" /> +             width="120" />              <button -             height="20" +             height="23" +             follows="top|left"               label="Delete Role"               layout="topleft" -             left_pad="5" -             right="-5" +             left_pad="10"               name="role_delete" -             width="100" /> +             width="120" />          </panel>          <panel           border="false" -         height="220" +         height="303"           label="ABILITIES"           layout="topleft"           left="0" +         right="-1"           help_topic="roles_actions_tab"           name="actions_sub_tab"           class="panel_group_actions_subtab" @@ -238,13 +240,12 @@ things in this group. There's a broad variety of Abilities.           layout="topleft"           top="5"           left="5" -         width="280" -         height="20" +         right="-5" +         height="22" +         search_button_visible="false"           follows="left|top|right" -         max_length="250"           label="Filter Abilities"           name="filter_input" /> -          <scroll_list           column_padding="0"           draw_stripes="true" @@ -252,6 +253,7 @@ things in this group. There's a broad variety of Abilities.           follows="left|top"           layout="topleft"           left="0" +         right="-1"           name="action_list"           search_column="2"           tool_tip="Select an Ability to view more details" @@ -273,35 +275,39 @@ things in this group. There's a broad variety of Abilities.          </panel>      </tab_container>      <panel -     height="252" +     height="350" +     background_visible="true" +     bg_alpha_color="FloaterUnfocusBorderColor"       layout="topleft" -     follows="left|top" +     follows="top|left|right"       left="0" -     mouse_opaque="false"  +     right="-1" +     width="313" +     mouse_opaque="false"       name="members_footer" -     top="300" -     visible="false" -     width="310"> +     top="325" +     visible="false">          <text           type="string" -         height="14" +         height="16"           layout="topleft"           follows="left|top" -         left="0" +         left="5" +         top="8" +         text_color="EmphasisColor"           name="static" -         top_pad="5"           width="300">              Assigned Roles          </text>          <scroll_list           draw_stripes="true" -         follows="left|top" -         height="90" +        follows="left|top|right" +         height="150"           layout="topleft"           left="0" +         right="-1"           name="member_assigned_roles" -         top_pad="0" -         width="300"> +         top_pad="0">              <scroll_list.columns               label=""               name="checkbox" @@ -311,27 +317,29 @@ things in this group. There's a broad variety of Abilities.               name="role"               width="270" />          </scroll_list> -                 <text +          <text           type="string" -         height="14" +         height="16"           layout="topleft"           follows="left|top" -         left="0" -         name="static2" +         left="5"           top_pad="5" +         text_color="EmphasisColor" +         name="static2"           width="285">              Allowed Abilities          </text>          <scroll_list           draw_stripes="true" -         height="90" +             follows="left|top|right" +         height="150"           layout="topleft"           left="0" +         right="-1"           name="member_allowed_actions"           search_column="2"           tool_tip="For details of each allowed ability see the abilities tab" -         top_pad="0" -         width="300"> +         top_pad="0">              <scroll_list.columns               label=""               name="icon" @@ -347,30 +355,37 @@ things in this group. There's a broad variety of Abilities.          </scroll_list>      </panel>      <panel -     height="297" +     height="550" +     background_visible="true" +     bg_alpha_color="FloaterUnfocusBorderColor"       layout="topleft" +     follows="top|left|right"       left="0" +     right="-1" +     width="313" +     mouse_opaque="false"       name="roles_footer"       top_delta="0" -     top="220" -     visible="false" -     width="310"> +     top="209" +     visible="false">          <text           type="string" -         height="14" +         height="16"           layout="topleft" -         left="0" +         follows="left|top" +         left="5" +         top="5"           name="static" -         top="0"           width="300">             Role Name          </text>          <line_editor           type="string" -         follows="left|top"           height="20"           layout="topleft"           left="0" +         follows="left|top|right" +         right="-1"           max_length="295"           name="role_name"           top_pad="0" @@ -378,8 +393,10 @@ things in this group. There's a broad variety of Abilities.          </line_editor>          <text           type="string" -         height="14" +         height="16"           layout="topleft" +         follows="left|top" +         left="5"           name="static3"           top_pad="5"           width="300"> @@ -387,19 +404,22 @@ things in this group. There's a broad variety of Abilities.          </text>          <line_editor           type="string" -         follows="left|top"           height="20"           layout="topleft" +         left="0" +         follows="left|top|right" +         right="-1"           max_length="295"           name="role_title"           top_pad="0"           width="300">          </line_editor> -                <text +               <text           type="string" -         height="14" +         height="16"           layout="topleft" -         left="0" +         follows="left|top" +         left="5"           name="static2"           top_pad="5"           width="200"> @@ -407,11 +427,12 @@ things in this group. There's a broad variety of Abilities.          </text>          <text_editor           type="string" -         halign="left" -         height="35"           layout="topleft"           left="0" +         follows="left|top|right" +         right="-1"           max_length="295" +         height="35"           name="role_description"           top_pad="0"           width="300" @@ -419,10 +440,11 @@ things in this group. There's a broad variety of Abilities.          </text_editor>          <text           type="string" -         height="14" +         height="16"           layout="topleft"           follows="left|top" -         left="0" +         left="5" +         text_color="EmphasisColor"           name="static4"           top_pad="5"           width="300"> @@ -430,15 +452,18 @@ things in this group. There's a broad variety of Abilities.          </text>          <name_list           draw_stripes="true" -         height="60" +         height="128"           layout="topleft"           left="0" +         follows="left|top|right" +         right="-1"           name="role_assigned_members"           top_pad="0"           width="300" />          <check_box           height="15"           label="Reveal members" +         left="5"           layout="topleft"           name="role_visible_in_list"           tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group." @@ -446,20 +471,23 @@ things in this group. There's a broad variety of Abilities.           width="300" />           <text           type="string" -         height="13" +         height="16"           layout="topleft"           follows="left|top" -         left="0" +         left="5" +         text_color="EmphasisColor"           name="static5" -         top_pad="5" +         top_pad="2"           width="300">              Allowed Abilities          </text>          <scroll_list           draw_stripes="true" -         height="60" +         height="140"           layout="topleft"           left="0" +         follows="left|top|right" +         right="-1"           name="role_allowed_actions"           search_column="2"           tool_tip="For details of each allowed ability see the abilities tab" @@ -467,10 +495,6 @@ things in this group. There's a broad variety of Abilities.           width="300">              <scroll_list.columns               label="" -             name="icon" -             width="2" /> -            <scroll_list.columns -             label=""               name="checkbox"               width="20" />              <scroll_list.columns @@ -480,14 +504,19 @@ things in this group. There's a broad variety of Abilities.          </scroll_list>      </panel>     <panel -     height="303" +     height="424" +     background_visible="true" +     bg_alpha_color="FloaterUnfocusBorderColor"       layout="topleft" +     follows="top|left|right"       left="0" +     right="-1" +     width="313" +     mouse_opaque="false"       name="actions_footer"       top_delta="0"       top="255" -     visible="false" -     width="310"> +     visible="false">          <text_editor         bg_readonly_color="Transparent"         text_readonly_color="EmphasisColor" @@ -495,44 +524,54 @@ things in this group. There's a broad variety of Abilities.           type="string"           enabled="false"           halign="left" -         height="90"           layout="topleft" +         follows="left|top|right" +         left="0" +         right="-1" +         height="90"           max_length="512"           name="action_description" -         top_pad="0" -         width="295" +         top="0"           word_wrap="true">              This Ability is 'Eject Members from this Group'. Only an Owner can eject another Owner.          </text_editor>          <text           type="string" -         height="14" +         height="16"           layout="topleft" +         follows="left|top"           left="5"           name="static2" -         top_pad="5" +         top_pad="1"           width="300">              Roles with this ability          </text>          <scroll_list -         height="65" +         height="172"           layout="topleft" +         follows="left|top|right"           left="5" +         right="-1"           name="action_roles"           top_pad="0"           width="300" />          <text           type="string" -         height="14" +         height="16"           layout="topleft" +         follows="left|top" +         left="5"           name="static3"           top_pad="5"           width="300">              Members with this ability          </text>          <name_list -         height="100" +         height="122" +         follows="left|top|right"           layout="topleft" +         left="5" +         right="-1"           name="action_members"           top_pad="0"           width="300" /> diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index 2e3d5a7320..9279d1e686 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -30,7 +30,7 @@       left="5"       name="button_stack"       orientation="vertical" -     top_pad="0" +     top_pad="-5"       width="105">          <layout_panel           mouse_opaque="false" @@ -55,7 +55,7 @@           user_resize="false">              <button               follows="left|top|right" -             height="20" +             height="23"               label="Profile"               name="view_profile_btn"               top="0" @@ -72,7 +72,7 @@           user_resize="false">              <button               follows="left|top|right" -             height="20" +             height="23"               label="Add Friend"               name="add_friend_btn"               top="5" @@ -90,7 +90,7 @@          <button               auto_resize="false"               follows="left|top|right" -             height="20" +             height="23"               label="Teleport"               name="teleport_btn"               width="100" /> @@ -107,7 +107,7 @@             <button               auto_resize="true"               follows="left|top|right" -             height="20" +             height="23"               label="Share"               name="share_btn"               width="100" /> @@ -123,7 +123,7 @@           user_resize="false">              <button               follows="left|top|right" -             height="20" +             height="23"               label="Call"               name="call_btn"               width="100" /> @@ -140,7 +140,7 @@           visible="false">              <button               follows="left|top|right" -             height="20" +             height="23"               label="Leave Call"               name="end_call_btn"               width="100" /> @@ -157,7 +157,7 @@           visible="false">              <button               follows="left|top|right" -             height="20" +             height="23"               label="Voice Controls"               name="voice_ctrls_btn"               width="100" /> diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index 039e1ae086..91d4cd6e83 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -38,7 +38,7 @@          <accordion_tab           layout="topleft"           name="tab_landmarks" -         title="Landmarks"> +         title="My Landmarks">              <places_inventory_panel               allow_multi_select="true"               border="false" diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 73c5b20f9c..a65a59a1c3 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -106,7 +106,7 @@ label="Remember"    follows="left|bottom"    font="SansSerifSmall"    height="15" -  left_pad="8" +  left_pad="18"    name="start_location_text"  top="20"    width="130"> diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml index e779e37419..a30d80f101 100644 --- a/indra/newview/skins/default/xui/en/panel_me.xml +++ b/indra/newview/skins/default/xui/en/panel_me.xml @@ -4,7 +4,7 @@   border="false"   follows="all"   height="570" - label="My Profile" + label="My Profile!!!!!"   layout="topleft"   left="0"   name="panel_me" @@ -29,23 +29,23 @@       height="570"       halign="center"       layout="topleft" -     left="10" +     left="6"       name="tabs"       tab_min_width="95"       tab_height="30"       tab_position="top"       top_pad="10" -     width="313"> +     width="315">        <panel           class="panel_my_profile"           filename="panel_my_profile.xml" -         label="PROFILE" +         label="MY PROFILE"           help_topic="panel_my_profile_tab"           name="panel_profile" />        <panel           class="panel_picks"           filename="panel_picks.xml" -         label="PICKS" +         label="MY PICKS"           help_topic="panel_my_picks_tab"           name="panel_picks" />      </tab_container> diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml index 4164ce73dd..a0734d3dca 100644 --- a/indra/newview/skins/default/xui/en/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml @@ -1,13 +1,13 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel   follows="all" - height="500" + height="535"   label="Profile"   layout="topleft"   left="0"   name="panel_profile"   top="0" - width="313"> + width="315">      <string       name="CaptionTextAcctInfo">          [ACCTTYPE] @@ -41,8 +41,8 @@       layout="topleft"       left="0"       top="0" -     height="480" -     width="313" +     height="522" +     width="315"       border_size="0">        <layout_panel           name="profile_stack" @@ -50,9 +50,9 @@           layout="topleft"           top="0"           left="0" -         height="480" +         height="492"           user_resize="false" -         width="313"> +         width="315">          <scroll_container           color="DkGray2"           follows="all" @@ -60,13 +60,13 @@           left="0"           name="profile_scroll"           opaque="true" -         height="480" -         width="313" +         height="492" +         width="315"           top="0">            <panel                  layout="topleft"            follows="left|top|right" -                height="505" +                height="492"                 name="scroll_content_panel"                  top="0"                  left="0" @@ -84,9 +84,9 @@                 default_image_name="None"                 enabled="false"                 follows="top|left" -               height="117" +               height="124"                 layout="topleft" -               left="0" +               left="3"                 name="2nd_life_pic"                 top="10"                 width="102" /> @@ -96,7 +96,7 @@                layout="topleft"                name="2nd_life_edit_icon"                label="" -              left="0" +              left="3"                tool_tip="Click the Edit Profile button below to change image"                top="10"                width="102" /> @@ -130,7 +130,7 @@               follows="left|top|right"               height="117"               layout="topleft" -       top_pad="10" +       top_pad="0"               left="10"               name="first_life_image_panel"               width="297"> @@ -139,9 +139,9 @@                 default_image_name="None"                 enabled="false"                 follows="top|left" -               height="117" +               height="124"                 layout="topleft" -               left="0" +               left="3"                 name="real_world_pic"                 width="102" />                <icon @@ -150,7 +150,7 @@                layout="topleft"                name="real_world_edit_icon"                label="" -              left="0" +              left="3"                tool_tip="Click the Edit Profile button below to change image"                top="4"                width="102" /> @@ -299,7 +299,7 @@              layout="topleft"              left="7"              name="sl_groups" -            top_pad="0" +          top_pad="0"              translate="false"              width="298"              expanded_bg_visible="true" @@ -379,23 +379,20 @@          <button           follows="bottom|right"           height="23" -         left="20" +         left="4"  	 top="5"           label="Edit Profile" -         layout="topleft"           name="edit_profile_btn"           tool_tip="Edit your personal information" -         width="130" /> +         width="152" />          <button           follows="bottom|right"           height="23"           label="Edit Appearance" -         left_pad="10" -         layout="topleft" +         left_pad="4"           name="edit_appearance_btn" -         top="5"           tool_tip="Create/edit your appearance: physical data, clothes and etc." -         width="130" /> +         width="152" />   </layout_panel>  </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index baa6c2e51f..5fe5db892a 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -139,11 +139,12 @@       font="SansSerifSmall"       height="15"       layout="topleft" -     left="0" +     left="102"       name="favorite"       image_drag_indication="Accordion_ArrowOpened_Off"       bottom="55" -     width="590"> +     tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!" +               width="590">      <chevron_button name=">>"                       image_unselected="TabIcon_Close_Off"                       image_selected="TabIcon_Close_Off" @@ -154,4 +155,15 @@  		     top="15"                       height="15"/>    </favorites_bar> +     <text +               follows="left|top" +         font.style="BOLD" +               height="15" +               layout="topleft" +               left="10" +               top_pad="-12" +               name="favorites_bar_label" +               text_color="LtGray" +               tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!" +               width="102">Favorites Bar</text>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index da3a2274c9..ac98bb9bd9 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -47,7 +47,7 @@ background_visible="true"       follows="all"       height="500"       layout="topleft" -     left="10" +     left="6"       name="tabs"       tab_min_width="70"       tab_height="30" @@ -116,7 +116,7 @@ background_visible="true"          <panel           follows="all"           height="500" -         label="FRIENDS" +         label="MY FRIENDS"           layout="topleft"           left="0"           help_topic="people_friends_tab" @@ -213,7 +213,7 @@ background_visible="true"          <panel           follows="all"           height="500" -         label="GROUPS" +         label="MY GROUPS"           layout="topleft"           left="0"           help_topic="people_groups_tab" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml index 6e0b94ac2b..433dfc17fe 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -23,7 +23,7 @@           layout="topleft"           left="0"           name="radio" -         value="0"  +         value="0"           top="10"           width="125" />          <radio_item @@ -32,7 +32,7 @@           layout="topleft"           left_delta="145"           name="radio2" -         value="1"          +         value="1"           top_delta="0"           width="125" />          <radio_item @@ -41,7 +41,7 @@           layout="topleft"           left_delta="170"           name="radio3" -         value="2"  +         value="2"           top_delta="0"           width="125" />      </radio_group> @@ -105,7 +105,7 @@      </text>      <color_swatch       can_apply_immediately="true" -     color="0.6 0.6 1 1" +     color="LtGray"       follows="left|top"       height="47"       label_width="60" @@ -136,7 +136,7 @@      </text>      <color_swatch       can_apply_immediately="true" -     color="0.8 1 1 1" +     color="LtGray"       follows="left|top"       height="47"       label_width="44" @@ -167,7 +167,7 @@      </text>      <color_swatch       can_apply_immediately="true" -     color="0.82 0.82 0.99 1" +     color="Red"       follows="left|top"       height="47"       layout="topleft" @@ -197,7 +197,7 @@      </text>      <color_swatch       can_apply_immediately="true" -     color="0.7 0.9 0.7 1" +     color="EmphasisColor_35"       follows="left|top"       height="47"       layout="topleft" @@ -227,7 +227,7 @@      </text>      <color_swatch       can_apply_immediately="true" -     color="0.7 0.9 0.7 1" +     color="LtYellow"       follows="left|top"       height="47"       layout="topleft" @@ -257,7 +257,7 @@      </text>      <color_swatch       can_apply_immediately="true" -     color="0.6 0.6 1 1" +     color="EmphasisColor"       follows="left|top"       height="47"       layout="topleft" @@ -316,22 +316,30 @@      <text       left="30"       height="20" -     width="300" +     width="120"       top_pad="20"> -     Show IMs in: (Requires restart) +     Show IMs in:      </text> +    <text +	 left_pad="6" +	 height="20" +	 width="100" +	 text_color="White_25" +	 > +      (requires restart) +      </text>      <radio_group       height="30"       layout="topleft" -     left_delta="30" +     left="30"       control_name="ChatWindow"       name="chat_window"       top_pad="0" -     tool_tip="Show your Instant Messages in separate windows, or in one window with many tabs (Requires restart)" +     tool_tip="Show your Instant Messages in separate floaters, or in one floater with many tabs (Requires restart)"       width="331">       <radio_item        height="16" -      label="Multiple windows" +      label="Separate windows"        layout="topleft"        left="0"        name="radio" @@ -340,7 +348,7 @@        width="150" />       <radio_item        height="16" -      label="One window" +      label="Tabs"        layout="topleft"        left_delta="0"        name="radio2" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index 22c75a595e..b496f95422 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -323,7 +323,6 @@       follows="left|top"       height="13"       layout="topleft" -     text_color="white"       left="30"       mouse_opaque="false"       name="text_box3" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml index d8e3f4ccfb..39a8e53c7f 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -34,8 +34,8 @@       control_name="MuteAudio"       follows="top|right"       height="18" -     image_selected="Parcel_VoiceNo_Dark" -     image_unselected="Parcel_Voice_Dark" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off"       is_toggle="true"       layout="topleft"       left_pad="16" @@ -79,8 +79,8 @@       disabled_control="MuteAudio"       follows="top|right"       height="18" -     image_selected="Parcel_VoiceNo_Dark" -     image_unselected="Parcel_Voice_Dark" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off"       is_toggle="true"       layout="topleft"       left_pad="16" @@ -114,8 +114,8 @@       disabled_control="MuteAudio"       follows="top|right"       height="18" -     image_selected="Parcel_VoiceNo_Dark" -     image_unselected="Parcel_Voice_Dark" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off"       is_toggle="true"       layout="topleft"       left_pad="16" @@ -149,8 +149,8 @@       disabled_control="MuteAudio"       follows="top|right"       height="18" -     image_selected="Parcel_VoiceNo_Dark" -     image_unselected="Parcel_Voice_Dark" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off"       is_toggle="true"       layout="topleft"       left_pad="16" @@ -184,8 +184,8 @@       disabled_control="MuteAudio"       follows="top|right"       height="18" -     image_selected="Parcel_VoiceNo_Dark" -     image_unselected="Parcel_Voice_Dark" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off"       is_toggle="true"       layout="topleft"       left_pad="16" @@ -219,8 +219,8 @@       disabled_control="MuteAudio"       follows="top|right"       height="18" -     image_selected="Parcel_VoiceNo_Dark" -     image_unselected="Parcel_Voice_Dark" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off"       is_toggle="true"       layout="topleft"       left_pad="16" @@ -236,9 +236,10 @@       disabled_control="CmdLineDisableVoice"       label="Enable voice"       layout="topleft" -     left="28" +     font.style="BOLD" +     left="101"       name="enable_voice_check" -     top_pad="5" +     top_pad="13"       width="110"       >      </check_box> @@ -270,8 +271,8 @@       disabled_control="MuteAudio"       follows="top|right"       height="18" -     image_selected="Parcel_VoiceNo_Dark" -     image_unselected="Parcel_Voice_Dark" +     image_selected="AudioMute_Off" +     image_unselected="Audio_Off"       is_toggle="true"       layout="topleft"       left_pad="16" @@ -365,7 +366,7 @@       name="device_settings_panel"       class="panel_voice_device_settings"       width="501" -     top="285"> +     top="280">        <panel.string          name="default_text">          Default diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 1f0ace5843..27461571da 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -7,7 +7,7 @@   left="0"   name="panel_profile"   top="0" - width="313"> + width="317">      <string       name="CaptionTextAcctInfo">          [ACCTTYPE] @@ -41,8 +41,8 @@       layout="topleft"       left="0"       top="0" -     height="517" -     width="313" +     height="524" +     width="317"       border_size="0">        <layout_panel           name="profile_stack" @@ -50,8 +50,8 @@           layout="topleft"           top="0"           left="0" -         height="505" -         width="313"> +         height="524" +         width="317">          <scroll_container           color="DkGray2"           follows="all" @@ -59,8 +59,8 @@           left="0"           name="profile_scroll"           opaque="true" -         height="505" -         width="313" +         height="524" +         width="317"           top="0">            <panel                  layout="topleft" @@ -73,9 +73,9 @@                  width="297">              <panel                    follows="left|top|right" -                  height="117" +                  height="124"                    layout="topleft" -                  left="10" +                  left="13"                    name="second_life_image_panel"                    top="0"                    width="297"> @@ -84,7 +84,7 @@                 default_image_name="None"                 enabled="false"                 follows="top|left" -               height="117" +               height="124"                 layout="topleft"                 left="0"                 name="2nd_life_pic" @@ -103,7 +103,7 @@                 width="180" />                <expandable_text                 follows="left|top|right" -               height="95" +               height="97"                 layout="topleft"                 left="107"                 textbox.max_length="512" @@ -118,10 +118,10 @@              </panel>              <panel               follows="left|top|right" -             height="117" +             height="124"               layout="topleft" -       top_pad="10" -             left="10" +       top_pad="0" +             left="13"               name="first_life_image_panel"               width="297">                <texture_picker @@ -129,7 +129,7 @@                 default_image_name="None"                 enabled="false"                 follows="top|left" -               height="117" +               height="124"                 layout="topleft"                 left="0"                 name="real_world_pic" @@ -147,7 +147,7 @@                 width="180" />                <expandable_text                 follows="left|top|right" -               height="95" +               height="97"                 layout="topleft"                 left="107"                 textbox.max_length="512" @@ -295,18 +295,18 @@           layout="topleft"           name="profile_buttons_panel"           auto_resize="false" -         width="313"> +         width="317">          <button           follows="bottom|left"           height="23"           label="Add Friend"           layout="topleft" -         left="0" +         left="2"           mouse_opaque="false"           name="add_friend"           tool_tip="Offer friendship to the Resident"           top="5" -         width="80" /> +         width="81" />          <button           follows="bottom|left"           height="23" @@ -326,7 +326,7 @@           tool_tip="Call this Resident"           left_pad="3"           top="5" -         width="45" /> +         width="46" />          <button           enabled="false"           follows="bottom|left" @@ -337,7 +337,7 @@           tool_tip="Show the Resident on the map"           top="5"           left_pad="3" -         width="45" /> +         width="46" />          <button           follows="bottom|left"           height="23" @@ -347,7 +347,7 @@           tool_tip="Offer teleport"           left_pad="3"           top="5" -         width="85" /> +         width="78" />         <!-- <button           follows="bottom|right"           height="23" diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index d46e1f9852..f5396951ca 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -54,14 +54,14 @@       height="535"       halign="center"       layout="topleft" -     left="10" +     left="5"       min_width="333"       name="tabs"       tab_min_width="80"       tab_height="30"       tab_position="top"       top_pad="5" -     width="313"> +     width="317">          <panel           class="panel_profile"           filename="panel_profile.xml" diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 765e2ae623..d14355b9f4 100644 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -2,13 +2,12 @@  <panel   bevel_style="none"   border_style="line" - bottom="550"   follows="left|top|right|bottom" - height="508" + height="522"   layout="topleft"   left="0"   name="script panel" - width="500"> + width="497">      <panel.string       name="loading">          Loading... @@ -29,71 +28,17 @@       name="Title">          Script: [NAME]      </panel.string> -    <text_editor -     type="string" -     length="1" -     bottom="393" -     follows="left|top|right|bottom" -     font="Monospace" -     height="376" -     ignore_tab="false" -     layout="topleft" -     left="4" -     max_length="65536" -     name="Script Editor" -     width="492" -     show_line_numbers="true"  -     handle_edit_keys_directly="true"  -     word_wrap="true"> -        Loading... -    </text_editor> -    <button -     bottom="499" -     follows="right|bottom" -     height="20" -     label="Save" -     label_selected="Save" -     layout="topleft" -     left="360" -     name="Save_btn" -     width="128" /> -    <scroll_list -     bottom="457" -     follows="left|right|bottom" -     height="60" -     layout="topleft" -     left="4" -     name="lsl errors" -     width="492" /> -    <combo_box -     bottom="499" -     follows="left|bottom" -     height="20" -     label="Insert..." -     layout="topleft" -     left="12" -     name="Insert..." -     width="128" /> -    <text -     bottom="473" -     follows="left|bottom" -     height="12" -     layout="topleft" -     left="12" -     name="line_col" -     width="128" />      <menu_bar       bg_visible="false" -     bottom="18" -     follows="left|top|right" +     follows="left|top"       height="18"       layout="topleft" -     left="8" +     left="0"       mouse_opaque="false"       name="script_menu"       width="476">          <menu -         bottom="18" +         top="0"           height="62"           label="File"           layout="topleft" @@ -113,11 +58,10 @@               name="Revert All Changes" />          </menu>          <menu -         bottom="-647" +         top="0"           height="198"           label="Edit"           layout="topleft" -         left="222"           mouse_opaque="false"           name="Edit"           width="139"> @@ -169,11 +113,10 @@               name="Search / Replace..." />          </menu>          <menu -         bottom="18" +         top="0"           height="34"           label="Help"           layout="topleft" -         left="0"           mouse_opaque="false"           name="Help"           width="112"> @@ -187,4 +130,53 @@               name="Keyword Help..." />          </menu>      </menu_bar> +    <text_editor +    left="0" +     type="string" +     length="1" +     follows="left|top|right|bottom" +     font="Monospace" +     height="376" +     ignore_tab="false" +     layout="topleft" +     max_length="65536" +     name="Script Editor" +     width="487" +     show_line_numbers="true"  +     handle_edit_keys_directly="true"  +     word_wrap="true"> +        Loading... +    </text_editor> +    <scroll_list +    top_pad="10" +    left="0" +     follows="left|right|bottom" +     height="60" +     layout="topleft" +     name="lsl errors" +     width="487" /> +    <text +     follows="left|bottom" +     height="12" +     layout="topleft" +     left="0" +     name="line_col" +     width="128" /> +    <combo_box +     follows="left|bottom" +     height="23" +     label="Insert..." +     layout="topleft" +     name="Insert..." +     width="128" /> +    <button +     follows="right|bottom" +     height="23" +     label="Save" +     label_selected="Save" +     layout="topleft" +     top_pad="-35" +     right="487" +     name="Save_btn" +     width="61" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml index 3f836a661d..eb95de3a7c 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml @@ -91,7 +91,7 @@          class="panel_group_info_sidetray"          name="panel_group_info_sidetray"          filename="panel_group_info_sidetray.xml" -        label="Group Info" +        label="Group Profile"          font="SansSerifBold"        />        <panel diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 7a6089c74e..5754f67045 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -49,7 +49,7 @@       image_unselected="spacer35.tga"       image_pressed="spacer35.tga"       height="16" -     right="-228" +     right="-204"       label_shadow="false"       name="buycurrency"       tool_tip="My Balance" @@ -69,15 +69,16 @@       left_pad="0"       label_shadow="false"       name="buyL" -     pad_right="20px" +     pad_right="20" +     pad_bottom="2"       tool_tip="Click to buy more L$"       top="2" -     width="100" /> +     width="71" />      <text       type="string"       font="SansSerifSmall"       text_readonly_color="TimeTextColor" -     follows="right|bottom" +     follows="right|top"       halign="right"       height="16"       top="5" @@ -85,11 +86,11 @@       left_pad="0"       name="TimeText"       tool_tip="Current time (Pacific)" -     width="85"> -        12:00 AM +     width="89"> +        24:00 AM PST      </text>      <button -     follows="right|bottom" +     follows="right|top"       height="15"       image_selected="AudioMute_Off"       image_pressed="Audio_Press" @@ -101,7 +102,7 @@       tool_tip="Global Volume Control"       width="16" />      <text -     follows="right|bottom" +     follows="right|top"       halign="center"       height="12"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml index 74f97dca4e..d2c9e56bc3 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -85,7 +85,7 @@       left="45"       name="where"       text_color="LtGray_50" -     value="(In World)" +     value="(inworld)"       width="150" />  	<panel           follows="all" diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml new file mode 100644 index 0000000000..ed8df69bf4 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<avatar_list_item + height="0" + layout="topleft" + left="0" + name="avatar_list_item" + top="0" + width="0"> +  <!-- DEFAULT styles for avatar item --> +  <default_style +   font="SansSerifSmall" +   font.style="NORMAL" +   color="DkGray"/> + +  <!-- styles for avatar item INVITED to voice call --> +  <voice_call_invited_style +   font="SansSerifSmall" +   font.style="NORMAL" +   color="0.5 0.5 0.5 0.5"/> + +  <!-- styles for avatar item JOINED to voice call --> +  <voice_call_joined_style +   font="SansSerifSmall" +   font.style="NORMAL" +   color="white"/> + +  <!-- styles for avatar item which HAS LEFT voice call --> +  <voice_call_left_style +   font="SansSerifSmall" +   font.style="ITALIC" +   color="LtGray_50"/> + +  <!-- styles for ONLINE avatar item --> +  <online_style +   font="SansSerifSmall" +   font.style="NORMAL" +   color="white"/> + +  <!-- styles for OFFLINE avatar item --> +  <offline_style +   font="SansSerifSmall" +   font.style="NORMAL" +   color="0.5 0.5 0.5 1.0"/> +</avatar_list_item> diff --git a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml index 48baa2812d..1228f6be3d 100644 --- a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <filter_editor    clear_button_visible="true" -  search_button_visible="true" +  search_button_visible="false"    text_pad_left="7"    select_on_focus="true"    text_tentative_color="TextFgTentativeColor" diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml index c65244ae22..563f3dc5c2 100644 --- a/indra/newview/skins/default/xui/en/widgets/menu_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml @@ -1,3 +1,3 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <!-- Use this for the top-level menu styling --> -<menu_item font="SansSerif" /> +<menu_item font="SansSerifSmall" /> diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml index 3f5a4b8379..597c4e83b6 100644 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml @@ -14,8 +14,8 @@ label_pad_left - padding to the left of tab button labels                 tab_top_image_selected="TabTop_Left_Selected"                 tab_bottom_image_unselected="Toolbar_Left_Off"                 tab_bottom_image_selected="Toolbar_Left_Selected" -               tab_left_image_unselected="TabTop_Middle_Off" -               tab_left_image_selected="TabTop_Middle_Selected"/> +               tab_left_image_unselected="SegmentedBtn_Left_Disabled" +               tab_left_image_selected="SegmentedBtn_Left_Off"/>    <middle_tab tab_top_image_unselected="TabTop_Middle_Off"                 tab_top_image_selected="TabTop_Middle_Selected"                 tab_bottom_image_unselected="Toolbar_Middle_Off" | 
