diff options
152 files changed, 2415 insertions, 711 deletions
| @@ -55,3 +55,8 @@ glob:*.cpp.orig  glob:*.cpp.bak  glob:*.h.bak  glob:*.h.orig +glob:indra/newview/typed_locations.txt +glob:indra/newview/teleport_history.txt +glob:indra/newview/search_history.txt +glob:indra/newview/filters.xml +glob:indra/newview/avatar_icons_cache.txt diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 920d8c0977..37370e44e7 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -291,8 +291,8 @@ LLMutex::LLMutex(apr_pool_t *poolp) :  LLMutex::~LLMutex()  { -#if _DEBUG -	llassert(!isLocked()); // better not be locked! +#if MUTEX_DEBUG +	llassert_always(!isLocked()); // better not be locked!  #endif  	apr_thread_mutex_destroy(mAPRMutexp);  	mAPRMutexp = NULL; @@ -306,10 +306,24 @@ LLMutex::~LLMutex()  void LLMutex::lock()  {  	apr_thread_mutex_lock(mAPRMutexp); +#if MUTEX_DEBUG +	// Have to have the lock before we can access the debug info +	U32 id = LLThread::currentID(); +	if (mIsLocked[id] != FALSE) +		llerrs << "Already locked in Thread: " << id << llendl; +	mIsLocked[id] = TRUE; +#endif  }  void LLMutex::unlock()  { +#if MUTEX_DEBUG +	// Access the debug info while we have the lock +	U32 id = LLThread::currentID(); +	if (mIsLocked[id] != TRUE) +		llerrs << "Not locked in Thread: " << id << llendl;	 +	mIsLocked[id] = FALSE; +#endif  	apr_thread_mutex_unlock(mAPRMutexp);  } diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index 932d96d940..d8aa90de2e 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -128,6 +128,8 @@ protected:  //============================================================================ +#define MUTEX_DEBUG (LL_DEBUG || LL_RELEASE_WITH_DEBUG_INFO) +  class LL_COMMON_API LLMutex  {  public: @@ -142,6 +144,9 @@ protected:  	apr_thread_mutex_t *mAPRMutexp;  	apr_pool_t			*mAPRPoolp;  	BOOL				mIsLocalPool; +#if MUTEX_DEBUG +	std::map<U32, BOOL> mIsLocked; +#endif  };  // Actually a condition/mutex pair (since each condition needs to be associated with a mutex). diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp index a403c44b71..3078d80552 100644 --- a/indra/llmessage/llcachename.cpp +++ b/indra/llmessage/llcachename.cpp @@ -189,6 +189,7 @@ typedef std::set<LLUUID>					AskQueue;  typedef std::list<PendingReply*>			ReplyQueue;  typedef std::map<LLUUID,U32>				PendingQueue;  typedef std::map<LLUUID, LLCacheNameEntry*> Cache; +typedef std::map<std::string, LLUUID> 		ReverseCache;  class LLCacheName::Impl  { @@ -198,7 +199,9 @@ public:  	Cache				mCache;  		// the map of UUIDs to names - +	ReverseCache   	  	mReverseCache; +		// map of names to UUIDs +	  	AskQueue			mAskNameQueue;  	AskQueue			mAskGroupQueue;  		// UUIDs to ask our upstream host about @@ -371,7 +374,9 @@ void LLCacheName::importFile(LLFILE* fp)  		entry->mFirstName = firstname;  		entry->mLastName = lastname;  		impl.mCache[id] = entry; - +		std::string fullname = entry->mFirstName + " " + entry->mLastName; +		impl.mReverseCache[fullname] = id; +		  		count++;  	} @@ -407,6 +412,8 @@ bool LLCacheName::importFile(std::istream& istr)  		entry->mFirstName = agent[FIRST].asString();  		entry->mLastName = agent[LAST].asString();  		impl.mCache[id] = entry; +		std::string fullname = entry->mFirstName + " " + entry->mLastName; +		impl.mReverseCache[fullname] = id;  		++count;  	} @@ -428,6 +435,7 @@ bool LLCacheName::importFile(std::istream& istr)  		entry->mCreateTime = ctime;  		entry->mGroupName = group[NAME].asString();  		impl.mCache[id] = entry; +		impl.mReverseCache[entry->mGroupName] = id;  		++count;  	}  	llinfos << "LLCacheName loaded " << count << " group names" << llendl; @@ -548,6 +556,27 @@ BOOL LLCacheName::getGroupName(const LLUUID& id, std::string& group)  		return FALSE;  	}  } + +BOOL LLCacheName::getUUID(const std::string& first, const std::string& last, LLUUID& id) +{ +	std::string fullname = first + " " + last; +	return getUUID(fullname, id); +} + +BOOL LLCacheName::getUUID(const std::string& fullname, LLUUID& id) +{ +	ReverseCache::iterator iter = impl.mReverseCache.find(fullname); +	if (iter != impl.mReverseCache.end()) +	{ +		id = iter->second; +		return TRUE; +	} +	else +	{ +		return FALSE; +	} +} +  // This is a little bit kludgy. LLCacheNameCallback is a slot instead of a function pointer.  //  The reason it is a slot is so that the legacy get() function below can bind an old callback  //  and pass it as a slot. The reason it isn't a boost::function is so that trackable behavior @@ -897,10 +926,13 @@ void LLCacheName::Impl::processUUIDReply(LLMessageSystem* msg, bool isGroup)  		if (!isGroup)  		{  			mSignal(id, entry->mFirstName, entry->mLastName, FALSE); +			std::string fullname = entry->mFirstName + " " + entry->mLastName; +			mReverseCache[fullname] = id;  		}  		else  		{  			mSignal(id, entry->mGroupName, "", TRUE); +			mReverseCache[entry->mGroupName] = id;  		}  	}  } diff --git a/indra/llmessage/llcachename.h b/indra/llmessage/llcachename.h index 8641437d86..111cc8b650 100644 --- a/indra/llmessage/llcachename.h +++ b/indra/llmessage/llcachename.h @@ -86,6 +86,10 @@ public:  	BOOL getName(const LLUUID& id, std::string& first, std::string& last);  	BOOL getFullName(const LLUUID& id, std::string& fullname); +	// Reverse lookup of UUID from name +	BOOL getUUID(const std::string& first, const std::string& last, LLUUID& id); +	BOOL getUUID(const std::string& fullname, LLUUID& id); +	  	// If available, this method copies the group name into the string  	// provided. The caller must allocate at least  	// DB_GROUP_NAME_BUF_SIZE characters. If not available, this diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index f0df3bcf90..bab5cfd56e 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -89,19 +89,6 @@ void LLRenderTarget::setSampleBuffer(LLMultisampleBuffer* buffer)  void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, BOOL stencil, LLTexUnit::eTextureType usage, BOOL use_fbo)  { -	// only reallocate if something changed -	if (mResX == resx -		&& mResY == resy -		&& mUseDepth == depth -		&& mStencil == stencil -		&& mUsage == usage -		&& (mFBO != 0) == ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject) -		&& mColorFmt == color_fmt) -	{ -		// nothing to do -		return; -	} -		  	stop_glerror();  	mResX = resx;  	mResY = resy; @@ -620,19 +607,6 @@ void LLMultisampleBuffer::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth  void LLMultisampleBuffer::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, BOOL stencil,  LLTexUnit::eTextureType usage, BOOL use_fbo, U32 samples )  { -	if (mResX == resx -		&& mResY == resy -		&& mUseDepth == depth -		&& mStencil == stencil -		&& mUsage == usage -		&& (mFBO != 0) == ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject) -		&& mColorFmt == color_fmt -		&& mSamples == samples) -	{ -		// nothing to do -		return; -	} -  	stop_glerror();  	mResX = resx;  	mResY = resy; diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index b65f248db2..8930e32055 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -147,7 +147,11 @@ LLButton::LLButton(const LLButton::Params& p)  	mCommitOnReturn(p.commit_on_return),  	mFadeWhenDisabled(FALSE),  	mForcePressedState(false), -	mLastDrawCharsCount(0) +	mLastDrawCharsCount(0), +	mMouseDownSignal(NULL), +	mMouseUpSignal(NULL), +	mHeldDownSignal(NULL) +  {  	static LLUICachedControl<S32> llbutton_orig_h_pad ("UIButtonOrigHPad", 0);  	static Params default_params(LLUICtrlFactory::getDefaultParams<LLButton>()); @@ -215,13 +219,28 @@ LLButton::LLButton(const LLButton::Params& p)  	}  	if (p.click_callback.isProvided()) -		initCommitCallback(p.click_callback, mCommitSignal); // alias -> commit_callback +	{ +		setCommitCallback(initCommitCallback(p.click_callback)); // alias -> commit_callback +	}  	if (p.mouse_down_callback.isProvided()) -		initCommitCallback(p.mouse_down_callback, mMouseDownSignal); +	{ +		setMouseDownCallback(initCommitCallback(p.mouse_down_callback)); +	}  	if (p.mouse_up_callback.isProvided()) -		initCommitCallback(p.mouse_up_callback, mMouseUpSignal); +	{ +		setMouseUpCallback(initCommitCallback(p.mouse_up_callback)); +	}  	if (p.mouse_held_callback.isProvided()) -		initCommitCallback(p.mouse_held_callback, mHeldDownSignal); +	{ +		setHeldDownCallback(initCommitCallback(p.mouse_held_callback)); +	} +} + +LLButton::~LLButton() +{ +	delete mMouseDownSignal; +	delete mMouseUpSignal; +	delete mHeldDownSignal;  }  // HACK: Committing a button is the same as instantly clicking it. @@ -232,9 +251,9 @@ void LLButton::onCommit()  	// panel containing it.  Therefore we need to call 	LLUICtrl::onCommit()  	// LAST, otherwise this becomes deleted memory. -	mMouseDownSignal(this, LLSD()); +	if (mMouseDownSignal) (*mMouseDownSignal)(this, LLSD()); -	mMouseUpSignal(this, LLSD()); +	if (mMouseUpSignal) (*mMouseUpSignal)(this, LLSD());  	if (getSoundFlags() & MOUSE_DOWN)  	{ @@ -257,19 +276,23 @@ void LLButton::onCommit()  boost::signals2::connection LLButton::setClickedCallback( const commit_signal_t::slot_type& cb )  { -	return mCommitSignal.connect(cb); +	if (!mCommitSignal) mCommitSignal = new commit_signal_t(); +	return mCommitSignal->connect(cb);  }  boost::signals2::connection LLButton::setMouseDownCallback( const commit_signal_t::slot_type& cb )  { -	return mMouseDownSignal.connect(cb); +	if (!mMouseDownSignal) mMouseDownSignal = new commit_signal_t(); +	return mMouseDownSignal->connect(cb);  }  boost::signals2::connection LLButton::setMouseUpCallback( const commit_signal_t::slot_type& cb )  { -	return mMouseUpSignal.connect(cb); +	if (!mMouseUpSignal) mMouseUpSignal = new commit_signal_t(); +	return mMouseUpSignal->connect(cb);  }  boost::signals2::connection LLButton::setHeldDownCallback( const commit_signal_t::slot_type& cb )  { -	return mHeldDownSignal.connect(cb); +	if (!mHeldDownSignal) mHeldDownSignal = new commit_signal_t(); +	return mHeldDownSignal->connect(cb);  } @@ -351,7 +374,7 @@ BOOL LLButton::handleMouseDown(S32 x, S32 y, MASK mask)  		 */  		LLUICtrl::handleMouseDown(x, y, mask); -		mMouseDownSignal(this, LLSD()); +		if(mMouseDownSignal) (*mMouseDownSignal)(this, LLSD());  		mMouseDownTimer.start();  		mMouseDownFrame = (S32) LLFrameTimer::getFrameCount(); @@ -383,7 +406,7 @@ BOOL LLButton::handleMouseUp(S32 x, S32 y, MASK mask)  		LLUICtrl::handleMouseUp(x, y, mask);  		// Regardless of where mouseup occurs, handle callback -		mMouseUpSignal(this, LLSD()); +		if(mMouseUpSignal) (*mMouseUpSignal)(this, LLSD());  		resetMouseDownTimer(); @@ -493,7 +516,7 @@ BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)  			{  				LLSD param;  				param["count"] = mMouseHeldDownCount++; -				mHeldDownSignal(this, param); +				if (mHeldDownSignal) (*mHeldDownSignal)(this, param);  			}  		} diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 3c1b57c4be..8c3b4bd859 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -128,6 +128,8 @@ protected:  	LLButton(const Params&);  public: + +	~LLButton();  	// For backward compatability only  	typedef boost::function<void(void*)> button_callback_t; @@ -251,9 +253,9 @@ private:  	void			resetMouseDownTimer();  private: -	commit_signal_t 			mMouseDownSignal; -	commit_signal_t 			mMouseUpSignal; -	commit_signal_t 			mHeldDownSignal; +	commit_signal_t* 			mMouseDownSignal; +	commit_signal_t* 			mMouseUpSignal; +	commit_signal_t* 			mHeldDownSignal;  	const LLFontGL*				mGLFont; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index bf965e8e28..262afbe661 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2642,10 +2642,14 @@ void LLFloater::initFromParams(const LLFloater::Params& p)  	// open callback   	if (p.open_callback.isProvided()) -		initCommitCallback(p.open_callback, mOpenSignal); +	{ +		mOpenSignal.connect(initCommitCallback(p.open_callback)); +	}  	// close callback   	if (p.close_callback.isProvided()) -		initCommitCallback(p.close_callback, mCloseSignal); +	{ +		mCloseSignal.connect(initCommitCallback(p.close_callback)); +	}  }  LLFastTimer::DeclareTimer POST_BUILD("Floater Post Build"); diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp index 00a80478cf..35fbc7b0a8 100644 --- a/indra/llui/llfocusmgr.cpp +++ b/indra/llui/llfocusmgr.cpp @@ -41,6 +41,10 @@ const F32 FOCUS_FADE_TIME = 0.3f;  // NOTE: the LLFocusableElement implementation has been moved here from lluictrl.cpp.  LLFocusableElement::LLFocusableElement() +:	mFocusLostCallback(NULL), +	mFocusReceivedCallback(NULL), +	mFocusChangedCallback(NULL), +	mTopLostCallback(NULL)  {  } @@ -59,23 +63,27 @@ BOOL LLFocusableElement::handleUnicodeChar(llwchar uni_char, BOOL called_from_pa  // virtual  LLFocusableElement::~LLFocusableElement()  { +	delete mFocusLostCallback; +	delete mFocusReceivedCallback; +	delete mFocusChangedCallback; +	delete mTopLostCallback;  }  void LLFocusableElement::onFocusReceived()  { -	mFocusReceivedCallback(this); -	mFocusChangedCallback(this); +	if (mFocusReceivedCallback) (*mFocusReceivedCallback)(this); +	if (mFocusChangedCallback) (*mFocusChangedCallback)(this);  }  void LLFocusableElement::onFocusLost()  { -	mFocusLostCallback(this); -	mFocusChangedCallback(this); +	if (mFocusLostCallback) (*mFocusLostCallback)(this); +	if (mFocusChangedCallback) (*mFocusChangedCallback)(this);  }  void LLFocusableElement::onTopLost()  { -	mTopLostCallback(this); +	if (mTopLostCallback) (*mTopLostCallback)(this);  }  BOOL LLFocusableElement::hasFocus() const @@ -87,6 +95,31 @@ void LLFocusableElement::setFocus(BOOL b)  {  } +boost::signals2::connection LLFocusableElement::setFocusLostCallback( const focus_signal_t::slot_type& cb)	 +{  +	if (!mFocusLostCallback) mFocusLostCallback = new focus_signal_t(); +	return mFocusLostCallback->connect(cb); +} + +boost::signals2::connection	LLFocusableElement::setFocusReceivedCallback(const focus_signal_t::slot_type& cb)	 +{  +	if (!mFocusReceivedCallback) mFocusReceivedCallback = new focus_signal_t(); +	return mFocusReceivedCallback->connect(cb); +} + +boost::signals2::connection	LLFocusableElement::setFocusChangedCallback(const focus_signal_t::slot_type& cb)	 +{ +	if (!mFocusChangedCallback) mFocusChangedCallback = new focus_signal_t(); +	return mFocusChangedCallback->connect(cb); +} + +boost::signals2::connection	LLFocusableElement::setTopLostCallback(const focus_signal_t::slot_type& cb)	 +{  +	if (!mTopLostCallback) mTopLostCallback = new focus_signal_t(); +	return mTopLostCallback->connect(cb); +} + +  LLFocusMgr gFocusMgr; diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h index 2fa4e124fb..83ecd1d301 100644 --- a/indra/llui/llfocusmgr.h +++ b/indra/llui/llfocusmgr.h @@ -56,10 +56,10 @@ public:  	typedef boost::signals2::signal<void(LLFocusableElement*)> focus_signal_t; -	boost::signals2::connection setFocusLostCallback( const focus_signal_t::slot_type& cb)	{ return mFocusLostCallback.connect(cb);} -	boost::signals2::connection	setFocusReceivedCallback(const focus_signal_t::slot_type& cb)	{ return mFocusReceivedCallback.connect(cb);} -	boost::signals2::connection	setFocusChangedCallback(const focus_signal_t::slot_type& cb)	{ return mFocusChangedCallback.connect(cb);} -	void	setTopLostCallback(const focus_signal_t::slot_type& cb)	{ mTopLostCallback.connect(cb);} +	boost::signals2::connection setFocusLostCallback( const focus_signal_t::slot_type& cb); +	boost::signals2::connection	setFocusReceivedCallback(const focus_signal_t::slot_type& cb); +	boost::signals2::connection	setFocusChangedCallback(const focus_signal_t::slot_type& cb); +	boost::signals2::connection	setTopLostCallback(const focus_signal_t::slot_type& cb);  	// These were brought up the hierarchy from LLView so that we don't have to use dynamic_cast when dealing with keyboard focus.  	virtual BOOL	handleKey(KEY key, MASK mask, BOOL called_from_parent); @@ -69,10 +69,10 @@ protected:  	virtual void	onFocusReceived();  	virtual void	onFocusLost();  	virtual void	onTopLost();	// called when registered as top ctrl and user clicks elsewhere -	focus_signal_t  mFocusLostCallback; -	focus_signal_t  mFocusReceivedCallback; -	focus_signal_t  mFocusChangedCallback; -	focus_signal_t  mTopLostCallback; +	focus_signal_t*  mFocusLostCallback; +	focus_signal_t*  mFocusReceivedCallback; +	focus_signal_t*  mFocusChangedCallback; +	focus_signal_t*  mTopLostCallback;  }; diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index c2f91ff7e0..bd5734312a 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -323,6 +323,19 @@ void LLLineEditor::setMaxTextLength(S32 max_text_length)  	mMaxLengthBytes = max_len;  }  +void LLLineEditor::getTextPadding(S32 *left, S32 *right) +{ +	*left = mTextPadLeft; +	*right = mTextPadRight; +} + +void LLLineEditor::setTextPadding(S32 left, S32 right) +{ +	mTextPadLeft = left; +	mTextPadRight = right; +	updateTextPadding(); +} +  void LLLineEditor::updateTextPadding()  {  	static LLUICachedControl<S32> line_editor_hpad ("UILineEditorHPad", 0); @@ -626,7 +639,8 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)  	// delay cursor flashing  	mKeystrokeTimer.reset(); -	mMouseDownSignal(this,x,y,mask); +	if (mMouseDownSignal) +		(*mMouseDownSignal)(this,x,y,mask);  	return TRUE;  } @@ -742,7 +756,8 @@ BOOL LLLineEditor::handleMouseUp(S32 x, S32 y, MASK mask)  	}  	// We won't call LLUICtrl::handleMouseUp to avoid double calls of  childrenHandleMouseUp().Just invoke the signal manually. -	mMouseUpSignal(this,x,y, mask); +	if (mMouseUpSignal) +		(*mMouseUpSignal)(this,x,y, mask);  	return handled;  } diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index 4474963b1a..4c4b00094d 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -226,6 +226,9 @@ public:  	void			setKeystrokeCallback(callback_t callback, void* user_data);  	void			setMaxTextLength(S32 max_text_length); +	// Manipulate left and right padding for text +	void getTextPadding(S32 *left, S32 *right); +	void setTextPadding(S32 left, S32 right);  	// Prevalidation controls which keystrokes can affect the editor  	void			setPrevalidate( LLLinePrevalidateFunc func ); diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index de9a854f63..f8935d03ac 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -760,21 +760,25 @@ void LLMenuItemCallGL::initFromParams(const Params& p)  {  	if (p.on_visible.isProvided())  	{ -		initVisibleCallback(p.on_visible, mVisibleSignal); +		mVisibleSignal.connect(initVisibleCallback(p.on_visible));  	}  	if (p.on_enable.isProvided())  	{ -		initEnableCallback(p.on_enable, mEnableSignal); +		setEnableCallback(initEnableCallback(p.on_enable));  		// Set the enabled control variable (for backwards compatability)  		if (p.on_enable.control_name.isProvided() && !p.on_enable.control_name().empty())  		{  			LLControlVariable* control = findControl(p.on_enable.control_name());  			if (control) +			{  				setEnabledControlVariable(control); +			}  		}  	}  	if (p.on_click.isProvided()) -		initCommitCallback(p.on_click, mCommitSignal); +	{ +		setCommitCallback(initCommitCallback(p.on_click)); +	}  	LLUICtrl::initFromParams(p);  } @@ -795,7 +799,10 @@ void LLMenuItemCallGL::updateEnabled( void )  		if (mEnabledControlVariable)  		{  			if (!enabled) -				mEnabledControlVariable->set(false); // callback overrides control variable; this will call setEnabled() +			{ +				// callback overrides control variable; this will call setEnabled() +				mEnabledControlVariable->set(false);  +			}  		}  		else  		{ @@ -854,7 +861,7 @@ void LLMenuItemCheckGL::initFromParams(const Params& p)  {  	if (p.on_check.isProvided())  	{ -		initEnableCallback(p.on_check, mCheckSignal); +		setCheckCallback(initEnableCallback(p.on_check));  		// Set the control name (for backwards compatability)  		if (p.on_check.control_name.isProvided() && !p.on_check.control_name().empty())  		{ diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp index 68e496aed1..1891bca36c 100644 --- a/indra/llui/llmultislider.cpp +++ b/indra/llui/llmultislider.cpp @@ -84,17 +84,30 @@ LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p)  	mThumbCenterSelectedColor(p.thumb_center_selected_color()),  	mDisabledThumbColor(p.thumb_disabled_color()),  	mTriangleColor(p.triangle_color()), -	mThumbWidth(p.thumb_width) +	mThumbWidth(p.thumb_width), +	mMouseDownSignal(NULL), +	mMouseUpSignal(NULL)  {  	mValue.emptyMap();  	mCurSlider = LLStringUtil::null;  	if (p.mouse_down_callback.isProvided()) -		initCommitCallback(p.mouse_down_callback, mMouseDownSignal); +	{ +		setMouseDownCallback(initCommitCallback(p.mouse_down_callback)); +	}  	if (p.mouse_up_callback.isProvided()) -		initCommitCallback(p.mouse_up_callback, mMouseUpSignal); +	{ +		setMouseUpCallback(initCommitCallback(p.mouse_up_callback)); +	} +} + +LLMultiSlider::~LLMultiSlider() +{ +	delete mMouseDownSignal; +	delete mMouseUpSignal;  } +  void LLMultiSlider::setSliderValue(const std::string& name, F32 value, BOOL from_event)  {  	// exit if not there @@ -325,7 +338,8 @@ BOOL LLMultiSlider::handleMouseUp(S32 x, S32 y, MASK mask)  	{  		gFocusMgr.setMouseCapture( NULL ); -		mMouseUpSignal( this, LLSD() ); +		if (mMouseUpSignal) +			(*mMouseUpSignal)( this, LLSD() );  		handled = TRUE;  		make_ui_sound("UISndClickRelease"); @@ -345,7 +359,8 @@ BOOL LLMultiSlider::handleMouseDown(S32 x, S32 y, MASK mask)  	{  		setFocus(TRUE);  	} -	mMouseDownSignal( this, LLSD() ); +	if (mMouseDownSignal) +		(*mMouseDownSignal)( this, LLSD() );  	if (MASK_CONTROL & mask) // if CTRL is modifying  	{ @@ -557,3 +572,15 @@ void LLMultiSlider::draw()  	LLF32UICtrl::draw();  } + +boost::signals2::connection LLMultiSlider::setMouseDownCallback( const commit_signal_t::slot_type& cb )  +{  +	if (!mMouseDownSignal) mMouseDownSignal = new commit_signal_t(); +	return mMouseDownSignal->connect(cb);  +} + +boost::signals2::connection LLMultiSlider::setMouseUpCallback(	const commit_signal_t::slot_type& cb )    +{  +	if (!mMouseUpSignal) mMouseUpSignal = new commit_signal_t(); +	return mMouseUpSignal->connect(cb);  +} diff --git a/indra/llui/llmultislider.h b/indra/llui/llmultislider.h index da633cc1cd..f8e43a0470 100644 --- a/indra/llui/llmultislider.h +++ b/indra/llui/llmultislider.h @@ -67,6 +67,7 @@ protected:  	LLMultiSlider(const Params&);  	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; @@ -78,8 +79,8 @@ public:  	/*virtual*/ void	setValue(const LLSD& value);  	/*virtual*/ LLSD	getValue() const		{ return mValue; } -	boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb ) { return mMouseDownSignal.connect(cb); } -	boost::signals2::connection setMouseUpCallback(	const commit_signal_t::slot_type& cb )   { return mMouseUpSignal.connect(cb); } +	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);  	const std::string&	addSlider(); @@ -116,8 +117,8 @@ protected:  	LLUIColor		mDisabledThumbColor;  	LLUIColor		mTriangleColor; -	commit_signal_t	mMouseDownSignal; -	commit_signal_t	mMouseUpSignal; +	commit_signal_t*	mMouseDownSignal; +	commit_signal_t*	mMouseUpSignal;  };  #endif  // LL_MULTI_SLIDER_H diff --git a/indra/llui/llmultisliderctrl.cpp b/indra/llui/llmultisliderctrl.cpp index a9f462173d..87938c19d4 100644 --- a/indra/llui/llmultisliderctrl.cpp +++ b/indra/llui/llmultisliderctrl.cpp @@ -344,7 +344,7 @@ void LLMultiSliderCtrl::onEditorCommit( LLUICtrl* ctrl, const LLSD& userdata)  		if( self->mMultiSlider->getMinValue() <= val && val <= self->mMultiSlider->getMaxValue() )  		{  			self->setCurSliderValue( val );  // set the value temporarily so that the callback can retrieve it. -			if( self->mValidateSignal( self, val ) ) +			if( !self->mValidateSignal || (*(self->mValidateSignal))( self, val ) )  			{  				success = TRUE;  			} @@ -378,7 +378,7 @@ void LLMultiSliderCtrl::onSliderCommit(LLUICtrl* ctrl, const LLSD& userdata)  	F32 new_val = self->mMultiSlider->getCurSliderValue();  	self->mCurValue = new_val;  // set the value temporarily so that the callback can retrieve it. -	if( self->mValidateSignal( self, new_val ) ) +	if( !self->mValidateSignal || (*(self->mValidateSignal))( self, new_val ) )  	{  		success = TRUE;  	} diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 89c4656297..063822dd56 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -106,7 +106,8 @@ LLPanel::LLPanel(const LLPanel::Params& p)  	mHelpTopic(p.help_topic),  	mCommitCallbackRegistrar(false),  	mEnableCallbackRegistrar(false), -	mXMLFilename(p.filename) +	mXMLFilename(p.filename), +	mVisibleSignal(NULL)  	// *NOTE: Be sure to also change LLPanel::initFromParams().  We have too  	// many classes derived from LLPanel to retrofit them all to pass in params.  { @@ -118,6 +119,11 @@ LLPanel::LLPanel(const LLPanel::Params& p)  	mPanelHandle.bind(this);  } +LLPanel::~LLPanel() +{ +	delete mVisibleSignal; +} +  // virtual  BOOL LLPanel::isPanel() const  { @@ -332,7 +338,8 @@ BOOL LLPanel::handleKeyHere( KEY key, MASK mask )  void LLPanel::handleVisibilityChange ( BOOL new_visibility )  {  	LLUICtrl::handleVisibilityChange ( new_visibility ); -	mVisibleSignal(this, LLSD(new_visibility) ); // Pass BOOL as LLSD +	if (mVisibleSignal) +		(*mVisibleSignal)(this, LLSD(new_visibility) ); // Pass BOOL as LLSD  }  void LLPanel::setFocus(BOOL b) @@ -424,7 +431,9 @@ void LLPanel::initFromParams(const LLPanel::Params& p)  	// visible callback   	if (p.visible_callback.isProvided()) -		initCommitCallback(p.visible_callback, mVisibleSignal); +	{ +		setVisibleCallback(initCommitCallback(p.visible_callback)); +	}  	for (LLInitParam::ParamIterator<LocalizedString>::const_iterator it = p.strings().begin();  		it != p.strings().end(); @@ -907,3 +916,13 @@ void LLPanel::childSetControlName(const std::string& id, const std::string& cont  		view->setControlName(control_name, NULL);  	}  } + +boost::signals2::connection LLPanel::setVisibleCallback( const commit_signal_t::slot_type& cb ) +{ +	if (!mVisibleSignal) +	{ +		mVisibleSignal = new commit_signal_t(); +	} + +	return mVisibleSignal->connect(cb); +} diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h index c213809d68..0a0fed82fb 100644 --- a/indra/llui/llpanel.h +++ b/indra/llui/llpanel.h @@ -109,7 +109,7 @@ protected:  public:  // 	LLPanel(const std::string& name, const LLRect& rect = LLRect(), BOOL bordered = TRUE); -	/*virtual*/ ~LLPanel() {} +	/*virtual*/ ~LLPanel();  	// LLView interface  	/*virtual*/ BOOL 	isPanel() const; @@ -241,6 +241,8 @@ public:  	void setXMLFilename(std::string filename) { mXMLFilename = filename; };  	std::string getXMLFilename() { return mXMLFilename; }; +	boost::signals2::connection setVisibleCallback( const commit_signal_t::slot_type& cb ); +  protected:  	// Override to set not found list  	LLButton*		getDefaultButton() { return mDefaultBtn; } @@ -249,7 +251,7 @@ protected:  	EnableCallbackRegistry::ScopedRegistrar mEnableCallbackRegistrar;  	VisibleCallbackRegistry::ScopedRegistrar mVisibleCallbackRegistrar; -	commit_signal_t mVisibleSignal;		// Called when visibility changes, passes new visibility as LLSD() +	commit_signal_t* mVisibleSignal;		// Called when visibility changes, passes new visibility as LLSD()  	std::string		mHelpTopic;         // the name of this panel's help topic to display in the Help Viewer diff --git a/indra/llui/llslider.cpp b/indra/llui/llslider.cpp index da2fc7c68b..a6f729b396 100644 --- a/indra/llui/llslider.cpp +++ b/indra/llui/llslider.cpp @@ -77,7 +77,9 @@ LLSlider::LLSlider(const LLSlider::Params& p)  	mTrackImageHorizontal(p.track_image_horizontal),  	mTrackImageVertical(p.track_image_vertical),  	mTrackHighlightHorizontalImage(p.track_highlight_horizontal_image), -	mTrackHighlightVerticalImage(p.track_highlight_vertical_image) +	mTrackHighlightVerticalImage(p.track_highlight_vertical_image), +	mMouseDownSignal(NULL), +	mMouseUpSignal(NULL)  {      mViewModel->setValue(p.initial_value);  	updateThumbRect(); @@ -86,9 +88,19 @@ LLSlider::LLSlider(const LLSlider::Params& p)  	setValue(getValueF32());  	if (p.mouse_down_callback.isProvided()) -		initCommitCallback(p.mouse_down_callback, mMouseDownSignal); +	{ +		setMouseDownCallback(initCommitCallback(p.mouse_down_callback)); +	}  	if (p.mouse_up_callback.isProvided()) -		initCommitCallback(p.mouse_up_callback, mMouseUpSignal); +	{ +		setMouseUpCallback(initCommitCallback(p.mouse_up_callback)); +	} +} + +LLSlider::~LLSlider() +{ +	delete mMouseDownSignal; +	delete mMouseUpSignal;  }  void LLSlider::setValue(F32 value, BOOL from_event) @@ -202,7 +214,8 @@ BOOL LLSlider::handleMouseUp(S32 x, S32 y, MASK mask)  	{  		gFocusMgr.setMouseCapture( NULL ); -		mMouseUpSignal( this, getValueF32() ); +		if (mMouseUpSignal) +			(*mMouseUpSignal)( this, getValueF32() );  		handled = TRUE;  		make_ui_sound("UISndClickRelease"); @@ -222,7 +235,8 @@ BOOL LLSlider::handleMouseDown(S32 x, S32 y, MASK mask)  	{  		setFocus(TRUE);  	} -	mMouseDownSignal( this, getValueF32() ); +	if (mMouseDownSignal) +		(*mMouseDownSignal)( this, getValueF32() );  	if (MASK_CONTROL & mask) // if CTRL is modifying  	{ @@ -364,3 +378,15 @@ void LLSlider::draw()  	LLUICtrl::draw();  } + +boost::signals2::connection LLSlider::setMouseDownCallback( const commit_signal_t::slot_type& cb )  +{  +	if (!mMouseDownSignal) mMouseDownSignal = new commit_signal_t(); +	return mMouseDownSignal->connect(cb);  +} + +boost::signals2::connection LLSlider::setMouseUpCallback(	const commit_signal_t::slot_type& cb )    +{  +	if (!mMouseUpSignal) mMouseUpSignal = new commit_signal_t(); +	return mMouseUpSignal->connect(cb);  +} diff --git a/indra/llui/llslider.h b/indra/llui/llslider.h index 6ab0ed7922..45f8f81e40 100644 --- a/indra/llui/llslider.h +++ b/indra/llui/llslider.h @@ -67,6 +67,7 @@ protected:  	LLSlider(const Params&);  	friend class LLUICtrlFactory;  public: +	virtual ~LLSlider();  	void			setValue( F32 value, BOOL from_event = FALSE );      // overrides for LLF32UICtrl methods  	virtual void	setValue(const LLSD& value )	{ setValue((F32)value.asReal(), TRUE); } @@ -76,8 +77,8 @@ public:  	virtual void	setMinValue(F32 min_value) { LLF32UICtrl::setMinValue(min_value); updateThumbRect(); }  	virtual void	setMaxValue(F32 max_value) { LLF32UICtrl::setMaxValue(max_value); updateThumbRect(); } -	boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb ) { return mMouseDownSignal.connect(cb); } -	boost::signals2::connection setMouseUpCallback(	const commit_signal_t::slot_type& cb )   { return mMouseUpSignal.connect(cb); } +	boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb ); +	boost::signals2::connection setMouseUpCallback(	const commit_signal_t::slot_type& cb );  	virtual BOOL	handleHover(S32 x, S32 y, MASK mask);  	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask); @@ -109,8 +110,8 @@ private:  	LLUIColor	mThumbOutlineColor;  	LLUIColor	mThumbCenterColor; -	commit_signal_t	mMouseDownSignal; -	commit_signal_t	mMouseUpSignal; +	commit_signal_t*	mMouseDownSignal; +	commit_signal_t*	mMouseUpSignal;  };  #endif  // LL_LLSLIDER_H diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp index ed22c0a47f..01c274bb4e 100644 --- a/indra/llui/llsliderctrl.cpp +++ b/indra/llui/llsliderctrl.cpp @@ -122,7 +122,8 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p)  	slider_p.min_value.setIfNotProvided(p.min_value);  	slider_p.max_value.setIfNotProvided(p.max_value);  	slider_p.increment.setIfNotProvided(p.increment); - +	slider_p.orientation.setIfNotProvided(p.orientation); +	  	slider_p.commit_callback.function(&LLSliderCtrl::onSliderCommit);  	slider_p.control_name(p.control_name);  	slider_p.mouse_down_callback( p.mouse_down_callback ); @@ -260,7 +261,7 @@ void LLSliderCtrl::onEditorCommit( LLUICtrl* ctrl, const LLSD& userdata )  		if( self->mSlider->getMinValue() <= val && val <= self->mSlider->getMaxValue() )  		{  			self->setValue( val );  // set the value temporarily so that the callback can retrieve it. -			if( self->mValidateSignal( self, val ) ) +			if( !self->mValidateSignal || (*(self->mValidateSignal))( self, val ) )  			{  				success = TRUE;  			} @@ -294,7 +295,7 @@ void LLSliderCtrl::onSliderCommit( LLUICtrl* ctrl, const LLSD& userdata )  	F32 new_val = self->mSlider->getValueF32();  	self->mValue = new_val;  // set the value temporarily so that the callback can retrieve it. -	if( self->mValidateSignal( self, new_val ) ) +	if( !self->mValidateSignal || (*(self->mValidateSignal))( self, new_val ) )  	{  		success = TRUE;  	} diff --git a/indra/llui/llsliderctrl.h b/indra/llui/llsliderctrl.h index 4a1574d502..c425849782 100644 --- a/indra/llui/llsliderctrl.h +++ b/indra/llui/llsliderctrl.h @@ -46,6 +46,7 @@ class LLSliderCtrl : public LLF32UICtrl  public:  	struct Params : public LLInitParam::Block<Params, LLF32UICtrl::Params>  	{ +		Optional<std::string>   orientation;  		Optional<S32>			label_width;  		Optional<S32>			text_width;  		Optional<bool>			show_text; @@ -78,7 +79,8 @@ public:  			value_text("value_text"),  			slider_label("slider_label"),  			mouse_down_callback("mouse_down_callback"), -			mouse_up_callback("mouse_up_callback") +			mouse_up_callback("mouse_up_callback"), +			orientation("orientation", std::string ("horizontal"))  		{}  	};  protected: diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index bedf16a397..d6d46654d5 100644 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -190,7 +190,7 @@ void LLSpinCtrl::onUpBtn( const LLSD& data )  			F32 saved_val = (F32)getValue().asReal();  			setValue(val); -			if( !mValidateSignal( this, val ) ) +			if( mValidateSignal && !(*mValidateSignal)( this, val ) )  			{  				setValue( saved_val );  				reportInvalidData(); @@ -224,7 +224,7 @@ void LLSpinCtrl::onDownBtn( const LLSD& data )  			F32 saved_val = (F32)getValue().asReal();  			setValue(val); -			if( !mValidateSignal( this, val ) ) +			if( mValidateSignal && !(*mValidateSignal)( this, val ) )  			{  				setValue( saved_val );  				reportInvalidData(); @@ -316,7 +316,7 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data )  		F32 saved_val = getValueF32();  		setValue(val); -		if( mValidateSignal( this, val ) ) +		if( !mValidateSignal || (*mValidateSignal)( this, val ) )  		{  			success = TRUE;  			onCommit(); diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index f5d8174820..d7d61cf6cb 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -1339,12 +1339,12 @@ BOOL LLTabContainer::selectTab(S32 which)  		cbdata = selected_tuple->mTabPanel->getName();  	BOOL res = FALSE; -	if( mValidateSignal( this, cbdata ) ) +	if( !mValidateSignal || (*mValidateSignal)( this, cbdata ) )  	{  		res = setTab(which); -		if (res) +		if (res && mCommitSignal)  		{ -			mCommitSignal(this, cbdata); +			(*mCommitSignal)(this, cbdata);  		}  	} diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index e210667764..3619b36c0d 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -60,6 +60,11 @@ LLTextBase::line_info::line_info(S32 index_start, S32 index_end, LLRect rect, S3  bool LLTextBase::compare_segment_end::operator()(const LLTextSegmentPtr& a, const LLTextSegmentPtr& b) const  { +	// sort empty spans (e.g. 11-11) after previous non-empty spans (e.g. 5-11) +	if (a->getEnd() == b->getEnd()) +	{ +		return a->getStart() < b->getStart(); +	}  	return a->getEnd() < b->getEnd();  } diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 224f066968..3f4ef24f82 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -750,8 +750,10 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask)  	{  		if( mIsSelecting )   		{ -			mScroller->autoScroll(x, y); - +			if(mScroller) +			{	 +				mScroller->autoScroll(x, y); +			}  			S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight);  			S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop);  			setCursorAtLocalPos( clamped_x, clamped_y, true ); @@ -799,7 +801,10 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)  	{  		if( mIsSelecting )  		{ -			mScroller->autoScroll(x, y); +			if(mScroller) +			{ +				mScroller->autoScroll(x, y); +			}  			S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight);  			S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop);  			setCursorAtLocalPos( clamped_x, clamped_y, true ); @@ -1696,7 +1701,15 @@ BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask )  	*/  	if (mReadOnly)  	{ -		handled = mScroller->handleKeyHere( key, mask ); +		if(mScroller) +		{ +			handled = mScroller->handleKeyHere( key, mask ); +		} +		else  +		{ +			handled = handleNavigationKey( key, mask ); +		} +  	}  	else  	{ @@ -2135,9 +2148,8 @@ void LLTextEditor::drawPreeditMarker()  void LLTextEditor::drawLineNumbers()  {  	LLGLSUIDefault gls_ui; - -	LLRect scrolled_view_rect = mScroller->getVisibleContentRect(); -	LLRect content_rect = mScroller->getContentWindowRect(); +	LLRect scrolled_view_rect = getVisibleDocumentRect(); +	LLRect content_rect = getTextRect();	  	LLLocalClipRect clip(content_rect);  	S32 first_line = getFirstVisibleLine();  	S32 num_lines = getLineCount(); diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index 08fc8fb784..a30d5b4651 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -78,7 +78,16 @@ LLUICtrl::LLUICtrl(const LLUICtrl::Params& p, const LLViewModelPtr& viewmodel)  	mEnabledControlVariable(NULL),  	mDisabledControlVariable(NULL),  	mMakeVisibleControlVariable(NULL), -	mMakeInvisibleControlVariable(NULL) +	mMakeInvisibleControlVariable(NULL), +	mCommitSignal(NULL), +	mValidateSignal(NULL), +	mMouseEnterSignal(NULL), +	mMouseLeaveSignal(NULL), +	mMouseDownSignal(NULL), +	mMouseUpSignal(NULL), +	mRightMouseDownSignal(NULL), +	mRightMouseUpSignal(NULL), +	mDoubleClickSignal(NULL)  {  	mUICtrlHandle.bind(this);  } @@ -129,10 +138,14 @@ void LLUICtrl::initFromParams(const Params& p)  	}  	if (p.commit_callback.isProvided()) -		initCommitCallback(p.commit_callback, mCommitSignal); +	{ +		setCommitCallback(initCommitCallback(p.commit_callback)); +	}  	if (p.validate_callback.isProvided()) -		initEnableCallback(p.validate_callback, mValidateSignal); +	{ +		setValidateCallback(initEnableCallback(p.validate_callback)); +	}  	if (p.init_callback.isProvided())  	{ @@ -151,10 +164,14 @@ void LLUICtrl::initFromParams(const Params& p)  	}  	if(p.mouseenter_callback.isProvided()) -		initCommitCallback(p.mouseenter_callback, mMouseEnterSignal); +	{ +		setMouseEnterCallback(initCommitCallback(p.mouseenter_callback)); +	}  	if(p.mouseleave_callback.isProvided()) -		initCommitCallback(p.mouseleave_callback, mMouseLeaveSignal); +	{ +		setMouseLeaveCallback(initCommitCallback(p.mouseleave_callback)); +	}  } @@ -167,16 +184,40 @@ LLUICtrl::~LLUICtrl()  		llwarns << "UI Control holding top ctrl deleted: " << getName() << ".  Top view removed." << llendl;  		gFocusMgr.removeTopCtrlWithoutCallback( this );  	} + +	delete mCommitSignal; +	delete mValidateSignal; +	delete mMouseEnterSignal; +	delete mMouseLeaveSignal; +	delete mMouseDownSignal; +	delete mMouseUpSignal; +	delete mRightMouseDownSignal; +	delete mRightMouseUpSignal; +	delete mDoubleClickSignal;  } -void LLUICtrl::initCommitCallback(const CommitCallbackParam& cb, commit_signal_t& sig) +void default_commit_handler(LLUICtrl* ctrl, const LLSD& param) +{} + +bool default_enable_handler(LLUICtrl* ctrl, const LLSD& param) +{ +	return true; +} + +bool default_visible_handler(LLUICtrl* ctrl, const LLSD& param) +{ +	return true; +} + + +LLUICtrl::commit_signal_t::slot_type LLUICtrl::initCommitCallback(const CommitCallbackParam& cb)  {  	if (cb.function.isProvided())  	{  		if (cb.parameter.isProvided()) -			sig.connect(boost::bind(cb.function(), _1, cb.parameter)); +			return boost::bind(cb.function(), _1, cb.parameter);  		else -			sig.connect(cb.function()); +			return cb.function();  	}  	else  	{ @@ -185,26 +226,27 @@ void LLUICtrl::initCommitCallback(const CommitCallbackParam& cb, commit_signal_t  		if (func)  		{  			if (cb.parameter.isProvided()) -				sig.connect(boost::bind((*func), _1, cb.parameter)); +				return boost::bind((*func), _1, cb.parameter);  			else -				sig.connect(*func); +				return commit_signal_t::slot_type(*func);  		}  		else if (!function_name.empty())  		{  			llwarns << "No callback found for: '" << function_name << "' in control: " << getName() << llendl;  		}			  	} +	return default_commit_handler;  } -void LLUICtrl::initEnableCallback(const EnableCallbackParam& cb, enable_signal_t& sig) +LLUICtrl::enable_signal_t::slot_type LLUICtrl::initEnableCallback(const EnableCallbackParam& cb)  {  	// Set the callback function  	if (cb.function.isProvided())  	{  		if (cb.parameter.isProvided()) -			sig.connect(boost::bind(cb.function(), this, cb.parameter)); +			return boost::bind(cb.function(), this, cb.parameter);  		else -			sig.connect(cb.function()); +			return cb.function();  	}  	else  	{ @@ -212,22 +254,23 @@ void LLUICtrl::initEnableCallback(const EnableCallbackParam& cb, enable_signal_t  		if (func)  		{  			if (cb.parameter.isProvided()) -				sig.connect(boost::bind((*func), this, cb.parameter)); +				return boost::bind((*func), this, cb.parameter);  			else -				sig.connect(*func); +				return enable_signal_t::slot_type(*func);  		}  	} +	return default_enable_handler;  } -void LLUICtrl::initVisibleCallback(const VisibleCallbackParam& cb, visible_signal_t& sig) +LLUICtrl::visible_signal_t::slot_type LLUICtrl::initVisibleCallback(const VisibleCallbackParam& cb)  {  	// Set the callback function  	if (cb.function.isProvided())  	{  		if (cb.parameter.isProvided()) -			sig.connect(boost::bind(cb.function(), this, cb.parameter)); +			return boost::bind(cb.function(), this, cb.parameter);  		else -			sig.connect(cb.function()); +			return cb.function();  	}  	else  	{ @@ -235,30 +278,40 @@ void LLUICtrl::initVisibleCallback(const VisibleCallbackParam& cb, visible_signa  		if (func)  		{  			if (cb.parameter.isProvided()) -				sig.connect(boost::bind((*func), this, cb.parameter)); +				return boost::bind((*func), this, cb.parameter);  			else -				sig.connect(*func); +				return visible_signal_t::slot_type(*func);  		}  	} +	return default_visible_handler;  }  // virtual  void LLUICtrl::onMouseEnter(S32 x, S32 y, MASK mask)  { -	mMouseEnterSignal(this, getValue()); +	if (mMouseEnterSignal) +	{ +		(*mMouseEnterSignal)(this, getValue()); +	}  }  // virtual  void LLUICtrl::onMouseLeave(S32 x, S32 y, MASK mask)  { -	mMouseLeaveSignal(this, getValue()); +	if(mMouseLeaveSignal) +	{ +		(*mMouseLeaveSignal)(this, getValue()); +	}  }  //virtual   BOOL LLUICtrl::handleMouseDown(S32 x, S32 y, MASK mask)  {  	BOOL handled  = LLView::handleMouseDown(x,y,mask); -	mMouseDownSignal(this,x,y,mask); +	if (mMouseDownSignal) +	{ +		(*mMouseDownSignal)(this,x,y,mask); +	}  	return handled;  } @@ -266,7 +319,10 @@ BOOL LLUICtrl::handleMouseDown(S32 x, S32 y, MASK mask)  BOOL LLUICtrl::handleMouseUp(S32 x, S32 y, MASK mask)  {  	BOOL handled  = LLView::handleMouseUp(x,y,mask); -	mMouseUpSignal(this,x,y,mask); +	if (mMouseUpSignal) +	{ +		(*mMouseUpSignal)(this,x,y,mask); +	}  	return handled;  } @@ -274,7 +330,10 @@ BOOL LLUICtrl::handleMouseUp(S32 x, S32 y, MASK mask)  BOOL LLUICtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)  {  	BOOL handled  = LLView::handleRightMouseDown(x,y,mask); -	mRightMouseDownSignal(this,x,y,mask); +	if (mRightMouseDownSignal) +	{ +		(*mRightMouseDownSignal)(this,x,y,mask); +	}  	return handled;  } @@ -282,14 +341,20 @@ BOOL LLUICtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)  BOOL LLUICtrl::handleRightMouseUp(S32 x, S32 y, MASK mask)  {  	BOOL handled  = LLView::handleRightMouseUp(x,y,mask); -	mRightMouseUpSignal(this,x,y,mask); +	if(mRightMouseUpSignal) +	{ +		(*mRightMouseUpSignal)(this,x,y,mask); +	}  	return handled;  }  BOOL LLUICtrl::handleDoubleClick(S32 x, S32 y, MASK mask)  {  	BOOL handled = LLView::handleDoubleClick(x, y, mask); -	mDoubleClickSignal(this, x, y, mask); +	if (mDoubleClickSignal) +	{ +		(*mDoubleClickSignal)(this, x, y, mask); +	}  	return handled;  } @@ -302,7 +367,8 @@ BOOL LLUICtrl::canFocusChildren() const  void LLUICtrl::onCommit()  { -	mCommitSignal(this, getValue()); +	if (mCommitSignal) +	(*mCommitSignal)(this, getValue());  }  //virtual @@ -832,7 +898,8 @@ boost::signals2::connection LLUICtrl::setCommitCallback( boost::function<void (L  }  boost::signals2::connection LLUICtrl::setValidateBeforeCommit( boost::function<bool (const LLSD& data)> cb )  { -	return mValidateSignal.connect(boost::bind(cb, _2)); +	if (!mValidateSignal) mValidateSignal = new enable_signal_t(); +	return mValidateSignal->connect(boost::bind(cb, _2));  }  // virtual @@ -850,3 +917,57 @@ BOOL LLUICtrl::getTentative() const  // virtual  void LLUICtrl::setColor(const LLColor4& color)							  { } + +boost::signals2::connection LLUICtrl::setCommitCallback( const commit_signal_t::slot_type& cb )  +{  +	if (!mCommitSignal) mCommitSignal = new commit_signal_t(); +	return mCommitSignal->connect(cb);  +} + +boost::signals2::connection LLUICtrl::setValidateCallback( const enable_signal_t::slot_type& cb )  +{  +	if (!mValidateSignal) mValidateSignal = new enable_signal_t(); +	return mValidateSignal->connect(cb);  +} + +boost::signals2::connection LLUICtrl::setMouseEnterCallback( const commit_signal_t::slot_type& cb )  +{  +	if (!mMouseEnterSignal) mMouseEnterSignal = new commit_signal_t(); +	return mMouseEnterSignal->connect(cb);  +} + +boost::signals2::connection LLUICtrl::setMouseLeaveCallback( const commit_signal_t::slot_type& cb )  +{  +	if (!mMouseLeaveSignal) mMouseLeaveSignal = new commit_signal_t(); +	return mMouseLeaveSignal->connect(cb);  +} + +boost::signals2::connection LLUICtrl::setMouseDownCallback( const mouse_signal_t::slot_type& cb )  +{  +	if (!mMouseDownSignal) mMouseDownSignal = new mouse_signal_t(); +	return mMouseDownSignal->connect(cb);  +} + +boost::signals2::connection LLUICtrl::setMouseUpCallback( const mouse_signal_t::slot_type& cb )  +{  +	if (!mMouseUpSignal) mMouseUpSignal = new mouse_signal_t(); +	return mMouseUpSignal->connect(cb);  +} + +boost::signals2::connection LLUICtrl::setRightMouseDownCallback( const mouse_signal_t::slot_type& cb )  +{  +	if (!mRightMouseDownSignal) mRightMouseDownSignal = new mouse_signal_t(); +	return mRightMouseDownSignal->connect(cb);  +} + +boost::signals2::connection LLUICtrl::setRightMouseUpCallback( const mouse_signal_t::slot_type& cb )  +{  +	if (!mRightMouseUpSignal) mRightMouseUpSignal = new mouse_signal_t(); +	return mRightMouseUpSignal->connect(cb);  +} + +boost::signals2::connection LLUICtrl::setDoubleClickCallback( const mouse_signal_t::slot_type& cb )  +{  +	if (!mDoubleClickSignal) mDoubleClickSignal = new mouse_signal_t(); +	return mDoubleClickSignal->connect(cb);  +} diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h index dd22851100..aef1bcd519 100644 --- a/indra/llui/lluictrl.h +++ b/indra/llui/lluictrl.h @@ -162,9 +162,9 @@ protected:  	LLUICtrl(const Params& p = getDefaultParams(),               const LLViewModelPtr& viewmodel=LLViewModelPtr(new LLViewModel)); -	void initCommitCallback(const CommitCallbackParam& cb, commit_signal_t& sig); -	void initEnableCallback(const EnableCallbackParam& cb, enable_signal_t& sig); -	void initVisibleCallback(const VisibleCallbackParam& cb, visible_signal_t& sig); +	commit_signal_t::slot_type initCommitCallback(const CommitCallbackParam& cb); +	enable_signal_t::slot_type initEnableCallback(const EnableCallbackParam& cb); +	visible_signal_t::slot_type initVisibleCallback(const VisibleCallbackParam& cb);  	// We need this virtual so we can override it with derived versions  	virtual LLViewModel* getViewModel() const; @@ -254,18 +254,18 @@ public:  	// topic then put in help_topic_out  	bool                    findHelpTopic(std::string& help_topic_out); -	boost::signals2::connection setCommitCallback( const commit_signal_t::slot_type& cb ) { return mCommitSignal.connect(cb); } -	boost::signals2::connection setValidateCallback( const enable_signal_t::slot_type& cb ) { return mValidateSignal.connect(cb); } +	boost::signals2::connection setCommitCallback( const commit_signal_t::slot_type& cb ); +	boost::signals2::connection setValidateCallback( const enable_signal_t::slot_type& cb ); -	boost::signals2::connection setMouseEnterCallback( const commit_signal_t::slot_type& cb ) { return mMouseEnterSignal.connect(cb); } -	boost::signals2::connection setMouseLeaveCallback( const commit_signal_t::slot_type& cb ) { return mMouseLeaveSignal.connect(cb); } +	boost::signals2::connection setMouseEnterCallback( const commit_signal_t::slot_type& cb ); +	boost::signals2::connection setMouseLeaveCallback( const commit_signal_t::slot_type& cb ); -	boost::signals2::connection setMouseDownCallback( const mouse_signal_t::slot_type& cb ) { return mMouseDownSignal.connect(cb); } -	boost::signals2::connection setMouseUpCallback( const mouse_signal_t::slot_type& cb ) { return mMouseUpSignal.connect(cb); } -	boost::signals2::connection setRightMouseDownCallback( const mouse_signal_t::slot_type& cb ) { return mRightMouseDownSignal.connect(cb); } -	boost::signals2::connection setRightMouseUpCallback( const mouse_signal_t::slot_type& cb ) { return mRightMouseUpSignal.connect(cb); } +	boost::signals2::connection setMouseDownCallback( const mouse_signal_t::slot_type& cb ); +	boost::signals2::connection setMouseUpCallback( const mouse_signal_t::slot_type& cb ); +	boost::signals2::connection setRightMouseDownCallback( const mouse_signal_t::slot_type& cb ); +	boost::signals2::connection setRightMouseUpCallback( const mouse_signal_t::slot_type& cb ); -	boost::signals2::connection setDoubleClickCallback( const mouse_signal_t::slot_type& cb ) { return mDoubleClickSignal.connect(cb); } +	boost::signals2::connection setDoubleClickCallback( const mouse_signal_t::slot_type& cb );  	// *TODO: Deprecate; for backwards compatability only:  	boost::signals2::connection setCommitCallback( boost::function<void (LLUICtrl*,void*)> cb, void* data);	 @@ -293,18 +293,18 @@ protected:  	static bool controlListener(const LLSD& newvalue, LLHandle<LLUICtrl> handle, std::string type); -	commit_signal_t		mCommitSignal; -	enable_signal_t		mValidateSignal; +	commit_signal_t*		mCommitSignal; +	enable_signal_t*		mValidateSignal; -	commit_signal_t		mMouseEnterSignal; -	commit_signal_t		mMouseLeaveSignal; +	commit_signal_t*		mMouseEnterSignal; +	commit_signal_t*		mMouseLeaveSignal; -	mouse_signal_t		mMouseDownSignal; -	mouse_signal_t		mMouseUpSignal; -	mouse_signal_t		mRightMouseDownSignal; -	mouse_signal_t		mRightMouseUpSignal; +	mouse_signal_t*		mMouseDownSignal; +	mouse_signal_t*		mMouseUpSignal; +	mouse_signal_t*		mRightMouseDownSignal; +	mouse_signal_t*		mRightMouseUpSignal; -	mouse_signal_t		mDoubleClickSignal; +	mouse_signal_t*		mDoubleClickSignal;      LLViewModelPtr  mViewModel; diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp index 318a0348a2..4c050844f8 100644 --- a/indra/llxuixml/llinitparam.cpp +++ b/indra/llxuixml/llinitparam.cpp @@ -46,7 +46,7 @@ namespace LLInitParam  	{  		const U8* my_addr = reinterpret_cast<const U8*>(this);  		const U8* block_addr = reinterpret_cast<const U8*>(enclosing_block); -		mEnclosingBlockOffset = (S16)(block_addr - my_addr); +		mEnclosingBlockOffset = (U16)(my_addr - block_addr);  	}  	// diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index 9fb464ca7b..493ddaa378 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -300,14 +300,14 @@ namespace LLInitParam  			const U8* my_addr = reinterpret_cast<const U8*>(this);  			// get address of enclosing BLOCK class using stored offset to enclosing BaseBlock class  			return *const_cast<BaseBlock*>( -							reinterpret_cast<const BaseBlock*>(my_addr + (ptrdiff_t)mEnclosingBlockOffset)); +							reinterpret_cast<const BaseBlock*>(my_addr - (ptrdiff_t)(S32)mEnclosingBlockOffset));  		}  	private:  		friend class BaseBlock;  		bool		mIsProvided; -		S16			mEnclosingBlockOffset; +		U16			mEnclosingBlockOffset;  	};  	// various callbacks and constraints associated with an individual param diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index e8302ab5eb..611875a1e2 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -239,6 +239,7 @@ set(viewer_SOURCE_FILES      llhudtext.cpp      llhudview.cpp      llimfloater.cpp +    llimfloatercontainer.cpp      llimhandler.cpp      llimpanel.cpp      llimview.cpp @@ -364,6 +365,7 @@ set(viewer_SOURCE_FILES      llremoteparcelrequest.cpp      llsavedsettingsglue.cpp      llscreenchannel.cpp +    llscriptfloater.cpp      llscrollingpanelparam.cpp      llsearchcombobox.cpp      llsearchhistory.cpp @@ -737,6 +739,7 @@ set(viewer_HEADER_FILES      llhudtext.h      llhudview.h      llimfloater.h +    llimfloatercontainer.h      llimpanel.h      llimview.h      llinspect.h @@ -860,6 +863,7 @@ set(viewer_HEADER_FILES      llrootview.h      llsavedsettingsglue.h      llscreenchannel.h +    llscriptfloater.h      llscrollingpanelparam.h      llsearchcombobox.h      llsearchhistory.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index c7279a2e33..075aee46c7 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3585,7 +3585,7 @@        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>http://docs.lindenlab.com/help/helpfloater.php?topic=[TOPIC]&channel=[CHANNEL]&version=[VERSION]&os=[OS]&language=[LANGUAGE]&version_major=[VERSION_MAJOR]&version_minor=[VERSION_MINOR]&version_patch=[VERSION_PATCH]&version_build=[VERSION_BUILD]</string> +      <string>http://viewer-help.secondlife.com/[LANGUAGE]/[CHANNEL]/[VERSION]/[TOPIC]</string>      </map>      <key>HighResSnapshot</key>      <map> @@ -5371,6 +5371,19 @@        <key>Value</key>        <real>1.0</real>      </map> +     +   <key>PlainTextChatHistory</key> +    <map> +      <key>Comment</key> +      <string>Enable/Disable plain text chat history style</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +          <key>PluginInstancesLow</key>      <map>        <key>Comment</key> @@ -7709,10 +7722,10 @@        <key>Value</key>        <integer>0</integer>      </map> -    <key>ShowCoordinatesOption</key> +    <key>NavBarShowCoordinates</key>      <map>        <key>Comment</key> -      <string>Show Coordinates in  Location Input Field</string> +      <string>Show coordinates in navigation bar</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> @@ -7720,6 +7733,17 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>NavBarShowParcelProperties</key> +    <map> +      <key>Comment</key> +      <string>Show parcel property icons in navigation bar</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>ShowCrosshairs</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 4dd569e2fa..eb5d172ff7 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2795,7 +2795,8 @@ void LLAgent::endAnimationUpdateUI()  		LLBottomTray::getInstance()->setVisible(TRUE); -		LLSideTray::getInstance()->setVisible(TRUE); +		LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE); +		LLSideTray::getInstance()->updateSidetrayVisibility();  		LLPanelStandStopFlying::getInstance()->setVisible(TRUE); @@ -2893,7 +2894,8 @@ void LLAgent::endAnimationUpdateUI()  		LLBottomTray::getInstance()->setVisible(FALSE); -		LLSideTray::getInstance()->setVisible(FALSE); +		LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE); +		LLSideTray::getInstance()->updateSidetrayVisibility();  		LLPanelStandStopFlying::getInstance()->setVisible(FALSE); diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 568ac4164a..7404fe5bc4 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -130,6 +130,7 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const  	// create a default name and description for the landmark  	std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName();  	std::string region_name = region->getName(); +	std::string sim_access_string = region->getSimAccessString();  	std::string buffer;  	if( parcel_name.empty() )  	{ @@ -142,7 +143,13 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const  		case LOCATION_FORMAT_NORMAL:  			buffer = llformat("%s", region_name.c_str());  			break; -		case LOCATION_FORMAT_WITHOUT_SIM: +		case LOCATION_FORMAT_NO_COORDS: +			buffer = llformat("%s%s%s", +				region_name.c_str(), +				sim_access_string.empty() ? "" : " - ", +				sim_access_string.c_str()); +			break; +		case LOCATION_FORMAT_NO_MATURITY:  		case LOCATION_FORMAT_FULL:  			buffer = llformat("%s (%d, %d, %d)",  				region_name.c_str(), @@ -161,14 +168,20 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const  		case LOCATION_FORMAT_NORMAL:  			buffer = llformat("%s, %s", parcel_name.c_str(), region_name.c_str());  			break; -		case LOCATION_FORMAT_WITHOUT_SIM: +		case LOCATION_FORMAT_NO_MATURITY:  			buffer = llformat("%s, %s (%d, %d, %d)",  				parcel_name.c_str(),  				region_name.c_str(),  				pos_x, pos_y, pos_z);  			break; +		case LOCATION_FORMAT_NO_COORDS: +			buffer = llformat("%s, %s%s%s", +							  parcel_name.c_str(), +							  region_name.c_str(), +							  sim_access_string.empty() ? "" : " - ", +							  sim_access_string.c_str()); +				break;  		case LOCATION_FORMAT_FULL: -			std::string sim_access_string = region->getSimAccessString();  			buffer = llformat("%s, %s (%d, %d, %d)%s%s",  				parcel_name.c_str(),  				region_name.c_str(), diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h index c7aafb71e7..3478793e38 100644 --- a/indra/newview/llagentui.h +++ b/indra/newview/llagentui.h @@ -38,10 +38,11 @@ class LLAgentUI  public:  	enum ELocationFormat  	{ -		LOCATION_FORMAT_NORMAL, -		LOCATION_FORMAT_LANDMARK, -		LOCATION_FORMAT_WITHOUT_SIM, -		LOCATION_FORMAT_FULL, +		LOCATION_FORMAT_NORMAL,			// Parcel +		LOCATION_FORMAT_LANDMARK,		// Parcel, Region +		LOCATION_FORMAT_NO_MATURITY,	// Parcel, Region (x, y, z) +		LOCATION_FORMAT_NO_COORDS,		// Parcel, Region - Maturity +		LOCATION_FORMAT_FULL,			// Parcel, Region (x, y, z) - Maturity  	};  	static void buildName(std::string& name); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 4f2d3e9645..fa0ea557ba 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1360,19 +1360,25 @@ bool LLAppViewer::cleanup()  		llinfos << "Waiting for pending IO to finish: " << pending << llendflush;  		ms_sleep(100);  	} -	llinfos << "Shutting down." << llendflush; +	llinfos << "Shutting down Views" << llendflush;  	// Destroy the UI  	if( gViewerWindow)  		gViewerWindow->shutdownViews(); + +	llinfos << "Cleaning up Inevntory" << llendflush;  	// Cleanup Inventory after the UI since it will delete any remaining observers  	// (Deleted observers should have already removed themselves)  	gInventory.cleanupInventory(); + +	llinfos << "Cleaning up Selections" << llendflush;  	// Clean up selection managers after UI is destroyed, as UI may be observing them.  	// Clean up before GL is shut down because we might be holding on to objects with texture references  	LLSelectMgr::cleanupGlobals(); +	 +	llinfos << "Shutting down OpenGL" << llendflush;  	// Shut down OpenGL  	if( gViewerWindow) @@ -1386,11 +1392,18 @@ bool LLAppViewer::cleanup()  		gViewerWindow = NULL;  		llinfos << "ViewerWindow deleted" << llendflush;  	} + +	llinfos << "Cleaning up Keyboard & Joystick" << llendflush;  	// viewer UI relies on keyboard so keep it aound until viewer UI isa gone  	delete gKeyboard;  	gKeyboard = NULL; +	// Turn off Space Navigator and similar devices +	LLViewerJoystick::getInstance()->terminate(); +	 +	llinfos << "Cleaning up Objects" << llendflush; +	  	LLViewerObject::cleanupVOClasses();  	LLWaterParamManager::cleanupClass(); @@ -1413,6 +1426,8 @@ bool LLAppViewer::cleanup()  	}  	LLPrimitive::cleanupVolumeManager(); +	llinfos << "Additional Cleanup..." << llendflush;	 +	  	LLViewerParcelMgr::cleanupGlobals();  	// *Note: this is where gViewerStats used to be deleted. @@ -1432,9 +1447,11 @@ bool LLAppViewer::cleanup()  	// Also after shutting down the messaging system since it has VFS dependencies  	// +	llinfos << "Cleaning up VFS" << llendflush;  	LLVFile::cleanupClass(); -	llinfos << "VFS cleaned up" << llendflush; +	llinfos << "Saving Data" << llendflush; +	  	// Quitting with "Remember Password" turned off should always stomp your  	// saved password, whether or not you successfully logged in.  JC  	if (!gSavedSettings.getBOOL("RememberPassword")) @@ -1476,13 +1493,16 @@ bool LLAppViewer::cleanup()  		gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""),mask);  	} -	// Turn off Space Navigator and similar devices -	LLViewerJoystick::getInstance()->terminate(); -  	removeMarkerFile(); // Any crashes from here on we'll just have to ignore  	writeDebugInfo(); +	LLLocationHistory::getInstance()->save(); + +	LLAvatarIconIDCache::getInstance()->save(); + +	llinfos << "Shutting down Threads" << llendflush; +	  	// Let threads finish  	LLTimer idleTimer;  	idleTimer.reset(); @@ -1515,14 +1535,9 @@ bool LLAppViewer::cleanup()      sTextureFetch = NULL;  	delete sImageDecodeThread;      sImageDecodeThread = NULL; - -	LLLocationHistory::getInstance()->save(); - -	LLAvatarIconIDCache::getInstance()->save(); -  	delete mFastTimerLogThread;  	mFastTimerLogThread = NULL; - +	  	if (LLFastTimerView::sAnalyzePerformance)  	{  		llinfos << "Analyzing performance" << llendl; @@ -1544,6 +1559,8 @@ bool LLAppViewer::cleanup()  	}  	LLMetricPerformanceTester::cleanClass() ; +	llinfos << "Cleaning up Media and Textures" << llendflush; +  	//Note:  	//LLViewerMedia::cleanupClass() has to be put before gTextureList.shutdown()  	//because some new image might be generated during cleaning up media. --bao @@ -1557,13 +1574,13 @@ bool LLAppViewer::cleanup()  	LLVFSThread::cleanupClass();  	LLLFSThread::cleanupClass(); -	llinfos << "VFS Thread finished" << llendflush; -  #ifndef LL_RELEASE_FOR_DOWNLOAD  	llinfos << "Auditing VFS" << llendl;  	gVFS->audit();  #endif +	llinfos << "Misc Cleanup" << llendflush; +	  	// For safety, the LLVFS has to be deleted *after* LLVFSThread. This should be cleaned up.  	// (LLVFS doesn't know about LLVFSThread so can't kill pending requests) -Steve  	delete gStaticVFS; @@ -1577,12 +1594,11 @@ bool LLAppViewer::cleanup()  	LLWatchdog::getInstance()->cleanup(); +	llinfos << "Shutting down message system" << llendflush;  	end_messaging_system(); -	llinfos << "Message system deleted." << llendflush;  	// *NOTE:Mani - The following call is not thread safe.   	LLCurl::cleanupClass(); -	llinfos << "LLCurl cleaned up." << llendflush;  	// If we're exiting to launch an URL, do that here so the screen  	// is at the right resolution before we launch IE. @@ -1603,7 +1619,7 @@ bool LLAppViewer::cleanup()  	ll_close_fail_log(); -    llinfos << "Goodbye" << llendflush; +    llinfos << "Goodbye!" << llendflush;  	// return 0;  	return true; diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 0844cca766..a133bd6fe6 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -347,9 +347,9 @@ void LLAvatarActions::inviteToGroup(const LLUUID& id)  	LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(id));  	if (widget)  	{ -		widget->removeNoneOption();  		widget->center();  		widget->setPowersMask(GP_MEMBER_INVITE); +		widget->removeNoneOption();  		widget->setSelectGroupCallback(boost::bind(callback_invite_to_group, _1, id));  	}  } diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 4ce3b50ed5..cd0456b308 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -33,11 +33,9 @@  #include "llviewerprecompiledheaders.h"  #include "llchathistory.h"  #include "llpanel.h" -#include "lltextbox.h"  #include "lluictrlfactory.h"  #include "llscrollcontainer.h"  #include "llavatariconctrl.h" -  #include "llimview.h"  #include "llcallingcard.h" //for LLAvatarTracker  #include "llagentdata.h" @@ -185,11 +183,10 @@ public:  			mSourceType = CHAT_SOURCE_SYSTEM;  		} -		LLTextBox* userName = getChild<LLTextBox>("user_name"); +		LLTextEditor* userName = getChild<LLTextEditor>("user_name"); -		LLUIColor color = style_params.color; -		userName->setReadOnlyColor(color); -		userName->setColor(color); +		userName->setReadOnlyColor(style_params.readonly_color()); +		userName->setColor(style_params.color());  		if(!chat.mFromName.empty())  		{ @@ -203,7 +200,7 @@ public:  		} -		LLTextBox* timeBox = getChild<LLTextBox>("time_box"); +		LLUICtrl* timeBox = getChild<LLUICtrl>("time_box");  		timeBox->setValue(chat.mTimeStr);  		LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon"); @@ -334,20 +331,14 @@ LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style  	return header;  } -void LLChatHistory::appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params) +void LLChatHistory::clear()  { -	LLView* view = NULL; -	std::string view_text = "\n[" + chat.mTimeStr + "] "; -	if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM) -		view_text += chat.mFromName + ": "; - - -	LLInlineViewSegment::Params p; -	p.force_newline = true; -	p.left_pad = mLeftWidgetPad; -	p.right_pad = mRightWidgetPad; +	mLastFromName.clear(); +	LLTextEditor::clear(); +} -	 +void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_chat_history, const LLStyle::Params& input_append_params) +{  	LLColor4 txt_color = LLUIColorTable::instance().getColor("White");  	LLViewerChat::getChatColor(chat,txt_color);  	LLFontGL* fontp = LLViewerChat::getChatFont();	 @@ -360,39 +351,63 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, const LLStyle::Param  	style_params.font.size(font_size);	  	style_params.font.style(input_append_params.font.style); - +	std::string header_text = "[" + chat.mTimeStr + "] "; +	if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM) +		header_text += chat.mFromName + ": "; -	if (mLastFromName == chat.mFromName) +	if (use_plain_text_chat_history)  	{ -		view = getSeparator(); -		p.top_pad = mTopSeparatorPad; -		p.bottom_pad = mBottomSeparatorPad; +		appendText(header_text, getText().size() != 0, style_params);  	}  	else  	{ -		view = getHeader(chat,style_params); -		if (getText().size() == 0) -			p.top_pad = 0; +		LLView* view = NULL; +		LLInlineViewSegment::Params p; +		p.force_newline = true; +		p.left_pad = mLeftWidgetPad; +		p.right_pad = mRightWidgetPad; + +		if (mLastFromName == chat.mFromName) +		{ +			view = getSeparator(); +			p.top_pad = mTopSeparatorPad; +			p.bottom_pad = mBottomSeparatorPad; +		}  		else -			p.top_pad = mTopHeaderPad; -		p.bottom_pad = mBottomHeaderPad; -		 +		{ +			view = getHeader(chat, style_params); +			if (getText().size() == 0) +				p.top_pad = 0; +			else +				p.top_pad = mTopHeaderPad; +			p.bottom_pad = mBottomHeaderPad; +			 +		} +		p.view = view; + +		//Prepare the rect for the view +		LLRect target_rect = getDocumentView()->getRect(); +		// squeeze down the widget by subtracting padding off left and right +		target_rect.mLeft += mLeftWidgetPad + mHPad; +		target_rect.mRight -= mRightWidgetPad; +		view->reshape(target_rect.getWidth(), view->getRect().getHeight()); +		view->setOrigin(target_rect.mLeft, view->getRect().mBottom); + +		appendWidget(p, header_text, false); +		mLastFromName = chat.mFromName;  	} -	p.view = view; - -	//Prepare the rect for the view -	LLRect target_rect = getDocumentView()->getRect(); -	// squeeze down the widget by subtracting padding off left and right -	target_rect.mLeft += mLeftWidgetPad + mHPad; -	target_rect.mRight -= mRightWidgetPad; -	view->reshape(target_rect.getWidth(), view->getRect().getHeight()); -	view->setOrigin(target_rect.mLeft, view->getRect().mBottom); - -	appendWidget(p, view_text, false); - -	//Append the text message -	appendText(chat.mText, FALSE, style_params); +	//Handle IRC styled /me messages. +	std::string prefix = chat.mText.substr(0, 4); +	if (prefix == "/me " || prefix == "/me'") +	{ +		style_params.font.style = "ITALIC"; -	mLastFromName = chat.mFromName; +		if (chat.mFromName.size() > 0) +			appendText(chat.mFromName + " ", TRUE, style_params); +		appendText(chat.mText.substr(4), FALSE, style_params); +	} +	else +		appendText(chat.mText, FALSE, style_params);  	blockUndo();  } + diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index c89d4b4ec6..ef5839ff2f 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -106,10 +106,11 @@ class LLChatHistory : public LLTextEditor  		 * If last user appended message, concurs with current user,  		 * separator is added before the message, otherwise header is added.  		 * @param chat - base chat message. -		 * @param time time of a message. -		 * @param message message itself. +		 * @param use_plain_text_chat_history  - whether to add message as plain text. +		 * @param input_append_params - font style.  		 */ -		void appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params = LLStyle::Params()); +		void appendMessage(const LLChat& chat, const bool use_plain_text_chat_history = false, const LLStyle::Params& input_append_params = LLStyle::Params()); +		/*virtual*/ void clear();  	private:  		std::string mLastFromName; diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 6a5877f673..90f246ddaf 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -43,6 +43,7 @@  #include "lllocalcliprect.h"  #include "llmenugl.h"  #include "lloutputmonitorctrl.h" +#include "llscriptfloater.h"  #include "lltextbox.h"  #include "llvoiceclient.h"  #include "llvoicecontrolpanel.h" @@ -55,6 +56,7 @@ static LLDefaultChildRegistry::Register<LLNotificationChiclet> t2("chiclet_notif  static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t3("chiclet_im_p2p");  static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t4("chiclet_im_group");  static LLDefaultChildRegistry::Register<LLAdHocChiclet> t5("chiclet_im_adhoc"); +static LLDefaultChildRegistry::Register<LLScriptChiclet> t6("chiclet_script");  static const LLRect CHICLET_RECT(0, 25, 25, 0);  static const LLRect CHICLET_ICON_RECT(0, 22, 22, 0); @@ -163,7 +165,7 @@ LLChiclet::~LLChiclet()  boost::signals2::connection LLChiclet::setLeftButtonClickCallback(  	const commit_callback_t& cb)  { -	return mCommitSignal.connect(cb); +	return setCommitCallback(cb);  }  BOOL LLChiclet::handleMouseDown(S32 x, S32 y, MASK mask) @@ -983,7 +985,10 @@ void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param)  void LLChicletPanel::onChicletClick(LLUICtrl*ctrl,const LLSD¶m)  { -	mCommitSignal(ctrl,param); +	if (mCommitSignal) +	{ +		(*mCommitSignal)(ctrl,param); +	}  }  void LLChicletPanel::removeChiclet(chiclet_list_t::iterator it) @@ -1288,7 +1293,7 @@ void LLChicletPanel::onRightScrollHeldDown()  boost::signals2::connection LLChicletPanel::setChicletClickedCallback(  	const commit_callback_t& cb)  { -	return mCommitSignal.connect(cb); +	return setCommitCallback(cb);  }  BOOL LLChicletPanel::handleScrollWheel(S32 x, S32 y, S32 clicks) @@ -1411,3 +1416,51 @@ LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p)   : LLOutputMonitorCtrl(p)  {  } + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +LLScriptChiclet::Params::Params() + : icon("icon") +{ +	// *TODO Vadim: Get rid of hardcoded values. + 	rect(CHICLET_RECT); +	icon.rect(CHICLET_ICON_RECT); +} + +LLScriptChiclet::LLScriptChiclet(const Params&p) + : LLIMChiclet(p) + , mChicletIconCtrl(NULL) +{ +	LLIconCtrl::Params icon_params = p.icon; +	mChicletIconCtrl = LLUICtrlFactory::create<LLIconCtrl>(icon_params); +	// Let "new message" icon be on top, else it will be hidden behind chiclet icon. +	addChildInBack(mChicletIconCtrl); +} + +void LLScriptChiclet::setSessionId(const LLUUID& session_id) +{ +	setShowNewMessagesIcon( getSessionId() != session_id ); + +	LLIMChiclet::setSessionId(session_id); +	LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(session_id); +	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id); +	if(notification) +	{ +		setToolTip(notification->getSubstitutions()["TITLE"].asString()); +	} +} + +void LLScriptChiclet::onMouseDown() +{ +	LLScriptFloaterManager::getInstance()->toggleScriptFloater(getSessionId()); +} + +BOOL LLScriptChiclet::handleMouseDown(S32 x, S32 y, MASK mask) +{ +	onMouseDown(); +	return LLChiclet::handleMouseDown(x, y, mask); +} + +// EOF diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index 03935d21a6..1ea141e6c4 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -534,6 +534,46 @@ private:  };  /** + * Chiclet for script floaters. + */ +class LLScriptChiclet : public LLIMChiclet +{ +public: + +	struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params> +	{ +		Optional<LLIconCtrl::Params> icon; + +		Params(); +	}; + +	/*virtual*/ void setSessionId(const LLUUID& session_id); + +	/*virtual*/ void setCounter(S32 counter){} + +	/*virtual*/ S32 getCounter() { return 0; } + +	/** +	 * Toggle script floater +	 */ +	/*virtual*/ void onMouseDown(); + +	/** +	 * Override default handler +	 */ +	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + +protected: + +	LLScriptChiclet(const Params&); +	friend class LLUICtrlFactory; + +private: + +	LLIconCtrl* mChicletIconCtrl; +}; + +/**   * Implements Group chat chiclet.   */  class LLIMGroupChiclet : public LLIMChiclet, public LLGroupMgrObserver diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index ae5be8cc7c..8406ddeeca 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -232,13 +232,15 @@ public:  	virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask)  	{ -		mMouseDownSignal(this, x, y, mask); +		if (mMouseDownSignal) +			(*mMouseDownSignal)(this, x, y, mask);  		return LLMenuItemCallGL::handleMouseDown(x, y, mask);  	}  	virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask)  	{ -		mMouseUpSignal(this, x, y, mask); +		if (mMouseUpSignal) +			(*mMouseUpSignal)(this, x, y, mask);  		return LLMenuItemCallGL::handleMouseUp(x, y, mask);  	} diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 467796b4a3..976aaf8044 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -903,7 +903,7 @@ void LLFloaterBuyLandUI::tellUserError(  // virtual  BOOL LLFloaterBuyLandUI::postBuild()  { -	mVisibleSignal.connect(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2));  	mCurrency.prepare(); diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp index 58025ef78b..57bb93d81a 100644 --- a/indra/newview/llfloaterchat.cpp +++ b/indra/newview/llfloaterchat.cpp @@ -129,7 +129,7 @@ void LLFloaterChat::draw()  BOOL LLFloaterChat::postBuild()  {  	// Hide the chat overlay when our history is visible. -	mVisibleSignal.connect(boost::bind(&LLFloaterChat::updateConsoleVisibility, this)); +	setVisibleCallback(boost::bind(&LLFloaterChat::updateConsoleVisibility, this));  	mPanel = (LLPanelActiveSpeakers*)getChild<LLPanel>("active_speakers_panel"); diff --git a/indra/newview/llfloaterchatterbox.cpp b/indra/newview/llfloaterchatterbox.cpp index fbf09207fe..1b14ca573a 100644 --- a/indra/newview/llfloaterchatterbox.cpp +++ b/indra/newview/llfloaterchatterbox.cpp @@ -114,7 +114,7 @@ LLFloaterChatterBox::~LLFloaterChatterBox()  BOOL LLFloaterChatterBox::postBuild()  { -	mVisibleSignal.connect(boost::bind(&LLFloaterChatterBox::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLFloaterChatterBox::onVisibilityChange, this, _2));  	if (gSavedSettings.getBOOL("ContactsTornOff"))  	{ diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 22d6098d5b..d855ab1dfa 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -239,7 +239,7 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed)  BOOL LLFloaterLand::postBuild()  {	 -	mVisibleSignal.connect(boost::bind(&LLFloaterLand::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLFloaterLand::onVisibilityChange, this, _2));  	LLTabContainer* tab = getChild<LLTabContainer>("landtab"); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 6d2c35442a..e20249a737 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -56,6 +56,7 @@  #include "llfloaterabout.h"  #include "llfloaterhardwaresettings.h"  #include "llfloatervoicedevicesettings.h" +#include "llimfloater.h"  #include "llkeyboard.h"  #include "llmodaldialog.h"  #include "llnavigationbar.h" @@ -357,6 +358,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)  BOOL LLFloaterPreference::postBuild()  { +	gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&LLIMFloater::processChatHistoryStyleUpdate, _2)); +  	LLTabContainer* tabcontainer = getChild<LLTabContainer>("pref core");  	if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab")))  		tabcontainer->selectFirstTab(); @@ -458,6 +461,8 @@ void LLFloaterPreference::apply()  //	LLWString busy_response = utf8str_to_wstring(getChild<LLUICtrl>("busy_response")->getValue().asString());  //	LLWStringUtil::replaceTabsWithSpaces(busy_response, 4); + +	gSavedSettings.setBOOL("PlainTextChatHistory", childGetValue("plain_text_chat_history").asBoolean());  	if(mGotPersonalInfo)  	{  @@ -1186,6 +1191,8 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im  	childSetLabelArg("online_visibility", "[DIR_VIS]", mDirectoryVisibility);  	childEnable("send_im_to_email");  	childSetValue("send_im_to_email", im_via_email); +	childEnable("plain_text_chat_history"); +	childSetValue("plain_text_chat_history", gSavedSettings.getBOOL("PlainTextChatHistory"));  	childEnable("log_instant_messages");  //	childEnable("log_chat");  //	childEnable("busy_response"); diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 43fbe362d5..750a9d478f 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -67,7 +67,10 @@  #include "llresmgr.h"  #include "pipeline.h"  #include "llspatialpartition.h" -  + +// Height of the yellow selection highlight posts for land +const F32 PARCEL_POST_HEIGHT = 0.666f; +  BOOL LLAgent::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position)  {  	if(object && object->isAttachment()) diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 0626a5c3d3..59537c1e65 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -52,6 +52,7 @@  #include "llviewerwindow.h"  #include "llpanelgroup.h"  #include "llgroupactions.h" +#include "llnotifications.h"  #include "lluictrlfactory.h"  #include <boost/regex.hpp> diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 4a487bd5a7..795770d3db 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -53,6 +53,10 @@  #include "lltransientfloatermgr.h"  #include "llinventorymodel.h" +#ifdef USE_IM_CONTAINER +	#include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container +#endif +  LLIMFloater::LLIMFloater(const LLUUID& session_id) @@ -106,10 +110,10 @@ void LLIMFloater::onFocusReceived()  // virtual  void LLIMFloater::onClose(bool app_quitting)  { +	if (!gIMMgr->hasSession(mSessionID)) return; +	  	setTyping(false); -	// SJB: We want the close button to hide the session window, not end it -	// *NOTE: Yhis is functional, but not ideal - it's still closing the floater; we really want to change the behavior of the X button instead. -	//gIMMgr->leaveSession(mSessionID); +	gIMMgr->leaveSession(mSessionID);  }  /* static */ @@ -257,7 +261,11 @@ BOOL LLIMFloater::postBuild()  	//*TODO if session is not initialized yet, add some sort of a warning message like "starting session...blablabla"  	//see LLFloaterIMPanel for how it is done (IB) +#ifdef USE_IM_CONTAINER +	return LLFloater::postBuild(); +#else  	return LLDockableFloater::postBuild(); +#endif  }  // virtual @@ -318,6 +326,11 @@ void LLIMFloater::onSlide()  //static  LLIMFloater* LLIMFloater::show(const LLUUID& session_id)  { +#ifdef USE_IM_CONTAINER +	LLIMFloater* target_floater = findInstance(session_id); +	bool not_existed = NULL == target_floater; + +#else  	//hide all  	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");  	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); @@ -329,12 +342,25 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)  			floater->setVisible(false);  		}  	} +#endif  	LLIMFloater* floater = LLFloaterReg::showTypedInstance<LLIMFloater>("impanel", session_id);  	floater->updateMessages();  	floater->mInputEditor->setFocus(TRUE); +#ifdef USE_IM_CONTAINER +	// do not add existed floaters to avoid adding torn off instances +	if (not_existed) +	{ +		//		LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END; +		// TODO: mantipov: use LLTabContainer::RIGHT_OF_CURRENT if it exists +		LLTabContainer::eInsertionPoint i_pt = LLTabContainer::END; + +		LLIMFloaterContainer* floater_container = LLFloaterReg::showTypedInstance<LLIMFloaterContainer>("im_container"); +		floater_container->addFloater(floater, TRUE, i_pt); +	} +#else  	if (floater->getDockControl() == NULL)  	{  		LLChiclet* chiclet = @@ -352,13 +378,14 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)  		floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(),  				LLDockControl::TOP,  boost::bind(&LLIMFloater::getAllowedRect, floater, _1)));  	} +#endif  	return floater;  }  void LLIMFloater::getAllowedRect(LLRect& rect)  { -	rect = gViewerWindow->getWorldViewRectScaled(); +	rect = gViewerWindow->getWorldViewRectRaw();  }  void LLIMFloater::setDocked(bool docked, bool pop_on_undock) @@ -368,7 +395,9 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)  		(LLNotificationsUI::LLChannelManager::getInstance()->  											findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); +#ifndef USE_IM_CONTAINER  	LLTransientDockableFloater::setDocked(docked, pop_on_undock); +#endif  	// update notification channel state  	if(channel) @@ -394,6 +423,7 @@ void LLIMFloater::setVisible(BOOL visible)  //static  bool LLIMFloater::toggle(const LLUUID& session_id)  { +#ifndef USE_IM_CONTAINER  	LLIMFloater* floater = LLFloaterReg::findTypedInstance<LLIMFloater>("impanel", session_id);  	if (floater && floater->getVisible() && floater->isDocked())  	{ @@ -409,6 +439,7 @@ bool LLIMFloater::toggle(const LLUUID& session_id)  		return true;  	}  	else +#endif  	{  		// ensure the list of messages is updated when floater is made visible  		show(session_id); @@ -451,6 +482,8 @@ void LLIMFloater::sessionInitReplyReceived(const LLUUID& im_session_id)  void LLIMFloater::updateMessages()  { +	bool use_plain_text_chat_history = gSavedSettings.getBOOL("PlainTextChatHistory"); +  	std::list<LLSD> messages;  	LLIMModel::instance().getMessages(mSessionID, messages, mLastMessageIndex+1); @@ -476,39 +509,7 @@ void LLIMFloater::updateMessages()  			chat.mText = message;  			chat.mTimeStr = time; -			//Handle IRC styled /me messages. -			std::string prefix = message.substr(0, 4); -			if (prefix == "/me " || prefix == "/me'") -			{ -				 -				LLColor4 txt_color = LLUIColorTable::instance().getColor("White"); -				LLViewerChat::getChatColor(chat,txt_color); -				LLFontGL* fontp = LLViewerChat::getChatFont(); -				std::string font_name = LLFontGL::nameFromFont(fontp); -				std::string font_size = LLFontGL::sizeFromFont(fontp); -				LLStyle::Params append_style_params; -				append_style_params.color(txt_color); -				append_style_params.readonly_color(txt_color); -				append_style_params.font.name(font_name); -				append_style_params.font.size(font_size); -				 -				if (from.size() > 0) -				{ -					append_style_params.font.style = "ITALIC"; -					chat.mText = from; -					mChatHistory->appendWidgetMessage(chat, append_style_params); -				} -				 -				message = message.substr(3); -				append_style_params.font.style = "ITALIC"; -				mChatHistory->appendText(message, FALSE, append_style_params); -			} -			else -			{ -				chat.mText = message; -				mChatHistory->appendWidgetMessage(chat); -			} - +			mChatHistory->appendMessage(chat, use_plain_text_chat_history);  			mLastMessageIndex = msg["index"].asInteger();  		}  	} @@ -639,6 +640,28 @@ void LLIMFloater::processAgentListUpdates(const LLSD& body)  	}  } +void LLIMFloater::updateChatHistoryStyle() +{ +	mChatHistory->clear(); +	mLastMessageIndex = -1; +	updateMessages(); +} + +void LLIMFloater::processChatHistoryStyleUpdate(const LLSD& newvalue) +{ +	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel"); +	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); +		 iter != inst_list.end(); ++iter) +	{ +		LLIMFloater* floater = dynamic_cast<LLIMFloater*>(*iter); +		if (floater) +		{ +			floater->updateChatHistoryStyle(); +		} +	} + +} +  void LLIMFloater::processSessionUpdate(const LLSD& session_update)  {  	// *TODO : verify following code when moderated mode will be implemented diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index e2d500d821..9e1330ff49 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -33,6 +33,11 @@  #ifndef LL_IMFLOATER_H  #define LL_IMFLOATER_H +// This variable is used to show floaters related to chiclets in a Multi Floater Container +// So, this functionality does not require to have IM Floaters as Dockable & Transient +// See EXT-2640. +#define USE_IM_CONTAINER +  #include "lltransientdockablefloater.h"  #include "lllogchat.h"  #include "lltooldraganddrop.h" @@ -92,6 +97,9 @@ public:  	void processAgentListUpdates(const LLSD& body);  	void processSessionUpdate(const LLSD& session_update); +	void updateChatHistoryStyle(); +	static void processChatHistoryStyleUpdate(const LLSD& newvalue); +  	BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,  							   BOOL drop, EDragAndDropType cargo_type,  							   void *cargo_data, EAcceptance *accept, diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp new file mode 100644 index 0000000000..6e4b3ae214 --- /dev/null +++ b/indra/newview/llimfloatercontainer.cpp @@ -0,0 +1,96 @@ +/** 
 + * @file llimfloatercontainer.cpp
 + * @brief Multifloater containing active IM sessions in separate tab container tabs
 + *
 + * $LicenseInfo:firstyear=2009&license=viewergpl$
 + * 
 + * Copyright (c) 2009, Linden Research, Inc.
 + * 
 + * Second Life Viewer Source Code
 + * The source code in this file ("Source Code") is provided by Linden Lab
 + * to you under the terms of the GNU General Public License, version 2.0
 + * ("GPL"), unless you have obtained a separate licensing agreement
 + * ("Other License"), formally executed by you and Linden Lab.  Terms of
 + * the GPL can be found in doc/GPL-license.txt in this distribution, or
 + * online at http://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$
 + */
 +
 +
 +#include "llviewerprecompiledheaders.h"
 +
 +#include "llimfloatercontainer.h"
 +
 +//
 +// LLIMFloaterContainer
 +//
 +LLIMFloaterContainer::LLIMFloaterContainer(const LLSD& seed)
 +:	LLMultiFloater(seed),
 +	mActiveVoiceFloater(NULL)
 +{
 +	mAutoResize = FALSE;
 +}
 +
 +LLIMFloaterContainer::~LLIMFloaterContainer()
 +{
 +}
 +
 +BOOL LLIMFloaterContainer::postBuild()
 +{
 +	// Do not call base postBuild to not connect to mCloseSignal to not close all floaters via Close button
 +	// mTabContainer will be initialized in LLMultiFloater::addChild()
 +	return TRUE;
 +}
 +
 +void LLIMFloaterContainer::onOpen(const LLSD& key)
 +{
 +	LLMultiFloater::onOpen(key);
 +/*
 +	if (key.isDefined())
 +	{
 +		LLIMFloater* im_floater = LLIMFloater::findInstance(key.asUUID());
 +		if (im_floater)
 +		{
 +			im_floater->openFloater();
 +		}
 +	}
 +*/
 +}
 +
 +void LLIMFloaterContainer::addFloater(LLFloater* floaterp, 
 +									BOOL select_added_floater, 
 +									LLTabContainer::eInsertionPoint insertion_point)
 +{
 +	if(!floaterp) return;
 +
 +	// already here
 +	if (floaterp->getHost() == this)
 +	{
 +		openFloater(floaterp->getKey());
 +		return;
 +	}
 +
 +	LLMultiFloater::addFloater(floaterp, select_added_floater, insertion_point);
 +
 +	// make sure active voice icon shows up for new tab
 +	if (floaterp == mActiveVoiceFloater)
 +	{
 +		mTabContainer->setTabImage(floaterp, "active_voice_tab.tga");	
 +	}
 +}
 +
 +// EOF
 diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h new file mode 100644 index 0000000000..10cde56c6e --- /dev/null +++ b/indra/newview/llimfloatercontainer.h @@ -0,0 +1,61 @@ +/** 
 + * @file llimfloatercontainer.h
 + * @brief Multifloater containing active IM sessions in separate tab container tabs
 + *
 + * $LicenseInfo:firstyear=2009&license=viewergpl$
 + * 
 + * Copyright (c) 2009, Linden Research, Inc.
 + * 
 + * Second Life Viewer Source Code
 + * The source code in this file ("Source Code") is provided by Linden Lab
 + * to you under the terms of the GNU General Public License, version 2.0
 + * ("GPL"), unless you have obtained a separate licensing agreement
 + * ("Other License"), formally executed by you and Linden Lab.  Terms of
 + * the GPL can be found in doc/GPL-license.txt in this distribution, or
 + * online at http://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$
 + */
 +
 +#ifndef LL_LLIMFLOATERCONTAINER_H
 +#define LL_LLIMFLOATERCONTAINER_H
 +
 +#include "llfloater.h"
 +#include "llmultifloater.h"
 +
 +class LLTabContainer;
 +
 +class LLIMFloaterContainer : public LLMultiFloater
 +{
 +public:
 +	LLIMFloaterContainer(const LLSD& seed);
 +	virtual ~LLIMFloaterContainer();
 +	
 +	/*virtual*/ BOOL postBuild();
 +	/*virtual*/ void onOpen(const LLSD& key);
 +
 +	/*virtual*/ void addFloater(LLFloater* floaterp, 
 +								BOOL select_added_floater, 
 +								LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END);
 +
 +	static LLFloater* getCurrentVoiceFloater();
 +	
 +protected:
 +	
 +	LLFloater* mActiveVoiceFloater;
 +};
 +
 +#endif // LL_LLIMFLOATERCONTAINER_H
 diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 87b801d73b..e6ded5f371 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -216,7 +216,7 @@ LLFloaterIMPanel::~LLFloaterIMPanel()  BOOL LLFloaterIMPanel::postBuild()   { -	mVisibleSignal.connect(boost::bind(&LLFloaterIMPanel::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLFloaterIMPanel::onVisibilityChange, this, _2));  	mInputEditor = getChild<LLLineEditor>("chat_editor");  	mInputEditor->setFocusReceivedCallback( boost::bind(onInputEditorFocusReceived, _1, this) ); diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 7e35cfa04c..6b28edf0b6 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -52,6 +52,7 @@  #include "llteleporthistory.h"  #include "llsidetray.h"  #include "llslurl.h" +#include "llstatusbar.h"			// getHealth()  #include "lltrans.h"  #include "llviewerinventory.h"  #include "llviewerparcelmgr.h" @@ -157,15 +158,22 @@ LLLocationInputCtrl::Params::Params()  	add_landmark_image_disabled("add_landmark_image_disabled"),  	add_landmark_image_hover("add_landmark_image_hover"),  	add_landmark_image_selected("add_landmark_image_selected"), +	icon_hpad("icon_hpad", 0),  	add_landmark_button("add_landmark_button"), -	add_landmark_hpad("add_landmark_hpad", 0), -	info_button("info_button") +	info_button("info_button"), +	voice_icon("voice_icon"), +	fly_icon("fly_icon"), +	push_icon("push_icon"), +	build_icon("build_icon"), +	scripts_icon("scripts_icon"), +	damage_icon("damage_icon"), +	damage_text("damage_text")  {  }  LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)  :	LLComboBox(p), -	mAddLandmarkHPad(p.add_landmark_hpad), +	mIconHPad(p.icon_hpad),  	mInfoBtn(NULL),  	mLocationContextMenu(NULL),  	mAddLandmarkBtn(NULL), @@ -188,13 +196,12 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)  	params.rect(text_entry_rect);  	params.default_text(LLStringUtil::null);  	params.max_length_bytes(p.max_chars); -	params.commit_callback.function(boost::bind(&LLComboBox::onTextCommit, this, _2));  	params.keystroke_callback(boost::bind(&LLComboBox::onTextEntry, this, _1));  	params.handle_edit_keys_directly(true);  	params.commit_on_focus_lost(false);  	params.follows.flags(FOLLOWS_ALL);  	mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params); -	this->addChild(mTextEntry); +	addChild(mTextEntry);  	// LLLineEditor is replaced with LLLocationLineEditor  	// "Place information" button. @@ -230,6 +237,35 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)  	mAddLandmarkBtn = LLUICtrlFactory::create<LLButton>(al_params);  	enableAddLandmarkButton(true);  	addChild(mAddLandmarkBtn); + +	// Parcel property icons +	LLIconCtrl::Params voice_icon = p.voice_icon; +	mParcelIcon[VOICE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(voice_icon); +	addChild(mParcelIcon[VOICE_ICON]); + +	LLIconCtrl::Params fly_icon = p.fly_icon; +	mParcelIcon[FLY_ICON] = LLUICtrlFactory::create<LLIconCtrl>(fly_icon); +	addChild(mParcelIcon[FLY_ICON]); + +	LLIconCtrl::Params push_icon = p.push_icon; +	mParcelIcon[PUSH_ICON] = LLUICtrlFactory::create<LLIconCtrl>(push_icon); +	addChild(mParcelIcon[PUSH_ICON]); + +	LLIconCtrl::Params build_icon = p.build_icon; +	mParcelIcon[BUILD_ICON] = LLUICtrlFactory::create<LLIconCtrl>(build_icon); +	addChild(mParcelIcon[BUILD_ICON]); + +	LLIconCtrl::Params scripts_icon = p.scripts_icon; +	mParcelIcon[SCRIPTS_ICON] = LLUICtrlFactory::create<LLIconCtrl>(scripts_icon); +	addChild(mParcelIcon[SCRIPTS_ICON]); + +	LLIconCtrl::Params damage_icon = p.damage_icon; +	mParcelIcon[DAMAGE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(damage_icon); +	addChild(mParcelIcon[DAMAGE_ICON]); +	 +	LLTextBox::Params damage_text = p.damage_text; +	mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text); +	addChild(mDamageText);  	// Register callbacks and load the location field context menu (NB: the order matters).  	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2)); @@ -373,11 +409,8 @@ void LLLocationInputCtrl::onTextEntry(LLLineEditor* line_editor)   */  void LLLocationInputCtrl::setText(const LLStringExplicit& text)  { -	if (mTextEntry) -	{ -		mTextEntry->setText(text); -		mHasAutocompletedText = FALSE; -	} +	mTextEntry->setText(text); +	mHasAutocompletedText = FALSE;  }  void LLLocationInputCtrl::setFocus(BOOL b) @@ -410,11 +443,20 @@ void LLLocationInputCtrl::onFocusLost()  		mTextEntry->deselect();  	}  } -void	LLLocationInputCtrl::draw(){ -	 -	if(!hasFocus() && gSavedSettings.getBOOL("ShowCoordinatesOption")){ + +void LLLocationInputCtrl::draw() +{ +	static LLUICachedControl<bool> show_coords("NavBarShowCoordinates", false); +	if(!hasFocus() && show_coords) +	{  		refreshLocation();  	} +	 +	static LLUICachedControl<bool> show_icons("NavBarShowParcelProperties", false); +	if (show_icons) +	{ +		refreshHealth(); +	}  	LLComboBox::draw();  } @@ -511,10 +553,12 @@ void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data)  	mList->mouseOverHighlightNthItem(-1); // Clear highlight on the last selected item.  } +  bool LLLocationInputCtrl::findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter)  {  	return item.mTitle.find(filter) != std::string::npos;  } +  void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask)  {  	if (mLocationContextMenu) @@ -532,6 +576,7 @@ void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask)  void LLLocationInputCtrl::refresh()  {  	refreshLocation();			// update location string +	refreshParcelIcons();  	updateAddLandmarkButton();	// indicate whether current parcel has been landmarked   } @@ -548,13 +593,98 @@ void LLLocationInputCtrl::refreshLocation()  	// Update location field.  	std::string location_name; -	LLAgentUI::ELocationFormat format =  (gSavedSettings.getBOOL("ShowCoordinatesOption") ?  -			LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM: LLAgentUI::LOCATION_FORMAT_NORMAL); +	LLAgentUI::ELocationFormat format = +		(gSavedSettings.getBOOL("NavBarShowCoordinates") +			? LLAgentUI::LOCATION_FORMAT_FULL +			: LLAgentUI::LOCATION_FORMAT_NO_COORDS); -	if (!LLAgentUI::buildLocationString(location_name, format)) location_name = "Unknown"; +	if (!LLAgentUI::buildLocationString(location_name, format))  +	{ +		location_name = "???"; +	}  	setText(location_name);  } +void LLLocationInputCtrl::refreshParcelIcons() +{ +	// Our "cursor" moving right to left +	S32 x = mAddLandmarkBtn->getRect().mLeft - mIconHPad; +	 +	static LLUICachedControl<bool> show_properties("NavBarShowParcelProperties", false); +	if (show_properties) +	{ +		LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance(); +		// *TODO buy +		//bool allow_buy      = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false); +		bool allow_voice	= vpm->allowAgentVoice(); +		bool allow_fly		= vpm->allowAgentFly(); +		bool allow_push		= vpm->allowAgentPush(); +		bool allow_build	= vpm->allowAgentBuild(); +		bool allow_scripts	= vpm->allowAgentScripts(); +		bool allow_damage	= vpm->allowAgentDamage(); +		 +		// Most icons are "block this ability" +		mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice ); +		mParcelIcon[FLY_ICON]->setVisible(     !allow_fly ); +		mParcelIcon[PUSH_ICON]->setVisible(    !allow_push ); +		mParcelIcon[BUILD_ICON]->setVisible(   !allow_build ); +		mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts ); +		mParcelIcon[DAMAGE_ICON]->setVisible(  allow_damage ); +		mDamageText->setVisible(allow_damage); +		 +		// Slide the parcel icons rect from right to left, adjusting rectangles of +		// visible icons.  Assumes all icon rects are the same. +		for (S32 i = 0; i < ICON_COUNT; ++i) +		{ +			LLIconCtrl* icon = mParcelIcon[i]; +			if (icon->getVisible()) +			{ +				LLRect r = icon->getRect(); +				r.mLeft = x - r.getWidth(); +				r.mRight = x; +				icon->setRect( r ); +				x -= r.getWidth() + mIconHPad; +			} +		} +		LLRect text_rect = mDamageText->getRect(); +		text_rect.mLeft = x - text_rect.getWidth(); +		text_rect.mRight = x; +		mDamageText->setRect(text_rect); +		x -= text_rect.getWidth() + mIconHPad; +	} +	else +	{ +		for (S32 i = 0; i < ICON_COUNT; ++i) +		{ +			mParcelIcon[i]->setVisible(false); +		} +		mDamageText->setVisible(false); +	} +	 +	S32 left_pad, right_pad; +	mTextEntry->getTextPadding(&left_pad, &right_pad); +	right_pad = mTextEntry->getRect().mRight - x; +	llinfos << "JAMESDEBUG text entry rect " << mTextEntry->getRect() +	<< " x " << x << " left_pad " << left_pad << " right_pad " << right_pad << llendl; +	mTextEntry->setTextPadding(left_pad, right_pad); +} + +void LLLocationInputCtrl::refreshHealth() +{ +	// *FIXME: Status bar owns health information, should be in agent +	if (gStatusBar) +	{ +		static S32 last_health = -1; +		S32 health = gStatusBar->getHealth(); +		if (health != last_health) +		{ +			std::string text = llformat("%d%%", health); +			mDamageText->setText(text); +			last_health = health; +		} +	} +} +  void LLLocationInputCtrl::rebuildLocationHistory(std::string filter)  {  	LLLocationHistory::location_list_t filtered_items; @@ -651,13 +781,11 @@ void LLLocationInputCtrl::updateWidgetlayout()  	mInfoBtn->setRect(info_btn_rect);  	// "Add Landmark" button -	{ -		LLRect al_btn_rect = mAddLandmarkBtn->getRect(); -		al_btn_rect.translate( -			hist_btn_rect.mLeft - mAddLandmarkHPad - al_btn_rect.getWidth(), -			(rect.getHeight() - al_btn_rect.getHeight()) / 2); -		mAddLandmarkBtn->setRect(al_btn_rect); -	} +	LLRect al_btn_rect = mAddLandmarkBtn->getRect(); +	al_btn_rect.translate( +		hist_btn_rect.mLeft - mIconHPad - al_btn_rect.getWidth(), +		(rect.getHeight() - al_btn_rect.getHeight()) / 2); +	mAddLandmarkBtn->setRect(al_btn_rect);  }  void LLLocationInputCtrl::changeLocationPresentation() @@ -678,11 +806,17 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata)  {  	std::string item = userdata.asString(); -	if (item == std::string("show_coordinates")) +	if (item == "show_coordinates") +	{ +		gSavedSettings.setBOOL("NavBarShowCoordinates",!gSavedSettings.getBOOL("NavBarShowCoordinates")); +	} +	else if (item == "show_properties")  	{ -		gSavedSettings.setBOOL("ShowCoordinatesOption",!gSavedSettings.getBOOL("ShowCoordinatesOption")); +		gSavedSettings.setBOOL("NavBarShowParcelProperties", +			!gSavedSettings.getBOOL("NavBarShowParcelProperties")); +		refreshParcelIcons();  	} -	else if (item == std::string("landmark")) +	else if (item == "landmark")  	{  		LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos(); @@ -696,23 +830,23 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata)  					LLSD().insert("type", "landmark").insert("id",landmark->getUUID()));  		}  	} -	else if (item == std::string("cut")) +	else if (item == "cut")  	{  		mTextEntry->cut();  	} -	else if (item == std::string("copy")) +	else if (item == "copy")  	{  		mTextEntry->copy();  	} -	else if (item == std::string("paste")) +	else if (item == "paste")  	{  		mTextEntry->paste();  	} -	else if (item == std::string("delete")) +	else if (item == "delete")  	{  		mTextEntry->deleteSelection();  	} -	else if (item == std::string("select_all")) +	else if (item == "select_all")  	{  		mTextEntry->selectAll();  	} @@ -722,29 +856,29 @@ bool LLLocationInputCtrl::onLocationContextMenuItemEnabled(const LLSD& userdata)  {  	std::string item = userdata.asString(); -	if (item == std::string("can_cut")) +	if (item == "can_cut")  	{  		return mTextEntry->canCut();  	} -	else if (item == std::string("can_copy")) +	else if (item == "can_copy")  	{  		return mTextEntry->canCopy();  	} -	else if (item == std::string("can_paste")) +	else if (item == "can_paste")  	{  		return mTextEntry->canPaste();  	} -	else if (item == std::string("can_delete")) +	else if (item == "can_delete")  	{  		return mTextEntry->canDeselect();  	} -	else if (item == std::string("can_select_all")) +	else if (item == "can_select_all")  	{  		return mTextEntry->canSelectAll();  	} -	else if(item == std::string("show_coordinates")){ -	 -		return gSavedSettings.getBOOL("ShowCoordinatesOption"); +	else if(item == "show_coordinates") +	{ +		return gSavedSettings.getBOOL("NavBarShowCoordinates");  	}  	return false; diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h index 44dc0cb251..3bd23e80a9 100644 --- a/indra/newview/lllocationinputctrl.h +++ b/indra/newview/lllocationinputctrl.h @@ -33,7 +33,9 @@  #ifndef LL_LLLOCATIONINPUTCTRL_H  #define LL_LLLOCATIONINPUTCTRL_H -#include <llcombobox.h> +#include "llcombobox.h" +#include "lliconctrl.h"		// Params +#include "lltextbox.h"		// Params  class LLLandmark; @@ -63,9 +65,16 @@ public:  											add_landmark_image_disabled,  											add_landmark_image_hover,  											add_landmark_image_selected; -		Optional<S32>						add_landmark_hpad; +		Optional<S32>						icon_hpad;  		Optional<LLButton::Params>			add_landmark_button,  											info_button; +		Optional<LLIconCtrl::Params>		voice_icon, +											fly_icon, +											push_icon, +											build_icon, +											scripts_icon, +											damage_icon; +		Optional<LLTextBox::Params>			damage_text;  		Params();  	}; @@ -103,6 +112,10 @@ private:  	void					enableAddLandmarkButton(bool val);  	void					refresh();  	void					refreshLocation(); +	void					refreshParcelIcons(); +	// Refresh the value in the health percentage text field +	void					refreshHealth(); +	  	void					rebuildLocationHistory(std::string filter = "");  	bool 					findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);  	void					setText(const LLStringExplicit& text); @@ -126,7 +139,20 @@ private:  	LLMenuGL*				mLocationContextMenu;  	LLButton*				mAddLandmarkBtn;  	LLButton*				mInfoBtn; -	S32						mAddLandmarkHPad; +	S32						mIconHPad; +	 +	enum EParcelIcon +	{ +		VOICE_ICON = 0, +		FLY_ICON, +		PUSH_ICON, +		BUILD_ICON, +		SCRIPTS_ICON, +		DAMAGE_ICON, +		ICON_COUNT +	}; +	LLIconCtrl*	mParcelIcon[ICON_COUNT]; +	LLTextBox* mDamageText;  	LLAddLandmarkObserver*		mAddLandmarkObserver;  	LLRemoveLandmarkObserver*	mRemoveLandmarkObserver; diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 5cd40273f6..2376a3581d 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -356,7 +356,7 @@ void LLMediaCtrl::onFocusLost()  //  BOOL LLMediaCtrl::postBuild ()  { -	mVisibleSignal.connect(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));  	return TRUE;  } diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 93db337053..9e46a4422a 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -586,7 +586,8 @@ void LLPanelStandStopFlying::setVisible(BOOL visible)  		updatePosition();  	} -	LLPanel::setVisible(visible); +	//change visibility of parent layout_panel to animate in/out +	if (getParent()) getParent()->setVisible(visible);  }  BOOL LLPanelStandStopFlying::handleToolTip(S32 x, S32 y, MASK mask) diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 114d26af8a..41376c4c09 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -172,7 +172,8 @@ LLNavigationBar::LLNavigationBar()  	mBtnHome(NULL),  	mCmbLocation(NULL),  	mSearchComboBox(NULL), -	mPurgeTPHistoryItems(false) +	mPurgeTPHistoryItems(false), +	mSaveToLocationHistory(false)  {  	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml"); @@ -186,6 +187,7 @@ LLNavigationBar::LLNavigationBar()  LLNavigationBar::~LLNavigationBar()  {  	mTeleportFinishConnection.disconnect(); +	mTeleportFailedConnection.disconnect();  }  BOOL LLNavigationBar::postBuild() @@ -220,6 +222,12 @@ BOOL LLNavigationBar::postBuild()  	mSearchComboBox->setCommitCallback(boost::bind(&LLNavigationBar::onSearchCommit, this)); +	mTeleportFinishConnection = LLViewerParcelMgr::getInstance()-> +		setTeleportFinishedCallback(boost::bind(&LLNavigationBar::onTeleportFinished, this, _1)); + +	mTeleportFailedConnection = LLViewerParcelMgr::getInstance()-> +		setTeleportFailedCallback(boost::bind(&LLNavigationBar::onTeleportFailed, this)); +	  	mDefaultNbRect = getRect();  	mDefaultFpRect = getChild<LLFavoritesBarCtrl>("favorite")->getRect(); @@ -230,6 +238,16 @@ BOOL LLNavigationBar::postBuild()  	return TRUE;  } +void LLNavigationBar::setVisible(BOOL visible) +{ +	// change visibility of grandparent layout_panel to animate in and out +	if (getParent() && getParent()->getParent())  +	{ +		getParent()->getParent()->setVisible(visible);	 +	} +} + +  void LLNavigationBar::fillSearchComboBox()  {  	if(!mSearchComboBox) @@ -395,15 +413,19 @@ void LLNavigationBar::onLocationSelection()  	LLWorldMapMessage::url_callback_t cb = boost::bind(  			&LLNavigationBar::onRegionNameResponse, this,  			typed_location, region_name, local_coords, _1, _2, _3, _4); -	// connect the callback each time, when user enter new location to get real location of agent after teleport -	mTeleportFinishConnection = LLViewerParcelMgr::getInstance()-> -			setTeleportFinishedCallback(boost::bind(&LLNavigationBar::onTeleportFinished, this, _1,typed_location)); +	mSaveToLocationHistory = true;  	LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, cb, std::string("unused"), false);  } -void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, const std::string& typed_location) +void LLNavigationBar::onTeleportFailed()  { -	// Location is valid. Add it to the typed locations history. +	mSaveToLocationHistory = false; +} + +void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos) +{ +	if (!mSaveToLocationHistory) +		return;  	LLLocationHistory* lh = LLLocationHistory::getInstance();  	//TODO*: do we need convert surl into readable format? @@ -413,7 +435,7 @@ void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, con  	 * At this moment gAgent.getPositionAgent() contains previous coordinates.  	 * according to EXT-65 agent position is being reseted on each frame.    	 */ -		LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM, +		LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_NO_MATURITY,  					gAgent.getPosAgentFromGlobal(global_agent_pos));  	std::string tooltip (LLSLURL::buildSLURLfromPosGlobal(gAgent.getRegion()->getName(), global_agent_pos, false)); @@ -426,8 +448,7 @@ void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos, con  	lh->save(); -	if(mTeleportFinishConnection.connected()) -		mTeleportFinishConnection.disconnect(); +	mSaveToLocationHistory = false;  } diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h index 52f5a827e4..9d0687f193 100644 --- a/indra/newview/llnavigationbar.h +++ b/indra/newview/llnavigationbar.h @@ -56,6 +56,7 @@ public:  	/*virtual*/ void	draw();  	/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);  	/*virtual*/ BOOL	postBuild(); +	/*virtual*/ void	setVisible(BOOL visible);  	void handleLoginComplete();  	void clearHistoryCache(); @@ -81,7 +82,8 @@ private:  	void onLocationSelection();  	void onLocationPrearrange(const LLSD& data);  	void onSearchCommit(); -	void onTeleportFinished(const LLVector3d& global_agent_pos, const std::string& typed_location); +	void onTeleportFinished(const LLVector3d& global_agent_pos); +	void onTeleportFailed();  	void onRegionNameResponse(  			std::string typed_location,  			std::string region_name, @@ -99,8 +101,11 @@ private:  	LLLocationInputCtrl*		mCmbLocation;  	LLRect						mDefaultNbRect;  	LLRect						mDefaultFpRect; +	boost::signals2::connection	mTeleportFailedConnection;  	boost::signals2::connection	mTeleportFinishConnection;  	bool						mPurgeTPHistoryItems; +	// if true, save location to location history when teleport finishes +	bool						mSaveToLocationHistory;  };  #endif diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 09fd9b2949..80a6cc343f 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -173,7 +173,7 @@ void	LLNearbyChat::addMessage(const LLChat& chat)  				append_style_params.font.style = "ITALIC";  				LLChat add_chat=chat;  				add_chat.mText = chat.mFromName + " "; -				mChatHistory->appendWidgetMessage(add_chat, append_style_params); +				mChatHistory->appendMessage(add_chat, false, append_style_params);  			}  			message = message.substr(3); @@ -182,7 +182,7 @@ void	LLNearbyChat::addMessage(const LLChat& chat)  		}  		else  		{ -			mChatHistory->appendWidgetMessage(chat); +			mChatHistory->appendMessage(chat);  		}  	}  } diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index 4be98201d1..f01f2e4441 100644 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -38,9 +38,13 @@  #include "llviewercontrol.h"  #include "llviewerwindow.h"  #include "llnotificationmanager.h" +#include "llscriptfloater.h"  using namespace LLNotificationsUI; +static const std::string SCRIPT_DIALOG				("ScriptDialog"); +static const std::string SCRIPT_DIALOG_GROUP		("ScriptDialogGroup"); +  //--------------------------------------------------------------------------  LLScriptHandler::LLScriptHandler(e_notification_type type, const LLSD& id)  { @@ -90,25 +94,40 @@ bool LLScriptHandler::processNotification(const LLSD& notify)  	if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")  	{ -		LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification); - -		LLToast::Params p; -		p.notif_id = notification->getID(); -		p.notification = notification; -		p.panel = notify_box;	 -		p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1); - -		LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel); -		if(channel) -			channel->addToast(p); - -		// send a signal to the counter manager -		mNewNotificationSignal(); - +		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName()) +		{ +			LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID()); +		} +		else +		{ +			LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification); + +			LLToast::Params p; +			p.notif_id = notification->getID(); +			p.notification = notification; +			p.panel = notify_box;	 +			p.on_delete_toast = boost::bind(&LLScriptHandler::onDeleteToast, this, _1); + +			LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel); +			if(channel) +			{ +				channel->addToast(p); +			} + +			// send a signal to the counter manager +			mNewNotificationSignal(); +		}  	}  	else if (notify["sigtype"].asString() == "delete")  	{ -		mChannel->killToastByNotificationID(notification->getID()); +		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName()) +		{ +			LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID()); +		} +		else +		{ +			mChannel->killToastByNotificationID(notification->getID()); +		}  	}  	return true;  } @@ -123,6 +142,14 @@ void LLScriptHandler::onDeleteToast(LLToast* toast)  	// send a signal to a listener to let him perform some action  	// in this case listener is a SysWellWindow and it will remove a corresponding item from its list  	mNotificationIDSignal(toast->getNotificationID()); + +	LLNotificationPtr notification = LLNotifications::getInstance()->find(toast->getNotificationID()); +	 +	if( notification &&  +		(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName()) ) +	{ +		LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID()); +	}  }  //-------------------------------------------------------------------------- diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp index 03ad19f911..7563cc7f61 100644 --- a/indra/newview/llpanelavatartag.cpp +++ b/indra/newview/llpanelavatartag.cpp @@ -92,7 +92,7 @@ void LLPanelAvatarTag::setAvatarId(const LLUUID& avatar_id)  boost::signals2::connection LLPanelAvatarTag::setLeftButtonClickCallback(  																  const commit_callback_t& cb)  { -	return mCommitSignal.connect(cb); +	return setCommitCallback(cb);  }  BOOL LLPanelAvatarTag::handleMouseDown(S32 x, S32 y, MASK mask) diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 10b419dfdb..e24fa14e1e 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -67,6 +67,27 @@ static const std::string TRASH_BUTTON_NAME = "trash_btn";  // helper functions  static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string); +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLLandmarksPanelObserver +// +// Bridge to support knowing when the inventory has changed to update +// landmarks accordions visibility. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLLandmarksPanelObserver : public LLInventoryObserver +{ +public: +	LLLandmarksPanelObserver(LLLandmarksPanel* lp) : mLP(lp) {} +	virtual ~LLLandmarksPanelObserver() {} +	/*virtual*/ void changed(U32 mask); + +private: +	LLLandmarksPanel* mLP; +}; + +void LLLandmarksPanelObserver::changed(U32 mask) +{ +	mLP->updateFilteredAccordions(); +}  LLLandmarksPanel::LLLandmarksPanel()  	:	LLPanelPlacesTab() @@ -80,11 +101,16 @@ LLLandmarksPanel::LLLandmarksPanel()  	,	mGearLandmarkMenu(NULL)  	,	mDirtyFilter(false)  { +	mInventoryObserver = new LLLandmarksPanelObserver(this); +	gInventory.addObserver(mInventoryObserver); +  	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_landmarks.xml");  }  LLLandmarksPanel::~LLLandmarksPanel()  { +	if (gInventory.containsObserver(mInventoryObserver)) +		gInventory.removeObserver(mInventoryObserver);  }  BOOL LLLandmarksPanel::postBuild() @@ -135,8 +161,14 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string)  		LLAccordionCtrlTab* tab = *iter;  		tab->setVisible(true); -		// expand accordion to see matched items in all ones. See EXT-2014. +		// expand accordion to see matched items in each one. See EXT-2014.  		tab->changeOpenClose(false); + +		// refresh all accordions to display their contents in case of less restrictive filter +		LLInventorySubTreePanel* inventory_list = dynamic_cast<LLInventorySubTreePanel*>(tab->getAccordionView()); +		if (NULL == inventory_list) continue; +		LLFolderView* fv = inventory_list->getRootFolder(); +		fv->refresh();  	}  } @@ -223,6 +255,31 @@ void LLLandmarksPanel::onSelectorButtonClicked()  	}  } +void LLLandmarksPanel::updateFilteredAccordions() +{ +	LLInventoryPanel* inventory_list = NULL; +	LLAccordionCtrlTab* accordion_tab = NULL; +	for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter) +	{ +		accordion_tab = *iter; +		inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView()); +		if (NULL == inventory_list) continue; +		LLFolderView* fv = inventory_list->getRootFolder(); + +		bool has_descendants = fv->hasFilteredDescendants(); + +		accordion_tab->setVisible(has_descendants); +	} + +	// we have to arrange accordion tabs for cases when filter string is less restrictive but +	// all items are still filtered. +	static LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion"); +	accordion->arrange(); + +	// now filter state is applied to accordion tabs +	mDirtyFilter = false; +} +  //////////////////////////////////////////////////////////////////////////  // PROTECTED METHODS  ////////////////////////////////////////////////////////////////////////// @@ -833,31 +890,6 @@ void LLLandmarksPanel::doIdle(void* landmarks_panel)  } -void LLLandmarksPanel::updateFilteredAccordions() -{ -	LLInventoryPanel* inventory_list = NULL; -	LLAccordionCtrlTab* accordion_tab = NULL; -	for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter) -	{ -		accordion_tab = *iter; -		inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView()); -		if (NULL == inventory_list) continue; -		LLFolderView* fv = inventory_list->getRootFolder(); - -		bool has_visible_children = fv->hasVisibleChildren(); - -		accordion_tab->setVisible(has_visible_children); -	} - -	// we have to arrange accordion tabs for cases when filter string is less restrictive but  -	// all items are still filtered. -	static LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion"); -	accordion->arrange(); - -	// now filter state is applied to accordion tabs -	mDirtyFilter = false; -} -  void LLLandmarksPanel::doShowOnMap(LLLandmark* landmark)  {  	LLVector3d landmark_global_pos; diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 777ee562d2..c65abc178b 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -46,6 +46,7 @@ class LLAccordionCtrlTab;  class LLFolderViewItem;  class LLMenuGL;  class LLInventoryPanel; +class LLInventoryObserver;  class LLInventorySubTreePanel;  class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver @@ -62,7 +63,14 @@ public:  	void onSelectionChange(LLInventorySubTreePanel* inventory_list, const std::deque<LLFolderViewItem*> &items, BOOL user_action);  	void onSelectorButtonClicked(); -	 + +	/** +	 * Updates accordions according to filtered items in lists. +	 * +	 * It hides accordion for empty lists +	 */ +	void updateFilteredAccordions(); +  protected:  	/**  	 * @return true - if current selected panel is not null and selected item is a landmark @@ -122,13 +130,6 @@ private:  	static void doIdle(void* landmarks_panel);  	/** -	 * Updates accordions according to filtered items in lists. -	 * -	 * It hides accordion for empty lists -	 */ -	void updateFilteredAccordions(); - -	/**  	 * Landmark actions callbacks. Fire when a landmark is loaded from the list.  	 */  	void doShowOnMap(LLLandmark* landmark); @@ -147,6 +148,7 @@ private:  	LLMenuGL*					mGearFolderMenu;  	LLMenuGL*					mMenuAdd;  	LLInventorySubTreePanel*	mCurrentSelectedList; +	LLInventoryObserver*		mInventoryObserver;  	LLPanel*					mListCommands;  	bool 						mSortByDate; diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index dbe0ec3b86..4237681c80 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -41,6 +41,7 @@  #include "llpanelobjectinventory.h" +#include "llmenugl.h"  #include "roles_constants.h"  #include "llagent.h" diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 29f7cc1851..0c832defd7 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -483,7 +483,7 @@ void LLPanelPeople::onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAva  BOOL LLPanelPeople::postBuild()  { -	mVisibleSignal.connect(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2));  	mFilterEditor = getChild<LLFilterEditor>("filter_input");  	mFilterEditor->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp index d4ab5013f9..bcf5b16aa6 100644 --- a/indra/newview/llpanelprofileview.cpp +++ b/indra/newview/llpanelprofileview.cpp @@ -190,7 +190,7 @@ void LLPanelProfileView::processOnlineStatus(bool online)  void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string& first_name, const std::string& last_name, BOOL is_group)  {  	llassert(getAvatarId() == id); -	getChild<LLTextBox>("user_name", FALSE)->setValue(first_name + " " + last_name); +	getChild<LLUICtrl>("user_name", FALSE)->setValue(first_name + " " + last_name);  }  void LLPanelProfileView::togglePanel(LLPanel* panel) diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index 49a2a3723d..3d2c529dda 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -355,7 +355,7 @@ LLPreviewGesture::~LLPreviewGesture()  BOOL LLPreviewGesture::postBuild()  { -	mVisibleSignal.connect(boost::bind(&LLPreviewGesture::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLPreviewGesture::onVisibilityChange, this, _2));  	LLLineEditor* edit;  	LLComboBox* combo; diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 24505f6bd6..fb9db42cf6 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -46,6 +46,7 @@  #include "lldockablefloater.h"  #include "llsyswellwindow.h"  #include "llimfloater.h" +#include "llscriptfloater.h"  #include <algorithm> @@ -686,7 +687,8 @@ void LLScreenChannel::updateShowToastsState()  	}  	// for IM floaters showed in a docked state - prohibit showing of ani toast -	if(dynamic_cast<LLIMFloater*>(floater)) +	if(dynamic_cast<LLIMFloater*>(floater) +		|| dynamic_cast<LLScriptFloater*>(floater) )  	{  		setShowToasts(!(floater->getVisible() && floater->isDocked()));  		if (!getShowToasts()) diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp new file mode 100644 index 0000000000..bdea6ff459 --- /dev/null +++ b/indra/newview/llscriptfloater.cpp @@ -0,0 +1,335 @@ +/**  + * @file llscriptfloater.cpp + * @brief LLScriptFloater class definition + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + *  + * Copyright (c) 2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://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$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llscriptfloater.h" + +#include "llbottomtray.h" +#include "llchannelmanager.h" +#include "llchiclet.h" +#include "llfloaterreg.h" +#include "llscreenchannel.h" +#include "lltoastnotifypanel.h" +#include "llviewerwindow.h" + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +LLUUID notification_id_to_object_id(const LLUUID& notification_id) +{ +	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id); +	if(notification) +	{ +		return notification->getPayload()["object_id"].asUUID(); +	} +	return LLUUID::null; +} + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +LLScriptFloater::LLScriptFloater(const LLSD& key) +: LLTransientDockableFloater(NULL, true, key) +, mScriptForm(NULL) +, mObjectId(key.asUUID()) +{ +} + +bool LLScriptFloater::toggle(const LLUUID& object_id) +{ +	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id); + +	// show existing floater +	if(floater) +	{ +		if(floater->getVisible()) +		{ +			floater->setVisible(false); +			return false; +		} +		else +		{ +			floater->setVisible(TRUE); +			floater->setFocus(TRUE); +			return true; +		} +	} +	// create and show new floater +	else +	{ +		show(object_id); +		return true; +	} +} + +LLScriptFloater* LLScriptFloater::show(const LLUUID& object_id) +{ +	LLScriptFloater* floater = LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", object_id); +	floater->createForm(object_id); + +	if (floater->getDockControl() == NULL) +	{ +		LLChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(object_id); +		if (chiclet == NULL) +		{ +			llerror("Dock chiclet for LLScriptFloater doesn't exist", 0); +		} +		else +		{ +			LLBottomTray::getInstance()->getChicletPanel()->scrollToChiclet(chiclet); +		} + +		floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(), +			LLDockControl::TOP,  boost::bind(&LLScriptFloater::getAllowedRect, floater, _1))); +	} + +	return floater; +} + +void LLScriptFloater::getAllowedRect(LLRect& rect) +{ +	rect = gViewerWindow->getWorldViewRectRaw(); +} + +void LLScriptFloater::createForm(const LLUUID& object_id) +{ +	// delete old form +	if(mScriptForm) +	{ +		removeChild(mScriptForm); +		mScriptForm->die(); +	} + +	LLNotificationPtr notification = LLNotifications::getInstance()->find( +		LLScriptFloaterManager::getInstance()->findNotificationId(object_id)); +	if(NULL == notification) +	{ +		return; +	} + +	// create new form +	mScriptForm = new LLToastNotifyPanel(notification); +	addChild(mScriptForm); + +	// position form on floater +	mScriptForm->setOrigin(0, 0); + +	// make floater size fit form size +	LLRect toast_rect = getRect(); +	LLRect panel_rect = mScriptForm->getRect(); +	toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, panel_rect.getWidth(), panel_rect.getHeight() + getHeaderHeight()); +	setShape(toast_rect); +} + +void LLScriptFloater::onClose(bool app_quitting) +{ +	LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(getObjectId()); +} + +void LLScriptFloater::setDocked(bool docked, bool pop_on_undock /* = true */) +{ +	LLTransientDockableFloater::setDocked(docked, pop_on_undock); + +	hideToastsIfNeeded(); +} + +void LLScriptFloater::setVisible(BOOL visible) +{ +	LLTransientDockableFloater::setVisible(visible); + +	hideToastsIfNeeded(); +} + +void LLScriptFloater::hideToastsIfNeeded() +{ +	using namespace LLNotificationsUI; + +	// find channel +	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(LLChannelManager::getInstance()->findChannelByID( +		LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); +	// update notification channel state +	if(channel) +	{ +		channel->updateShowToastsState(); +	} +} + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id) +{ +	// get scripted Object's ID +	LLUUID object_id = notification_id_to_object_id(notification_id); +	if(object_id.isNull()) +	{ +		llwarns << "Invalid notification, no object id" << llendl; +		return; +	} + +	// If an Object spawns more-than-one floater, only the newest one is shown.  +	// The previous is automatically closed. +	script_notification_map_t::iterator it = mNotifications.find(object_id); +	if(it != mNotifications.end()) +	{ +		onRemoveNotification(notification_id); +	} + +	LLNotificationData nd = {notification_id}; +	mNotifications.insert(std::make_pair(object_id, nd)); + +	LLBottomTray::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(object_id); +} + +void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id) +{ +	LLUUID object_id = notification_id_to_object_id(notification_id); +	if(object_id.isNull()) +	{ +		llwarns << "Invalid notification, no object id" << llendl; +		return; +	} + +	using namespace LLNotificationsUI; + +	// remove related toast +	LLUUID channel_id(gSavedSettings.getString("NotificationChannelUUID")); +	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*> +		(LLChannelManager::getInstance()->findChannelByID(channel_id)); +	if(channel) +	{ +		channel->killToastByNotificationID(findNotificationToastId(object_id)); +	} + +	mNotifications.erase(object_id); + +	// remove related chiclet +	LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(object_id); + +	// close floater +	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id); +	if(floater) +	{ +		floater->closeFloater(); +	} +} + +void LLScriptFloaterManager::removeNotificationByObjectId(const LLUUID& object_id) +{ +	// Check we have not removed notification yet +	LLNotificationPtr notification = LLNotifications::getInstance()->find( +		findNotificationId(object_id)); +	if(notification) +	{ +		onRemoveNotification(notification->getID()); +	} +} + +void LLScriptFloaterManager::toggleScriptFloater(const LLUUID& object_id) +{ +	// hide "new message" icon from chiclet +	LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(object_id); +	if(chiclet) +	{ +		chiclet->setShowNewMessagesIcon(false); +	} + +	// kill toast +	using namespace LLNotificationsUI; +	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(LLChannelManager::getInstance()->findChannelByID( +		LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); +	if(channel) +	{ +		channel->killToastByNotificationID(findNotificationToastId(object_id)); +	} + +	// toggle floater +	LLScriptFloater::toggle(object_id); +} + +void LLScriptFloaterManager::setNotificationToastId(const LLUUID& object_id, const LLUUID& notification_id) +{ +	script_notification_map_t::iterator it = mNotifications.find(object_id); +	if(mNotifications.end() != it) +	{ +		it->second.toast_notification_id = notification_id; +	} +} + +LLUUID LLScriptFloaterManager::findNotificationId(const LLUUID& object_id) +{ +	script_notification_map_t::const_iterator it = mNotifications.find(object_id); +	if(mNotifications.end() != it) +	{ +		return it->second.notification_id; +	} +	return LLUUID::null; +} + +LLUUID LLScriptFloaterManager::findNotificationToastId(const LLUUID& object_id) +{ +	script_notification_map_t::const_iterator it = mNotifications.find(object_id); +	if(mNotifications.end() != it) +	{ +		return it->second.toast_notification_id; +	} +	return LLUUID::null; +} + +//static +void LLScriptFloaterManager::onToastButtonClick(const LLSD¬ification, const LLSD&response) +{ +	S32 option = LLNotification::getSelectedOption(notification, response); +	LLUUID object_id = notification["payload"]["object_id"].asUUID(); + +	switch(option) +	{ +	case 0: // "Open" +		LLScriptFloaterManager::getInstance()->toggleScriptFloater(object_id); +		break; +	case 1: // "Ignore" +		LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(object_id); +		break; +	case 2: // "Block" +		LLMuteList::getInstance()->add(LLMute(object_id, notification["substitutions"]["TITLE"], LLMute::OBJECT)); +		LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(object_id); +		break; +	default: +		llwarns << "Unexpected value" << llendl; +		break; +	} +} + +// EOF diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h new file mode 100644 index 0000000000..0e1a7f36b7 --- /dev/null +++ b/indra/newview/llscriptfloater.h @@ -0,0 +1,164 @@ +/**  + * @file llscriptfloater.h + * @brief LLScriptFloater class definition + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + *  + * Copyright (c) 2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://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$ + */ + +#ifndef LL_SCRIPTFLOATER_H +#define LL_SCRIPTFLOATER_H + +#include "lltransientdockablefloater.h" + +class LLToastNotifyPanel; + +/** + * Handles script notifications ("ScriptDialog" and "ScriptDialogGroup") + * and manages Script Floaters. + */ +class LLScriptFloaterManager : public LLSingleton<LLScriptFloaterManager> +{ +public: + +	/** +	 * Handles new notifications. +	 * Saves notification and object ids, removes old notification if needed, creates script chiclet +	 * Note that one object can spawn one script floater. +	 */ +	void onAddNotification(const LLUUID& notification_id); + +	/** +	 * Handles notification removal. +	 * Removes script notification toast, removes script chiclet, closes script floater +	 */ +	void onRemoveNotification(const LLUUID& notification_id); + +	/** +	 * Wrapper for onRemoveNotification, removes notification by object id. +	 */ +	void removeNotificationByObjectId(const LLUUID& object_id); + +	/** +	 * Toggles script floater. +	 * Removes "new message" icon from chiclet and removes notification toast. +	 */ +	void toggleScriptFloater(const LLUUID& object_id); + +	LLUUID findNotificationId(const LLUUID& object_id); + +	LLUUID findNotificationToastId(const LLUUID& object_id); + +	/** +	 * Associate notification toast id with object id. +	 */ +	void setNotificationToastId(const LLUUID& object_id, const LLUUID& notification_id); + +	/** +	* Callback for notification toast buttons. +	*/ +	static void onToastButtonClick(const LLSD¬ification, const LLSD&response); + +private: + +	struct LLNotificationData +	{ +		LLUUID notification_id; +		LLUUID toast_notification_id; +	}; + +	// <object_id, notification_data> +	typedef std::map<LLUUID, LLNotificationData> script_notification_map_t; + +	script_notification_map_t mNotifications; +}; + +/** + * Floater script forms. + * LLScriptFloater will create script form based on notification data and  + * will auto fit the form. + */ +class LLScriptFloater : public LLTransientDockableFloater +{ +public: + +	/** +	 * key - UUID of scripted Object +	 */ +	LLScriptFloater(const LLSD& key); + +	virtual ~LLScriptFloater(){}; + +	/** +	 * Toggle existing floater or create and show a new one. +	 */ +	static bool toggle(const LLUUID& object_id); + +	/** +	 * Creates and shows floater +	 */ +	static LLScriptFloater* show(const LLUUID& object_id); + +	const LLUUID& getObjectId() { return mObjectId; } + +	/** +	 * Close notification if script floater is closed. +	 */ +	/*virtual*/ void onClose(bool app_quitting); + +	/** +	 * Hide all notification toasts when we show dockable floater +	 */ +	/*virtual*/ void setDocked(bool docked, bool pop_on_undock = true); + +	/** +	 * Hide all notification toasts when we show dockable floater +	 */ +	/*virtual*/ void setVisible(BOOL visible); + +protected: + +	/** +	 * Creates script form, will delete old form if floater is shown for same object. +	 */ +	void createForm(const LLUUID& object_id); + +	/*virtual*/ void getAllowedRect(LLRect& rect); + +	/** +	 * Hide all notification toasts. +	 */ +	static void hideToastsIfNeeded(); + +	void setObjectId(const LLUUID& id) { mObjectId = id; } + +private: +	LLToastNotifyPanel* mScriptForm; +	LLUUID mObjectId; +}; + +#endif //LL_SCRIPTFLOATER_H diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 7711f3c733..2f98435b83 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -34,6 +34,7 @@  #include "lltextbox.h" +#include "llagent.h"  #include "llbottomtray.h"  #include "llsidetray.h"  #include "llviewerwindow.h" @@ -700,7 +701,7 @@ void	LLSideTray::updateSidetrayVisibility()  	// set visibility of parent container based on collapsed state  	if (getParent())  	{ -		getParent()->setVisible(!mCollapsed); +		getParent()->setVisible(!mCollapsed && !gAgent.cameraMouselook());  	}  } diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index 54652c1108..7321574681 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -120,7 +120,7 @@ public:  	void		setVisible(BOOL visible)  	{ -		LLPanel::setVisible(visible); +		if (getParent()) getParent()->setVisible(visible);  	}  	LLPanel*	getButtonsPanel() { return mButtonsPanel; } @@ -141,6 +141,7 @@ public:  	void		processTriState (); +	void		updateSidetrayVisibility();  protected:  	LLSideTrayTab* getTab		(const std::string& name); @@ -153,10 +154,6 @@ protected:  	void		toggleTabButton	(LLSideTrayTab* tab); -	void		updateSidetrayVisibility(); - -	 -  private:  	// Implementation of LLDestroyClass<LLSideTray>  	static void destroyClass() @@ -166,7 +163,6 @@ private:  			LLSideTray::getInstance()->setEnabled(FALSE);  	} -  private:  	LLPanel*						mButtonsPanel; diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index 3ce3549961..bdaacce981 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -34,7 +34,6 @@  #define LL_LLSTATUSBAR_H  #include "llpanel.h" -#include <llmenugl.h>  // "Constants" loaded from settings.xml at start time  extern S32 STATUS_BAR_HEIGHT; diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp index bc886d5743..cc4689062e 100644 --- a/indra/newview/llteleporthistory.cpp +++ b/indra/newview/llteleporthistory.cpp @@ -52,7 +52,7 @@  const std::string& LLTeleportHistoryItem::getTitle() const  { -	return gSavedSettings.getBOOL("ShowCoordinatesOption") ? mFullTitle : mTitle; +	return gSavedSettings.getBOOL("NavBarShowCoordinates") ? mFullTitle : mTitle;  }  ////////////////////////////////////////////////////////////////////////////// @@ -177,7 +177,7 @@ void LLTeleportHistory::purgeItems()  std::string LLTeleportHistory::getCurrentLocationTitle(bool full, const LLVector3& local_pos_override)  {  	std::string location_name; -	LLAgentUI::ELocationFormat fmt = full ? LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM : LLAgentUI::LOCATION_FORMAT_NORMAL; +	LLAgentUI::ELocationFormat fmt = full ? LLAgentUI::LOCATION_FORMAT_NO_MATURITY : LLAgentUI::LOCATION_FORMAT_NORMAL;  	if (!LLAgentUI::buildLocationString(location_name, fmt, local_pos_override)) location_name = "Unknown";  	return location_name; diff --git a/indra/newview/llteleporthistory.h b/indra/newview/llteleporthistory.h index 9f5563ed0b..a82bec7c4f 100644 --- a/indra/newview/llteleporthistory.h +++ b/indra/newview/llteleporthistory.h @@ -57,7 +57,8 @@ public:  	{}  	/** -	 * @return title formatted according to the current value of the ShowCoordinatesOption setting. +	 * @return title formatted according to the current value of the  +	 * NavBarShowCoordinates setting.  	 */  	const std::string& getTitle() const; diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 6f3dabe5a7..9bb2a4ad0a 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -931,6 +931,14 @@ bool LLTextureFetchWorker::doWork(S32 param)  	if (mState == DECODE_IMAGE)  	{ +		if (mDesiredDiscard < 0) +		{ +			// We aborted, don't decode +			mState = DONE; +			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); +			return true; +		} +		  		if (mFormattedImage->getDataSize() <= 0)  		{  			llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl; diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index ded83debad..26b3bdb82e 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -247,7 +247,7 @@ bool LLToolMgr::inEdit()  bool LLToolMgr::canEdit()  { -	return LLViewerParcelMgr::getInstance()->agentCanBuild(); +	return LLViewerParcelMgr::getInstance()->allowAgentBuild();  }  void LLToolMgr::toggleBuildMode() diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 7772f613f0..642df92379 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -109,6 +109,7 @@  #include "llfloaterwhitelistentry.h"  #include "llfloaterwindlight.h"  #include "llfloaterworldmap.h" +#include "llimfloatercontainer.h"  #include "llinspectavatar.h"  #include "llinspectgroup.h"  #include "llinspectobject.h" @@ -124,6 +125,7 @@  #include "llpreviewsound.h"  #include "llpreviewtexture.h"  #include "llsyswellwindow.h" +#include "llscriptfloater.h"  // *NOTE: Please add files in alphabetical order to keep merges easy. @@ -171,6 +173,8 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHUD>);  	LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloater>); +	LLFloaterReg::add("im_container", "floater_im_container.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloaterContainer>); +	LLFloaterReg::add("script_floater", "floater_script.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLScriptFloater>);  	LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>);  	LLFloaterReg::add("inventory", "floater_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInventory>);  	LLFloaterReg::add("inspect", "floater_inspect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInspect>); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index c67af994a4..8bcf2c6281 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2736,7 +2736,7 @@ bool enable_object_edit()  	bool enable = false;  	if (gAgent.inPrelude())  	{ -		enable = LLViewerParcelMgr::getInstance()->agentCanBuild() +		enable = LLViewerParcelMgr::getInstance()->allowAgentBuild()  			|| LLSelectMgr::getInstance()->getSelection()->isAttachment();  	}   	else if (LLSelectMgr::getInstance()->selectGetModify()) @@ -5678,6 +5678,16 @@ class LLFloaterVisible : public view_listener_t  	}  }; +class LLShowSidetrayPanel : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		std::string panel_name = userdata.asString(); +		LLSideTray::getInstance()->showPanel(panel_name, LLSD()); +		return true; +	} +}; +  bool callback_show_url(const LLSD& notification, const LLSD& response)  {  	S32 option = LLNotification::getSelectedOption(notification, response); @@ -6096,7 +6106,7 @@ class LLAttachmentEnableDrop : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		BOOL can_build   = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->agentCanBuild()); +		BOOL can_build   = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->allowAgentBuild());  		//Add an inventory observer to only allow dropping the newly attached item  		//once it exists in your inventory.  Look at Jira 2422. @@ -8039,6 +8049,7 @@ void initialize_menus()  	visible.add("Object.VisibleEdit", boost::bind(&enable_object_edit));  	view_listener_t::addMenu(new LLFloaterVisible(), "FloaterVisible"); +	view_listener_t::addMenu(new LLShowSidetrayPanel(), "ShowSidetrayPanel");  	view_listener_t::addMenu(new LLSomethingSelected(), "SomethingSelected");  	view_listener_t::addMenu(new LLSomethingSelectedNoHUD(), "SomethingSelectedNoHUD");  	view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected"); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index eaffa75298..adad06dc6f 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -101,6 +101,7 @@  #include "llpanelgrouplandmoney.h"  #include "llpanelplaces.h"  #include "llrecentpeople.h" +#include "llscriptfloater.h"  #include "llselectmgr.h"  #include "llsidetray.h"  #include "llstartup.h" @@ -5534,6 +5535,17 @@ void process_script_dialog(LLMessageSystem* msg, void**)  		notification = LLNotifications::instance().add(  			LLNotification::Params("ScriptDialogGroup").substitutions(args).payload(payload).form_elements(form.asLLSD()));  	} + +	// "ScriptDialog" and "ScriptDialogGroup" are handles by LLScriptFloaterManager. +	// We want to inform user that there is a script floater, lets add "ScriptToast" +	LLNotification::Params p("ScriptToast"); +	p.substitutions(args).payload(payload).functor.function(boost::bind( +		LLScriptFloaterManager::onToastButtonClick, _1, _2)); + +	notification = LLNotifications::instance().add(p); + +	LLScriptFloaterManager::getInstance()->setNotificationToastId( +		object_id, notification->getID());  }  //--------------------------------------------------------------------------- diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index aa0987aa7d..fcaf49c884 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -650,7 +650,7 @@ LLParcel *LLViewerParcelMgr::getAgentParcel() const  }  // Return whether the agent can build on the land they are on -bool LLViewerParcelMgr::agentCanBuild() const +bool LLViewerParcelMgr::allowAgentBuild() const  {  	if (mAgentParcel)  	{ @@ -664,19 +664,47 @@ bool LLViewerParcelMgr::agentCanBuild() const  	}  } -BOOL LLViewerParcelMgr::agentCanTakeDamage() const +bool LLViewerParcelMgr::allowAgentVoice() const  { -	return mAgentParcel->getAllowDamage(); +	LLViewerRegion* region = gAgent.getRegion(); +	return region && region->isVoiceEnabled() +		&& mAgentParcel	&& mAgentParcel->getParcelFlagAllowVoice();  } -BOOL LLViewerParcelMgr::agentCanFly() const +bool LLViewerParcelMgr::allowAgentFly() const  { -	return TRUE; +	LLViewerRegion* region = gAgent.getRegion(); +	return region && !region->getBlockFly() +		&& mAgentParcel && mAgentParcel->getAllowFly();  } -F32 LLViewerParcelMgr::agentDrawDistance() const +// Can the agent be pushed around by LLPushObject? +bool LLViewerParcelMgr::allowAgentPush() const  { -	return 512.f; +	LLViewerRegion* region = gAgent.getRegion(); +	return region && !region->getRestrictPushObject() +		&& mAgentParcel && !mAgentParcel->getRestrictPushObject(); +} + +bool LLViewerParcelMgr::allowAgentScripts() 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 +	// technically correct. +	return region +		&& !(region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) +		&& !(region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) +		&& mAgentParcel +		&& mAgentParcel->getAllowOtherScripts(); +} + +bool LLViewerParcelMgr::allowAgentDamage() const +{ +	LLViewerRegion* region = gAgent.getRegion(); +	return region && region->getAllowDamage() +		&& mAgentParcel && mAgentParcel->getAllowDamage();  }  BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 1c8fe23dba..379190789b 100644 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -56,9 +56,6 @@ class LLViewerRegion;  //							  | EAST_MASK   //							  | WEST_MASK); -const F32 PARCEL_POST_HEIGHT = 0.666f; -//const F32 PARCEL_POST_HEIGHT = 20.f; -  // Specify the type of land transfer taking place  //enum ELandTransferType  //{ @@ -171,10 +168,29 @@ public:  	LLParcel*	getCollisionParcel() const; -	BOOL	agentCanTakeDamage() const; -	BOOL	agentCanFly() const; -	F32		agentDrawDistance() const; -	bool	agentCanBuild() const; +	// Can this agent build on the parcel he is on? +	// Used for parcel property icons in nav bar. +	bool	allowAgentBuild() const; +	 +	// Can this agent speak on the parcel he is on? +	// Used for parcel property icons in nav bar. +	bool	allowAgentVoice() const; +	 +	// Can this agent start flying on this parcel? +	// Used for parcel property icons in nav bar. +	bool	allowAgentFly() const; +	 +	// Can this agent be pushed by llPushObject() on this parcel? +	// Used for parcel property icons in nav bar. +	bool	allowAgentPush() 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; +	 +	// Can the agent be damaged here? +	// Used for parcel property icons in nav bar. +	bool	allowAgentDamage() const;  	F32		getHoverParcelWidth() const		  				{ return F32(mHoverEastNorth.mdV[VX] - mHoverWestSouth.mdV[VX]); } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index db66faef81..29d40d073c 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1573,7 +1573,8 @@ void LLViewerWindow::initWorldUI()  	LLPanel* side_tray_container = getRootView()->getChild<LLPanel>("side_tray_container");  	LLSideTray* sidetrayp = LLSideTray::getInstance();  	sidetrayp->setShape(side_tray_container->getLocalRect()); -	sidetrayp->setFollowsAll(); +	// don't follow right edge to avoid spurious resizes, since we are using a fixed width layout +	sidetrayp->setFollows(FOLLOWS_LEFT|FOLLOWS_TOP|FOLLOWS_BOTTOM);  	side_tray_container->addChild(sidetrayp);  	side_tray_container->setVisible(FALSE); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 507c726e02..5aad87630d 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -344,7 +344,12 @@ LLPipeline::LLPipeline() :  	mWLSkyPool(NULL),  	mLightMask(0),  	mLightMovingMask(0), -	mLightingDetail(0) +	mLightingDetail(0), +	mScreenWidth(0), +	mScreenHeight(0), +	mViewportWidth(0), +	mViewportHeight(0) +  {  	mNoiseMap = 0;  	mTrueNoiseMap = 0; @@ -518,13 +523,29 @@ void LLPipeline::resizeScreenTexture()  		GLuint view_height = gViewerWindow->getWorldViewHeightRaw();  		allocateScreenBuffer(resX, resY, view_width, view_height); - -		llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl;  	}  }  void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U32 viewport_height)  { +	bool screen_size_changed = resX != mScreenWidth || resY != mScreenHeight; +	bool viewport_size_changed = viewport_width != mViewportWidth || viewport_height != mViewportHeight; + +	if (!screen_size_changed +		&& !viewport_size_changed) +	{ +		// nothing to do +		return; +	} + +	// remember these dimensions +	mScreenWidth = resX; +	mScreenHeight = resY; +	mViewportWidth = viewport_width; +	mViewportHeight = viewport_height; + +	llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl; +  	U32 samples = gSavedSettings.getU32("RenderFSAASamples");  	U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor"); @@ -534,7 +555,8 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3  		resY /= res_mod;  	} -	if (gSavedSettings.getBOOL("RenderUIBuffer")) +	if (gSavedSettings.getBOOL("RenderUIBuffer")  +		&& screen_size_changed)  	{  		mUIScreen.allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);  	}	 @@ -542,25 +564,39 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3  	if (LLPipeline::sRenderDeferred)  	{  		//allocate deferred rendering color buffers -		mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); -		mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +		if (screen_size_changed) +		{ +			mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +			mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +			addDeferredAttachments(mDeferredScreen); +		} +		// always set viewport to desired size, since allocate resets the viewport  		mDeferredScreen.setViewport(viewport_width, viewport_height);  		mDeferredDepth.setViewport(viewport_width, viewport_height); -		addDeferredAttachments(mDeferredScreen); -		mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		 -		mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + +		if (screen_size_changed) +		{ +			mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		 +			mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); +		}  		mScreen.setViewport(viewport_width, viewport_height);  		mEdgeMap.setViewport(viewport_width, viewport_height);  		for (U32 i = 0; i < 3; i++)  		{ -			mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +			if (screen_size_changed) +			{ +				mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +			}  			mDeferredLight[i].setViewport(viewport_width, viewport_height);  		}  		for (U32 i = 0; i < 2; i++)  		{ -			mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +			if (screen_size_changed) +			{ +				mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +			}  			mGIMapPost[i].setViewport(viewport_width, viewport_height);  		} @@ -568,7 +604,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3  		for (U32 i = 0; i < 4; i++)  		{ -			mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +			if (screen_size_changed) +			{ +				mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE); +			}  			mShadow[i].setViewport(viewport_width, viewport_height);  		} @@ -578,7 +617,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3  		for (U32 i = 4; i < 6; i++)  		{ -			mShadow[i].allocate(width, height, 0, TRUE, FALSE); +			if (screen_size_changed) +			{ +				mShadow[i].allocate(width, height, 0, TRUE, FALSE); +			}  			mShadow[i].setViewport(viewport_width, viewport_height);  		} @@ -586,32 +628,41 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3  		width = nhpo2(resX)/2;  		height = nhpo2(resY)/2; -		mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE); +		if (screen_size_changed) +		{ +			mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE); +		}  		mLuminanceMap.setViewport(viewport_width, viewport_height);  	}  	else  	{ -		mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		 +		if (screen_size_changed) +		{ +			mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		 +		}  		mScreen.setViewport(viewport_width, viewport_height);  	}  	if (gGLManager.mHasFramebufferMultisample && samples > 1)  	{ -		mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); -		mSampleBuffer.setViewport(viewport_width, viewport_height); -		mScreen.setSampleBuffer(&mSampleBuffer); - -		if (LLPipeline::sRenderDeferred) +		if (screen_size_changed)  		{ -			addDeferredAttachments(mSampleBuffer); -			mDeferredScreen.setSampleBuffer(&mSampleBuffer); +			mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); +			if (LLPipeline::sRenderDeferred) +			{ +				addDeferredAttachments(mSampleBuffer); +				mDeferredScreen.setSampleBuffer(&mSampleBuffer); +			}  		} +		mSampleBuffer.setViewport(viewport_width, viewport_height); +		mScreen.setSampleBuffer(&mSampleBuffer);  		stop_glerror();  	} -	if (LLPipeline::sRenderDeferred) +	if (LLPipeline::sRenderDeferred  +		&& screen_size_changed)  	{ //share depth buffer between deferred targets  		mDeferredScreen.shareDepthBuffer(mScreen);  		for (U32 i = 0; i < 3; i++) @@ -726,6 +777,10 @@ void LLPipeline::createGLBuffers()  			mGlow[i].allocate(512,glow_res,GL_RGBA,FALSE,FALSE);  		} +		// force reallocation of buffers by clearing known dimensions +		mScreenWidth = 0; +		mScreenHeight = 0; +  		allocateScreenBuffer(resX,resY, viewport_width, viewport_height);  	} diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 9193e19bb1..11b7b55f20 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -467,6 +467,11 @@ public:  	static F32				sMinRenderSize;  	//screen texture +	U32 					mScreenWidth; +	U32 					mScreenHeight; +	U32 					mViewportWidth; +	U32 					mViewportHeight; +  	LLRenderTarget			mScreen;  	LLRenderTarget			mUIScreen;  	LLRenderTarget			mDeferredScreen; diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.pngBinary files differ index 98f1f04b9a..aa3898ca99 100644 --- a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png +++ b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png b/indra/newview/skins/default/textures/bottomtray/Unread_IM.pngBinary files differ index a355917fca..598342ea80 100644 --- a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png +++ b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index f4a239be62..99f6fc5cb3 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -50,8 +50,12 @@ with the same filename but different name    <texture name="Arrow_Right_Off" file_name="navbar/Arrow_Right_Off.png" preload="true" />    <texture name="Arrow_Right_Press" file_name="navbar/Arrow_Right_Press.png" preload="true" /> -  <texture name="Arrow_Up" file_name="widgets/Arrow_Up.png" preload="true" /> -  <texture name="Arrow_Down" file_name="widgets/Arrow_Down.png" preload="true" /> +  <texture name="Arrow_Left" file_name="widgets/Arrow_Left.png" preload="true" /> +  <texture name="Arrow_Right" file_name="widgets/Arrow_Right.png" preload="true" /> + +  <texture name="Arrow_Small_Up" file_name="widgets/Arrow_Small_Up.png" preload="true" /> +  <texture name="Arrow_Small_Left" file_name="widgets/Arrow_Small_Left.png" preload="true" /> +  <texture name="Arrow_Small_Right" file_name="widgets/Arrow_Small_Right.png" preload="true" />    <texture name="AudioMute_Off" file_name="icons/AudioMute_Off.png" preload="false" />    <texture name="AudioMute_Over" file_name="icons/AudioMute_Over.png" preload="false" /> @@ -120,6 +124,7 @@ with the same filename but different name    <texture name="ComboButton_Press" file_name="widgets/ComboButton_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="ComboButton_UpSelected" file_name="widgets/ComboButton_UpSelected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> +  <texture name="ComboButton_Up_On_Selected" file_name="widgets/ComboButton_Up_On_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="ComboButton_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="Container" file_name="containers/Container.png" preload="false" /> @@ -161,7 +166,7 @@ with the same filename but different name    <texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" />    <texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" />    <texture name="Generic_Object_Medium" file_name="icons/Generic_Object_Medium.png" preload="false" /> -  <texture name="Generic_Object_Small" file_name="icons/ Generic_Object_Small.png" preload="false" /> +  <texture name="Generic_Object_Small" file_name="icons/Generic_Object_Small.png" preload="false" />    <texture name="Generic_Object_Large" file_name="icons/Generic_Object_Large.png" preload="false" />    <texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />    <texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" /> @@ -439,6 +444,7 @@ with the same filename but different name    <texture name="Search" file_name="navbar/Search.png" preload="false" />    <texture name="SegmentedBtn_Left_Off" file_name="widgets/SegmentedBtn_Left_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> +  <texture name="SegmentedBtn_Left_Over" file_name="widgets/SegmentedBtn_Left_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Left_Press" file_name="widgets/SegmentedBtn_Left_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Left_Disabled" file_name="widgets/SegmentedBtn_Left_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Left_Selected" file_name="widgets/SegmentedBtn_Left_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> @@ -453,6 +459,7 @@ with the same filename but different name    <texture name="SegmentedBtn_Middle_Selected_Disabled" file_name="widgets/SegmentedBtn_Middle_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Right_Off" file_name="widgets/SegmentedBtn_Right_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> +  <texture name="SegmentedBtn_Right_Over" file_name="widgets/SegmentedBtn_Right_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Right_Press" file_name="widgets/SegmentedBtn_Right_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Right_Disabled" file_name="widgets/SegmentedBtn_Right_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Right_Selected" file_name="widgets/SegmentedBtn_Right_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.pngBinary files differ new file mode 100644 index 0000000000..2d624c3779 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.pngBinary files differ new file mode 100644 index 0000000000..91c03c426e --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.pngBinary files differ new file mode 100644 index 0000000000..38aac0e5ca --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.pngBinary files differ new file mode 100644 index 0000000000..fd1d11dd0b --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 615d1bf18d..4f1024f56d 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   can_tear_off="false"   height="420" @@ -215,7 +215,6 @@ Go to World menu > About Land or select another parcel to show its details.              </text>              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Profile..."               label_selected="Profile..." @@ -247,7 +246,6 @@ Go to World menu > About Land or select another parcel to show its details.               width="250" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Set..."               label_selected="Set..." @@ -269,7 +267,6 @@ Go to World menu > About Land or select another parcel to show its details.              <button               enabled="false"               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Deed..."               label_selected="Deed..." @@ -928,7 +925,6 @@ Go to World menu > About Land or select another parcel to show its details.               bottom="100"               enabled="false"               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Show"               label_selected="Show" @@ -940,7 +936,6 @@ Go to World menu > About Land or select another parcel to show its details.               bottom="100"               enabled="false"               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Return..."               label_selected="Return..." @@ -977,7 +972,6 @@ Go to World menu > About Land or select another parcel to show its details.               bottom="120"               enabled="false"               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Show"               label_selected="Show" @@ -989,7 +983,6 @@ Go to World menu > About Land or select another parcel to show its details.               bottom="120"               enabled="false"               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Return..."               label_selected="Return..." @@ -1026,7 +1019,6 @@ Go to World menu > About Land or select another parcel to show its details.               bottom="140"               enabled="false"               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Show"               label_selected="Show" @@ -1038,7 +1030,6 @@ Go to World menu > About Land or select another parcel to show its details.               bottom="140"               enabled="false"               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Return..."               label_selected="Return..." @@ -1108,7 +1099,6 @@ Go to World menu > About Land or select another parcel to show its details.              </text>              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Refresh List"               label_selected="Refresh List" @@ -1120,7 +1110,6 @@ Go to World menu > About Land or select another parcel to show its details.              <button               enabled="false"               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Return objects..."               label_selected="Return objects..." @@ -1531,7 +1520,6 @@ Only large parcels can be listed in search.              </text>              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Set"               label_selected="Set" @@ -1543,7 +1531,6 @@ Only large parcels can be listed in search.               width="50" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Clear"               label_selected="Clear" @@ -1654,7 +1641,6 @@ Only large parcels can be listed in search.               text_readonly_color="0.576471 0.662745 0.835294 1" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Set..."               label_selected="Set..." @@ -1685,7 +1671,6 @@ Only large parcels can be listed in search.               width="300" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Reset..."               label_selected="Reset..." @@ -2119,7 +2104,6 @@ Texture:               width="80" />              <button               follows="bottom" -             font="SansSerifSmall"               height="16"               label="Remove"               label_selected="Remove" @@ -2155,7 +2139,6 @@ Texture:               width="195" />              <button               follows="bottom" -             font="SansSerifSmall"               height="16"               label="Add..."               label_selected="Add..." @@ -2167,7 +2150,6 @@ Texture:              <button               enabled="false"               follows="bottom" -             font="SansSerifSmall"               height="16"               label="Remove"               label_selected="Remove" diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml index ebce758d3d..41b1f99d41 100644 --- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml @@ -163,7 +163,7 @@ Maximum animation length is [MAX_LENGTH] seconds.       follows="top|left|right"       height="23"       layout="topleft" -     left="85" +     left="100"       name="name_form"       right="-10" />      <text @@ -182,7 +182,7 @@ Maximum animation length is [MAX_LENGTH] seconds.       follows="top|left|right"       height="23"       layout="topleft" -     left="85" +     left="100"       name="description_form"       right="-10" />      <spinner @@ -192,7 +192,7 @@ Maximum animation length is [MAX_LENGTH] seconds.       increment="1"       initial_value="0"       label="Priority" -     label_width="90" +     label_width="88"       layout="topleft"       left="10"       max_val="4" @@ -214,14 +214,14 @@ Maximum animation length is [MAX_LENGTH] seconds.       increment="1"       initial_value="0"       label="In(%)" -     label_width="35" +     label_width="49"       layout="topleft"       top_pad="5"       left="30"       max_val="100"       name="loop_in_point"       tool_tip="Sets point in animation that looping returns to" -     width="110" /> +     width="115" />      <spinner       bottom_delta="0"       follows="left|top" @@ -234,8 +234,8 @@ Maximum animation length is [MAX_LENGTH] seconds.       max_val="100"       name="loop_out_point"       tool_tip="Sets point in animation that ends a loop" -     label_width="45" -     width="120" /> +     label_width="49" +     width="115" />      <text       type="string"       length="1" @@ -243,6 +243,7 @@ Maximum animation length is [MAX_LENGTH] seconds.       follows="top|left"       height="23"       width="110" +     word_wrap="true"       layout="topleft"       left="10"       name="hand_label"> @@ -315,6 +316,7 @@ Maximum animation length is [MAX_LENGTH] seconds.       follows="top|left"       height="23"       width="110" +     word_wrap="true"       layout="topleft"       left="10"       name="emote_label"> @@ -395,6 +397,7 @@ Maximum animation length is [MAX_LENGTH] seconds.       follows="top|left"       height="23"       width="110" +     word_wrap="true"       layout="topleft"       left="10"       name="preview_label"> @@ -482,6 +485,8 @@ Maximum animation length is [MAX_LENGTH] seconds.      <text       type="string"       length="1" +     height="72" +     word_wrap="true"       top_pad="5"       text_color="EmphasisColor"       follows="top|left" diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml index f0e678af00..56230e912c 100644 --- a/indra/newview/skins/default/xui/en/floater_build_options.xml +++ b/indra/newview/skins/default/xui/en/floater_build_options.xml @@ -15,14 +15,14 @@       height="23"       initial_value="1"       label="Grid Units (meters)" -     label_width="130" +     label_width="160"       layout="topleft"       left="10"       max_val="5"       min_val="0.01"       name="GridResolution"       top="25" -     width="200" /> +     width="230" />      <spinner       control_name="GridDrawSize"       decimal_digits="1" @@ -31,14 +31,14 @@       increment="0.5"       initial_value="5"       label="Grid Extents (meters)" -     label_width="130" +     label_width="160"       layout="topleft"       left_delta="0"       max_val="50"       min_val="1"       name="GridDrawSize"       top_pad="0" -     width="200" /> +     width="230" />      <check_box       control_name="GridSubUnit"       height="16" diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml index 9d2a811d9f..275ab5bb8b 100644 --- a/indra/newview/skins/default/xui/en/floater_customize.xml +++ b/indra/newview/skins/default/xui/en/floater_customize.xml @@ -64,7 +64,6 @@               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Body"               label_selected="Body" @@ -75,7 +74,6 @@               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Head"               label_selected="Head" @@ -86,7 +84,6 @@               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Eyes"               label_selected="Eyes" @@ -97,7 +94,6 @@               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Ears"               label_selected="Ears" @@ -108,7 +104,6 @@               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Nose"               label_selected="Nose" @@ -119,7 +114,6 @@               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Mouth"               label_selected="Mouth" @@ -130,7 +124,6 @@               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Chin"               label_selected="Chin" @@ -141,7 +134,6 @@               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Torso"               label_selected="Torso" @@ -152,7 +144,6 @@               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Legs"               label_selected="Legs" @@ -351,7 +342,6 @@ scratch and wear it.               width="16" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Skin Color"               label_selected="Skin Color" @@ -362,7 +352,6 @@ scratch and wear it.               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Face Detail"               label_selected="Face Detail" @@ -373,7 +362,6 @@ scratch and wear it.               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Makeup"               label_selected="Makeup" @@ -384,7 +372,6 @@ scratch and wear it.               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Body Detail"               label_selected="Body Detail" @@ -606,7 +593,6 @@ scratch and wear it.               width="16" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Color"               label_selected="Color" @@ -617,7 +603,6 @@ scratch and wear it.               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Style"               label_selected="Style" @@ -628,7 +613,6 @@ scratch and wear it.               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Eyebrows"               label_selected="Eyebrows" @@ -639,7 +623,6 @@ scratch and wear it.               width="82" />              <button               follows="left|top" -             font="SansSerifSmall"               height="16"               label="Facial"               label_selected="Facial" diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml index 5233cb023d..5e78037ee1 100644 --- a/indra/newview/skins/default/xui/en/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml @@ -136,7 +136,6 @@       width="210" />      <button       follows="left|top" -     font="SansSerifSmall"       height="20"       label="Use Estate Time"       layout="topleft" @@ -146,7 +145,6 @@       width="137" />      <button       follows="left|top" -     font="SansSerifSmall"       height="20"       label="Advanced Sky"       layout="topleft" @@ -156,7 +154,6 @@       width="137" />      <button       follows="left|top" -     font="SansSerifSmall"       height="20"       label="Advanced Water"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml index 79eed52fbf..b01c0edc8b 100644 --- a/indra/newview/skins/default/xui/en/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml @@ -191,7 +191,6 @@  			</check_box>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Bake Terrain"               label_selected="Bake Terrain" @@ -206,7 +205,6 @@  			</button>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Revert Terrain"               label_selected="Revert Terrain" @@ -220,7 +218,6 @@  			</button>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Swap Terrain"               label_selected="Swap Terrain" @@ -419,7 +416,6 @@              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Refresh"               label_selected="Refresh" @@ -434,7 +430,6 @@  			</button>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Apply"               label_selected="Apply" @@ -449,7 +444,6 @@  			</button>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Select Region"               label_selected="Select Region" @@ -464,7 +458,6 @@  			</button>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Autosave now"               label_selected="Autosave now" @@ -556,7 +549,6 @@  			</check_box>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Apply"               label_selected="Apply" @@ -571,7 +563,6 @@  			</button>  			<button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Set Target"               label_selected="Set Target" @@ -598,7 +589,6 @@              </text>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Delete Target's Scripted Objects On Others Land"               label_selected="Delete Target's Scripted Objects On Others Land" @@ -613,7 +603,6 @@  			</button>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Delete Target's Scripted Objects On *Any* Land"               label_selected="Delete Target's Scripted Objects On *Any* Land" @@ -628,7 +617,6 @@  			</button>              <button               follows="top|right" -             font="SansSerifSmall"               height="22"               label="Delete *ALL* Of Target's Objects"               label_selected="Delete *ALL* Of Target's Objects" @@ -643,7 +631,6 @@  			</button>  			<button               follows="top|right" -             font="SansSerifSmall"               height="20"               label="Get Top Colliders"               label_selected="Get Top Colliders" @@ -658,7 +645,6 @@  			</button>              <button               follows="top|right" -             font="SansSerifSmall"               height="20"               label="Get Top Scripts"               label_selected="Get Top Scripts" @@ -673,7 +659,6 @@  			</button>              <button               follows="top|right" -             font="SansSerifSmall"               height="20"               label="Scripts digest"               label_selected="Scripts digest" diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml new file mode 100644 index 0000000000..cf6a4e45bd --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 +<multi_floater
 +background_visible="true"
 +bg_color="yellow" 
 + can_resize="true"
 + height="390"
 + layout="topleft"
 + name="floater_im_box"
 + help_topic="floater_im_box"
 + save_rect="true"
 + save_visibility="true"
 + single_instance="true"
 + title="Instant Messages"
 + width="392">
 +    <tab_container
 +     follows="left|right|top|bottom"
 +     height="390"
 +     layout="topleft"
 +     left="1"
 +     name="im_box_tab_container"
 +     tab_position="bottom"
 +     tab_width="80"
 +     top="0"
 +     width="390" />
 +    <icon
 +     color="DefaultShadowLight"
 +     enabled="false"
 +     follows="left|right|bottom"
 +     height="17"
 +     image_name="tabarea.tga"
 +     layout="bottomleft"
 +     left="1"
 +     name="im_box_tab_container_icon"
 +     bottom="10"
 +     width="390" />
 +</multi_floater>
 diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 01713cc003..7f2f37409c 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -9,7 +9,7 @@   name="panel_im"   top="0"   can_close="true" - can_dock="true" + can_dock="false"   can_minimize="false"   visible="true"   width="300" diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml index 2562daf4b3..6f8f272128 100644 --- a/indra/newview/skins/default/xui/en/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_image_preview.xml @@ -47,9 +47,11 @@      <text       type="string"       length="1" -     bottom_delta="20" +     bottom_delta="30"       follows="top|left" -     height="15" +     height="25" +     width="105" +     word_wrap="true"       layout="topleft"       name="preview_label">          Preview image as: @@ -96,7 +98,9 @@      <text       type="string"       length="1" -     bottom="190" +     bottom="225" +     height="45" +     word_wrap="true"       follows="top|left"       layout="topleft"       left="10" @@ -114,7 +118,7 @@ Try saving image as 24 bit Targa (.tga).       layout="topleft"       left_delta="2"       name="lossless_check" -     top_pad="197" +     top_pad="162"       width="280" />      <button       follows="bottom|right" diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml index 4ca6002c13..366098013b 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml @@ -106,12 +106,11 @@       left_delta="78"       name="LabelCreatorName"       top_delta="0" -     width="200"> +     width="170">          Nicole Linden      </text>      <button       follows="top|right" -     font="SansSerifSmall"       height="16"       label="Profile..."       layout="topleft" @@ -140,12 +139,11 @@       left_delta="78"       name="LabelOwnerName"       top_delta="0" -     width="200"> +     width="170">          Thrax Linden      </text>      <button       follows="top|right" -     font="SansSerifSmall"       height="16"       label="Profile..."       layout="topleft" @@ -257,12 +255,13 @@       type="string"       length="1"       follows="left|top" -     height="10" +     height="25"       layout="topleft"       left="10"       name="NextOwnerLabel"       top_pad="5" -     width="78"> +     width="78" +     word_wrap="true">          Next owner:      </text>      <check_box @@ -303,7 +302,7 @@       layout="topleft"       follows="left|top"       name="combobox sale copy" -     width="90"> +     width="110">          <combo_box.item           label="Copy"           name="Copy" @@ -319,14 +318,26 @@          increment="1"          control_name="Edit Cost"          name="Edit Cost" -        label="Price: L$" -        label_width="60" +        label="Price:" +        label_width="100"          left="10" -        width="180" +        width="192"          min_val="1"          height="19"          max_val="999999999"          top_pad="5"/> +    <text +        type="string" +        length="1" +        height="15" +        follows="left|top" +        layout="topleft" +        left_delta="82" +        name="CurrencySymbol" +        top_delta="1" +        width="18"> +      L$ +    </text>      <!--line_editor       border_style="line" diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 5a8ffcebea..cff0c29dfc 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -151,8 +151,7 @@           top="2"           width="31" />          <button -         follows="left|bottom" -         font="SansSerifSmall"  +         follows="left|bottom"            height="23"           image_overlay="Move_Run_Off"           image_selected="PushButton_Selected_Press"  diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml index 3fd118df1c..41a440aaa0 100644 --- a/indra/newview/skins/default/xui/en/floater_openobject.xml +++ b/indra/newview/skins/default/xui/en/floater_openobject.xml @@ -38,7 +38,6 @@       width="284" />      <button       follows="bottom|left" -     font="SansSerifSmall"       height="23"       label="Copy To Inventory"       label_selected="Copy To Inventory" @@ -53,7 +52,6 @@      </button>      <button       follows="bottom|left" -     font="SansSerifSmall"       height="23"       label="Copy And Wear"       label_selected="Copy And Wear" 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 3b84358484..bbfb362337 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,6 @@       width="170" />      <button       height="20" -     font="SansSerifSmall"       label="Play in World"       label_selected="Stop"       layout="topleft" @@ -49,7 +48,6 @@       width="125" />      <button       height="20" -     font="SansSerifSmall"       label="Play Locally"       label_selected="Stop"       layout="topleft" 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 95347f0dff..68a78d5017 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml @@ -50,7 +50,6 @@      <button       follows="left|top"       height="22" -     font="SansSerifSmall"       label="Play Locally"       label_selected="Play Locally"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_script.xml b/indra/newview/skins/default/xui/en/floater_script.xml new file mode 100644 index 0000000000..f44ba6d873 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_script.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + background_visible="true" + follows="left|top|right|bottom" + height="369" + layout="topleft" + left="0" + name="script_floater" + help_topic="script_floater" + top="0" + can_dock="true" + can_minimize="true" + visible="true"  + width="520" + can_resize="true" + min_width="350" + min_height="369"> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml index 2cf800fb15..e6a78563f3 100644 --- a/indra/newview/skins/default/xui/en/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml @@ -205,7 +205,6 @@       width="130" />      <button       height="20" -     font="SansSerifSmall"       label="Select"       layout="topleft"       left_pad="5" @@ -267,7 +266,6 @@      </radio_group>      <button       height="20" -     font="SansSerifSmall"       label="Show Objects"       layout="topleft"       name="show_objects" @@ -290,7 +288,6 @@      <button       follows="bottom|left"       height="20" -     font="SansSerifSmall"       label="Set Land For Sale"       layout="topleft"       left_delta="0" @@ -300,7 +297,6 @@      <button       follows="bottom|right"       height="20" -     font="SansSerifSmall"       label="Cancel"       layout="topleft"       left_pad="30" diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 95a40e27f7..8860ac1e50 100644 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -120,7 +120,6 @@       width="85" />      <button       follows="left|top" -     font="SansSerifSmall"       height="20"       label="More >>"       layout="topleft" @@ -131,7 +130,6 @@       width="80" />      <button       follows="left|top" -     font="SansSerifSmall"       height="20"       label="<< Less"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml index cc0ab8c57e..374f014908 100644 --- a/indra/newview/skins/default/xui/en/floater_telehub.xml +++ b/indra/newview/skins/default/xui/en/floater_telehub.xml @@ -57,7 +57,6 @@      </text>      <button       follows="top|left" -     font="SansSerifSmall"       height="20"       label="Connect Telehub"       layout="topleft" @@ -67,7 +66,6 @@       width="110" />      <button       follows="top|left" -     font="SansSerifSmall"       height="20"       label="Disconnect"       layout="topleft" @@ -97,7 +95,6 @@       width="230" />      <button       follows="top|left" -     font="SansSerifSmall"       height="20"       label="Add Spawn"       layout="topleft" @@ -107,7 +104,6 @@       width="110" />      <button       follows="top|left" -     font="SansSerifSmall"       height="20"       label="Remove Spawn"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml index 2bd0d1a0fa..8c6ad5c0f7 100644 --- a/indra/newview/skins/default/xui/en/floater_test_button.xml +++ b/indra/newview/skins/default/xui/en/floater_test_button.xml @@ -23,7 +23,6 @@       name="bottom_delta_button" />      <button       bottom_delta="30" -     font="SansSerifSmall"       height="23"       label="SansSerifSmall"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_slider.xml b/indra/newview/skins/default/xui/en/floater_test_slider.xml index 86ff82e01f..85d8bb2bb1 100644 --- a/indra/newview/skins/default/xui/en/floater_test_slider.xml +++ b/indra/newview/skins/default/xui/en/floater_test_slider.xml @@ -2,7 +2,7 @@  <floater   legacy_header_height="18"   can_resize="true" - height="400" + height="500"   layout="topleft"   name="floater_test_slider"   help_topic="floater_test_slider" @@ -84,4 +84,17 @@       name="red_slider"       text_color="red"       text_width="40" /> +	<slider +	 width ="140" +     bottom="490" +     decimal_digits="1" +     height="100" +	 left="20" +     label="Red Slider Vertical" +     label_width="100" +     layout="topleft" +     name="red_slider_vertical" +     text_color="red" +	 orientation="vertical" +     text_width="20" />   </floater> diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index 4679ae467d..113da9ea4d 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -49,7 +49,6 @@      <button       enabled="false"       follows="left|bottom" -     font="SansSerifSmall"       height="20"       label="Default"       label_selected="Default" @@ -61,7 +60,6 @@      <button       enabled="false"       follows="left|bottom" -     font="SansSerifSmall"       height="20"       label="None"       label_selected="None" @@ -72,7 +70,6 @@       width="80" />      <button       follows="left|bottom" -     font="SansSerifSmall"       height="20"       label="Blank"       label_selected="Blank" diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 8b6f0f03fe..636e9d465a 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -701,7 +701,6 @@      </slider_bar>      <button       follows="left|top" -     font="SansSerifSmall"       height="19"       label="Apply"       label_selected="Apply" @@ -927,7 +926,6 @@               width="150" />              <button               follows="top|left" -             font="SansSerifSmall"               height="20"               label="Deed"               label_selected="Deed" @@ -2606,7 +2604,6 @@ even though the user gets a free copy.               width="170" />              <button               follows="left|top" -             font="SansSerifSmall"               height="19"               label="Apply"               label_selected="Apply" @@ -2742,7 +2739,6 @@ even though the user gets a free copy.          decouple_texture_size="true" />       <button  			 follows="left|top" -			 font="SansSerifSmall"  			 height="19"  			 label="Align"  			 label_selected="Align Media" diff --git a/indra/newview/skins/default/xui/en/floater_url_entry.xml b/indra/newview/skins/default/xui/en/floater_url_entry.xml index 1ab42cb140..29fb29fabf 100644 --- a/indra/newview/skins/default/xui/en/floater_url_entry.xml +++ b/indra/newview/skins/default/xui/en/floater_url_entry.xml @@ -32,7 +32,6 @@      <button       follows="top|left"       height="20" -     font="SansSerifSmall"       label="OK"       layout="topleft"       left="10" @@ -42,7 +41,6 @@      <button       follows="top|left"       height="20" -     font="SansSerifSmall"       label="Cancel"       layout="topleft"       left_pad="5" @@ -52,7 +50,6 @@      <button       follows="top|right"       height="20" -     font="SansSerifSmall"       label="Clear"       layout="topleft"       left_pad="65" diff --git a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml index ef68d03a45..4ece0fa3ba 100644 --- a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml +++ b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml @@ -17,9 +17,9 @@  	     tool_tip="Enter a URL or URL pattern to White List"  	     width="350" /> -  <button follows="top|left" height="20" font="SansSerifSmall" label="OK" +  <button follows="top|left" height="20" label="OK"       layout="topleft" left="10" name="ok_btn" bottom_delta="28" width="64" /> -  <button follows="top|left" height="20" font="SansSerifSmall" label="Cancel" +  <button follows="top|left" height="20" label="Cancel"       layout="topleft" left_pad="5" name="cancel_btn" bottom_delta="0" width="64" />  </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 c60cc163c8..e3db0972ec 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -116,7 +116,6 @@      </text>      <button       follows="top|right" -     font="SansSerifSmall"       height="16"       label="Go Home"       label_selected="Go Home" diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index 14a4949df7..3bf7f50a2c 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -15,19 +15,19 @@                  orientation="vertical"                  top="0">      <layout_panel auto_resize="false" -                  min_height="19" +                  height="84"                    mouse_opaque="false" -                  name="status_bar_container" -                  height="19" +                  name="nav_and_status_bar_region"                    width="1024" -                  visible="false"/> -    <layout_panel auto_resize="false" -                  height="65" -                  mouse_opaque="false" -                  name="nav_bar_container" -                  width="1024" -                  visible="false"/> -    <panel        auto_resize="true" +                  visible="false"> +      <panel follows="left|right|bottom" +             left="0" +             name="nav_bar_container" +             right="1024" +             top="19" +             height="65"/> +    </layout_panel> +    <layout_panel auto_resize="true"                    follows="all"                    height="500"                    layout="topleft" @@ -124,8 +124,16 @@                    height="500"                    name="DebugView"                    width="1024"/> -  </panel> +    </layout_panel>    </layout_stack> +  <panel mouse_opaque="false" +         follows="left|right|top"  +         name="status_bar_container" +         height="19" +         left="0"  +         top="0"  +         width="1024" +         visible="false"/>    <notify_box_view top="0"                     follows="all"                     height="768" diff --git a/indra/newview/skins/default/xui/en/menu_navbar.xml b/indra/newview/skins/default/xui/en/menu_navbar.xml index 89469fb013..e17eeb46f6 100644 --- a/indra/newview/skins/default/xui/en/menu_navbar.xml +++ b/indra/newview/skins/default/xui/en/menu_navbar.xml @@ -10,7 +10,6 @@   width="128">      <menu_item_check           label="Show Coordinates" -         layout="topleft"           name="Show Coordinates">             <menu_item_check.on_click               function="Navbar.Action" @@ -19,22 +18,28 @@               function="Navbar.EnableMenuItem"               parameter="show_coordinates" />      </menu_item_check> +    <menu_item_check +      label="Show Parcel Properties" +      name="Show Parcel Properties"> +      <menu_item_check.on_click +        function="Navbar.Action" +        parameter="show_properties" /> +      <menu_item_check.on_check +        control="NavBarShowParcelProperties" /> +    </menu_item_check>      <!-- Label of 'Landmark' item is changing in runtime,       see  AddLandmarkNavBarMenu/EditLandmarkNavBarMenu in strings.xml -->      <menu_item_call       label="Landmark" -     layout="topleft"       name="Landmark">          <menu_item_call.on_click           function="Navbar.Action"           parameter="landmark" />      </menu_item_call>      <menu_item_separator -     layout="topleft"       name="Separator" />      <menu_item_call       label="Cut" -     layout="topleft"       name="Cut">          <menu_item_call.on_click           function="Navbar.Action" @@ -45,7 +50,6 @@      </menu_item_call>      <menu_item_call       label="Copy" -     layout="topleft"       name="Copy">          <menu_item_call.on_click           function="Navbar.Action" @@ -56,7 +60,6 @@      </menu_item_call>      <menu_item_call       label="Paste" -     layout="topleft"       name="Paste">          <menu_item_call.on_click           function="Navbar.Action" @@ -67,7 +70,6 @@      </menu_item_call>      <menu_item_call       label="Delete" -     layout="topleft"       name="Delete">          <menu_item_call.on_click           function="Navbar.Action" @@ -78,7 +80,6 @@      </menu_item_call>      <menu_item_call       label="Select All" -     layout="topleft"       name="Select All">          <menu_item_call.on_click           function="Navbar.Action" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 8ab5fb1659..e19e11a1b8 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -59,7 +59,7 @@           label="My Inventory"           layout="topleft"           name="Inventory" -         shortcut="control|I"> +         shortcut="control|shift|I">              <menu_item_check.on_check               function="Floater.Visible"               parameter="inventory" /> @@ -68,6 +68,15 @@               parameter="inventory" />          </menu_item_check>          <menu_item_call +         label="Show Sidetray Inventory" +         name="ShowSidetrayInventory" +         shortcut="control|I" +         visible="false"> +            <menu_item_call.on_click +             function="ShowSidetrayPanel" +             parameter="sidepanel_inventory" /> +        </menu_item_call> +        <menu_item_call           label="My Gestures"           layout="topleft"           name="Gestures" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 3e622d779c..a87f05cbcc 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5311,6 +5311,27 @@ Grant this request?    <notification     icon="notify.tga" +   name="ScriptToast" +   type="notify"> +    [FIRST] [LAST]'s '[TITLE]' is requesting user input. +    <form name="form"> +      <button +       index="0" +       name="Open" +       text="Open Dialog"/> +      <button +       index="1" +       name="Ignore" +       text="Ignore"/> +      <button +       index="2" +       name="Block" +       text="Block"/> +    </form> +  </notification> + +  <notification +   icon="notify.tga"     name="FirstBalanceIncrease"     type="notify">  You just received L$[AMOUNT]. diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 6480469f43..da8006d545 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -46,7 +46,7 @@           left="0"           min_height="23"           width="310" -         top="0" +         top="4"           min_width="192"           name="chat_bar"           user_resize="false" @@ -58,7 +58,7 @@           height="28"           layout="topleft"           min_height="28" -         width="104" +         width="100"           top_delta="0"           min_width="54"           name="speak_panel" @@ -71,7 +71,7 @@             layout="topleft"             left="0"             name="talk" -           top="3" +           top="4"            width="100" />          </layout_panel>          <icon @@ -104,11 +104,10 @@            layout="topleft"            name="Gesture"            left="0" -          top="3" +          top="4"            width="82"            tool_tip="Shows/hides gestures">               <gesture_combo_box.drop_down_button -              font="SansSerifSmall"                pad_right="10"                 use_ellipses="true" />           </gesture_combo_box> @@ -137,6 +136,9 @@           width="80"           min_width="49">              <button +                 image_selected="PushButton_Selected_Press" +                 image_pressed="PushButton_Press" +		 image_pressed_selected="PushButton_Selected_Press"               follows="left|right"               height="23"               use_ellipses="true" @@ -145,7 +147,7 @@               layout="topleft"               name="movement_btn"               tool_tip="Shows/hides movement controls" -             top="3" +             top="4"               width="80">                  <button.init_callback                   function="Button.SetDockableFloaterToggle" @@ -176,6 +178,9 @@           user_resize="false"           width="80">              <button +                 image_selected="PushButton_Selected_Press" +                 image_pressed="PushButton_Press" +		 image_pressed_selected="PushButton_Selected_Press"               follows="left|right"               height="23"               use_ellipses="true" @@ -184,7 +189,7 @@               layout="topleft"               left="0"               tool_tip="Shows/hides camera controls" -             top="3" +             top="4"               name="camera_btn"               width="80">                  <button.init_callback @@ -221,7 +226,7 @@               layout="topleft"               name="snapshots"               width="36" -             top="3" +             top="4"               image_overlay="Snapshot_Off"               tool_tip="Take snapshot">  				<button.commit_callback @@ -245,37 +250,47 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.              <chiclet_panel  	    mouse_opaque="false"               follows="left|right" -             height="28" +             height="23"               layout="topleft"               left="0"               min_width="180"               name="chiclet_list" -             top="0" -             chiclet_padding="3" +             top="4" +             chiclet_padding="4"               scrolling_offset="40"               width="189">                  <button                   auto_resize="true"                   follows="right"                   height="23" -                 image_selected="BottomTray_Scroll_Left" -                 image_unselected="BottomTray_Scroll_Left" +                 image_selected="SegmentedBtn_Left_Off" +                 image_unselected="SegmentedBtn_Left_Off" +		 image_hover_selected="SegmentedBtn_Left_Over" +		 image_hover_unselected="SegmentedBtn_Left_Over" +		 image_pressed="SegmentedBtn_Left_Press" +		 image_pressed_selected="SegmentedBtn_Left_Press" +		 image_overlay="Arrow_Small_Left"                   layout="topleft"                   name="chicklet_left_scroll_button"                   tab_stop="false" -                 top="3" +                 top="0"                   visible="false"                   width="20" />                  <button                   auto_resize="true"                   follows="right"                   height="23" -                 image_selected="BottomTray_Scroll_Right" -                 image_unselected="BottomTray_Scroll_Right" +                 image_selected="SegmentedBtn_Right_Off" +                 image_unselected="SegmentedBtn_Right_Off" +		 image_hover_selected="SegmentedBtn_Right_Over" +		 image_hover_unselected="SegmentedBtn_Right_Over" +		 image_pressed="SegmentedBtn_Right_Press" +		 image_pressed_selected="SegmentedBtn_Right_Press" +		 image_overlay="Arrow_Small_Right"                   layout="topleft"                   name="chicklet_right_scroll_button"                   tab_stop="false" -                 top="3" +                 top="0"                   visible="false"                   width="20" />              </chiclet_panel> @@ -311,6 +326,9 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.               top="4"               width="54">                <button +                 image_selected="PushButton_Selected_Press" +                 image_pressed="PushButton_Press" +		 image_pressed_selected="PushButton_Selected_Press"                auto_resize="true"                 halign="right"                 height="23" diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml index 7a3eae35a9..692461b1a2 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_header.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml @@ -1,15 +1,15 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel -      background_visible="true" +	 background_visible="true"       bevel_style="in"       bg_alpha_color="black"       follows="top|left|right"       height="24"       label="im_header" -     layout="topleft" +	 layout="topleft"       name="im_header"       width="300"> -            <avatar_icon +		<avatar_icon           follows="left"           height="18"           image_name="Generic_Person" @@ -19,18 +19,20 @@           name="avatar_icon"           top="3"           width="18" /> -    <text +    <text_editor +	 v_pad = "0" +	 read_only = "true"       follows="left|right" -      font.style="BOLD" -         height="12" -         layout="topleft" -         left_pad="5" +	 font.style="BOLD" +	 height="12" +	 layout="topleft" +	 left_pad="5"       right="-50"       name="user_name"       text_color="white" -         top="8" -         use_ellipses="true" -         value="Erica Vader" /> +	 top="8" +	 use_ellipses="true" +	 value="Ericag Vader" />      <text              font="SansSerifSmall"           follows="right" diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index bdca8531dc..df889e87c3 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -151,7 +151,6 @@       name="buttons">          <button           follows="bottom|left" -         font="SansSerifSmall"           height="19"           label="Teleport"           layout="topleft" @@ -161,7 +160,6 @@           width="90" />          <button           follows="bottom|left" -         font="SansSerifSmall"           height="19"           label="Map"           layout="topleft" @@ -171,7 +169,6 @@           width="90" />          <button           follows="bottom|left" -         font="SansSerifSmall"           height="19"           label="Edit"           layout="topleft" 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 2378ae518b..a833ad97d9 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -15,6 +15,10 @@         [ACCTTYPE]  [PAYMENTINFO] [AGEVERIFICATION]     </string> +   <string  +    name="RegisterDateFormat"> +	[REG_DATE] ([AGE]) +   </string>      <string      name="AcctTypeResident"      value="Resident" /> diff --git a/indra/newview/skins/default/xui/en/panel_group_invite.xml b/indra/newview/skins/default/xui/en/panel_group_invite.xml index 1996977acb..37578eae70 100644 --- a/indra/newview/skins/default/xui/en/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/en/panel_group_invite.xml @@ -33,7 +33,6 @@ invite to your group. Click 'Open  Resident Chooser' to start.      </text>      <button -     font="SansSerifSmall"       height="20"       label="Open Resident Chooser"       layout="topleft" @@ -53,7 +52,6 @@ Resident Chooser' to start.       top_pad="4"       width="200" />      <button -     font="SansSerifSmall"       height="20"       label="Remove Selected from List"       layout="topleft" @@ -82,7 +80,6 @@ Resident Chooser' to start.       top_delta="16"       width="196" />      <button -     font="SansSerifSmall"       height="20"       label="Send Invitations"       layout="topleft" @@ -91,7 +88,6 @@ Resident Chooser' to start.       top="356"       width="130" />      <button -     font="SansSerifSmall"       height="20"       label="Cancel"       layout="topleft" 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 a90337d31a..bf33b752d9 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -41,7 +41,6 @@  	 width="600">  	     <button  	     follows="left|top" -	     font="SansSerifSmall"  	     height="23"  	     image_disabled="PushButton_Disabled"  	     image_disabled_selected="PushButton_Disabled" @@ -58,7 +57,6 @@  	    <button  	     follows="left|top" -	     font="SansSerifSmall"  	     height="23"  	     image_disabled="PushButton_Disabled"  	     image_disabled_selected="PushButton_Disabled" @@ -74,7 +72,6 @@  	     width="31" />  	    <button  	     follows="left|top" -	     font="SansSerifSmall"  	     height="23"  	     image_disabled="PushButton_Disabled"  	     image_disabled_selected="PushButton_Disabled" diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml index ecf35523cd..de612fbbc3 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml @@ -26,7 +26,7 @@       max_length="512"       name="chat_box"       tool_tip="Press Enter to say, Ctrl+Enter to shout" -     top="0" +     top="1"       width="279" />      <output_monitor       auto_update="true" @@ -37,19 +37,21 @@       left_pad="-24"       mouse_opaque="true"       name="chat_zone_indicator" -     top="4" +     top="1"       visible="true"       width="20" />      <button       follows="right"       is_toggle="true"       width="20" -     top="0" +     top="1"       layout="topleft" -     left_pad="4           " +     left_pad="4"       image_disabled="ComboButton_UpOff"       image_unselected="ComboButton_UpOff" -     image_selected="ComboButton_UpSelected" +     image_selected="ComboButton_Up_On_Selected" +     image_pressed="ComboButton_UpSelected" +     image_pressed_selected="ComboButton_Up_On_Selected"       height="23"       name="show_nearby_chat"       tool_tip="Shows/hides nearby chat log"> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index a370b450e9..87861e7901 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -344,7 +344,6 @@ background_visible="true"       width="313">          <button           follows="bottom|left" -         font="SansSerifSmall"           top="4"           left="0"           height="19" @@ -355,7 +354,6 @@ background_visible="true"           width="70" />          <button           follows="bottom|left" -         font="SansSerifSmall"           top="4"           left_pad="2"           height="19" @@ -366,7 +364,6 @@ background_visible="true"           width="45" />          <button           follows="bottom|left" -         font="SansSerifSmall"           top="4"           left_pad="2"           height="19" @@ -377,7 +374,6 @@ background_visible="true"           width="50" />          <button           follows="left|top" -         font="SansSerifSmall"           top="4"           left_pad="2"           height="19" @@ -387,7 +383,6 @@ background_visible="true"           width="60" />          <button           follows="bottom|left" -         font="SansSerifSmall"           top="4"           left_pad="2"           height="19" @@ -398,7 +393,6 @@ background_visible="true"           width="75" />          <button           follows="bottom|left" -         font="SansSerifSmall"           top="4"           left="0"           height="19" @@ -409,7 +403,6 @@ background_visible="true"           width="110" />          <button           follows="bottom|left" -         font="SansSerifSmall"           top="4"           left_pad="2"           height="19" diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index cf18aa2d39..0cf2a7afc3 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -103,7 +103,6 @@       name="buttons">          <button           follows="bottom|left" -         font="SansSerifSmall"           height="19"           label="Teleport"           layout="topleft" @@ -113,7 +112,6 @@           width="90" />          <button           follows="bottom|left" -         font="SansSerifSmall"           height="19"           label="Map"           layout="topleft" @@ -123,7 +121,6 @@           width="90" />          <button           follows="bottom|left" -         font="SansSerifSmall"           height="19"           label="Edit"           layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index 5cefe3e4ab..69a81adecd 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -131,7 +131,6 @@         <button           enabled="false"           follows="bottom|left" -         font="SansSerifSmall"           height="25"           label="Info"           layout="topleft" @@ -143,7 +142,6 @@          <button           enabled="false"           follows="bottom|left" -         font="SansSerifSmall"           height="25"           label="Teleport"           layout="topleft" @@ -155,7 +153,6 @@          <button           enabled="false"           follows="bottom|left" -         font="SansSerifSmall"           height="25"           label="Map"           layout="topleft" @@ -167,7 +164,6 @@          <button           enabled="false"           follows="bottom|right" -         font="SansSerifSmall"           height="25"           label="▼"           layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 5efacb68be..88df529ec1 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -72,7 +72,6 @@ background_visible="true"       width="313">          <button           follows="bottom|left" -         font="SansSerifSmall"           height="19"           label="Teleport"           layout="topleft" @@ -82,7 +81,6 @@ background_visible="true"           width="100" />          <button           follows="bottom|left" -         font="SansSerifSmall"           height="19"           label="Map"           layout="topleft" @@ -92,7 +90,6 @@ background_visible="true"           width="70" />          <button           follows="bottom|left" -         font="SansSerifSmall"           height="19"           label="Edit"           layout="topleft" @@ -102,7 +99,6 @@ background_visible="true"           width="70" />          <button           follows="bottom|right" -         font="SansSerifSmall"           height="19"           image_disabled="ForwardArrow_Off"           image_selected="ForwardArrow_Press" @@ -114,7 +110,6 @@ background_visible="true"           width="18" />          <button           follows="bottom|right" -         font="SansSerifSmall"           height="19"           label="Close"           layout="topleft" @@ -124,7 +119,6 @@ background_visible="true"           width="60" />          <button           follows="bottom|right" -         font="SansSerifSmall"           height="19"           label="Cancel"           layout="topleft" @@ -134,7 +128,6 @@ background_visible="true"           width="60" />          <button           follows="bottom|right" -         font="SansSerifSmall"           height="19"           label="Save"           layout="topleft" 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 5a4b0a3892..fac0d5c60f 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -309,4 +309,13 @@       name="send_im_to_email"       top_pad="5"       width="400" /> +    <check_box +     enabled="false" +     height="16" +     label="Enable plain text chat history" +     layout="topleft" +     left_delta="0" +     name="plain_text_chat_history" +     top_pad="5" +     width="400" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index bf1d46451b..947bb67152 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -27,7 +27,10 @@      <string       name="no_partner_text"       value="None" /> -    <string name="RegisterDateFormat">[REG_DATE] ([AGE])</string> +    <string  +	 name="RegisterDateFormat"> +	 [REG_DATE] ([AGE]) +	</string>    <scroll_container       color="DkGray2"       follows="all" @@ -324,7 +327,6 @@           width="64" />          <button           follows="bottom|right" -         font="SansSerifSmall"           height="19"           label="▼"           layout="topleft" @@ -344,7 +346,6 @@       width="303">          <button           follows="bottom|right" -         font="SansSerifSmall"           height="19"           left="10"           label="Edit Profile" 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 b015346a79..8e683bffc1 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -25,10 +25,11 @@       tab_stop="false"       top="2"       width="23" /> -    <text +    <text_editor +	 read_only = "true"       follows="top|left|right"       font="SansSerifHugeBold" -     height="26" +     height="29"       layout="topleft"       left_pad="10"       name="user_name" @@ -52,7 +53,7 @@       halign="center"       layout="topleft"       left="10" - min_width="333" +	 min_width="333"       name="tabs"       tab_min_width="80"       tab_height="30" diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml index 49fc930cd8..75d7d85505 100644 --- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml @@ -119,7 +119,6 @@      </text_editor>      <button       follows="left|top" -     font="SansSerifSmall"       height="18"       label="Reset"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml index a1bca4229d..e07585d285 100644 --- a/indra/newview/skins/default/xui/en/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml @@ -61,7 +61,6 @@      <button       enabled="false"       follows="left|top" -     font="SansSerifSmall"       height="20"       label="Apply"       layout="topleft" @@ -109,7 +108,6 @@      <button       follows="left|top"       height="20" -     font="SansSerifSmall"       label="Choose"       layout="topleft"       left_pad="5" @@ -156,7 +154,6 @@      <button       follows="left|top"       height="20" -     font="SansSerifSmall"       label="Return"       layout="topleft"       left="20" @@ -165,7 +162,6 @@       width="80" />      <button       follows="left|top" -     font="SansSerifSmall"       height="20"       label="Get Top Colliders..."       layout="topleft" @@ -176,7 +172,6 @@       width="150" />      <button       follows="left|top" -     font="SansSerifSmall"       height="20"       label="Get Top Scripts..."       layout="topleft" @@ -187,7 +182,6 @@       width="150" />      <button       follows="left|top" -     font="SansSerifSmall"       height="20"       label="Restart Region"       layout="topleft" @@ -198,7 +192,6 @@       width="130" />      <button       follows="left|top" -     font="SansSerifSmall"       height="20"       label="Delay Restart"       layout="topleft" 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 b1afe76500..65bc48265d 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -43,7 +43,6 @@       auto_resize="true"       halign="right"       follows="right|bottom" -     font="SansSerifSmall"       image_selected="BuyArrow_Over"       image_unselected="BuyArrow_Off"       image_pressed="BuyArrow_Press" diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index b9a89a2ebc..4dae8e48a0 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -71,7 +71,6 @@    	     width="313" />      <button    	     follows="bottom|left" -     font="SansSerifSmall"    	     height="25"    	     label="Wear"    	     layout="topleft" @@ -81,7 +80,6 @@         	 width="80" />      <button      	 follows="bottom|left" -     font="SansSerifSmall"    	     height="25"    	     label="New Outfit"    	     layout="topleft" diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index b8b3d993bd..51b74307c8 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -41,7 +41,6 @@  			<button  				 enabled="true"  				 follows="bottom|left" -				 font="SansSerifSmall"  				 height="25"  				 label="Info"  				 layout="topleft" @@ -52,7 +51,6 @@  			<button  				 enabled="true"  				 follows="bottom|left" -				 font="SansSerifSmall"  				 height="25"  				 label="Share"  				 layout="topleft" @@ -63,7 +61,6 @@  			<button  				 enabled="false"  				 follows="bottom|left" -				 font="SansSerifSmall"  				 height="25"  				 label="Wear"  				 layout="topleft" @@ -74,7 +71,6 @@  			<button  				 enabled="false"  				 follows="bottom|left" -				 font="SansSerifSmall"  				 height="25"  				 label="Play"  				 layout="topleft" @@ -85,7 +81,6 @@  			<button  				 enabled="false"  				 follows="bottom|left" -				 font="SansSerifSmall"  				 height="25"  				 label="Teleport"  				 layout="topleft" 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 6ae2477304..db8a844eb0 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -126,12 +126,11 @@  		     left_delta="78"  		     name="LabelCreatorName"  		     top_delta="0" -		     width="200"> +		     width="140">  	        Nicole Linden  	     </text>  	     <button  			 follows="top|right" -			 font="SansSerifSmall"  			 height="16"  			 label="Profile..."  			 layout="topleft" @@ -160,12 +159,11 @@  			 left_delta="78"  			 name="LabelOwnerName"  			 top_delta="0" -			 width="200"> +			 width="140">  			    Thrax Linden  	     </text>  	     <button  			 follows="top|right" -			 font="SansSerifSmall"  			 height="16"  			 label="Profile..."  			 layout="topleft" @@ -194,7 +192,7 @@  			 left_delta="78"  			 name="LabelAcquiredDate"  			 top_delta="0" -			 width="252"> +			 width="222">  			Wed May 24 12:50:46 2006  	    </text>  	    <text @@ -277,12 +275,13 @@  			 type="string"  			 length="1"  			 follows="left|top" -			 height="10" +			 height="25"  			 layout="topleft"  			 left="10"  			 name="NextOwnerLabel"  			 top_pad="5" -			 width="78"> +			 width="78" +			 word_wrap="true">  			Next owner:  	    </text>  	    <check_box @@ -323,7 +322,7 @@  			 layout="topleft"  			 follows="left|top"  			 name="combobox sale copy" -			 width="90"> +			 width="110">  			<combo_box.item  			     label="Copy"  			     name="Copy" @@ -339,14 +338,26 @@  			    increment="1"  			    control_name="Edit Cost"  			    name="Edit Cost" -			    label="Price: L$" -			    label_width="60" +			    label="Price:" +			    label_width="100"  			    left="10" -			    width="180" +			    width="192"  			    min_val="1"  			    height="19"  			    max_val="999999999"  			    top_pad="5"/> +	    <text +			    type="string" +			    length="1" +			    height="15" +			    follows="left|top" +			    layout="topleft" +			    left_delta="82" +			    name="CurrencySymbol" +			    top_delta="1" +			    width="18"> +			L$ +	    </text>  	    <!--line_editor  			 border_style="line"  			 border_thickness="1" @@ -479,7 +490,6 @@  		 width="313">  	    <button  		     follows="bottom|left" -		     font="SansSerifSmall"  		     height="25"  		     label="Edit"  		     layout="topleft" @@ -489,7 +499,6 @@  		     width="50" />  	    <button  		     follows="bottom|right" -		     font="SansSerifSmall"  		     height="25"  		     label="Cancel"  		     layout="topleft" @@ -499,7 +508,6 @@  		     width="70" />  	    <button  		     follows="bottom|right" -		     font="SansSerifSmall"  		     height="25"  		     label="Save"  		     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 7647be7830..348f0dfc09 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -203,7 +203,6 @@               width="150" />              <button               follows="top|left" -             font="SansSerifSmall"               height="20"               label="Deed"               label_selected="Deed" @@ -485,7 +484,6 @@  		 width="313">  	    <button  		     follows="bottom|left" -		     font="SansSerifSmall"  		     height="25"  		     label="Edit"  		     layout="topleft" @@ -495,7 +493,6 @@  		     width="50" />  	    <button  		     follows="bottom|left" -		     font="SansSerifSmall"  		     height="25"  		     label="Open"  		     layout="topleft" @@ -505,7 +502,6 @@  		     width="60" />  	    <button  		     follows="bottom|left" -		     font="SansSerifSmall"  		     height="25"  		     label="Pay"  		     layout="topleft" @@ -515,7 +511,6 @@  		     width="50" />  	    <button  		     follows="bottom|left" -		     font="SansSerifSmall"  		     height="25"  		     label="Buy"  		     layout="topleft" @@ -525,7 +520,6 @@  		     width="60" />  	    <button  		     follows="bottom|right" -		     font="SansSerifSmall"  		     height="25"  		     label="Cancel"  		     layout="topleft" @@ -535,7 +529,6 @@  		     width="70" />  	    <button  		     follows="bottom|right" -		     font="SansSerifSmall"  		     height="25"  		     label="Save"  		     layout="topleft" diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml index 6b11e72247..7c54e618ef 100644 --- a/indra/newview/skins/default/xui/en/widgets/button.xml +++ b/indra/newview/skins/default/xui/en/widgets/button.xml @@ -15,7 +15,6 @@          image_color="ButtonImageColor"          image_color_disabled="ButtonImageColor"          flash_color="ButtonFlashBgColor" -        font="SansSerifSmall"          hover_glow_amount="0.15"          halign="center"          scale_image="true"> diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml new file mode 100644 index 0000000000..5011bf6a61 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 +<chiclet_script
 + name="script_chiclet">
 + <icon
 +  name="chiclet_icon"
 +  follows="all"
 +  mouse_opaque="false"
 +  image_name="Generic_Object_Small" />
 +</expandable_text>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml index 6171be034f..4229f34c09 100644 --- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml @@ -1,5 +1,5 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<gesture_combo_box font="SansSerifSmall" +<gesture_combo_box             label="Gestures"              list_position="below"             max_chars="20" @@ -7,7 +7,6 @@    <gesture_combo_box.combo_button name="Combobox Button"                            label=""                            hover_glow_amount="0.15" -                          font="SansSerifSmall"                            scale_image="true"                            image_unselected="ComboButton_Off"                            image_selected="ComboButton_Selected" @@ -17,15 +16,15 @@                                label=""                                halign="center"                                hover_glow_amount="0.15" -                              font="SansSerif"                                scale_image="true" +                 image_selected="PushButton_Selected_Press" +                 image_pressed="PushButton_Press" +		 image_pressed_selected="PushButton_Selected_Press"                                image_unselected="PushButton_Off" -                              image_selected="PushButton_Selected"                                image_disabled="PushButton_Disabled"                                image_disabled_selected="PushButton_Selected_Disabled" />    <gesture_combo_box.combo_list bg_writeable_color="MenuDefaultBgColor" -                                scroll_bar_bg_visible="true" /> +                                scroll_bar_bg_visible="false" />    <gesture_combo_box.combo_editor name="Combo Text Entry" -                          select_on_focus="true" -                          font="SansSerifSmall" /> +                          select_on_focus="true" />  </gesture_combo_box> diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml index d88bcfab1d..17b1479ec4 100644 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml @@ -11,7 +11,7 @@                  add_landmark_image_disabled="Favorite_Star_Off"                  add_landmark_image_hover="Favorite_Star_Over"                  add_landmark_image_selected="Favorite_Star_Press" -                add_landmark_hpad="2" +                icon_hpad="2"                  allow_text_entry="true"                  list_position="below"        	        show_text_as_tentative="false" @@ -38,6 +38,60 @@                            scale_image="false"  			  top="19"  			  left="-3" /> +  <voice_icon +    name="voice_icon" +    width="22" +    height="18" +	top="21" +    image_name="parcel_lght_VoiceNo" +    /> +  <fly_icon +    name="fly_icon" +    width="22" +    height="18" +	top="21" +    image_name="parcel_lght_FlyNo" +    /> +  <push_icon +    name="push_icon" +    width="22" +    height="18" +	top="21" +    image_name="parcel_lght_PushNo" +    /> +  <build_icon +    name="build_icon" +    width="22" +    height="18" +	top="21" +    image_name="parcel_lght_BuildNo" +    /> +  <scripts_icon +    name="scripts_icon" +    width="22" +    height="18" +	top="21" +    image_name="parcel_lght_ScriptsNo" +    /> +  <!-- NOTE: Placeholder icon, there is no dark grayscale version --> +  <damage_icon +    name="damage_icon" +    width="22" +    height="18" +	top="21" +    image_name="parcel_lght_Damage" +    /> +  <!-- Default text color is invisible on top of nav bar background --> +  <damage_text +    name="damage_text" +	width="50" +	height="18" +	top="16" +	halign="right" +	font="SansSerifSmall" +	text_color="TextFgColor" +	/> +    <combo_button name="Location History"                            label=""                            pad_right="0"/> 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 c98e9cb6b8..2bbaa6233f 100644 --- a/indra/newview/skins/default/xui/en/widgets/menu_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml @@ -1,6 +1,4 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <!-- Use this for the top-level menu styling --> -<menu_item -  font="SansSerifSmall" -  > +<menu_item>  </menu_item> 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 f1401140de..477c6fb8b8 100644 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml @@ -2,7 +2,7 @@  <tab_container tab_min_width="60"                 tab_max_width="150"                 font_halign="center" -               font="SansSerif"  +               font="SansSerifSmall"                  tab_height="21">    <first_tab tab_top_image_unselected="TabTop_Left_Off"                 tab_top_image_selected="TabTop_Left_Selected" diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml index 64c2e65a6e..7781bdd066 100644 --- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml +++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml @@ -7,10 +7,13 @@    -->    <speak_button      follows="left|right"  +                 image_selected="SegmentedBtn_Left_Selected_Press" +                 image_unselected="SegmentedBtn_Left_Off" +		 image_pressed="SegmentedBtn_Left_Selected_Press" +		 image_pressed_selected="SegmentedBtn_Left_Selected_Press"      name="left"      label="Speak"      label_selected="Speak" -    font="SansSerifSmall"      tab_stop="false"      />    <show_button @@ -23,8 +26,11 @@      bottom="0"      tab_stop="false"      is_toggle="true" -    image_selected="ComboButton_UpSelected" -    image_unselected="ComboButton_UpOff" +                 image_selected="SegmentedBtn_Right_Selected_Press" +                 image_unselected="SegmentedBtn_Right_Off" +		 image_pressed="SegmentedBtn_Right_Press" +		 image_pressed_selected="SegmentedBtn_Right_Selected_Press" +		 image_overlay="Arrow_Small_Up"      />    <monitor      follows="right"  | 
