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 8db6d5917a..4d7d3ee8ac 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" @@ -5380,6 +5381,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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differnew 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.png Binary files differnew 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.png Binary files differnew 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.png Binary files differnew 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 90e32cdd9c..9d1bcb8f60 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5307,6 +5307,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" |