diff options
| author | richard <none@none> | 2009-12-21 18:12:17 -0800 | 
|---|---|---|
| committer | richard <none@none> | 2009-12-21 18:12:17 -0800 | 
| commit | 18e25641fecd526cd2a2bb074311056101b3456a (patch) | |
| tree | 3ff89da9566a7f7b602b201d19bda7ff43c99134 | |
| parent | e6a8b3e2b2b3a352c674a788d27ac2d5f35983f8 (diff) | |
| parent | 5b978865e3b09e5b911728cd6381a2a4a7b3a9d3 (diff) | |
merge
42 files changed, 913 insertions, 528 deletions
| diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h index 45b84ea3ea..f5c90291b8 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer.h @@ -36,6 +36,7 @@  #include "llinstancetracker.h"  #define FAST_TIMER_ON 1 +#define TIME_FAST_TIMERS 0  #if LL_WINDOWS @@ -56,7 +57,7 @@ inline U32 get_cpu_clock_count_32()      return ret_val;  } -// return full timer value, still shifted by 8 bits +// return full timer value, *not* shifted by 8 bits  inline U64 get_cpu_clock_count_64()  {  	U64 ret_val; @@ -69,7 +70,7 @@ inline U64 get_cpu_clock_count_64()  		mov dword ptr [ret_val+4], edx  		mov dword ptr [ret_val], eax  	} -    return ret_val >> 8; +    return ret_val;  }  #endif // LL_WINDOWS @@ -242,6 +243,9 @@ public:  	LLFastTimer(NamedTimer::FrameState& timer)  	:	mFrameState(&timer)  	{ +#if TIME_FAST_TIMERS +		U64 timer_start = get_cpu_clock_count_64(); +#endif  #if FAST_TIMER_ON  		NamedTimer::FrameState* frame_state = &timer;  		U32 cur_time = get_cpu_clock_count_32(); @@ -256,10 +260,17 @@ public:  		mLastTimer = sCurTimer;  		sCurTimer = this;  #endif +#if TIME_FAST_TIMERS +		U64 timer_end = get_cpu_clock_count_64(); +		sTimerCycles += timer_end - timer_start; +#endif  	}  	~LLFastTimer()  	{ +#if TIME_FAST_TIMERS +		U64 timer_start = get_cpu_clock_count_64(); +#endif  #if FAST_TIMER_ON  		NamedTimer::FrameState* frame_state = mFrameState;  		U32 cur_time = get_cpu_clock_count_32(); @@ -276,6 +287,11 @@ public:  		U32 total_time = cur_time - mStartTotalTime;  		last_timer->mStartSelfTime += total_time;  #endif +#if TIME_FAST_TIMERS +		U64 timer_end = get_cpu_clock_count_64(); +		sTimerCycles += timer_end - timer_start; +		sTimerCalls++; +#endif	  	} @@ -297,11 +313,12 @@ public:  	static const NamedTimer* getTimerByName(const std::string& name);  public: -	static bool 		sPauseHistory; -	static bool 		sResetHistory; +	static bool 			sPauseHistory; +	static bool 			sResetHistory; +	static U64				sTimerCycles; +	static U32				sTimerCalls;  private: -	typedef std::vector<LLFastTimer*> timer_stack_t;  	static LLFastTimer*		sCurTimer;  	static S32				sCurFrameIndex;  	static S32				sLastFrameIndex; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index f7fd2dbdfe..d7a692ec9b 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2717,7 +2717,7 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o  	}  	params.from_xui = true; -	setupParams(params, parent); +	applyXUILayout(params, parent);   	initFromParams(params);  	initFloater(params); diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 5e15fa3919..7d8c102750 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -247,7 +247,7 @@ LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o  	}  	p.from_xui = true; -	setupParams(p, parent); +	applyXUILayout(p, parent);  	LLLayoutStack* layout_stackp = LLUICtrlFactory::create<LLLayoutStack>(p);  	if (parent && layout_stackp) diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp index 1891bca36c..aea7c5f87c 100644 --- a/indra/llui/llmultislider.cpp +++ b/indra/llui/llmultislider.cpp @@ -50,6 +50,12 @@ const F32 FLOAT_THRESHOLD = 0.00001f;  S32 LLMultiSlider::mNameCounter = 0; +LLMultiSlider::SliderParams::SliderParams() +:	name("name"), +	value("value", 0.f) +{ +} +  LLMultiSlider::Params::Params()  :	max_sliders("max_sliders", 1),  	allow_overlap("allow_overlap", false), @@ -63,7 +69,8 @@ LLMultiSlider::Params::Params()  	triangle_color("triangle_color"),  	mouse_down_callback("mouse_down_callback"),  	mouse_up_callback("mouse_up_callback"), -	thumb_width("thumb_width") +	thumb_width("thumb_width"), +	sliders("slider")  {  	name = "multi_slider_bar";  	mouse_opaque(true); @@ -99,6 +106,20 @@ LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p)  	{  		setMouseUpCallback(initCommitCallback(p.mouse_up_callback));  	} + +	for (LLInitParam::ParamIterator<SliderParams>::const_iterator it = p.sliders().begin(); +		it != p.sliders().end(); +		++it) +	{ +		if (it->name.isProvided()) +		{ +			addSlider(it->value, it->name); +		} +		else +		{ +			addSlider(it->value); +		} +	}  }  LLMultiSlider::~LLMultiSlider() @@ -230,6 +251,30 @@ const std::string& LLMultiSlider::addSlider(F32 val)  	return mCurSlider;  } +void LLMultiSlider::addSlider(F32 val, const std::string& name) +{ +	F32 initVal = val; + +	if(mValue.size() >= mMaxNumSliders) { +		return; +	} + +	bool foundOne = findUnusedValue(initVal); +	if(!foundOne) { +		return; +	} + +	// add a new thumb rect +	mThumbRects[name] = LLRect( 0, getRect().getHeight(), mThumbWidth, 0 ); + +	// add the value and set the current slider to this one +	mValue.insert(name, initVal); +	mCurSlider = name; + +	// move the slider +	setSliderValue(mCurSlider, initVal, TRUE); +} +  bool LLMultiSlider::findUnusedValue(F32& initVal)  {  	bool firstTry = true; @@ -572,7 +617,6 @@ void LLMultiSlider::draw()  	LLF32UICtrl::draw();  } -  boost::signals2::connection LLMultiSlider::setMouseDownCallback( const commit_signal_t::slot_type& cb )   {   	if (!mMouseDownSignal) mMouseDownSignal = new commit_signal_t(); diff --git a/indra/llui/llmultislider.h b/indra/llui/llmultislider.h index f8e43a0470..88576da85b 100644 --- a/indra/llui/llmultislider.h +++ b/indra/llui/llmultislider.h @@ -41,6 +41,13 @@ class LLUICtrlFactory;  class LLMultiSlider : public LLF32UICtrl  {  public: +	struct SliderParams : public LLInitParam::Block<SliderParams> +	{ +		Optional<std::string>	name; +		Mandatory<F32>			value; +		SliderParams(); +	}; +  	struct Params : public LLInitParam::Block<Params, LLF32UICtrl::Params>  	{  		Optional<S32>	max_sliders; @@ -60,6 +67,7 @@ public:  										mouse_up_callback;  		Optional<S32>		thumb_width; +		Multiple<SliderParams>	sliders;  		Params();  	}; @@ -68,13 +76,13 @@ protected:  	friend class LLUICtrlFactory;  public:  	virtual ~LLMultiSlider(); -	void			setSliderValue(const std::string& name, F32 value, BOOL from_event = FALSE); -	F32				getSliderValue(const std::string& name) const; +	void				setSliderValue(const std::string& name, F32 value, BOOL from_event = FALSE); +	F32					getSliderValue(const std::string& name) const; -	const std::string& getCurSlider() const					{ return mCurSlider; } -	F32				getCurSliderValue() const				{ return getSliderValue(mCurSlider); } -	void			setCurSlider(const std::string& name); -	void			setCurSliderValue(F32 val, BOOL from_event = false) { setSliderValue(mCurSlider, val, from_event); } +	const std::string&	getCurSlider() const					{ return mCurSlider; } +	F32					getCurSliderValue() const				{ return getSliderValue(mCurSlider); } +	void				setCurSlider(const std::string& name); +	void				setCurSliderValue(F32 val, BOOL from_event = false) { setSliderValue(mCurSlider, val, from_event); }  	/*virtual*/ void	setValue(const LLSD& value);  	/*virtual*/ LLSD	getValue() const		{ return mValue; } @@ -82,12 +90,13 @@ public:  	boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb );  	boost::signals2::connection setMouseUpCallback(	const commit_signal_t::slot_type& cb ); -	bool			findUnusedValue(F32& initVal); +	bool				findUnusedValue(F32& initVal);  	const std::string&	addSlider();  	const std::string&	addSlider(F32 val); -	void			deleteSlider(const std::string& name); -	void			deleteCurSlider()			{ deleteSlider(mCurSlider); } -	void			clear(); +	void				addSlider(F32 val, const std::string& name); +	void				deleteSlider(const std::string& name); +	void				deleteCurSlider()			{ deleteSlider(mCurSlider); } +	void				clear();  	/*virtual*/ BOOL	handleHover(S32 x, S32 y, MASK mask);  	/*virtual*/ BOOL	handleMouseUp(S32 x, S32 y, MASK mask); @@ -109,7 +118,8 @@ protected:  	LLRect			mDragStartThumbRect;  	S32				mThumbWidth; -	std::map<std::string, LLRect>	mThumbRects; +	std::map<std::string, LLRect>	 +					mThumbRects;  	LLUIColor		mTrackColor;  	LLUIColor		mThumbOutlineColor;  	LLUIColor		mThumbCenterColor; diff --git a/indra/llui/llmultisliderctrl.cpp b/indra/llui/llmultisliderctrl.cpp index 7323323d8c..f4434a0f78 100644 --- a/indra/llui/llmultisliderctrl.cpp +++ b/indra/llui/llmultisliderctrl.cpp @@ -65,7 +65,8 @@ LLMultiSliderCtrl::Params::Params()  	text_color("text_color"),  	text_disabled_color("text_disabled_color"),  	mouse_down_callback("mouse_down_callback"), -	mouse_up_callback("mouse_up_callback") +	mouse_up_callback("mouse_up_callback"), +	sliders("slider")  {  	mouse_opaque = true;  } @@ -161,6 +162,7 @@ LLMultiSliderCtrl::LLMultiSliderCtrl(const LLMultiSliderCtrl::Params& p)  	S32 slider_left = label_width ? label_width + multi_sliderctrl_spacing : 0;  	LLRect slider_rect( slider_left, top, slider_right, bottom );  	LLMultiSlider::Params params; +	params.sliders = p.sliders;  	params.rect(slider_rect);  	params.commit_callback.function( LLMultiSliderCtrl::onSliderCommit );  	params.mouse_down_callback( p.mouse_down_callback ); diff --git a/indra/llui/llmultisliderctrl.h b/indra/llui/llmultisliderctrl.h index 16d07541f2..e8366d09c2 100644 --- a/indra/llui/llmultisliderctrl.h +++ b/indra/llui/llmultisliderctrl.h @@ -69,6 +69,8 @@ public:  		Optional<CommitCallbackParam>	mouse_down_callback,  										mouse_up_callback; +		Multiple<LLMultiSlider::SliderParams>	sliders; +  		Params();  	}; diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 738a96f730..db32882438 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -452,7 +452,7 @@ void LLPanel::initFromParams(const LLPanel::Params& p)  	parseFollowsFlags(p);  	setToolTip(p.tool_tip()); -	setSaveToXML(p.from_xui); +	setFromXUI(p.from_xui);  	mHoverCursor = getCursorFromString(p.hover_cursor); @@ -542,7 +542,7 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu  		}  		params.from_xui = true; -		setupParams(params, parent); +		applyXUILayout(params, parent);  		{  			LLFastTimer timer(FTM_PANEL_CONSTRUCTION);  			initFromParams(params); diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp index 997b9c13f8..4087b484aa 100644 --- a/indra/llui/llradiogroup.cpp +++ b/indra/llui/llradiogroup.cpp @@ -116,6 +116,10 @@ void LLRadioGroup::initFromParams(const Params& p)  		item_params.font.setIfNotProvided(mFont); // apply radio group font by default  		item_params.commit_callback.function = boost::bind(&LLRadioGroup::onClickButton, this, _1);  		item_params.from_xui = p.from_xui; +		if (p.from_xui) +		{ +			applyXUILayout(item_params, this); +		}  		LLRadioCtrl* item = LLUICtrlFactory::create<LLRadioCtrl>(item_params, this);  		mRadioButtons.push_back(item); diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp index 544352176a..7238d903a3 100644 --- a/indra/llui/llscrolllistcell.cpp +++ b/indra/llui/llscrolllistcell.cpp @@ -353,7 +353,7 @@ LLScrollListCheck::LLScrollListCheck(const LLScrollListCell::Params& p)  {  	LLCheckBoxCtrl::Params checkbox_p;  	checkbox_p.name("checkbox"); -	checkbox_p.rect.left(0).bottom(0).width(p.width).height(p.width); +	checkbox_p.rect = LLRect(0, p.width, p.width, 0);  	checkbox_p.enabled(p.enabled);  	checkbox_p.initial_value(p.value()); diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index d6d46654d5..20a1ab7af3 100644 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -75,10 +75,8 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p)  	static LLUICachedControl<S32> spinctrl_spacing ("UISpinctrlSpacing", 0);  	static LLUICachedControl<S32> spinctrl_btn_width ("UISpinctrlBtnWidth", 0);  	static LLUICachedControl<S32> spinctrl_btn_height ("UISpinctrlBtnHeight", 0); -	S32 top = getRect().getHeight(); -	S32 bottom = top - 2 * spinctrl_btn_height; -	S32 centered_top = top; -	S32 centered_bottom = bottom; +	S32 centered_top = getRect().getHeight(); +	S32 centered_bottom = getRect().getHeight() - 2 * spinctrl_btn_height;  	S32 btn_left = 0;  	// reserve space for spinner  	S32 label_width = llclamp(p.label_width(), 0, llmax(0, getRect().getWidth() - 40)); @@ -105,25 +103,15 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p)  	// Spin buttons  	LLButton::Params up_button_params(p.up_button); -	up_button_params.rect -					.left(btn_left) -					.top(top) -					.right(btn_right) -					.height(spinctrl_btn_height); +	up_button_params.rect = LLRect(btn_left, getRect().getHeight(), btn_right, getRect().getHeight() - spinctrl_btn_height);  	up_button_params.click_callback.function(boost::bind(&LLSpinCtrl::onUpBtn, this, _2));  	up_button_params.mouse_held_callback.function(boost::bind(&LLSpinCtrl::onUpBtn, this, _2));  	mUpBtn = LLUICtrlFactory::create<LLButton>(up_button_params);  	addChild(mUpBtn); -	LLRect down_rect( btn_left, top - spinctrl_btn_height, btn_right, bottom ); -  	LLButton::Params down_button_params(p.down_button); -	down_button_params.rect -					.left(btn_left) -					.right(btn_right) -					.bottom(bottom) -					.height(spinctrl_btn_height); +	down_button_params.rect = LLRect(btn_left, getRect().getHeight() - spinctrl_btn_height, btn_right, getRect().getHeight() - 2 * spinctrl_btn_height);  	down_button_params.click_callback.function(boost::bind(&LLSpinCtrl::onDownBtn, this, _2));  	down_button_params.mouse_held_callback.function(boost::bind(&LLSpinCtrl::onDownBtn, this, _2));  	mDownBtn = LLUICtrlFactory::create<LLButton>(down_button_params); diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 83e2e3db50..327dd01612 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -266,8 +266,6 @@ bool LLTabContainer::addChild(LLView* view, S32 tab_group)  	if (panelp)  	{ -		panelp->setSaveToXML(TRUE); -  		addTabPanel(TabPanelParams().panel(panelp).label(panelp->getLabel()).is_placeholder(dynamic_cast<LLPlaceHolderPanel*>(view) != NULL));  		return true;  	} @@ -1019,12 +1017,10 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)  	{  		if (textbox)  		{ -			textbox->setSaveToXML(false);  			addChild( textbox, 0 );  		}  		if (btn)  		{ -			btn->setSaveToXML(false);  			addChild( btn, 0 );  		}  	} @@ -1747,24 +1743,20 @@ void LLTabContainer::initButtons()  		}  	} -	mPrevArrowBtn->setSaveToXML(false);  	mPrevArrowBtn->setTabStop(FALSE);  	addChild(mPrevArrowBtn); -	mNextArrowBtn->setSaveToXML(false);  	mNextArrowBtn->setTabStop(FALSE);  	addChild(mNextArrowBtn);  	if (mJumpPrevArrowBtn)  	{ -		mJumpPrevArrowBtn->setSaveToXML(false);  		mJumpPrevArrowBtn->setTabStop(FALSE);  		addChild(mJumpPrevArrowBtn);  	}  	if (mJumpNextArrowBtn)  	{ -		mJumpNextArrowBtn->setSaveToXML(false);  		mJumpNextArrowBtn->setTabStop(FALSE);  		addChild(mJumpNextArrowBtn);  	} diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index cb0907a771..e54032ac5e 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -962,7 +962,10 @@ void LLTextBase::draw()  	reflow();  	// then update scroll position, as cursor may have moved -	updateScrollFromCursor(); +	if (!mReadOnly) +	{ +		updateScrollFromCursor(); +	}  	LLRect doc_rect;  	if (mScroller) @@ -1932,11 +1935,19 @@ void LLTextBase::endOfLine()  void LLTextBase::startOfDoc()  {  	setCursorPos(0); +	if (mScroller) +	{ +		mScroller->goToTop(); +	}  }  void LLTextBase::endOfDoc()  {  	setCursorPos(getLength()); +	if (mScroller) +	{ +		mScroller->goToBottom(); +	}  }  void LLTextBase::changePage( S32 delta ) @@ -2001,6 +2012,16 @@ void LLTextBase::changeLine( S32 delta )  	setCursorPos(new_cursor_pos, true);  } +bool LLTextBase::scrolledToStart() +{ +	return mScroller->isAtTop(); +} + +bool LLTextBase::scrolledToEnd() +{ +	return mScroller->isAtBottom(); +} +  bool LLTextBase::setCursor(S32 row, S32 column)  { diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index a1f8ba39ae..c91578b637 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -180,6 +180,8 @@ public:  	void					changePage( S32 delta );  	void					changeLine( S32 delta ); +	bool					scrolledToStart(); +	bool					scrolledToEnd();  	const LLFontGL*			getDefaultFont() const					{ return mDefaultFont; } diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 1ea6b66a93..d0ed3b6fca 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -1915,6 +1915,7 @@ namespace LLInitParam  		green = color.mV[VGREEN];  		blue = color.mV[VBLUE];  		alpha = color.mV[VALPHA]; +		control.set("", false);  	}  	void TypeValues<LLUIColor>::declareValues() @@ -2046,12 +2047,16 @@ namespace LLInitParam  	void TypedParam<LLRect>::setBlockFromValue()  	{ -		left = mData.mValue.mLeft; -		right = mData.mValue.mRight; -		bottom = mData.mValue.mBottom; -		top = mData.mValue.mTop; -		width.setProvided(false); -		height.setProvided(false); +		// because of the ambiguity in specifying a rect by position and/or dimensions +		// we clear the "provided" flag so that values from xui/etc have priority +		// over those calculated from the rect object + +		left.set(mData.mValue.mLeft, false); +		right.set(mData.mValue.mRight, false); +		bottom.set(mData.mValue.mBottom, false); +		top.set(mData.mValue.mTop, false); +		width.set(mData.mValue.getWidth(), false); +		height.set(mData.mValue.getHeight(), false);  	}  	TypedParam<LLCoordGL>::TypedParam(BlockDescriptor& descriptor, const char* name, LLCoordGL value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count) diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index 6788f29ba9..b1fa6add67 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -184,8 +184,6 @@ public:  	{  		T* widget = NULL; -		T::setupParams(params, parent); -  		if (!params.validateBlock())  		{  			llwarns << getInstance()->getCurFileName() << ": Invalid parameter block for " << typeid(T).name() << llendl; @@ -310,6 +308,7 @@ fail:  		// Apply layout transformations, usually munging rect  		params.from_xui = true; +		T::applyXUILayout(params, parent);  		T* widget = createWidget<T>(params, parent);  		typedef typename T::child_registry_t registry_t; diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp index 1dfc281d93..966d919dc7 100644 --- a/indra/llui/lluiimage.cpp +++ b/indra/llui/lluiimage.cpp @@ -168,6 +168,7 @@ namespace LLInitParam  		if (name() == "none")  		{  			mData.mValue = NULL; +			return;  		}  		LLUIImage* imagep =  LLUI::getUIImage(name()); diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index a8d8626e49..f1b08c380b 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -126,7 +126,7 @@ LLView::LLView(const LLView::Params& p)  :	mName(p.name),  	mParentView(NULL),  	mReshapeFlags(FOLLOWS_NONE), -	mSaveToXML(p.from_xui), +	mFromXUI(p.from_xui),  	mIsFocusRoot(FALSE),  	mLastVisible(FALSE),  	mNextInsertionOrdinal(0), @@ -2479,7 +2479,7 @@ static bool get_last_child_rect(LLView* parent, LLRect *rect)  	for (;itor != parent->getChildList()->end(); ++itor)  	{  		LLView *last_view = (*itor); -		if (last_view->getSaveToXML()) +		if (last_view->getFromXUI())  		{  			*rect = last_view->getRect();  			return true; @@ -2489,7 +2489,7 @@ static bool get_last_child_rect(LLView* parent, LLRect *rect)  }  //static -void LLView::setupParams(LLView::Params& p, LLView* parent) +void LLView::applyXUILayout(LLView::Params& p, LLView* parent)  {  	const S32 VPAD = 4;  	const S32 MIN_WIDGET_HEIGHT = 10; @@ -2509,7 +2509,7 @@ void LLView::setupParams(LLView::Params& p, LLView* parent)  		LLRect last_rect = parent->getLocalRect();  		bool layout_topleft = (p.layout() == "topleft"); -		if (layout_topleft && p.from_xui) +		if (layout_topleft)  		{  			//invert top to bottom  			if (p.rect.top.isProvided()) p.rect.top = parent_rect.getHeight() - p.rect.top; @@ -2535,10 +2535,10 @@ void LLView::setupParams(LLView::Params& p, LLView* parent)  				p.rect.right.setProvided(false); // recalculate the right  			}  		} -		else if (p.from_xui) // only do negative coordinate magic for XUI +		else  		{ -			if (p.rect.left < 0) p.rect.left = p.rect.left + parent_rect.getWidth(); -			if (p.rect.right < 0) p.rect.right = p.rect.right + parent_rect.getWidth(); +			if (p.rect.left.isProvided() && p.rect.left < 0) p.rect.left = p.rect.left + parent_rect.getWidth(); +			if (p.rect.right.isProvided() && p.rect.right < 0) p.rect.right = p.rect.right + parent_rect.getWidth();  		}  		if (p.center_vert)  		{ @@ -2556,15 +2556,15 @@ void LLView::setupParams(LLView::Params& p, LLView* parent)  				p.rect.top.setProvided(false); // recalculate the top  			}  		} -		else if (p.from_xui) +		else  		{ -			if (p.rect.bottom < 0) p.rect.bottom = p.rect.bottom + parent_rect.getHeight(); -			if (p.rect.top < 0) p.rect.top = p.rect.top + parent_rect.getHeight(); +			if (p.rect.bottom.isProvided() && p.rect.bottom < 0) p.rect.bottom = p.rect.bottom + parent_rect.getHeight(); +			if (p.rect.top.isProvided() && p.rect.top < 0) p.rect.top = p.rect.top + parent_rect.getHeight();  		}  		// DEPRECATE: automatically fall back to height of MIN_WIDGET_HEIGHT pixels -		if (!p.rect.height.isProvided() && !p.rect.top.isProvided()) +		if (!p.rect.height.isProvided() && !p.rect.top.isProvided() && p.rect.height == 0)  		{  			p.rect.height = MIN_WIDGET_HEIGHT;  		} @@ -2663,7 +2663,7 @@ static void convert_to_relative_layout(LLView::Params& p, LLView* parent)  	// Use setupParams to get the final widget rectangle  	// according to our wacky layout rules.  	LLView::Params final = p; -	LLView::setupParams(final, parent); +	LLView::applyXUILayout(final, parent);  	// Must actually extract the rectangle to get consistent  	// right = left+width, top = bottom+height  	LLRect final_rect = final.rect; diff --git a/indra/llui/llview.h b/indra/llui/llview.h index f8460f5361..c4d7313743 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -395,8 +395,8 @@ public:  	void parseFollowsFlags(const LLView::Params& params);  	// Some widgets, like close box buttons, don't need to be saved -	BOOL getSaveToXML() const { return mSaveToXML; } -	void setSaveToXML(BOOL b) { mSaveToXML = b; } +	BOOL getFromXUI() const { return mFromXUI; } +	void setFromXUI(BOOL b) { mFromXUI = b; }  	typedef enum e_hit_test_type  	{ @@ -498,7 +498,7 @@ public:  	// Set up params after XML load before calling new(),  	// usually to adjust layout. -	static void setupParams(Params& p, LLView* parent); +	static void applyXUILayout(Params& p, LLView* parent);  	// For re-export of floaters and panels, convert the coordinate system  	// to be top-left based. @@ -573,7 +573,7 @@ private:  	LLUIString	mToolTipMsg;	// isNull() is true if none.  	U8          mSoundFlags; -	BOOL		mSaveToXML; +	BOOL		mFromXUI;  	BOOL		mIsFocusRoot;  	BOOL		mUseBoundingRect; // hit test against bounding rectangle that includes all child elements diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index c5a1ffdcb3..651c66d0a7 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -333,6 +333,54 @@ void LLAvatarActions::pay(const LLUUID& id)  	}  } +// static +void LLAvatarActions::kick(const LLUUID& id) +{ +	LLSD payload; +	payload["avatar_id"] = id; +	LLNotifications::instance().add("KickUser", LLSD(), payload, handleKick); +} + +// static +void LLAvatarActions::freeze(const LLUUID& id) +{ +	LLSD payload; +	payload["avatar_id"] = id; +	LLNotifications::instance().add("FreezeUser", LLSD(), payload, handleFreeze); +} + +// static +void LLAvatarActions::unfreeze(const LLUUID& id) +{ +	LLSD payload; +	payload["avatar_id"] = id; +	LLNotifications::instance().add("UnFreezeUser", LLSD(), payload, handleUnfreeze); +} + +//static  +void LLAvatarActions::csr(const LLUUID& id, std::string name) +{ +	if (name.empty()) return; +	 +	std::string url = "http://csr.lindenlab.com/agent/"; +	 +	// slow and stupid, but it's late +	S32 len = name.length(); +	for (S32 i = 0; i < len; i++) +	{ +		if (name[i] == ' ') +		{ +			url += "%20"; +		} +		else +		{ +			url += name[i]; +		} +	} +	 +	LLWeb::loadURL(url); +} +  //static   void LLAvatarActions::share(const LLUUID& id)  { @@ -457,6 +505,67 @@ bool LLAvatarActions::callbackAddFriendWithMessage(const LLSD& notification, con  }  // static +bool LLAvatarActions::handleKick(const LLSD& notification, const LLSD& response) +{ +	S32 option = LLNotification::getSelectedOption(notification, response); + +	if (option == 0) +	{ +		LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID(); +		LLMessageSystem* msg = gMessageSystem; + +		msg->newMessageFast(_PREHASH_GodKickUser); +		msg->nextBlockFast(_PREHASH_UserInfo); +		msg->addUUIDFast(_PREHASH_GodID,		gAgent.getID() ); +		msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID()); +		msg->addUUIDFast(_PREHASH_AgentID,   avatar_id ); +		msg->addU32("KickFlags", KICK_FLAGS_DEFAULT ); +		msg->addStringFast(_PREHASH_Reason,    response["message"].asString() ); +		gAgent.sendReliableMessage(); +	} +	return false; +} +bool LLAvatarActions::handleFreeze(const LLSD& notification, const LLSD& response) +{ +	S32 option = LLNotification::getSelectedOption(notification, response); + +	if (option == 0) +	{ +		LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID(); +		LLMessageSystem* msg = gMessageSystem; + +		msg->newMessageFast(_PREHASH_GodKickUser); +		msg->nextBlockFast(_PREHASH_UserInfo); +		msg->addUUIDFast(_PREHASH_GodID,		gAgent.getID() ); +		msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID()); +		msg->addUUIDFast(_PREHASH_AgentID,   avatar_id ); +		msg->addU32("KickFlags", KICK_FLAGS_FREEZE ); +		msg->addStringFast(_PREHASH_Reason, response["message"].asString() ); +		gAgent.sendReliableMessage(); +	} +	return false; +} +bool LLAvatarActions::handleUnfreeze(const LLSD& notification, const LLSD& response) +{ +	S32 option = LLNotification::getSelectedOption(notification, response); +	std::string text = response["message"].asString(); +	if (option == 0) +	{ +		LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID(); +		LLMessageSystem* msg = gMessageSystem; + +		msg->newMessageFast(_PREHASH_GodKickUser); +		msg->nextBlockFast(_PREHASH_UserInfo); +		msg->addUUIDFast(_PREHASH_GodID,		gAgent.getID() ); +		msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID()); +		msg->addUUIDFast(_PREHASH_AgentID,   avatar_id ); +		msg->addU32("KickFlags", KICK_FLAGS_UNFREEZE ); +		msg->addStringFast(_PREHASH_Reason,    text ); +		gAgent.sendReliableMessage(); +	} +	return false; +} +// static  bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& response)  {  	S32 option = LLNotificationsUtil::getSelectedOption(notification, response); diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index 01c18d4228..a4504ae679 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -138,11 +138,35 @@ public:  	 */	  	static void inviteToGroup(const LLUUID& id); +	/** +	 * Kick avatar off grid +	 */	 +	static void kick(const LLUUID& id); + +	/** +	 * Freeze avatar +	 */	 +	static void freeze(const LLUUID& id); + +	/** +	 * Unfreeze avatar +	 */	 +	static void unfreeze(const LLUUID& id); + +	/** +	 * Open csr page for avatar +	 */	 +	static void csr(const LLUUID& id, std::string name); + +	  private:  	static bool callbackAddFriend(const LLSD& notification, const LLSD& response);  	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);  	static bool handleRemove(const LLSD& notification, const LLSD& response);  	static bool handlePay(const LLSD& notification, const LLSD& response, LLUUID avatar_id); +	static bool handleKick(const LLSD& notification, const LLSD& response); +	static bool handleFreeze(const LLSD& notification, const LLSD& response); +	static bool handleUnfreeze(const LLSD& notification, const LLSD& response);  	static void callback_invite_to_group(LLUUID group_id, LLUUID id);  	// Just request friendship, no dialog. diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 7a83299dac..b1ddddc4b1 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -44,6 +44,8 @@  #include "llfloaterreg.h"  #include "llmutelist.h"  #include "llstylemap.h" +#include "lllayoutstack.h" +#include "llagent.h"  #include "llsidetray.h"//for blocked objects panel @@ -346,18 +348,23 @@ protected:  LLChatHistory::LLChatHistory(const LLChatHistory::Params& p) -: LLTextEditor(p), -mMessageHeaderFilename(p.message_header), -mMessageSeparatorFilename(p.message_separator), -mLeftTextPad(p.left_text_pad), -mRightTextPad(p.right_text_pad), -mLeftWidgetPad(p.left_widget_pad), -mRightWidgetPad(p.right_widget_pad), -mTopSeparatorPad(p.top_separator_pad), -mBottomSeparatorPad(p.bottom_separator_pad), -mTopHeaderPad(p.top_header_pad), -mBottomHeaderPad(p.bottom_header_pad) +:	LLUICtrl(p), +	mMessageHeaderFilename(p.message_header), +	mMessageSeparatorFilename(p.message_separator), +	mLeftTextPad(p.left_text_pad), +	mRightTextPad(p.right_text_pad), +	mLeftWidgetPad(p.left_widget_pad), +	mRightWidgetPad(p.right_widget_pad), +	mTopSeparatorPad(p.top_separator_pad), +	mBottomSeparatorPad(p.bottom_separator_pad), +	mTopHeaderPad(p.top_header_pad), +	mBottomHeaderPad(p.bottom_header_pad)  { +	LLTextEditor::Params editor_params(p); +	editor_params.rect = getLocalRect(); +	editor_params.follows.flags = FOLLOWS_ALL; +	editor_params.enabled = false; // read only +	mEditor = LLUICtrlFactory::create<LLTextEditor>(editor_params, this);  }  LLChatHistory::~LLChatHistory() @@ -365,6 +372,49 @@ LLChatHistory::~LLChatHistory()  	this->clear();  } +void LLChatHistory::initFromParams(const LLChatHistory::Params& p) +{ +	static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0); + +	LLRect stack_rect = getLocalRect(); +	stack_rect.mRight -= scrollbar_size; +	LLLayoutStack::Params layout_p; +	layout_p.rect = stack_rect; +	layout_p.follows.flags = FOLLOWS_ALL; +	layout_p.orientation = "vertical"; +	layout_p.mouse_opaque = false; +	 +	LLLayoutStack* stackp = LLUICtrlFactory::create<LLLayoutStack>(layout_p, this); +	 +	const S32 NEW_TEXT_NOTICE_HEIGHT = 20; +	 +	LLPanel::Params panel_p; +	panel_p.name = "spacer"; +	panel_p.background_visible = false; +	panel_p.has_border = false; +	panel_p.mouse_opaque = false; +	stackp->addPanel(LLUICtrlFactory::create<LLPanel>(panel_p), 0, 30, true, false, LLLayoutStack::ANIMATE); + +	panel_p.name = "new_text_notice_holder"; +	LLRect new_text_notice_rect = getLocalRect(); +	new_text_notice_rect.mTop = new_text_notice_rect.mBottom + NEW_TEXT_NOTICE_HEIGHT; +	panel_p.rect = new_text_notice_rect; +	panel_p.background_opaque = true; +	panel_p.background_visible = true; +	panel_p.visible = false; +	mMoreChatPanel = LLUICtrlFactory::create<LLPanel>(panel_p); +	 +	LLTextBox::Params text_p(p.more_chat_text); +	text_p.rect = mMoreChatPanel->getLocalRect(); +	text_p.follows.flags = FOLLOWS_ALL; +	text_p.name = "more_chat_text"; +	mMoreChatText = LLUICtrlFactory::create<LLTextBox>(text_p, mMoreChatPanel); +	mMoreChatText->setClickedCallback(boost::bind(&LLChatHistory::onClickMoreText, this)); + +	stackp->addPanel(mMoreChatPanel, 0, 0, false, false, LLLayoutStack::ANIMATE); +} + +  /*void LLChatHistory::updateTextRect()  {  	static LLUICachedControl<S32> texteditor_border ("UITextEditorBorder", 0); @@ -393,15 +443,49 @@ LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style  	return header;  } +void LLChatHistory::onClickMoreText() +{ +	mEditor->endOfDoc(); +} +  void LLChatHistory::clear()  {  	mLastFromName.clear(); -	LLTextEditor::clear(); +	mEditor->clear();  	mLastFromID = LLUUID::null;  }  void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_chat_history, const LLStyle::Params& input_append_params)  { +	if (!mEditor->scrolledToEnd() && chat.mFromID != gAgent.getID() && !chat.mFromName.empty()) +	{ +		mUnreadChatSources.insert(chat.mFromName); +		mMoreChatPanel->setVisible(TRUE); +		std::string chatters; +		for (unread_chat_source_t::iterator it = mUnreadChatSources.begin(); +			it != mUnreadChatSources.end();) +		{ +			chatters += *it; +			if (++it != mUnreadChatSources.end()) +			{ +				chatters += ","; +			} +		} +		LLStringUtil::format_map_t args; +		args["SOURCES"] = chatters; + +		if (mUnreadChatSources.size() == 1) +		{ +			mMoreChatText->setValue(LLTrans::getString("unread_chat_single", args)); +		} +		else +		{ +			mMoreChatText->setValue(LLTrans::getString("unread_chat_multiple", args)); +		} +		S32 height = mMoreChatText->getTextPixelHeight() + 5; +		mMoreChatPanel->reshape(mMoreChatPanel->getRect().getWidth(), height); +	} +  	LLColor4 txt_color = LLUIColorTable::instance().getColor("White");  	LLViewerChat::getChatColor(chat,txt_color);  	LLFontGL* fontp = LLViewerChat::getChatFont();	 @@ -416,7 +500,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_  	if (use_plain_text_chat_history)  	{ -		appendText("[" + chat.mTimeStr + "] ", getText().size() != 0, style_params); +		mEditor->appendText("[" + chat.mTimeStr + "] ", mEditor->getText().size() != 0, style_params);  		if (utf8str_trim(chat.mFromName).size() != 0)  		{ @@ -426,11 +510,11 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_  				LLStyle::Params link_params(style_params);  				link_params.fillFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));  				// Convert the name to a hotlink and add to message. -				appendText(chat.mFromName + ": ", false, link_params); +				mEditor->appendText(chat.mFromName + ": ", false, link_params);  			}  			else  			{ -				appendText(chat.mFromName + ": ", false, style_params); +				mEditor->appendText(chat.mFromName + ": ", false, style_params);  			}  		}  	} @@ -457,7 +541,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_  		else  		{  			view = getHeader(chat, style_params); -			if (getText().size() == 0) +			if (mEditor->getText().size() == 0)  				p.top_pad = 0;  			else  				p.top_pad = mTopHeaderPad; @@ -467,9 +551,9 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_  		p.view = view;  		//Prepare the rect for the view -		LLRect target_rect = getDocumentView()->getRect(); +		LLRect target_rect = mEditor->getDocumentView()->getRect();  		// squeeze down the widget by subtracting padding off left and right -		target_rect.mLeft += mLeftWidgetPad + mHPad; +		target_rect.mLeft += mLeftWidgetPad + mEditor->getHPad();  		target_rect.mRight -= mRightWidgetPad;  		view->reshape(target_rect.getWidth(), view->getRect().getHeight());  		view->setOrigin(target_rect.mLeft, view->getRect().mBottom); @@ -478,7 +562,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_  		if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)  			header_text += chat.mFromName + ": "; -		appendWidget(p, header_text, false); +		mEditor->appendWidget(p, header_text, false);  		mLastFromName = chat.mFromName;  		mLastFromID = chat.mFromID;  		mLastMessageTime = new_message_time; @@ -490,10 +574,10 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_  		style_params.font.style = "ITALIC";  		if (chat.mFromName.size() > 0) -			appendText(chat.mFromName + " ", TRUE, style_params); +			mEditor->appendText(chat.mFromName + " ", TRUE, style_params);  		// Ensure that message ends with NewLine, to avoid losing of new lines  		// while copy/paste from text chat. See EXT-3263. -		appendText(chat.mText.substr(4) + NEW_LINE, FALSE, style_params); +		mEditor->appendText(chat.mText.substr(4) + NEW_LINE, FALSE, style_params);  	}  	else  	{ @@ -504,8 +588,19 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_  			// while copy/paste from text chat. See EXT-3263.  			message += NEW_LINE;  		} -		appendText(message, FALSE, style_params); +		mEditor->appendText(message, FALSE, style_params);  	} -	blockUndo(); +	mEditor->blockUndo(); +} + +void LLChatHistory::draw() +{ +	if (mEditor->scrolledToEnd()) +	{ +		mUnreadChatSources.clear(); +		mMoreChatPanel->setVisible(FALSE); +	} + +	LLUICtrl::draw();  } diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index 8ca7dd1d58..260015e2dc 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -34,10 +34,11 @@  #define LLCHATHISTORY_H_  #include "lltexteditor.h" +#include "lltextbox.h"  #include "llviewerchat.h"  //Chat log widget allowing addition of a message as a widget  -class LLChatHistory : public LLTextEditor +class LLChatHistory : public LLUICtrl  {  	public:  		struct Params : public LLInitParam::Block<Params, LLTextEditor::Params> @@ -63,6 +64,8 @@ class LLChatHistory : public LLTextEditor  			//Header bottom padding  			Optional<S32>			bottom_header_pad; +			Optional<LLTextBox::Params>	more_chat_text; +  			Params()  			:	message_header("message_header"),  				message_separator("message_separator"), @@ -73,15 +76,16 @@ class LLChatHistory : public LLTextEditor  				top_separator_pad("top_separator_pad"),  				bottom_separator_pad("bottom_separator_pad"),  				top_header_pad("top_header_pad"), -				bottom_header_pad("bottom_header_pad") -				{ -				} +				bottom_header_pad("bottom_header_pad"), +				more_chat_text("more_chat_text") +			{}  		};  	protected:  		LLChatHistory(const Params&);  		friend class LLUICtrlFactory; +		/*virtual*/ void draw();  		/**  		 * Redefinition of LLTextEditor::updateTextRect() to considerate text  		 * left/right padding params. @@ -98,9 +102,13 @@ class LLChatHistory : public LLTextEditor  		 */  		LLView* getHeader(const LLChat& chat,const LLStyle::Params& style_params); +		void onClickMoreText(); +  	public:  		~LLChatHistory(); +		void initFromParams(const Params&); +  		/**  		 * Appends a widget message.  		 * If last user appended message, concurs with current user, @@ -129,5 +137,11 @@ class LLChatHistory : public LLTextEditor  		S32 mBottomSeparatorPad;  		S32 mTopHeaderPad;  		S32 mBottomHeaderPad; + +		LLPanel*		mMoreChatPanel; +		LLTextBox*		mMoreChatText; +		LLTextEditor*	mEditor; +		typedef std::set<std::string> unread_chat_source_t; +		unread_chat_source_t mUnreadChatSources;  };  #endif /* LLCHATHISTORY_H_ */ diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 0b27001f10..effa57b1ef 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -98,6 +98,7 @@ LLFastTimerView::LLFastTimerView(const LLRect& rect)  	mHoverBarIndex = -1;  	FTV_NUM_TIMERS = LLFastTimer::NamedTimer::instanceCount();  	mPrintStats = -1;	 +	mAverageCyclesPerTimer = 0;  } @@ -306,8 +307,9 @@ void LLFastTimerView::draw()  	S32 height = (S32) (gViewerWindow->getWindowRectScaled().getHeight()*0.75f);  	S32 width = (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f); -	// HACK: casting away const. Should use setRect or some helper function instead. -		const_cast<LLRect&>(getRect()).setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height); +	LLRect new_rect; +	new_rect.setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height); +	setRect(new_rect);  	S32 left, top, right, bottom;  	S32 x, y, barw, barh, dx, dy; @@ -321,6 +323,10 @@ void LLFastTimerView::draw()  	S32 xleft = margin;  	S32 ytop = margin; +	mAverageCyclesPerTimer = llround(lerp((F32)mAverageCyclesPerTimer, (F32)(LLFastTimer::sTimerCycles / (U64)LLFastTimer::sTimerCalls), 0.1f)); +	LLFastTimer::sTimerCycles = 0; +	LLFastTimer::sTimerCalls = 0; +  	// Draw some help  	{ @@ -328,6 +334,10 @@ void LLFastTimerView::draw()  		y = height - ytop;  		texth = (S32)LLFontGL::getFontMonospace()->getLineHeight(); +#if TIME_FAST_TIMERS +		tdesc = llformat("Cycles per timer call: %d", mAverageCyclesPerTimer); +		LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP); +#else  		char modedesc[][32] = {  			"2 x Average ",  			"Max         ", @@ -342,7 +352,6 @@ void LLFastTimerView::draw()  		tdesc = llformat("Full bar = %s [Click to pause/reset] [SHIFT-Click to toggle]",modedesc[mDisplayMode]);  		LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP); -  		textw = LLFontGL::getFontMonospace()->getWidth(tdesc);  		x = xleft, y -= (texth + 2); @@ -352,6 +361,7 @@ void LLFastTimerView::draw()  		LLFontGL::getFontMonospace()->renderUTF8(std::string("[Right-Click log selected] [ALT-Click toggle counts] [ALT-SHIFT-Click sub hidden]"),  										 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP); +#endif  		y -= (texth + 2);  	} diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h index 2bb023ab14..f5c8f23818 100644 --- a/indra/newview/llfasttimerview.h +++ b/indra/newview/llfasttimerview.h @@ -91,6 +91,7 @@ private:  	S32 mHoverBarIndex;  	LLFrameTimer mHighlightTimer;  	S32 mPrintStats; +	S32 mAverageCyclesPerTimer;  };  #endif diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index ff568a11a9..7e0e8bfaa7 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -760,8 +760,9 @@ void LLFloaterPreference::onClickResetCache()  	{  		gSavedSettings.setString("NewCacheLocation", "");  		gSavedSettings.setString("NewCacheLocationTopFolder", ""); -		LLNotificationsUtil::add("CacheWillBeMoved");  	} +	 +	LLNotificationsUtil::add("CacheWillBeMoved");  	std::string cache_location = gDirUtilp->getCacheDir(true);  	gSavedSettings.setString("CacheLocation", cache_location);  	std::string top_folder(gDirUtilp->getBaseFileName(cache_location)); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index dbecd45d1f..f53b62e490 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -1379,7 +1379,6 @@ void LLFloaterSnapshot::Impl::onClickDiscard(void* data)  	if (view)  	{ -		view->getParent()->setMouseOpaque(FALSE);  		view->closeFloater();  	}  } @@ -2105,6 +2104,12 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)  	gSnapshotFloaterView->adjustToFitScreen(this, FALSE);  } +void LLFloaterSnapshot::onClose(bool app_quitting) +{ +	getParent()->setMouseOpaque(FALSE); +} + +  //static   void LLFloaterSnapshot::update()  { diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h index bd01f6c573..1333497bd2 100644 --- a/indra/newview/llfloatersnapshot.h +++ b/indra/newview/llfloatersnapshot.h @@ -52,6 +52,7 @@ public:  	/*virtual*/ BOOL postBuild();  	/*virtual*/ void draw();  	/*virtual*/ void onOpen(const LLSD& key); +	/*virtual*/ void onClose(bool app_quitting);  	static void update(); diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index ffe7f57167..e9131a342e 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -403,6 +403,11 @@ void LLPanelProfileTab::updateButtons()  //////////////////////////////////////////////////////////////////////////  ////////////////////////////////////////////////////////////////////////// +bool enable_god() +{ +	return gAgent.isGodlike(); +} +  LLPanelAvatarProfile::LLPanelAvatarProfile()  : LLPanelProfileTab()  { @@ -423,6 +428,13 @@ BOOL LLPanelAvatarProfile::postBuild()  	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;  	registrar.add("Profile.Pay",  boost::bind(&LLPanelAvatarProfile::pay, this));  	registrar.add("Profile.Share", boost::bind(&LLPanelAvatarProfile::share, this)); +	registrar.add("Profile.Kick", boost::bind(&LLPanelAvatarProfile::kick, this)); +	registrar.add("Profile.Freeze", boost::bind(&LLPanelAvatarProfile::freeze, this)); +	registrar.add("Profile.Unfreeze", boost::bind(&LLPanelAvatarProfile::unfreeze, this)); +	registrar.add("Profile.CSR", boost::bind(&LLPanelAvatarProfile::csr, this)); + +	LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable; +	enable.add("Profile.EnableGod", boost::bind(&enable_god));  	mProfileMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_profile_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); @@ -622,6 +634,28 @@ void LLPanelAvatarProfile::share()  	LLAvatarActions::share(getAvatarId());  } +void LLPanelAvatarProfile::kick() +{ +	LLAvatarActions::kick(getAvatarId()); +} + +void LLPanelAvatarProfile::freeze() +{ +	LLAvatarActions::freeze(getAvatarId()); +} + +void LLPanelAvatarProfile::unfreeze() +{ +	LLAvatarActions::unfreeze(getAvatarId()); +} + +void LLPanelAvatarProfile::csr() +{ +	std::string name; +	gCacheName->getFullName(getAvatarId(), name); +	LLAvatarActions::csr(getAvatarId(), name); +} +  void LLPanelAvatarProfile::onUrlTextboxClicked(const std::string& url)  {  	LLWeb::loadURL(url); diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index b19c5cca49..8f07c67fb1 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -181,6 +181,15 @@ protected:  	 */  	void share(); +	void kick(); +	void freeze(); +	void unfreeze(); +	void csr(); +	 + +	bool enableGod(); + +  	void onUrlTextboxClicked(const std::string& url);  	void onHomepageTextboxClicked();  	void onAddFriendButtonClick(); diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 74fbce890d..b1d09eccba 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -731,14 +731,13 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)  				// *HACK: We may select this object, so pretend it was clicked  				mPick = mHoverPick;  				LLInspector::Params p; +				p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());  				p.message(avatar_name);  				p.image(LLUI::getUIImage("Info"));  				p.click_callback(boost::bind(showAvatarInspector, hover_object->getID()));  				p.visible_time_near(6.f);  				p.visible_time_far(3.f);  				p.wrap(false); - -				p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());  				LLToolTipMgr::instance().show(p);  			} @@ -822,6 +821,7 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)  					// We may select this object, so pretend it was clicked  					mPick = mHoverPick;  					LLInspector::Params p; +					p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());  					p.message(tooltip_msg);  					p.image(LLUI::getUIImage("Info_Off"));  					p.click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace)); @@ -833,8 +833,6 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)  					p.visible_time_near(6.f);  					p.visible_time_far(3.f);  					p.wrap(false); - -					p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());  					LLToolTipMgr::instance().show(p);  				} diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 88e77f11ee..706245a479 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -71,10 +71,14 @@  	<color  	 name="Transparent"  	 value="0 0 0 0" /> +  <!-- Make potentially unused colors show up bright purple. +  Leave this here until all Unused? are removed below, otherwise +  the viewer generates many warnings on startup. --> +  <color +	 name="Unused?" +	 value="1 0 1 1" /> - - -	<!-- UI Definitions --> +  <!-- UI Definitions -->  	<color       name="AgentChatColor" diff --git a/indra/newview/skins/default/textures/icons/SL_Logo.png b/indra/newview/skins/default/textures/icons/SL_Logo.pngBinary files differ new file mode 100644 index 0000000000..c9fbde987a --- /dev/null +++ b/indra/newview/skins/default/textures/icons/SL_Logo.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 412f8b6d68..8a9126208a 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -234,6 +234,7 @@ with the same filename but different name    <texture name="Inv_Gloves" file_name="icons/Inv_Gloves.png" preload="false" />    <texture name="Inv_Hair" file_name="icons/Inv_Hair.png" preload="false" />    <texture name="Inv_LinkItem" file_name="icons/Inv_LinkItem.png" preload="false" /> +  <texture name="Inv_LinkItem_Broken" file_name="icons/Inv_LinkItem_Broken.png" preload="false" />    <texture name="Inv_LinkFolder" file_name="icons/Inv_LinkFolder.png" preload="false" />    <texture name="Inv_Jacket" file_name="icons/Inv_Jacket.png" preload="false" />    <texture name="Inv_LookFolderOpen" file_name="icons/Inv_LookFolderOpen.png" preload="false" /> @@ -487,7 +488,8 @@ with the same filename but different name    <texture name="SliderThumb_Off" file_name="widgets/SliderThumb_Off.png" />    <texture name="SliderThumb_Disabled" file_name="widgets/SliderThumb_Disabled.png" />    <texture name="SliderThumb_Press" file_name="widgets/SliderThumb_Press.png" /> -  <texture name="SL_Logo" file_name="map_infohub.tga" /> + +  <texture name="SL_Logo" file_name="icons/SL_Logo.png" preload="true" />    <texture name="Snapshot_Off" file_name="bottomtray/Snapshot_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="Snapshot_Over" file_name="bottomtray/Snapshot_Over.png" preload="false" /> @@ -495,12 +497,12 @@ with the same filename but different name    <texture name="startup_logo"  file_name="windows/startup_logo.png" preload="true" /> -  <texture name="Stepper_Down_Disabled" file_name="widgets/Stepper_Down_Disabled.png" preload="true" /> -  <texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="true" /> -  <texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="true" /> -  <texture name="Stepper_Up_Disabled" file_name="widgets/Stepper_Up_Disabled.png" preload="true" /> -  <texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="true" /> -  <texture name="Stepper_Up_Press" file_name="widgets/Stepper_Up_Press.png" preload="true" /> +  <texture name="Stepper_Down_Disabled" file_name="widgets/Stepper_Down_Disabled.png" preload="false" /> +  <texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="false" /> +  <texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="false" /> +  <texture name="Stepper_Up_Disabled" file_name="widgets/Stepper_Up_Disabled.png" preload="false" /> +  <texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="false" /> +  <texture name="Stepper_Up_Press" file_name="widgets/Stepper_Up_Press.png" preload="false" />    <texture name="Stop_Off" file_name="icons/Stop_Off.png" preload="false" />    <texture name="Stop_Over" file_name="icons/Stop_Over.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index 6956b73371..cb4cbd229a 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -15,21 +15,21 @@   title="TEST FLOATER"   save_dock_state="true"   save_visibility="true" - single_instance="true" + single_instance="true"    width="320">    <string name="nudge_parabuild">Nudge 1</string>    <string name="test_the_vlt">This string is extracted.</string>    <chat_history     allow_html="true"     bg_readonly_color="ChatHistoryBgColor" -   bg_writeable_color="ChatHistoryBgColor" -   border_visible="false"  +   bg_writeable_color="ChatHistoryBgColor"  +   border_visible="false"     follows="all"     font="SansSerif"  -	    left="1" +	 left="1"     top="20"     layout="topleft" -	    height="260" +	 height="260"     name="chat_history"     parse_highlights="true"     text_color="ChatHistoryTextColor" 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 e632b67d11..169a0ea676 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -296,7 +296,7 @@       layout="topleft"       name="pg_label"       width="60"> -        PG +        General      </text>      <check_box @@ -330,7 +330,7 @@       layout="topleft"       name="mature_label"       width="66"> -        Mature +        Moderate      </text>      <check_box @@ -361,7 +361,7 @@       top_delta="2"       left_pad="3"       layout="topleft" -     name="pg_label" +     name="adult_label"       width="66">          Adult      </text> diff --git a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml index d0128d1c9a..1dc1c610cf 100644 --- a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml @@ -19,4 +19,40 @@          <menu_item_call.on_click           function="Profile.Share" />      </menu_item_call> +  <menu_item_call +   label="Kick" +   layout="topleft" +   name="kick"> +    <menu_item_call.on_click +     function="Profile.Kick" /> +    <menu_item_call.on_visible +     function="Profile.EnableGod" /> +  </menu_item_call> +  <menu_item_call +   label="Freeze" +   layout="topleft" +   name="freeze"> +    <menu_item_call.on_click +     function="Profile.Freeze" /> +    <menu_item_call.on_visible +     function="Profile.EnableGod" /> +  </menu_item_call> +  <menu_item_call +   label="Unfreeze" +   layout="topleft" +   name="unfreeze"> +    <menu_item_call.on_click +     function="Profile.Unfreeze" /> +    <menu_item_call.on_visible +     function="Profile.EnableGod" /> +  </menu_item_call> +  <menu_item_call +   label="CSR" +   layout="topleft" +   name="csr"> +    <menu_item_call.on_click +     function="Profile.CSR" /> +    <menu_item_call.on_visible +     function="Profile.EnableGod" /> +  </menu_item_call>  </toggleable_menu> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 7b0b4b0bde..790f8afd3a 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -33,10 +33,10 @@       	 height="18"       	 image_name="Lock"  	     layout="topleft" -		 right="-50" +		 right="-15"  	     mouse_opaque="true"  	     name="IconLocked" -	     top="4" +	     top="8"  	     width="18" />      <button       follows="top|right" @@ -60,14 +60,23 @@       use_ellipses="true"       value="Object Profile"       width="275" /> +    	    <text +     follows="top|left" +     height="13" +     layout="topleft" +     left="45" +     name="where" +     text_color="LtGray_50" +     value="(Inventory)" +     width="150" />  	<panel           follows="all" -         height="500" +         height="490"           label=""           layout="topleft"           left="10"           help_topic="" -         top="30" +         top="45"           width="313"     background_visible="true"     bg_alpha_color="DkGray2"> @@ -125,7 +134,7 @@  		     layout="topleft"      		 left="5"  		     name="LabelCreatorTitle" -top_pad="10" +		  top_pad="10"  		     width="78">  	        Creator:      	</text> @@ -135,7 +144,7 @@ top_pad="10"       default_icon_name="Generic_Person"       layout="topleft"       left_pad="0" -		     top_delta="-6" +     top_delta="-6"       mouse_opaque="true"       width="20" />  	    <text @@ -165,28 +174,28 @@ top_pad="10"  			 follows="left|top"  			 height="23"  			 layout="topleft" -    		 left="5" +			   left="5"  			 name="LabelOwnerTitle" -top_pad="5" +			   top_pad="10"  			 width="78">  			    Owner:  	     </text>  	     <avatar_icon -     follows="top|left" -     height="20" -     default_icon_name="Generic_Person" -     layout="topleft" -     left_pad="0" -		     top_delta="-6" -     mouse_opaque="true" -     width="20" /> +			   follows="top|left" +			   height="20" +			   default_icon_name="Generic_Person" +			   layout="topleft" +			   left_pad="0" +			   top_delta="-6" +			   mouse_opaque="true" +			   width="20" />  	     <text  			 type="string" -     follows="left|right" -     font="SansSerifSmall" -     height="15" -     layout="topleft" -     left_pad="5" +			   follows="left|right" +			   font="SansSerifSmall" +			   height="15" +			   layout="topleft" +			   left_pad="5"  			 name="LabelOwnerName"  			 top_delta="6"  			 width="140"> @@ -224,7 +233,7 @@ top_pad="10"  			 top_delta="0"  			 width="222">  			Wed May 24 12:50:46 2006 -	    </text> +      </text>  	 <panel           border="false"           follows="left|top" @@ -350,7 +359,7 @@ top_pad="10"  			 tool_tip="Next owner can give away or resell this object"  			 width="106" />  	    </panel> -	    <check_box +	<check_box  			 height="18"  			 label="For Sale"  			 layout="topleft" @@ -388,144 +397,21 @@ top_pad="10"  			    height="23"  			    max_val="999999999"  			    top_pad="10"/> -	    <!--line_editor -			 border_style="line" -			 border_thickness="1" -			 follows="left|top|right" -			 height="16" -			 layout="topleft" -			 left_pad="5" -			 max_length="25" -			 name="EditPrice" -			 top_delta="0" -			 width="242" /--> -	    <!--text -			 type="string" -			 length="1" -			 follows="left|top" -			 height="10" -			 layout="topleft" -			 left="10" -			 name="BaseMaskDebug" -			 top="155" -			 width="330"> -			B: -	    </text> -	    <text -			 type="string" -			 length="1" -			 follows="left|top" -			 height="10" -			 layout="topleft" -			 left_delta="60" -			 name="OwnerMaskDebug" -			 top_delta="0" -			 width="270"> -			O: -	    </text> -	    <text -			 type="string" -			 length="1" -			 follows="left|top" -			 height="10" -			 layout="topleft" -			 left_delta="60" -			 name="GroupMaskDebug" -			 top_delta="0" -			 width="210"> -			G: -	    </text> -	    <text -			 type="string" -			 length="1" -			 follows="left|top" -			 height="10" -			 layout="topleft" -			 left_delta="60" -			 name="EveryoneMaskDebug" -			 top_delta="0" -			 width="150"> -			E: -	    </text> -	    <text -			 type="string" -			 length="1" -			 follows="left|top" -			 height="10" -			 layout="topleft" -			 left_delta="60" -			 name="NextMaskDebug" -			 top_delta="0" -			 width="90"> -			N: -	    </text--> -			    <!--text -			 type="string" -			 length="1" -			 follows="left|top" -			 height="10" -			 layout="topleft" -			 left="10" -			 name="SaleLabel" -			 top_pad="5" -			 width="330"> -			Mark Item: -	    </text--> -	    <!--radio_group -			 draw_border="false" -			 follows="left|top|right" -			 height="16" -			 layout="topleft" -			 left_delta="78" -			 name="RadioSaleType" -			 top_delta="0" -			 width="252"> -			    <radio_item -			     height="16" -			     label="Original" -			     layout="topleft" -			     left="0" -			     name="radio" -			     top="0" -			     width="70" /> -			    <radio_item -			     height="16" -			     label="Copy" -			     layout="topleft" -			     left_delta="60" -			     name="radio2" -			     top_delta="0" -			     width="70" /> -	    </radio_group--> -	    <!--text -			 type="string" -			 length="1" -			 follows="left|top" -			 height="16" -			 layout="topleft" -			 left="10" -			 name="TextPrice" -			 top_pad="5" -			 width="78"> -			Price: L$ -	    </text--> -	</panel> +   </panel>      <panel -		 height="25" +		 height="30"  		 layout="bottomright"  		 help_topic="button_tab"  		 name="button_panel"  		 left="5" -		 bottom="5" +		 bottom="2"  		 width="313">  	    <button -		     follows="bottom|right" -		     height="25" +		     height="23"  		     label="Cancel"  		     layout="topleft"  		     name="cancel_btn"  		     right="-1" -		     left_pad="10"  		     width="100" /> -	</panel> -</panel> +	    </panel> +	</panel>
\ No newline at end of file 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 5b379b54e3..d26e855e2f 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -6,7 +6,7 @@  	 name="object properties"  	 help_topic="object_properties"  	 save_rect="true" -	 title="Object Properties" +	 title="Object Profile"  	 width="333">  	 <panel.string  	  name="text deed continued"> @@ -57,127 +57,173 @@                  Mixed Sale              </panel.string>      <button -	     follows="top|right" -	     height="25" -	     image_overlay="BackArrow_Off" -	     layout="topleft" -	     name="back_btn" -	     picture_style="true" -	     right="-5" -	     tab_stop="false" -	     top="0" -	     width="25" /> +     follows="top|right" +     height="23" +     image_overlay="BackArrow_Off" +     layout="topleft" +     left="10" +     name="back_btn" +     tab_stop="false" +     top="0" +     width="23" /> +        <text +     follows="top|left|right" +     font="SansSerifHuge" +     height="26" +     layout="topleft" +     left_pad="10" +     name="title" +     text_color="LtGray" +     top="0" +     use_ellipses="true" +     value="Object Profile" +     width="275" /> +	    <text +     follows="top|left" +     height="13" +     layout="topleft" +     left="45" +     name="where" +     text_color="LtGray_50" +     value="(In World)" +     width="150" />  	<panel           follows="all" -         height="500" +         height="490"           label=""           layout="topleft" -         left="5" +         left="10"           help_topic="" -         top="30" -		 border="1" -         width="313"> -            <text -             type="string" -             length="1" -             follows="left|top" -             height="10" -             layout="topleft" -             left="10" +         top="45" +         width="313" +   background_visible="true" +   bg_alpha_color="DkGray2"> +	    	    <text +		     type="string" +		     length="1" +		     follows="left|top" +		     height="10" +		     layout="topleft" +		     left="5"               name="Name:" -             top_pad="5" -             width="90"> -                Name: -            </text> -            <line_editor -             follows="left|top|right" -             height="19" -             layout="topleft" -             left_pad="0" -             max_length="63" +		     top="10" +		     width="78"> +	        Name: +	    </text> +	    <line_editor +		     border_style="line" +		     border_thickness="1" +	    	 follows="left|top|right" +		     height="20" +		     layout="topleft" +	    	 left_delta="78" +		     max_length="63"               name="Object Name" -             select_on_focus="true" -             top_delta="0" -             width="170" /> -            <text -             type="string" -             length="1" -             follows="left|top" -             height="10" -             layout="topleft" -             left="10" +	    	 top_delta="0" +		     width="225" /> +	    <text +	    type="string" +	    length="1" +	    follows="left|top" +	    height="10" +	    layout="topleft" +	    left="5"               name="Description:" -             top_pad="3" -             width="90"> -                Description: -            </text> +	    top_pad="10" +	    width="78"> +	        Description: +	    </text>              <line_editor +	     border_style="line" +    	     border_thickness="1"               follows="left|top|right" -             height="19" +             height="23"               layout="topleft" -             left_pad="0" -             max_length="127"               name="Object Description"               select_on_focus="true" -             top_delta="0" -             width="170" /> -            <text -             type="string" -             left="10" -             length="1" -             follows="left|top" -             height="19" -             layout="topleft" -             name="Creator:" -             width="90"> -                Creator: -            </text> -            <text -             type="string" -             length="1" -             follows="left|top" -             left_pad="0" -             height="19" -             layout="topleft" +    		 left_delta="78" +		     max_length="127" +	    	 top_delta="-5" +	    	 width="225"/> +	    <text +		     type="string" +		     length="1" +		     follows="left|top" +		     height="23" +		     layout="topleft" +    		 left="5" +		 name="CreatorNameLabel" +		  top_pad="10" +		     width="78"> +	        Creator: +    	</text> +	    	<avatar_icon +     follows="top|left" +     height="20" +     default_icon_name="Generic_Person" +     layout="topleft" +     left_pad="0" +      top_delta="-6" +     mouse_opaque="true" +     width="20" /> +	    <text +		     type="string" +     follows="left|right" +     font="SansSerifSmall" +     height="15" +     layout="topleft" +     left_pad="5"               name="Creator Name" -             width="175"> -                Esbee Linden -            </text> -            <text -             type="string" -             length="1" -             left="10" -             follows="left|top" -             height="19" -             layout="topleft" -             name="Owner:" -             width="90"> -                Owner: -            </text> -            <text -             type="string" -             length="1" -             follows="left|top" -             height="19" -             layout="topleft" -             name="Owner Name" -             left_pad="0" -             width="175"> -                Erica Linden -            </text> -           <text -             type="string" -             length="1" -             follows="left|top" -             layout="topleft" -             left="10" -             height="18" -             name="Group:" -             top_pad="4" -             width="75"> -                Group: -            </text> -            <button +		     top_delta="6" +		     width="140"> +	        Erica Linden +	     </text> +	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="23" +			layout="topleft" +			left="5" +			name="Owner:" +			top_pad="10" +			 width="78"> +			    Owner: +	     </text> +	     <avatar_icon +     follows="top|left" +     height="20" +     default_icon_name="Generic_Person" +     layout="topleft" +     left_pad="0" +	    top_delta="-6" +	    mouse_opaque="true" +     width="20" /> +	     <text +			    type="string" +			    follows="left|right" +			    font="SansSerifSmall" +			    height="15" +			    layout="topleft" +			    left_pad="5" +			    name="Owner Name" +			    top_delta="6" +			    width="140"> +			    Erica Linden +	     </text> +	    	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="23" +			 layout="topleft" +			 left="5" +			name="Group_label" +			top_pad="10" +			width="78"> +			    Group: +	     </text> +      		<button  			 follows="top|left"  			 height="10"  			 image_disabled="Activate_Checkmark" @@ -203,43 +249,34 @@               width="150" />              <button               follows="top|left" -             height="20" +             height="23"               label="Deed"               label_selected="Deed"               layout="topleft"               name="button deed"               top_pad="0" -             left="100" +             left="81"               tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer." -             width="80" /> -            <check_box -             height="19" -             follows="left|top" -             label="Share" -             layout="topleft" -             name="checkbox share with group" -             tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." -             left_pad="3"               width="100" />              <text               type="string"               length="1"               follows="left|top" -             height="16" +             height="9"               layout="topleft" -             top_pad="15" -             left="10" +             top_pad="5" +             left="5"               name="label click action" -             width="90"> +             width="280">                  Click to:              </text>              <combo_box               follows="left|top" -             height="20" +             height="23"               layout="topleft"               name="clickaction"               width="168" -             left_pad="0"> +             left="81">                  <combo_box.item                   label="Touch  (default)"                   name="Touch/grab(default)" @@ -261,26 +298,131 @@                   name="Open"                   value="Open" />              </combo_box> -            <check_box -             height="16" +	 <panel +         border="false" +         follows="left|top" +         layout="topleft" +         mouse_opaque="false" +         background_visible="true" +         bg_alpha_color="DkGray" +         name="perms_inv" +         left="0" +         top_pad="15" +         height="135" +         width="313"> +	  <text +             type="string" +             length="1" +             left="10"               top_pad="15" -             label="For Sale:" +             text_color="EmphasisColor" +	     height="15" +             follows="left|top|right" +             layout="topleft" +             name="perm_modify" +             width="200"> +                You can modify this object +            </text> +	  	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="16" +			 layout="topleft" +			 left="10" +               name="Anyone can:" +			 top_pad="8" +			 width="100"> +			Anyone: +	    </text> +	    <check_box +			 height="18" +			 label="Copy" +			 layout="topleft" +			 left_pad="0" +             name="checkbox allow everyone copy" +			 top_delta="-2" +			 width="90" /> +	    <check_box +             height="18" +             label="Move"               layout="topleft" +             name="checkbox allow everyone move" +			 left_pad="0" +             width="150" /> +	       	<text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="16" +			 layout="topleft" +			 left="10" +			 name="GroupLabel" +			 top_pad="8" +			 width="100"> +			Group: +    	</text> +			    <check_box +			 height="18" +			 label="Share" +			 layout="topleft" +			 left_pad="90" +			 top_delta="-2" +             name="checkbox share with group" +			 tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." +			 width="150" /> +	    	    <text +			 type="string" +			 length="1" +			 follows="left|top" +			 height="16" +			 layout="topleft" +			 left="10" +			 name="NextOwnerLabel" +			 top_pad="8" +			 width="200" +			 word_wrap="true"> +			Next owner: +	    </text> +	    <check_box +			 height="18" +			 label="Modify" +			 layout="topleft" +			 left="20" +			 top_pad="0" +             name="checkbox next owner can modify" +			 width="90" /> +	    <check_box +			 height="18" +			 label="Copy" +			 layout="topleft" +			 left_pad="0" +             name="checkbox next owner can copy" +			 width="90" /> +	    <check_box +			 height="18" +			 label="Transfer" +			 layout="topleft" +			 left_pad="0" +             name="checkbox next owner can transfer" +			 tool_tip="Next owner can give away or resell this object" +			 width="106" /> +	    </panel> +	    <check_box +			 height="23" +			 label="For Sale" +			 layout="topleft" +			 left="20"               name="checkbox for sale" -             left="10" -             width="90" /> -<!-- NEW SALE TYPE COMBO BOX --> -      <combo_box -            left_pad="0" -            layout="topleft" -            follows="left|top" -            allow_text_entry="false" -            height="20" -            intial_value="2" -            max_chars="20" -            mouse_opaque="true" +			 top_pad="10" +			 width="100" /> +		<combo_box +			 height="23" +			 left_pad="0" +			 layout="topleft" +			 follows="left|top"              name="sale type" -            width="158"> +			 width="170">          <combo_box.item             name="Copy"             label="Copy" @@ -293,14 +435,13 @@             name="Original"             label="Original"             value="1" /> -      </combo_box> -<!-- NEW PRICE SPINNER --> -      <spinner +	    </combo_box> +		<spinner          follows="left|top"          decimal_digits="0"          increment="1" -        top_pad="8" -        left="100" +        top_pad="10" +        left="120"          control_name="Edit Cost"          name="Edit Cost"          label="Price: L$" @@ -310,106 +451,25 @@          height="20"          max_val="999999999" />        <check_box -	   height="15" +	   height="20"  	   width="110" -	   top_pad="3" +	   top_pad="6"  	   label="Show in search"         layout="topleft" -	   left="100" +	   left="120"         name="search_check"         tool_tip="Let people see this object in search results" /> -		<panel -         border="false" -         follows="left|top" -         layout="topleft" -         mouse_opaque="false" -         background_visible="true" -         bg_alpha_color="DkGray" -         name="perms_build" -         left="0" -         top="241" -         height="120" -         width="278"> -            <text -             type="string" -             length="1" -             left="10" -             top_pad="9" -             text_color="EmphasisColor" -             height="16" -             follows="left|top|right" -             layout="topleft" -             name="perm_modify" -             width="250"> -                You can modify this object -            </text> -            <text -               type="string" -               follows="left|top" -               name="Anyone can:" -               width="250" -               left="10"> -                 Anyone: -            </text> -            <check_box -             height="19" -             label="Move" -             layout="topleft" -             name="checkbox allow everyone move" -             left="15" -             width="85" /> -            <check_box -             height="19" -             label="Copy" -             layout="topleft" -             left_pad="0" -             name="checkbox allow everyone copy" -             width="90" /> -            <text -               type="string" -               follows="left|top" -               height="19" -               name="Next owner can:" -               width="250" -               left="10"> -                  Next owner: -            </text> -            <check_box -             follows="left|top|right" -             label="Modify" -             layout="topleft" -             left="15" -             name="checkbox next owner can modify" -             width="85" /> -            <check_box -             follows="left|top|right" -             height="19" -             label="Copy" -             layout="topleft" -             left_pad="0" -             name="checkbox next owner can copy" -             width="90" /> -            <check_box -             follows="left|top|right" -             height="19" -             label="Transfer" -             layout="topleft" -             name="checkbox next owner can transfer" -             left_pad="0" -             top_delta="0" -             tool_tip="Next owner can give away or resell this object" -             width="90" />              <text               type="string"               text_color="EmphasisColor"               length="1" -             top_pad="5" +             top_pad="15"               follows="left|top"               layout="topleft"               left="10"               name="B:"               height="10" -             width="45"> +             width="50">                  B:              </text>              <text @@ -421,7 +481,7 @@               left_pad="0"               name="O:"               height="10" -             width="44"> +             width="50">                  O:              </text>              <text @@ -433,7 +493,7 @@               left_pad="0"               name="G:"               height="10" -             width="43"> +             width="50">                  G:              </text>              <text @@ -445,7 +505,7 @@               layout="topleft"               name="E:"               height="10" -             width="43"> +             width="50">                  E:              </text>              <text @@ -457,7 +517,7 @@               left_pad="0"               name="N:"               height="10" -             width="48"> +             width="50">                  N:              </text>              <text @@ -473,7 +533,6 @@                  F:              </text>  		</panel> - </panel>      <panel  		 height="25"  		 layout="bottomright" @@ -484,30 +543,30 @@  		 width="313">          <button  		     follows="bottom|left" -		     height="25" +		     height="23"  		     label="Open"  		     layout="topleft"  		     left="5"  		     name="open_btn"  		     top="0" -		     width="60" /> +		     width="100" />  	    <button  		     follows="bottom|left" -		     height="25" +		     height="23"  		     label="Pay"  		     layout="topleft"  		     left_pad="5"  		     name="pay_btn"  		     top="0" -		     width="50" /> +		     width="100" />  	    <button  		     follows="bottom|left" -		     height="25" +		     height="23"  		     label="Buy"  		     layout="topleft"  		     left_pad="5"  		     name="buy_btn"  		     top="0" -		     width="60" /> +		     width="100" />  	</panel>  </panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 9aae04ba38..acdf3d1bf7 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2996,4 +2996,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].    <string name="close_on_no_ability">      You no longer have the ability to be in the chat session.    </string> +  <string name="unread_chat_single"> +    [SOURCES] has said something new +  </string>" +  <string name="unread_chat_multiple"> +    [SOURCES] have said something new +  </string>"  </strings> diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml index 2be37d222a..8785dff2ae 100644 --- a/indra/newview/skins/default/xui/en/widgets/chat_history.xml +++ b/indra/newview/skins/default/xui/en/widgets/chat_history.xml @@ -11,9 +11,13 @@  	top_header_pad="17"  	bottom_header_pad="10"  	max_length="2147483647" -	enabled="false"  	track_bottom="true"  	name="chat_history"  	type="string"  	word_wrap="true" -  font="SansSerif"/> +  font="SansSerif"> +  <more_chat_text +    mouse_opaque="true"  +    word_wrap="true" +    /> +</chat_history> 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 3368fa88ef..3f5a4b8379 100644 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml @@ -20,12 +20,12 @@ label_pad_left - padding to the left of tab button labels                 tab_top_image_selected="TabTop_Middle_Selected"                 tab_bottom_image_unselected="Toolbar_Middle_Off"                 tab_bottom_image_selected="Toolbar_Middle_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"/>    <last_tab tab_top_image_unselected="TabTop_Right_Off"                 tab_top_image_selected="TabTop_Right_Selected"                 tab_bottom_image_unselected="Toolbar_Right_Off"                 tab_bottom_image_selected="Toolbar_Right_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"/>  </tab_container> | 
