summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.hgignore5
-rw-r--r--indra/llrender/llrendertarget.cpp52
-rw-r--r--indra/llrender/llrendertarget.h7
-rw-r--r--indra/llui/llbutton.cpp51
-rw-r--r--indra/llui/llbutton.h8
-rw-r--r--indra/llui/llconsole.cpp5
-rw-r--r--indra/llui/llfloater.cpp8
-rw-r--r--indra/llui/llfocusmgr.cpp43
-rw-r--r--indra/llui/llfocusmgr.h16
-rw-r--r--indra/llui/lllineeditor.cpp19
-rw-r--r--indra/llui/lllineeditor.h3
-rw-r--r--indra/llui/llmenugl.cpp17
-rw-r--r--indra/llui/llmultislider.cpp37
-rw-r--r--indra/llui/llmultislider.h9
-rw-r--r--indra/llui/llmultisliderctrl.cpp4
-rw-r--r--indra/llui/llpanel.cpp25
-rw-r--r--indra/llui/llpanel.h6
-rw-r--r--indra/llui/llslider.cpp36
-rw-r--r--indra/llui/llslider.h9
-rw-r--r--indra/llui/llsliderctrl.cpp7
-rw-r--r--indra/llui/llsliderctrl.h4
-rw-r--r--indra/llui/llspinctrl.cpp6
-rw-r--r--indra/llui/lltabcontainer.cpp6
-rw-r--r--indra/llui/lltextbase.cpp5
-rw-r--r--indra/llui/lltexteditor.cpp26
-rw-r--r--indra/llui/lluictrl.cpp179
-rw-r--r--indra/llui/lluictrl.h42
-rw-r--r--indra/llui/llurlentry.cpp33
-rw-r--r--indra/llui/llurlentry.h13
-rw-r--r--indra/llui/llurlregistry.cpp1
-rw-r--r--indra/llxuixml/llinitparam.cpp2
-rw-r--r--indra/llxuixml/llinitparam.h4
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/app_settings/settings.xml15
-rw-r--r--indra/newview/llagent.cpp6
-rw-r--r--indra/newview/llagentui.cpp19
-rw-r--r--indra/newview/llagentui.h9
-rw-r--r--indra/newview/llappviewer.cpp7
-rw-r--r--indra/newview/llcallfloater.cpp69
-rw-r--r--indra/newview/llcallfloater.h71
-rw-r--r--indra/newview/llchathistory.cpp9
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp319
-rw-r--r--indra/newview/llchatitemscontainerctrl.h17
-rw-r--r--indra/newview/llchiclet.cpp9
-rw-r--r--indra/newview/llfavoritesbar.cpp6
-rw-r--r--indra/newview/llfloaterbuyland.cpp2
-rw-r--r--indra/newview/llfloaterchat.cpp2
-rw-r--r--indra/newview/llfloaterchatterbox.cpp2
-rw-r--r--indra/newview/llfloaterland.cpp2
-rw-r--r--indra/newview/llglsandbox.cpp5
-rw-r--r--indra/newview/llgroupmgr.cpp1
-rw-r--r--indra/newview/llimpanel.cpp2
-rw-r--r--indra/newview/llinventoryobserver.h2
-rw-r--r--indra/newview/lllocationinputctrl.cpp211
-rw-r--r--indra/newview/lllocationinputctrl.h32
-rw-r--r--indra/newview/llmediactrl.cpp2
-rw-r--r--indra/newview/llmoveview.cpp3
-rw-r--r--indra/newview/llnavigationbar.cpp12
-rw-r--r--indra/newview/llnavigationbar.h1
-rw-r--r--indra/newview/llnearbychathandler.cpp25
-rw-r--r--indra/newview/llpanelavatartag.cpp2
-rw-r--r--indra/newview/llpanelobjectinventory.cpp1
-rw-r--r--indra/newview/llpanelpeople.cpp2
-rw-r--r--indra/newview/llpanelprofileview.cpp2
-rw-r--r--indra/newview/llpreviewgesture.cpp2
-rw-r--r--indra/newview/llsidetray.cpp3
-rw-r--r--indra/newview/llsidetray.h8
-rw-r--r--indra/newview/llspeakbutton.cpp48
-rw-r--r--indra/newview/llspeakbutton.h4
-rw-r--r--indra/newview/llstatusbar.h1
-rw-r--r--indra/newview/llteleporthistory.cpp4
-rw-r--r--indra/newview/llteleporthistory.h3
-rw-r--r--indra/newview/lltoolmgr.cpp2
-rw-r--r--indra/newview/llviewerinventory.cpp32
-rw-r--r--indra/newview/llviewermenu.cpp4
-rw-r--r--indra/newview/llviewermessage.cpp416
-rw-r--r--indra/newview/llviewermessage.h6
-rw-r--r--indra/newview/llviewerparcelmgr.cpp42
-rw-r--r--indra/newview/llviewerparcelmgr.h30
-rw-r--r--indra/newview/llviewerwindow.cpp4
-rw-r--r--indra/newview/pipeline.cpp51
-rw-r--r--indra/newview/pipeline.h5
-rw-r--r--indra/newview/skins/default/colors.xml3
-rw-r--r--indra/newview/skins/default/textures/bottomtray/Notices_Unread.pngbin333 -> 331 bytes
-rw-r--r--indra/newview/skins/default/textures/bottomtray/Unread_IM.pngbin297 -> 416 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml11
-rw-r--r--indra/newview/skins/default/textures/widgets/Arrow_Small_Left.pngbin0 -> 223 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/Arrow_Small_Right.pngbin0 -> 217 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/Arrow_Small_Up.pngbin0 -> 382 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.pngbin0 -> 482 bytes
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml20
-rw-r--r--indra/newview/skins/default/xui/en/floater_animation_preview.xml19
-rw-r--r--indra/newview/skins/default/xui/en/floater_build_options.xml8
-rw-r--r--indra/newview/skins/default/xui/en/floater_customize.xml17
-rw-r--r--indra/newview/skins/default/xui/en/floater_env_settings.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_god_tools.xml15
-rw-r--r--indra/newview/skins/default/xui/en/floater_image_preview.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml31
-rw-r--r--indra/newview/skins/default/xui/en/floater_moveview.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_openobject.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_animation.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_sound.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_sell_land.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_telehub.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_button.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_slider.xml15
-rw-r--r--indra/newview/skins/default/xui/en/floater_texture_ctrl.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_url_entry.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_controls.xml96
-rw-r--r--indra/newview/skins/default/xui/en/floater_whitelist_entry.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_world_map.xml1
-rw-r--r--indra/newview/skins/default/xui/en/main_view.xml32
-rw-r--r--indra/newview/skins/default/xui/en/menu_navbar.xml17
-rw-r--r--indra/newview/skins/default/xui/en/menu_url_inventory.xml28
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml24
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml52
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_header.xml24
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_item.xml70
-rw-r--r--indra/newview/skins/default/xui/en/panel_classified_info.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_profile.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_invite.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_my_profile.xml20
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_info.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_picks.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile_view.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_covenant.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_debug.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml1
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_appearance.xml2
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml5
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_item_info.xml36
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_task_info.xml7
-rw-r--r--indra/newview/skins/default/xui/en/widgets/button.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml13
-rw-r--r--indra/newview/skins/default/xui/en/widgets/location_input.xml56
-rw-r--r--indra/newview/skins/default/xui/en/widgets/menu_item.xml4
-rw-r--r--indra/newview/skins/default/xui/en/widgets/tab_container.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/talk_button.xml12
145 files changed, 1944 insertions, 1037 deletions
diff --git a/.hgignore b/.hgignore
index 886af2b007..53ddf71bb7 100644
--- a/.hgignore
+++ b/.hgignore
@@ -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/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index f0df3bcf90..d9520b3bf6 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -61,11 +61,8 @@ BOOL LLRenderTarget::sUseFBO = FALSE;
LLRenderTarget::LLRenderTarget() :
mResX(0),
mResY(0),
- mViewportWidth(0),
- mViewportHeight(0),
mTex(0),
mFBO(0),
- mColorFmt(0),
mDepth(0),
mStencil(0),
mUseDepth(FALSE),
@@ -89,31 +86,13 @@ 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;
- // default viewport to entire texture
- mViewportWidth = mResX;
- mViewportHeight = mResY;
mStencil = stencil;
mUsage = usage;
mUseDepth = depth;
- mFBO = 0;
- mColorFmt = color_fmt;
release();
@@ -333,7 +312,7 @@ void LLRenderTarget::bindTarget()
}
}
- glViewport(0, 0, mViewportWidth, mViewportHeight);
+ glViewport(0, 0, mResX, mResY);
sBoundTarget = this;
}
@@ -536,18 +515,12 @@ BOOL LLRenderTarget::isComplete() const
return (!mTex.empty() || mDepth) ? TRUE : FALSE;
}
-void LLRenderTarget::setViewport(U32 width, U32 height)
-{
- mViewportWidth = llmin(width, mResX);
- mViewportHeight = llmin(height, mResY);
-}
-
void LLRenderTarget::getViewport(S32* viewport)
{
viewport[0] = 0;
viewport[1] = 0;
- viewport[2] = mViewportWidth;
- viewport[3] = mViewportHeight;
+ viewport[2] = mResX;
+ viewport[3] = mResY;
}
//==================================================
@@ -608,7 +581,7 @@ void LLMultisampleBuffer::bindTarget(LLRenderTarget* ref)
check_framebuffer_status();
- glViewport(0, 0, mViewportWidth, mViewportHeight);
+ glViewport(0, 0, mResX, mResY);
sBoundTarget = this;
}
@@ -620,30 +593,13 @@ 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;
- mViewportWidth = mResX;
- mViewportHeight = mResY;
mUsage = usage;
mUseDepth = depth;
mStencil = stencil;
- mFBO = 0;
- mColorFmt = color_fmt;
releaseSampleBuffer();
diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h
index 125747424c..b7ebfc8f7f 100644
--- a/indra/llrender/llrendertarget.h
+++ b/indra/llrender/llrendertarget.h
@@ -107,9 +107,6 @@ public:
//uses scissor rect if in copy-to-texture mode
void clear(U32 mask = 0xFFFFFFFF);
- // override default viewport to a smaller size
- void setViewport(U32 width, U32 height);
-
//get applied viewport
void getViewport(S32* viewport);
@@ -153,16 +150,12 @@ protected:
friend class LLMultisampleBuffer;
U32 mResX;
U32 mResY;
- U32 mViewportWidth;
- U32 mViewportHeight;
std::vector<U32> mTex;
U32 mFBO;
- U32 mColorFmt;
U32 mDepth;
BOOL mStencil;
BOOL mUseDepth;
BOOL mRenderDepth;
-
LLTexUnit::eTextureType mUsage;
U32 mSamples;
LLMultisampleBuffer* mSampleBuffer;
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/llconsole.cpp b/indra/llui/llconsole.cpp
index 48c76cf105..fa0abd55d0 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -392,9 +392,4 @@ void LLConsole::addLine(const LLWString& wline, F32 size, const LLColor4 &color)
Paragraph paragraph(wline, color, mTimer.getElapsedTimeF32(), mFont, (F32)getRect().getWidth() );
mParagraphs.push_back ( paragraph );
-
-#if LL_WINDOWS && LL_LCD_COMPILE
- // add to LCD screen
- AddNewDebugConsoleToLCD(wline);
-#endif
}
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 ab1006ffd7..7bf10d774c 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/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 219fae84be..b51709e208 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -34,6 +34,7 @@
#include "linden_common.h"
#include "llurlentry.h"
#include "lluri.h"
+
#include "llcachename.h"
#include "lltrans.h"
#include "lluicolortable.h"
@@ -383,6 +384,38 @@ std::string LLUrlEntryGroup::getLabel(const std::string &url, const LLUrlLabelCa
}
}
+//
+// LLUrlEntryInventory Describes a Second Life inventory Url, e.g.,
+// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/select
+//
+LLUrlEntryInventory::LLUrlEntryInventory()
+{
+ mPattern = boost::regex("secondlife:///app/inventory/[\\da-f-]+/\\w+",
+ boost::regex::perl|boost::regex::icase);
+ mMenuName = "menu_url_inventory.xml";
+}
+
+std::string LLUrlEntryInventory::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
+{
+ return unescapeUrl(url);
+ // TODO: Figure out if we can somehow access the inventory from here to get the actual item name
+ /*
+ std::string inventory_id_string = getIDStringFromUrl(url);
+ if (inventory_id_string.empty())
+ {
+ // something went wrong, give raw url
+ return unescapeUrl(url);
+ }
+ LLUUID inventory_id(inventory_id_string);
+ LLInventoryItem* item = gInventory.getItem(inventory_id);
+ if(!item)
+ {
+ return unescapeUrl(url);
+ }
+ return item->getName(); */
+}
+
+
///
/// LLUrlEntryParcel Describes a Second Life parcel Url, e.g.,
/// secondlife:///app/parcel/0000060e-4b39-e00b-d0c3-d98b1934e3a8/about
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index 7970b48eb5..b3fb333fdd 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -174,6 +174,19 @@ private:
};
///
+/// LLUrlEntryInventory Describes a Second Life inventory Url, e.g.,
+/// secondlife:///app/inventory/0e346d8b-4433-4d66-a6b0-fd37083abc4c/select
+///
+class LLUrlEntryInventory : public LLUrlEntryBase
+{
+public:
+ LLUrlEntryInventory();
+ /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+private:
+};
+
+
+///
/// LLUrlEntryParcel Describes a Second Life parcel Url, e.g.,
/// secondlife:///app/parcel/0000060e-4b39-e00b-d0c3-d98b1934e3a8/about
///
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index a6922b019b..b2f084e5ac 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -55,6 +55,7 @@ LLUrlRegistry::LLUrlRegistry()
registerUrl(new LLUrlEntryPlace());
registerUrl(new LLUrlEntrySL());
registerUrl(new LLUrlEntrySLLabel());
+ registerUrl(new LLUrlEntryInventory());
}
LLUrlRegistry::~LLUrlRegistry()
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 e632cbaaf2..e7e89d9701 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -90,6 +90,7 @@ set(viewer_SOURCE_FILES
llbox.cpp
llbreadcrumbview.cpp
llcallbacklist.cpp
+ llcallfloater.cpp
llcallingcard.cpp
llcapabilitylistener.cpp
llcaphttpsender.cpp
@@ -588,6 +589,7 @@ set(viewer_HEADER_FILES
llbox.h
llbreadcrumbview.h
llcallbacklist.h
+ llcallfloater.h
llcallingcard.h
llcapabilitylistener.h
llcapabilityprovider.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 994e546bd0..075aee46c7 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7722,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>
@@ -7733,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 fa0ea557ba..edad76a072 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -799,13 +799,6 @@ bool LLAppViewer::init()
// call all self-registered classes
LLInitClassList::instance().fireCallbacks();
- #if LL_LCD_COMPILE
- // start up an LCD window on a logitech keyboard, if there is one
- HINSTANCE hInstance = GetModuleHandle(NULL);
- gLcdScreen = new LLLCD(hInstance);
- CreateLCDDebugWindows();
-#endif
-
LLFolderViewItem::initClass(); // SJB: Needs to happen after initWindow(), not sure why but related to fonts
gGLManager.getGLInfo(gDebugInfo);
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
new file mode 100644
index 0000000000..eaa048f5aa
--- /dev/null
+++ b/indra/newview/llcallfloater.cpp
@@ -0,0 +1,69 @@
+/**
+ * @file llcallfloater.cpp
+ * @author Mike Antipov
+ * @brief Voice Control Panel in a Voice Chats (P2P, Group, Nearby...).
+ *
+ * $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 "llcallfloater.h"
+
+#include "llavatarlist.h"
+#include "llparticipantlist.h"
+#include "llspeakers.h"
+
+
+LLCallFloater::LLCallFloater()
+: LLFloater(LLSD())
+, mSpeakerManager(NULL)
+, mPaticipants(NULL)
+, mAvatarList(NULL)
+{
+ LLUICtrlFactory::getInstance()->buildFloater(this, "floater_voice_controls.xml", NULL);
+}
+
+LLCallFloater::~LLCallFloater()
+{
+ delete mPaticipants;
+ mPaticipants = NULL;
+}
+
+// virtual
+BOOL LLCallFloater::postBuild()
+{
+ LLFloater::postBuild();
+ mAvatarList = getChild<LLAvatarList>("speakers_list");
+
+ mSpeakerManager = LLLocalSpeakerMgr::getInstance();
+ mPaticipants = new LLParticipantList(mSpeakerManager, mAvatarList);
+
+ return TRUE;
+}
+//EOF
diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h
new file mode 100644
index 0000000000..f1afddb1cc
--- /dev/null
+++ b/indra/newview/llcallfloater.h
@@ -0,0 +1,71 @@
+/**
+ * @file llcallfloater.h
+ * @author Mike Antipov
+ * @brief Voice Control Panel in a Voice Chats (P2P, Group, Nearby...).
+ *
+ * $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_LLCALLFLOATER_H
+#define LL_LLCALLFLOATER_H
+
+#include "llfloater.h"
+
+class LLAvatarList;
+class LLParticipantList;
+class LLSpeakerMgr;
+
+/**
+ * The Voice Control Panel is an ambient window summoned by clicking the flyout chevron on the Speak button.
+ * It can be torn-off and freely positioned onscreen.
+ *
+ * When the Resident is engaged in Nearby Voice Chat, the Voice Control Panel provides control over
+ * the Resident's own microphone input volume, the audible volume of each of the other participants,
+ * the Resident's own Voice Morphing settings (if she has subscribed to enable the feature), and Voice Recording.
+ *
+ * When the Resident is engaged in Group Voice Chat, the Voice Control Panel also provides an
+ * 'End Call' button to allow the Resident to leave that voice channel.
+ */
+class LLCallFloater : public LLFloater
+{
+public:
+ LLCallFloater();
+ ~LLCallFloater();
+
+ /*virtual*/ BOOL postBuild();
+
+
+private:
+ LLSpeakerMgr* mSpeakerManager;
+ LLParticipantList* mPaticipants;
+ LLAvatarList* mAvatarList;
+};
+
+
+#endif //LL_LLCALLFLOATER_H
+
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 533940943e..2c9b38b82a 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())
{
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 8a6935b71b..90956d4aa0 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -44,27 +44,12 @@
#include "llviewercontrol.h"
#include "llagentdata.h"
-/*
-static const S32 BORDER_MARGIN = 2;
-static const S32 PARENT_BORDER_MARGIN = 0;
-
-static const S32 HORIZONTAL_MULTIPLE = 8;
-static const S32 VERTICAL_MULTIPLE = 16;
-static const F32 MIN_AUTO_SCROLL_RATE = 120.f;
-static const F32 MAX_AUTO_SCROLL_RATE = 500.f;
-static const F32 AUTO_SCROLL_RATE_ACCEL = 120.f;
-
-#define MAX_CHAT_HISTORY 100
-*/
-
-static const S32 msg_left_offset = 30;
+static const S32 msg_left_offset = 10;
static const S32 msg_right_offset = 10;
-static const S32 msg_height_pad = 2;
-
-//static LLDefaultChildRegistry::Register<LLChatItemsContainerCtrl> t2("chat_items_container");
+static const S32 msg_height_pad = 5;
//*******************************************************************************************************************
-//LLChatItemCtrl
+//LLNearbyChatToastPanel
//*******************************************************************************************************************
LLNearbyChatToastPanel* LLNearbyChatToastPanel::createInstance()
@@ -79,22 +64,22 @@ void LLNearbyChatToastPanel::reshape (S32 width, S32 height, BOOL called_from_p
{
LLPanel::reshape(width, height,called_from_parent);
- // *NOTE: we must check if child items exist because reshape is called from the
- // LLView::initFromParams BEFORE postBuild is called and child controls are not exist yet
- LLPanel* caption = findChild<LLPanel>("msg_caption", false);
- LLChatMsgBox* msg_text = findChild<LLChatMsgBox>("msg_text" ,false);
- if(caption && msg_text)
- {
- LLRect caption_rect = caption->getRect();
- caption_rect.setLeftTopAndSize( 2, height, width - 4, caption_rect.getHeight());
- caption->reshape( width - 4, caption_rect.getHeight(), 1);
- caption->setRect(caption_rect);
-
- LLRect msg_text_rect = msg_text->getRect();
- msg_text_rect.setLeftTopAndSize( msg_left_offset, height - caption_rect.getHeight() , width - msg_left_offset - msg_right_offset, height - caption_rect.getHeight());
- msg_text->reshape( width - msg_left_offset - msg_right_offset, height - caption_rect.getHeight(), 1);
- msg_text->setRect(msg_text_rect);
- }
+ LLUICtrl* msg_text = getChild<LLUICtrl>("msg_text", false);
+ LLUICtrl* icon = getChild<LLUICtrl>("avatar_icon", false);
+
+ LLRect msg_text_rect = msg_text->getRect();
+ LLRect avatar_rect = icon->getRect();
+
+ avatar_rect.setLeftTopAndSize(2,height-2,avatar_rect.getWidth(),avatar_rect.getHeight());
+ icon->setRect(avatar_rect);
+
+
+ msg_text_rect.setLeftTopAndSize( avatar_rect.mRight + msg_left_offset,
+ height - msg_height_pad,
+ width - avatar_rect.mRight - msg_left_offset - msg_right_offset,
+ height - 2*msg_height_pad);
+ msg_text->reshape( msg_text_rect.getWidth(), msg_text_rect.getHeight(), 1);
+ msg_text->setRect(msg_text_rect);
}
BOOL LLNearbyChatToastPanel::postBuild()
@@ -102,37 +87,63 @@ BOOL LLNearbyChatToastPanel::postBuild()
return LLPanel::postBuild();
}
-
-std::string LLNearbyChatToastPanel::appendTime()
+void LLNearbyChatToastPanel::addMessage(LLSD& notification)
{
- time_t utc_time;
- utc_time = time_corrected();
- std::string timeStr ="["+ LLTrans::getString("TimeHour")+"]:["
- +LLTrans::getString("TimeMin")+"] ";
+ std::string messageText = notification["message"].asString(); // UTF-8 line of text
- LLSD substitution;
+ LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false);
- substitution["datetime"] = (S32) utc_time;
- LLStringUtil::format (timeStr, substitution);
+ std::string color_name = notification["text_color"].asString();
+
+ LLColor4 textColor = LLUIColorTable::instance().getColor(color_name);
+ textColor.mV[VALPHA] =notification["color_alpha"].asReal();
+
+ S32 font_size = notification["font_size"].asInteger();
- return timeStr;
-}
+ LLFontGL* messageFont;
+ switch(font_size)
+ {
+ case 0: messageFont = LLFontGL::getFontSansSerifSmall(); break;
+ default:
+ case 1: messageFont = LLFontGL::getFontSansSerif(); break;
+ case 2: messageFont = LLFontGL::getFontSansSerifBig(); break;
+ }
+ //append text
+ {
+ LLStyle::Params style_params;
+ style_params.color(textColor);
+ std::string font_name = LLFontGL::nameFromFont(messageFont);
+ std::string font_style_size = LLFontGL::sizeFromFont(messageFont);
+ style_params.font.name(font_name);
+ style_params.font.size(font_style_size);
+ int chat_type = notification["chat_type"].asInteger();
+
+ if(notification["chat_style"].asInteger()== CHAT_STYLE_IRC)
+ {
+ messageText = messageText.substr(3);
+ style_params.font.style = "ITALIC";
+ }
+ else if( chat_type == CHAT_TYPE_SHOUT)
+ {
+ style_params.font.style = "BOLD";
+ }
+ else if( chat_type == CHAT_TYPE_WHISPER)
+ {
+ style_params.font.style = "ITALIC";
+ }
+ msg_text->appendText(messageText, TRUE, style_params);
+ }
+
+ snapToMessageHeight();
-void LLNearbyChatToastPanel::addText (const std::string& message , const LLStyle::Params& input_params)
-{
- LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false);
- msg_text->addText(message , input_params);
- mMessages.push_back(message);
}
void LLNearbyChatToastPanel::init(LLSD& notification)
{
- LLPanel* caption = getChild<LLPanel>("msg_caption", false);
-
- mText = notification["message"].asString(); // UTF-8 line of text
- mFromName = notification["from"].asString(); // agent or object name
+ std::string messageText = notification["message"].asString(); // UTF-8 line of text
+ std::string fromName = notification["from"].asString(); // agent or object name
mFromID = notification["from_id"].asUUID(); // agent id or object id
int sType = notification["source"].asInteger();
@@ -140,192 +151,121 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
std::string color_name = notification["text_color"].asString();
- mTextColor = LLUIColorTable::instance().getColor(color_name);
- mTextColor.mV[VALPHA] =notification["color_alpha"].asReal();
+ LLColor4 textColor = LLUIColorTable::instance().getColor(color_name);
+ textColor.mV[VALPHA] =notification["color_alpha"].asReal();
S32 font_size = notification["font_size"].asInteger();
+
+ LLFontGL* messageFont;
switch(font_size)
{
- case 0:
- mFont = LLFontGL::getFontSansSerifSmall();
- break;
+ case 0: messageFont = LLFontGL::getFontSansSerifSmall(); break;
default:
- case 1:
- mFont = LLFontGL::getFontSansSerif();
- break;
- case 2:
- mFont = LLFontGL::getFontSansSerifBig();
- break;
+ case 1: messageFont = LLFontGL::getFontSansSerif(); break;
+ case 2: messageFont = LLFontGL::getFontSansSerifBig(); break;
}
- LLStyle::Params style_params;
- style_params.color(mTextColor);
-// style_params.font(mFont);
- std::string font_name = LLFontGL::nameFromFont(mFont);
- std::string font_style_size = LLFontGL::sizeFromFont(mFont);
- style_params.font.name(font_name);
- style_params.font.size(font_style_size);
+ LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false);
+
+ msg_text->setText(std::string(""));
std::string str_sender;
if(gAgentID != mFromID)
- str_sender = mFromName;
+ str_sender = fromName;
else
- str_sender = LLTrans::getString("You");;
+ str_sender = LLTrans::getString("You");
- caption->getChild<LLTextBox>("sender_name", false)->setText(str_sender , style_params);
-
- LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false);
+ str_sender+=" ";
+ //append user name
+ {
+ LLStyle::Params style_params_name;
+
+ LLColor4 userNameColor = LLUIColorTable::instance().getColor("ChatToastUserNameColor");
+
+ style_params_name.color(userNameColor);
+
+ std::string font_name = LLFontGL::nameFromFont(messageFont);
+ std::string font_style_size = LLFontGL::sizeFromFont(messageFont);
+ style_params_name.font.name(font_name);
+ style_params_name.font.size(font_style_size);
+
+ msg_text->appendText(str_sender, FALSE, style_params_name);
+
+ }
- if(notification["chat_style"].asInteger()== CHAT_STYLE_IRC)
+ //append text
{
- if (mFromName.size() > 0)
+ LLStyle::Params style_params;
+ style_params.color(textColor);
+ std::string font_name = LLFontGL::nameFromFont(messageFont);
+ std::string font_style_size = LLFontGL::sizeFromFont(messageFont);
+ style_params.font.name(font_name);
+ style_params.font.size(font_style_size);
+
+ int chat_type = notification["chat_type"].asInteger();
+
+ if(notification["chat_style"].asInteger()== CHAT_STYLE_IRC)
{
+ messageText = messageText.substr(3);
style_params.font.style = "ITALIC";
-
- msg_text->setText(mFromName, style_params);
}
- mText = mText.substr(3);
- style_params.font.style = "ITALIC";
-#define INFINITE_REFLOW_BUG 0
-#if INFINITE_REFLOW_BUG
- // This causes LLTextBase::reflow() to infinite loop until the viewer
- // runs out of memory, throws a bad_alloc exception from std::vector
- // in mLineInfoList, and the main loop catches it and continues.
- // It appears to be caused by addText() adding a line separator in the
- // middle of a line. See EXT-2579, EXT-1949
- msg_text->addText(mText,style_params);
-#else
- msg_text->appendText(mText, FALSE, style_params);
-#endif
- }
- else
- {
- msg_text->setText(mText, style_params);
+ else if( chat_type == CHAT_TYPE_SHOUT)
+ {
+ style_params.font.style = "BOLD";
+ }
+ else if( chat_type == CHAT_TYPE_WHISPER)
+ {
+ style_params.font.style = "ITALIC";
+ }
+ msg_text->appendText(messageText, FALSE, style_params);
}
-
- LLUICtrl* msg_inspector = caption->getChild<LLUICtrl>("msg_inspector");
- if(mSourceType != CHAT_SOURCE_AGENT)
- msg_inspector->setVisible(false);
-
- mMessages.clear();
-
- snapToMessageHeight ();
+ snapToMessageHeight();
mIsDirty = true;//will set Avatar Icon in draw
}
-void LLNearbyChatToastPanel::setMessage (const LLChat& chat_msg)
-{
- LLSD notification;
- notification["message"] = chat_msg.mText;
- notification["from"] = chat_msg.mFromName;
- notification["from_id"] = chat_msg.mFromID;
- notification["time"] = chat_msg.mTime;
- notification["source"] = (S32)chat_msg.mSourceType;
- notification["chat_type"] = (S32)chat_msg.mChatType;
- notification["chat_style"] = (S32)chat_msg.mChatStyle;
-
- std::string r_color_name="White";
- F32 r_color_alpha = 1.0f;
- LLViewerChat::getChatColor( chat_msg, r_color_name, r_color_alpha);
-
- notification["text_color"] = r_color_name;
- notification["color_alpha"] = r_color_alpha;
-
- notification["font_size"] = (S32)LLViewerChat::getChatFontSize() ;
- init(notification);
-
-}
-
void LLNearbyChatToastPanel::snapToMessageHeight ()
{
LLChatMsgBox* text_box = getChild<LLChatMsgBox>("msg_text", false);
- S32 new_height = text_box->getTextPixelHeight() + msg_height_pad;
+ S32 new_height = llmax (text_box->getTextPixelHeight() + 2*text_box->getVPad() + 2*msg_height_pad, 25);
+
LLRect panel_rect = getRect();
- S32 caption_height = 0;
- LLPanel* caption = getChild<LLPanel>("msg_caption", false);
- caption_height = caption->getRect().getHeight();
-
- panel_rect.setLeftTopAndSize( panel_rect.mLeft, panel_rect.mTop, panel_rect.getWidth(), caption_height + new_height);
+ panel_rect.setLeftTopAndSize( panel_rect.mLeft, panel_rect.mTop, panel_rect.getWidth(), new_height);
- reshape( getRect().getWidth(), caption_height + new_height, 1);
+ reshape( getRect().getWidth(), getRect().getHeight(), 1);
setRect(panel_rect);
}
-
-void LLNearbyChatToastPanel::setWidth(S32 width)
-{
- LLChatMsgBox* text_box = getChild<LLChatMsgBox>("msg_text", false);
- text_box->reshape(width - msg_left_offset - msg_right_offset,100/*its not magic number, we just need any number*/);
-
- LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false);
-
- LLStyle::Params style_params;
- style_params.color(mTextColor);
- style_params.font(mFont);
-
-
- if(mText.length())
- msg_text->setText(mText, style_params);
-
- for(size_t i=0;i<mMessages.size();++i)
- msg_text->addText(mMessages[i] , style_params);
-
- setRect(LLRect(getRect().mLeft, getRect().mTop, getRect().mLeft + width , getRect().mBottom));
- snapToMessageHeight ();
-}
-
void LLNearbyChatToastPanel::onMouseLeave (S32 x, S32 y, MASK mask)
{
- LLPanel* caption = getChild<LLPanel>("msg_caption", false);
- LLUICtrl* msg_inspector = caption->getChild<LLUICtrl>("msg_inspector");
- msg_inspector->setVisible(false);
}
void LLNearbyChatToastPanel::onMouseEnter (S32 x, S32 y, MASK mask)
{
if(mSourceType != CHAT_SOURCE_AGENT)
return;
- LLPanel* caption = getChild<LLPanel>("msg_caption", false);
- LLUICtrl* msg_inspector = caption->getChild<LLUICtrl>("msg_inspector");
- msg_inspector->setVisible(true);
}
BOOL LLNearbyChatToastPanel::handleMouseDown (S32 x, S32 y, MASK mask)
{
if(mSourceType != CHAT_SOURCE_AGENT)
return LLPanel::handleMouseDown(x,y,mask);
- LLPanel* caption = getChild<LLPanel>("msg_caption", false);
- LLUICtrl* msg_inspector = caption->getChild<LLUICtrl>("msg_inspector");
- S32 local_x = x - msg_inspector->getRect().mLeft - caption->getRect().mLeft;
- S32 local_y = y - msg_inspector->getRect().mBottom - caption->getRect().mBottom;
- if(msg_inspector->pointInView(local_x, local_y))
- {
- LLFloaterReg::showInstance("inspect_avatar", LLSD().insert("avatar_id", mFromID));
- }
- else
- {
- LLFloaterReg::showInstance("nearby_chat",LLSD());
- }
+ LLFloaterReg::showInstance("nearby_chat",LLSD());
return LLPanel::handleMouseDown(x,y,mask);
}
void LLNearbyChatToastPanel::setHeaderVisibility(EShowItemHeader e)
{
- LLPanel* caption = getChild<LLPanel>("msg_caption", false);
-
- LLUICtrl* icon = caption->getChild<LLUICtrl>("avatar_icon", false);
- LLUICtrl* name = caption->getChild<LLUICtrl>("sender_name", false);
-
- icon->setVisible(e == CHATITEMHEADER_SHOW_ONLY_ICON || e==CHATITEMHEADER_SHOW_BOTH);
- name->setVisible(e == CHATITEMHEADER_SHOW_ONLY_NAME || e==CHATITEMHEADER_SHOW_BOTH);
+ LLUICtrl* icon = getChild<LLUICtrl>("avatar_icon", false);
+ if(icon)
+ icon->setVisible(e == CHATITEMHEADER_SHOW_ONLY_ICON || e==CHATITEMHEADER_SHOW_BOTH);
}
@@ -339,11 +279,10 @@ bool LLNearbyChatToastPanel::canAddText ()
BOOL LLNearbyChatToastPanel::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
- LLPanel* caption = getChild<LLPanel>("msg_caption", false);
- LLUICtrl* avatar_icon = caption->getChild<LLUICtrl>("avatar_icon", false);
+ LLUICtrl* avatar_icon = getChild<LLUICtrl>("avatar_icon", false);
- S32 local_x = x - avatar_icon->getRect().mLeft - caption->getRect().mLeft;
- S32 local_y = y - avatar_icon->getRect().mBottom - caption->getRect().mBottom;
+ S32 local_x = x - avatar_icon->getRect().mLeft;
+ S32 local_y = y - avatar_icon->getRect().mBottom;
//eat message for avatar icon if msg was from object
if(avatar_icon->pointInView(local_x, local_y) && mSourceType != CHAT_SOURCE_AGENT)
@@ -354,9 +293,7 @@ void LLNearbyChatToastPanel::draw()
{
if(mIsDirty)
{
- LLPanel* caption = findChild<LLPanel>("msg_caption", false);
- if(caption)
- caption->getChild<LLAvatarIconCtrl>("avatar_icon", false)->setValue(mFromID);
+ getChild<LLAvatarIconCtrl>("avatar_icon", false)->setValue(mFromID);
mIsDirty = false;
}
LLToastPanelBase::draw();
diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h
index a65bfedd09..0a85c52401 100644
--- a/indra/newview/llchatitemscontainerctrl.h
+++ b/indra/newview/llchatitemscontainerctrl.h
@@ -59,9 +59,8 @@ public:
const LLUUID& getFromID() const { return mFromID;}
- void addText (const std::string& message , const LLStyle::Params& input_params = LLStyle::Params());
- void setMessage (const LLChat& msg);
- void setWidth (S32 width);
+ //void addText (const std::string& message , const LLStyle::Params& input_params = LLStyle::Params());
+ //void setMessage (const LLChat& msg);
void snapToMessageHeight ();
bool canAddText ();
@@ -78,22 +77,16 @@ public:
BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
virtual void init(LLSD& data);
+ virtual void addMessage(LLSD& data);
virtual void draw();
-private:
-
- std::string appendTime ();
+ const LLUUID& messageID() const { return mFromID;}
private:
- std::string mText; // UTF-8 line of text
- std::string mFromName; // agent or object name
LLUUID mFromID; // agent id or object id
EChatSourceType mSourceType;
- LLColor4 mTextColor;
- LLFontGL* mFont;
-
+
- std::vector<std::string> mMessages;
bool mIsDirty;
};
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 433f70700c..90f246ddaf 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -165,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)
@@ -985,7 +985,10 @@ void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param)
void LLChicletPanel::onChicletClick(LLUICtrl*ctrl,const LLSD&param)
{
- mCommitSignal(ctrl,param);
+ if (mCommitSignal)
+ {
+ (*mCommitSignal)(ctrl,param);
+ }
}
void LLChicletPanel::removeChiclet(chiclet_list_t::iterator it)
@@ -1290,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)
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/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/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/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index 384e6292e8..e908506b33 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -113,7 +113,7 @@ public:
bool isEverythingComplete() const;
void fetchItems(const item_ref_t& ids);
- virtual void done() = 0;
+ virtual void done() {};
protected:
item_ref_t mComplete;
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 9aefbcbbb0..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),
@@ -193,7 +201,7 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
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.
@@ -229,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));
@@ -372,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)
@@ -409,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();
}
@@ -510,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)
@@ -531,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
}
@@ -547,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;
@@ -650,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()
@@ -677,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();
@@ -695,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();
}
@@ -721,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 c032d01d2f..41376c4c09 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -238,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)
@@ -425,7 +435,7 @@ void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos)
* 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));
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index cd3ba08db3..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();
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 74a75d0369..b0b6db682c 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -52,8 +52,6 @@ using namespace LLNotificationsUI;
LLToastPanelBase* createToastPanel()
{
LLNearbyChatToastPanel* item = LLNearbyChatToastPanel::createInstance();
- static S32 chat_item_width = 304;
- item->setWidth(chat_item_width);
return item;
}
@@ -169,6 +167,29 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
//look in pool. if there is any message
if(mStopProcessing)
return;
+
+ /*
+ find last toast and check ID
+ */
+
+ if(m_active_toasts.size())
+ {
+ LLUUID fromID = notification["from_id"].asUUID(); // agent id or object id
+ LLToast* toast = m_active_toasts[0];
+ LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel());
+
+ if(panel && panel->messageID() == fromID && panel->canAddText())
+ {
+ panel->addMessage(notification);
+ toast->reshapeToPanel();
+ toast->resetTimer();
+
+ arrangeToasts();
+ return;
+ }
+ }
+
+
if(m_toast_pool.empty())
{
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/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 371c598e84..47d0381bd7 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -488,7 +488,7 @@ void LLPanelPeople::onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LL
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 08aea8cfd8..7832f63e6a 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, const LLSD& key)
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/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 0b832a8239..ee5fa46c9c 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"
@@ -681,7 +682,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/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
index 54f776ca6a..9562d7828c 100644
--- a/indra/newview/llspeakbutton.cpp
+++ b/indra/newview/llspeakbutton.cpp
@@ -32,19 +32,13 @@
#include "llviewerprecompiledheaders.h" // must be first include
+#include "llbutton.h"
+
#include "llagent.h"
#include "llbottomtray.h"
-#include "llfloaterreg.h"
-#include "llvoiceclient.h"
-#include "llvoicecontrolpanel.h"
-#include "lltransientfloatermgr.h"
-
-#include "llavatariconctrl.h"
-#include "llbutton.h"
-#include "llpanel.h"
-#include "lltextbox.h"
+#include "llcallfloater.h"
#include "lloutputmonitorctrl.h"
-#include "llgroupmgr.h"
+#include "lltransientfloatermgr.h"
#include "llspeakbutton.h"
@@ -72,7 +66,6 @@ void LLSpeakButton::draw()
LLSpeakButton::LLSpeakButton(const Params& p)
: LLUICtrl(p)
-, mPrivateCallPanel(NULL)
, mOutputMonitor(NULL)
, mSpeakBtn(NULL)
, mShowBtn(NULL)
@@ -179,9 +172,11 @@ void LLSpeakButton::onClick_ShowBtn()
{
if(!mShowBtn->getToggleState())
{
- mPrivateCallPanel->onClickClose(mPrivateCallPanel);
- delete mPrivateCallPanel;
- mPrivateCallPanel = NULL;
+ if (!mPrivateCallPanel.isDead())
+ {
+ LLFloater* instance = mPrivateCallPanel.get();
+ instance->onClickClose(instance);
+ }
mShowBtn->setToggleState(FALSE);
return;
}
@@ -191,25 +186,20 @@ void LLSpeakButton::onClick_ShowBtn()
localPointToScreen(x, y, &x, &y);
- mPrivateCallPanel = new LLVoiceControlPanel;
- getRootView()->addChild(mPrivateCallPanel);
-
- y = LLBottomTray::getInstance()->getRect().getHeight() + mPrivateCallPanel->getRect().getHeight();
+ LLCallFloater* instance = new LLCallFloater;
+ mPrivateCallPanel = instance->getHandle();
- LLRect rect;
- rect.setLeftTopAndSize(x, y, mPrivateCallPanel->getRect().getWidth(), mPrivateCallPanel->getRect().getHeight());
- mPrivateCallPanel->setRect(rect);
+ // *TODO: mantipov: why we are adding this floater to Root View? It is in FloaterView by default
+ getRootView()->addChild(instance);
+ y = LLBottomTray::getInstance()->getRect().getHeight() + instance->getRect().getHeight();
- LLAvatarListItem* item = new LLAvatarListItem();
- item->showLastInteractionTime(false);
- item->showInfoBtn(true);
- item->showSpeakingIndicator(true);
- item->reshape(mPrivateCallPanel->getRect().getWidth(), item->getRect().getHeight(), FALSE);
+ LLRect rect;
+ rect.setLeftTopAndSize(x, y, instance->getRect().getWidth(), instance->getRect().getHeight());
+ instance->setRect(rect);
- mPrivateCallPanel->addItem(item);
- mPrivateCallPanel->setVisible(TRUE);
- mPrivateCallPanel->setFrontmost(TRUE);
+ instance->setVisible(TRUE);
+ instance->setFrontmost(TRUE);
mShowBtn->setToggleState(TRUE);
}
diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h
index 424ee5357a..33f7c9fa28 100644
--- a/indra/newview/llspeakbutton.h
+++ b/indra/newview/llspeakbutton.h
@@ -36,7 +36,7 @@
#include "llinitparam.h"
#include "lluictrl.h"
-class LLVoiceControlPanel;
+class LLCallFloater;
class LLButton;
class LLOutputMonitorCtrl;
@@ -91,7 +91,7 @@ protected:
private:
LLButton* mSpeakBtn;
LLButton* mShowBtn;
- LLVoiceControlPanel* mPrivateCallPanel;
+ LLHandle<LLFloater> mPrivateCallPanel;
LLOutputMonitorCtrl* mOutputMonitor;
};
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/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/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 87d256b60a..c6ec25c1cb 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -56,11 +56,43 @@
#include "lltrans.h"
#include "llappearancemgr.h"
#include "llfloatercustomize.h"
+#include "llcommandhandler.h"
+#include "llviewermessage.h"
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
+class LLInventoryHandler : public LLCommandHandler
+{
+public:
+ // requires trusted browser to trigger
+ LLInventoryHandler() : LLCommandHandler("inventory", UNTRUSTED_THROTTLE) { }
+
+ bool handle(const LLSD& params, const LLSD& query_map,
+ LLMediaCtrl* web)
+ {
+ if (params.size() < 2) return false;
+ LLUUID inventory_id;
+ if (!inventory_id.set(params[0], FALSE))
+ {
+ return false;
+ }
+
+ const std::string verb = params[1].asString();
+ if (verb == "select")
+ {
+ std::vector<LLUUID> items_to_open;
+ items_to_open.push_back(inventory_id);
+ open_inventory_offer(items_to_open, "");
+ return true;
+ }
+
+ return false;
+ }
+};
+LLInventoryHandler gInventoryHandler;
+
///----------------------------------------------------------------------------
/// Class LLViewerInventoryItem
///----------------------------------------------------------------------------
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 625b816125..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())
@@ -6106,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.
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 4d7d3ee8ac..adad06dc6f 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -170,7 +170,6 @@ static const F32 LLREQUEST_PERMISSION_THROTTLE_INTERVAL = 10.0f; // seconds
extern BOOL gDebugClicks;
// function prototypes
-void open_offer(const std::vector<LLUUID>& items, const std::string& from_name);
bool check_offer_throttle(const std::string& from_name, bool check_only);
//inventory offer throttle globals
@@ -727,7 +726,7 @@ public:
LLOpenAgentOffer(const std::string& from_name) : mFromName(from_name) {}
/*virtual*/ void done()
{
- open_offer(mComplete, mFromName);
+ open_inventory_offer(mComplete, mFromName);
gInventory.removeObserver(this);
delete this;
}
@@ -745,7 +744,7 @@ class LLOpenTaskOffer : public LLInventoryAddedObserver
protected:
/*virtual*/ void done()
{
- open_offer(mAdded, "");
+ open_inventory_offer(mAdded, "");
mAdded.clear();
}
};
@@ -876,7 +875,7 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
}
}
-void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
+void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name)
{
std::vector<LLUUID>::const_iterator it = items.begin();
std::vector<LLUUID>::const_iterator end = items.end();
@@ -1066,12 +1065,60 @@ LLSD LLOfferInfo::asLLSD()
return sd;
}
+void LLOfferInfo::send_auto_receive_response(void)
+{
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_ImprovedInstantMessage);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->nextBlockFast(_PREHASH_MessageBlock);
+ msg->addBOOLFast(_PREHASH_FromGroup, FALSE);
+ msg->addUUIDFast(_PREHASH_ToAgentID, mFromID);
+ msg->addU8Fast(_PREHASH_Offline, IM_ONLINE);
+ msg->addUUIDFast(_PREHASH_ID, mTransactionID);
+ msg->addU32Fast(_PREHASH_Timestamp, NO_TIMESTAMP); // no timestamp necessary
+ std::string name;
+ LLAgentUI::buildFullname(name);
+ msg->addStringFast(_PREHASH_FromAgentName, name);
+ msg->addStringFast(_PREHASH_Message, "");
+ msg->addU32Fast(_PREHASH_ParentEstateID, 0);
+ msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null);
+ msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent());
+
+ // Auto Receive Message. The math for the dialog works, because the accept
+ // for inventory_offered, task_inventory_offer or
+ // group_notice_inventory is 1 greater than the offer integer value.
+ // Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED,
+ // or IM_GROUP_NOTICE_INVENTORY_ACCEPTED
+ msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1));
+ msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData),
+ sizeof(mFolderID.mData));
+ // send the message
+ msg->sendReliable(mHost);
+
+ if(IM_INVENTORY_OFFERED == mIM)
+ {
+ // add buddy to recent people list
+ LLRecentPeople::instance().add(mFromID);
+ }
+}
+
bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& response)
- {
+{
LLChat chat;
std::string log_message;
S32 button = LLNotification::getSelectedOption(notification, response);
-
+
+ LLInventoryObserver* opener = NULL;
+ LLViewerInventoryCategory* catp = NULL;
+ catp = (LLViewerInventoryCategory*)gInventory.getCategory(mObjectID);
+ LLViewerInventoryItem* itemp = NULL;
+ if(!catp)
+ {
+ itemp = (LLViewerInventoryItem*)gInventory.getItem(mObjectID);
+ }
+
// For muting, we need to add the mute, then decline the offer.
// This must be done here because:
// * callback may be called immediately,
@@ -1082,6 +1129,136 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
gCacheName->get(mFromID, mFromGroup, &inventory_offer_mute_callback);
}
+ std::string from_string; // Used in the pop-up.
+ std::string chatHistory_string; // Used in chat history.
+
+ // TODO: when task inventory offers can also be handled the new way, migrate the code that sets these strings here:
+ from_string = chatHistory_string = mFromName;
+
+ bool busy=FALSE;
+
+ switch(button)
+ {
+ case IOR_SHOW:
+ // we will want to open this item when it comes back.
+ LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << mTransactionID
+ << LL_ENDL;
+ switch (mIM)
+ {
+ case IM_INVENTORY_OFFERED:
+ {
+ // This is an offer from an agent. In this case, the back
+ // end has already copied the items into your inventory,
+ // so we can fetch it out of our inventory.
+ LLInventoryFetchObserver::item_ref_t items;
+ items.push_back(mObjectID);
+ LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(from_string);
+ open_agent_offer->fetchItems(items);
+ if(catp || (itemp && itemp->isComplete()))
+ {
+ open_agent_offer->done();
+ }
+ else
+ {
+ opener = open_agent_offer;
+ }
+ }
+ break;
+ case IM_TASK_INVENTORY_OFFERED:
+ case IM_GROUP_NOTICE:
+ case IM_GROUP_NOTICE_REQUESTED:
+ // This is an offer from a task or group.
+ // We don't use a new instance of an opener
+ // We instead use the singular observer gOpenTaskOffer
+ // Since it already exists, we don't need to actually do anything
+ break;
+ default:
+ LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL;
+ break;
+ } // end switch (mIM)
+
+ // Show falls through to accept.
+
+ case IOR_ACCEPT:
+ //don't spam them if they are getting flooded
+ if (check_offer_throttle(mFromName, true))
+ {
+ log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
+ chat.mText = log_message;
+ LLFloaterChat::addChatHistory(chat);
+ }
+ break;
+
+ case IOR_BUSY:
+ //Busy falls through to decline. Says to make busy message.
+ busy=TRUE;
+ case IOR_MUTE:
+ // MUTE falls through to decline
+ case IOR_DECLINE:
+ {
+ log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
+ chat.mText = log_message;
+ if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269
+ {
+ chat.mMuted = TRUE;
+ }
+ LLFloaterChat::addChatHistory(chat);
+
+ LLInventoryFetchComboObserver::folder_ref_t folders;
+ LLInventoryFetchComboObserver::item_ref_t items;
+ items.push_back(mObjectID);
+ LLDiscardAgentOffer* discard_agent_offer;
+ discard_agent_offer = new LLDiscardAgentOffer(mFolderID, mObjectID);
+ discard_agent_offer->fetch(folders, items);
+ if(catp || (itemp && itemp->isComplete()))
+ {
+ discard_agent_offer->done();
+ }
+ else
+ {
+ opener = discard_agent_offer;
+ }
+
+
+ if (busy && (!mFromGroup && !mFromObject))
+ {
+ busy_message(gMessageSystem, mFromID);
+ }
+ break;
+ }
+ default:
+ // close button probably
+ // The item has already been fetched and is in your inventory, we simply won't highlight it
+ // OR delete it if the notification gets killed, since we don't want that to be a vector for
+ // losing inventory offers.
+ break;
+ }
+
+ if(opener)
+ {
+ gInventory.addObserver(opener);
+ }
+
+ delete this;
+ return false;
+}
+
+bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const LLSD& response)
+{
+ LLChat chat;
+ std::string log_message;
+ S32 button = LLNotification::getSelectedOption(notification, response);
+
+ // For muting, we need to add the mute, then decline the offer.
+ // This must be done here because:
+ // * callback may be called immediately,
+ // * adding the mute sends a message,
+ // * we can't build two messages at once.
+ if (2 == button)
+ {
+ gCacheName->get(mFromID, mFromGroup, &inventory_offer_mute_callback);
+ }
+
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_ImprovedInstantMessage);
msg->nextBlockFast(_PREHASH_AgentData);
@@ -1108,7 +1285,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
{
itemp = (LLViewerInventoryItem*)gInventory.getItem(mObjectID);
}
-
+
std::string from_string; // Used in the pop-up.
std::string chatHistory_string; // Used in chat history.
if (mFromObject == TRUE)
@@ -1119,16 +1296,16 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
if (gCacheName->getGroupName(mFromID, group_name))
{
from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+"'"
- + mFromName + LLTrans::getString("'") +" " + LLTrans::getString("InvOfferOwnedByGroup")
- + " "+ "'" + group_name + "'";
+ + mFromName + LLTrans::getString("'") +" " + LLTrans::getString("InvOfferOwnedByGroup")
+ + " "+ "'" + group_name + "'";
chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByGroup")
- + " " + group_name + "'";
+ + " " + group_name + "'";
}
else
{
from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+"'"
- + mFromName +"'"+ " " + LLTrans::getString("InvOfferOwnedByUnknownGroup");
+ + mFromName +"'"+ " " + LLTrans::getString("InvOfferOwnedByUnknownGroup");
chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByUnknownGroup");
}
}
@@ -1138,13 +1315,13 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
if (gCacheName->getName(mFromID, first_name, last_name))
{
from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+ LLTrans::getString("'") + mFromName
- + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedBy") + first_name + " " + last_name;
+ + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedBy") + first_name + " " + last_name;
chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedBy") + " " + first_name + " " + last_name;
}
else
{
from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+LLTrans::getString("'")
- + mFromName + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedByUnknownUser");
+ + mFromName + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedByUnknownUser");
chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByUnknownUser");
}
}
@@ -1158,137 +1335,90 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
switch(button)
{
- case IOR_ACCEPT:
- // ACCEPT. The math for the dialog works, because the accept
- // for inventory_offered, task_inventory_offer or
- // group_notice_inventory is 1 greater than the offer integer value.
- // Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED,
- // or IM_GROUP_NOTICE_INVENTORY_ACCEPTED
- msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1));
- msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData),
- sizeof(mFolderID.mData));
- // send the message
- msg->sendReliable(mHost);
-
- //don't spam them if they are getting flooded
- if (check_offer_throttle(mFromName, true))
- {
- log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
- chat.mText = log_message;
- LLFloaterChat::addChatHistory(chat);
- }
-
- // we will want to open this item when it comes back.
- LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << mTransactionID
- << LL_ENDL;
- switch (mIM)
- {
- case IM_INVENTORY_OFFERED:
- {
- // This is an offer from an agent. In this case, the back
- // end has already copied the items into your inventory,
- // so we can fetch it out of our inventory.
- LLInventoryFetchObserver::item_ref_t items;
- items.push_back(mObjectID);
- LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(from_string);
- open_agent_offer->fetchItems(items);
- if(catp || (itemp && itemp->isComplete()))
+ case IOR_ACCEPT:
+ // ACCEPT. The math for the dialog works, because the accept
+ // for inventory_offered, task_inventory_offer or
+ // group_notice_inventory is 1 greater than the offer integer value.
+ // Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED,
+ // or IM_GROUP_NOTICE_INVENTORY_ACCEPTED
+ msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1));
+ msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData),
+ sizeof(mFolderID.mData));
+ // send the message
+ msg->sendReliable(mHost);
+
+ //don't spam them if they are getting flooded
+ if (check_offer_throttle(mFromName, true))
{
- open_agent_offer->done();
+ log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
+ chat.mText = log_message;
+ LLFloaterChat::addChatHistory(chat);
}
- else
+
+ // we will want to open this item when it comes back.
+ LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << mTransactionID
+ << LL_ENDL;
+ switch (mIM)
+ {
+ case IM_TASK_INVENTORY_OFFERED:
+ case IM_GROUP_NOTICE:
+ case IM_GROUP_NOTICE_REQUESTED:
{
- opener = open_agent_offer;
+ // This is an offer from a task or group.
+ // We don't use a new instance of an opener
+ // We instead use the singular observer gOpenTaskOffer
+ // Since it already exists, we don't need to actually do anything
}
- }
+ break;
+ default:
+ LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL;
+ break;
+ } // end switch (mIM)
break;
- case IM_TASK_INVENTORY_OFFERED:
- case IM_GROUP_NOTICE:
- case IM_GROUP_NOTICE_REQUESTED:
- {
- // This is an offer from a task or group.
- // We don't use a new instance of an opener
- // We instead use the singular observer gOpenTaskOffer
- // Since it already exists, we don't need to actually do anything
- }
- break;
+
+ case IOR_BUSY:
+ //Busy falls through to decline. Says to make busy message.
+ busy=TRUE;
+ case IOR_MUTE:
+ // MUTE falls through to decline
+ case IOR_DECLINE:
+ // DECLINE. The math for the dialog works, because the decline
+ // for inventory_offered, task_inventory_offer or
+ // group_notice_inventory is 2 greater than the offer integer value.
+ // Generates IM_INVENTORY_DECLINED, IM_TASK_INVENTORY_DECLINED,
+ // or IM_GROUP_NOTICE_INVENTORY_DECLINED
default:
- LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL;
- break;
- } // end switch (mIM)
- break;
-
- case IOR_BUSY:
- //Busy falls through to decline. Says to make busy message.
- busy=TRUE;
- case IOR_MUTE:
- // MUTE falls through to decline
- case IOR_DECLINE:
- // DECLINE. The math for the dialog works, because the decline
- // for inventory_offered, task_inventory_offer or
- // group_notice_inventory is 2 greater than the offer integer value.
- // Generates IM_INVENTORY_DECLINED, IM_TASK_INVENTORY_DECLINED,
- // or IM_GROUP_NOTICE_INVENTORY_DECLINED
- default:
- // close button probably (or any of the fall-throughs from above)
- msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 2));
- msg->addBinaryDataFast(_PREHASH_BinaryBucket, EMPTY_BINARY_BUCKET, EMPTY_BINARY_BUCKET_SIZE);
- // send the message
- msg->sendReliable(mHost);
-
- log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
- chat.mText = log_message;
- if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269
- {
- chat.mMuted = TRUE;
- }
- LLFloaterChat::addChatHistory(chat);
-
- // If it's from an agent, we have to fetch the item to throw
- // it away. If it's from a task or group, just denying the
- // request will suffice to discard the item.
- if(IM_INVENTORY_OFFERED == mIM)
- {
- LLInventoryFetchComboObserver::folder_ref_t folders;
- LLInventoryFetchComboObserver::item_ref_t items;
- items.push_back(mObjectID);
- LLDiscardAgentOffer* discard_agent_offer;
- discard_agent_offer = new LLDiscardAgentOffer(mFolderID, mObjectID);
- discard_agent_offer->fetch(folders, items);
- if(catp || (itemp && itemp->isComplete()))
+ // close button probably (or any of the fall-throughs from above)
+ msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 2));
+ msg->addBinaryDataFast(_PREHASH_BinaryBucket, EMPTY_BINARY_BUCKET, EMPTY_BINARY_BUCKET_SIZE);
+ // send the message
+ msg->sendReliable(mHost);
+
+ log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
+ chat.mText = log_message;
+ if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269
{
- discard_agent_offer->done();
+ chat.mMuted = TRUE;
}
- else
+ LLFloaterChat::addChatHistory(chat);
+
+ if (busy && (!mFromGroup && !mFromObject))
{
- opener = discard_agent_offer;
+ busy_message(msg,mFromID);
}
-
- }
- if (busy && (!mFromGroup && !mFromObject))
- {
- busy_message(msg,mFromID);
- }
- break;
- }
-
- if(IM_INVENTORY_OFFERED == mIM)
- {
- // add buddy to recent people list
- LLRecentPeople::instance().add(mFromID);
+ break;
}
-
+
if(opener)
{
gInventory.addObserver(opener);
}
-
+
delete this;
return false;
}
-
-void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
+void inventory_offer_handler(LLOfferInfo* info)
{
//Until throttling is implmented, busy mode should reject inventory instead of silently
//accepting it. SEE SL-39554
@@ -1375,21 +1505,45 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
args["OBJECTFROMNAME"] = info->mFromName;
args["NAME"] = info->mFromName;
args["NAME_SLURL"] = LLSLURL::buildCommand("agent", info->mFromID, "about");
- std::string verb = "highlight?name=" + msg;
+ std::string verb = "select?name=" + msg;
args["ITEM_SLURL"] = LLSLURL::buildCommand("inventory", info->mObjectID, verb.c_str());
LLNotification::Params p("ObjectGiveItem");
- p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, info, _1, _2));
- if (from_task)
+ // Object -> Agent Inventory Offer
+ if (info->mFromObject)
{
+ // Inventory Slurls don't currently work for non agent transfers, so only display the object name.
+ args["ITEM_SLURL"] = msg;
+ // Note: sets inventory_task_offer_callback as the callback
+ p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_task_offer_callback, info, _1, _2));
p.name = name_found ? "ObjectGiveItem" : "ObjectGiveItemUnknownUser";
}
- else
+ else // Agent -> Agent Inventory Offer
{
+ // Note: sets inventory_offer_callback as the callback
+ p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, info, _1, _2));
p.name = "UserGiveItem";
+
+ // Prefetch the item into your local inventory.
+ LLInventoryFetchObserver::item_ref_t items;
+ items.push_back(info->mObjectID);
+ LLInventoryFetchObserver* fetch_item = new LLInventoryFetchObserver();
+ fetch_item->fetchItems(items);
+ if(fetch_item->isEverythingComplete())
+ {
+ fetch_item->done();
+ }
+ else
+ {
+ gInventory.addObserver(fetch_item);
+ }
+
+ // In viewer 2 we're now auto receiving inventory offers and messaging as such (not sending reject messages).
+ info->send_auto_receive_response();
}
-
+
+ // Pop up inv offer notification and let the user accept (keep), or reject (and silently delete) the inventory.
LLNotifications::instance().add(p);
}
@@ -1885,7 +2039,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
}
else
{
- inventory_offer_handler(info, dialog == IM_TASK_INVENTORY_OFFERED);
+ inventory_offer_handler(info);
}
}
break;
diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h
index e24da2013d..1a98828010 100644
--- a/indra/newview/llviewermessage.h
+++ b/indra/newview/llviewermessage.h
@@ -59,7 +59,8 @@ enum InventoryOfferResponse
IOR_ACCEPT,
IOR_DECLINE,
IOR_MUTE,
- IOR_BUSY
+ IOR_BUSY,
+ IOR_SHOW
};
BOOL can_afford_transaction(S32 cost);
@@ -197,6 +198,7 @@ void invalid_message_callback(LLMessageSystem*, void*, EMessageException);
void process_initiate_download(LLMessageSystem* msg, void**);
void start_new_inventory_observer();
+void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name);
struct LLOfferInfo
{
@@ -218,7 +220,9 @@ struct LLOfferInfo
LLHost mHost;
LLSD asLLSD();
+ void send_auto_receive_response(void);
bool inventory_offer_callback(const LLSD& notification, const LLSD& response);
+ bool inventory_task_offer_callback(const LLSD& notification, const LLSD& response);
};
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 3840f337d4..e30c8ab346 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1574,7 +1574,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);
@@ -4751,7 +4752,6 @@ F32 LLViewerWindow::getWorldViewAspectRatio() const
}
else
{
- llinfos << "World aspect ratio: " << world_aspect << llendl;
return world_aspect;
}
}
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 507c726e02..f908a015df 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -344,7 +344,9 @@ LLPipeline::LLPipeline() :
mWLSkyPool(NULL),
mLightMask(0),
mLightMovingMask(0),
- mLightingDetail(0)
+ mLightingDetail(0),
+ mScreenWidth(0),
+ mScreenHeight(0)
{
mNoiseMap = 0;
mTrueNoiseMap = 0;
@@ -512,22 +514,22 @@ void LLPipeline::resizeScreenTexture()
LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE);
if (gPipeline.canUseVertexShaders() && assertInitialized())
{
- GLuint resX = gViewerWindow->getWindowWidthRaw();
- GLuint resY = gViewerWindow->getWindowHeightRaw();
- GLuint view_width = gViewerWindow->getWorldViewWidthRaw();
- GLuint view_height = gViewerWindow->getWorldViewHeightRaw();
+ GLuint resX = gViewerWindow->getWorldViewWidthRaw();
+ GLuint resY = gViewerWindow->getWorldViewHeightRaw();
- allocateScreenBuffer(resX, resY, view_width, view_height);
-
- llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl;
+ allocateScreenBuffer(resX,resY);
}
}
-void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U32 viewport_height)
+void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
{
+ // remember these dimensions
+ mScreenWidth = resX;
+ mScreenHeight = resY;
+
U32 samples = gSavedSettings.getU32("RenderFSAASamples");
-
U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor");
+
if (res_mod > 1 && res_mod < resX && res_mod < resY)
{
resX /= res_mod;
@@ -544,24 +546,21 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3
//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);
- mDeferredScreen.setViewport(viewport_width, viewport_height);
- mDeferredDepth.setViewport(viewport_width, viewport_height);
addDeferredAttachments(mDeferredScreen);
+
+ // always set viewport to desired size, since allocate resets the viewport
+
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);
- 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);
- mGIMapPost[i].setViewport(viewport_width, viewport_height);
}
F32 scale = gSavedSettings.getF32("RenderShadowResolutionScale");
@@ -569,7 +568,6 @@ 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);
- mShadow[i].setViewport(viewport_width, viewport_height);
}
@@ -579,7 +577,6 @@ 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);
- mShadow[i].setViewport(viewport_width, viewport_height);
}
@@ -587,27 +584,24 @@ 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);
- mLuminanceMap.setViewport(viewport_width, viewport_height);
}
else
{
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)
{
addDeferredAttachments(mSampleBuffer);
mDeferredScreen.setSampleBuffer(&mSampleBuffer);
}
+ mScreen.setSampleBuffer(&mSampleBuffer);
+
stop_glerror();
}
@@ -711,10 +705,8 @@ void LLPipeline::createGLBuffers()
stop_glerror();
- GLuint resX = gViewerWindow->getWindowWidthRaw();
- GLuint resY = gViewerWindow->getWindowHeightRaw();
- GLuint viewport_width = gViewerWindow->getWorldViewWidthRaw();
- GLuint viewport_height = gViewerWindow->getWorldViewHeightRaw();
+ GLuint resX = gViewerWindow->getWorldViewWidthRaw();
+ GLuint resY = gViewerWindow->getWorldViewHeightRaw();
if (LLPipeline::sRenderGlow)
{ //screen space glow buffers
@@ -726,7 +718,10 @@ void LLPipeline::createGLBuffers()
mGlow[i].allocate(512,glow_res,GL_RGBA,FALSE,FALSE);
}
- allocateScreenBuffer(resX,resY, viewport_width, viewport_height);
+ allocateScreenBuffer(resX,resY);
+ mScreenWidth = 0;
+ mScreenHeight = 0;
+
}
if (sRenderDeferred)
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 9193e19bb1..67004a5f2d 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -111,7 +111,7 @@ public:
void resizeScreenTexture();
void releaseGLBuffers();
void createGLBuffers();
- void allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U32 viewport_height);
+ void allocateScreenBuffer(U32 resX, U32 resY);
void resetVertexBuffers(LLDrawable* drawable);
void setUseVBO(BOOL use_vbo);
@@ -467,6 +467,9 @@ public:
static F32 sMinRenderSize;
//screen texture
+ U32 mScreenWidth;
+ U32 mScreenHeight;
+
LLRenderTarget mScreen;
LLRenderTarget mUIScreen;
LLRenderTarget mDeferredScreen;
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index eb8ec00bb9..9be8b4c73f 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -684,5 +684,8 @@
<color
name="SysWellItemSelected"
value="0.3 0.3 0.3 1.0" />
+ <color
+ name="ChatToastUserNameColor"
+ value="1.0 0.3 1.0 1.0" />
</colors>
diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
index 98f1f04b9a..aa3898ca99 100644
--- a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
+++ b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
index a355917fca..598342ea80 100644
--- a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
+++ b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 6678918db8..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" />
@@ -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
new file mode 100644
index 0000000000..2d624c3779
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png
new file mode 100644
index 0000000000..91c03c426e
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png
new file mode 100644
index 0000000000..38aac0e5ca
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png
Binary files differ
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
new file mode 100644
index 0000000000..fd1d11dd0b
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png
Binary files differ
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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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&apos;s Scripted Objects On Others Land"
label_selected="Delete Target&apos;s Scripted Objects On Others Land"
@@ -613,7 +603,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Delete Target&apos;s Scripted Objects On *Any* Land"
label_selected="Delete Target&apos;s Scripted Objects On *Any* Land"
@@ -628,7 +617,6 @@
</button>
<button
follows="top|right"
- font="SansSerifSmall"
height="22"
label="Delete *ALL* Of Target&apos;s Objects"
label_selected="Delete *ALL* Of Target&apos;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_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_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 &gt;&gt;"
layout="topleft"
@@ -131,7 +130,6 @@
width="80" />
<button
follows="left|top"
- font="SansSerifSmall"
height="20"
label="&lt;&lt; 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_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
new file mode 100644
index 0000000000..82b4372a4b
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ can_resize="true"
+ height="300"
+ layout="topleft"
+ name="floater_voice_controls"
+ title="Voice Controls"
+ width="282">
+ <panel
+ bevel_style="in"
+ follows="left|right|top"
+ height="73"
+ layout="topleft"
+ left="0"
+ name="control_panel"
+ width="285">
+ <panel
+ height="20"
+ layout="topleft"
+ left="10"
+ name="my_panel"
+ width="262">
+ <avatar_icon
+ enabled="false"
+ follows="left|top"
+ height="20"
+ image_name="icon_avatar_online.tga"
+ layout="topleft"
+ left="0"
+ name="user_icon"
+ top="0"
+ width="20" />
+ <text
+ follows="top|left"
+ font="SansSerifSmallBold"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="user_text"
+ text_color="white"
+ top="4"
+ value="Mya Avatar:"
+ width="80" />
+ </panel>
+ <layout_stack
+ bottom="10"
+ clip="false"
+ follows="left|right|top"
+ height="24"
+ layout="bottomleft"
+ orientation="horizontal"
+ width="262">
+ <layout_panel
+ follows="left"
+ layout="topleft"
+ min_width="24"
+ top="0"
+ user_resize="false"
+ width="24">
+ <icon
+ height="24"
+ image_name="Microphone_On"
+ layout="topleft"
+ name="Microphone_On"
+ top="0"
+ width="24" />
+ </layout_panel>
+ <layout_panel
+ layout="topleft"
+ top="0"
+ user_resize="false"
+ width="258">
+ <slider_bar
+ follows="left|right|top"
+ height="24"
+ increment="0.05"
+ layout="topleft"
+ left="0"
+ name="volume_slider_bar"
+ tool_tip="Master Volume"
+ top="0"
+ value="0.75"
+ width="258" />
+ </layout_panel>
+ </layout_stack>
+ </panel>
+ <avatar_list
+ follows="all"
+ height="197"
+ ignore_online_status="true"
+ layout="topleft"
+ left="0"
+ multi_select="true"
+ name="speakers_list"
+ width="282" />
+</floater>
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_url_inventory.xml b/indra/newview/skins/default/xui/en/menu_url_inventory.xml
new file mode 100644
index 0000000000..cf9d1d5881
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_url_inventory.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Url Popup">
+ <menu_item_call
+ label="Show Inventory Item"
+ layout="topleft"
+ name="show_item">
+ <menu_item_call.on_click
+ function="Url.Execute" />
+ </menu_item_call>
+ <menu_item_separator
+ layout="topleft" />
+ <menu_item_call
+ label="Copy Name to clipboard"
+ layout="topleft"
+ name="url_copy_label">
+ <menu_item_call.on_click
+ function="Url.CopyLabel" />
+ </menu_item_call>
+ <menu_item_call
+ label="Copy SLurl to clipboard"
+ layout="topleft"
+ name="url_copy">
+ <menu_item_call.on_click
+ function="Url.CopyUrl" />
+ </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 9d1bcb8f60..a87f05cbcc 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4494,7 +4494,7 @@ You don&apos;t have permission to copy this.
icon="notifytip.tga"
name="InventoryAccepted"
type="notifytip">
-[NAME] accepted your inventory offer.
+[NAME] received your inventory offer.
</notification>
<notification
@@ -4966,17 +4966,17 @@ No valid parcel could be found.
icon="notify.tga"
name="ObjectGiveItem"
type="offer">
-An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has offered you [OBJECTTYPE]:
+An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
<button
index="0"
name="Keep"
- text="OK"/>
+ text="Keep"/>
<button
index="1"
name="Discard"
- text="Cancel"/>
+ text="Discard"/>
<button
index="2"
name="Mute"
@@ -4988,17 +4988,17 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has offered you [OBJECTTY
icon="notify.tga"
name="ObjectGiveItemUnknownUser"
type="offer">
-An object named [OBJECTFROMNAME] owned by (an unknown Resident) has offered you [OBJECTTYPE]:
+An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
<button
index="0"
name="Keep"
- text="OK"/>
+ text="Keep"/>
<button
index="1"
name="Discard"
- text="Cancel"/>
+ text="Discard"/>
<button
index="2"
name="Mute"
@@ -5010,17 +5010,21 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has offered you
icon="notify.tga"
name="UserGiveItem"
type="offer">
-[NAME_SLURL] has offered you [OBJECTTYPE]:
+[NAME_SLURL] has given you [OBJECTTYPE]:
[ITEM_SLURL]
<form name="form">
<button
index="0"
name="Keep"
- text="Accept"/>
+ text="Keep"/>
+ <button
+ index="4"
+ name="Show"
+ text="Show"/>
<button
index="1"
name="Discard"
- text="No, thanks"/>
+ text="Discard"/>
</form>
</notification>
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 96e5b4d413..c1090a1686 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="-60"
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_chat_item.xml b/indra/newview/skins/default/xui/en/panel_chat_item.xml
index 2b29796f0a..34c6e02684 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_item.xml
@@ -2,70 +2,26 @@
<!-- All our XML is utf-8 encoded. -->
<panel
name="instant_message"
- width="300"
+ width="315"
height="180"
follows="all">
- <panel
- width="290"
- height="24"
- background_visible="true"
- background_opaque="false"
- bg_alpha_color="Black"
- left="5"
- name="msg_caption">
- <avatar_icon
- follows="left"
- height="18"
- image_name="Generic_Person"
- layout="topleft"
- left="3"
- mouse_opaque="true"
- name="avatar_icon"
- top="3"
- width="18" />
- <text
- font.style="BOLD"
- height="12"
- layout="topleft"
- left_pad="5"
- top="7"
- text_color="white"
- word_wrap="false"
- use_ellipses="true"
- mouse_opaque="true"
- name="sender_name"
- width="150">
- Jerry Knight
- </text>
- <!-- <icon top="22" left="215" width="15" height="15" follows="top|right"
- image_name="icn_voice-pvtfocus.tga" visible="false" name="msg_inspector" />-->
- <!--<icon top="22" left="215" width="10" height="10" follows="top|right"
- image_name="speaking_indicator.tga" name="msg_icon"/>-->
- <text
- font="SansSerifSmall"
- follows="right|top"
- halign="right"
- height="13"
- layout="topleft"
- right="-10"
- left="205"
- mouse_opaque="true"
- name="msg_time"
- top="8"
- value="23:30"
- width="50"
- word_wrap="true" />
- </panel>
+ <avatar_icon
+ follows="left|top"
+ height="18"
+ image_name="Generic_Person"
+ layout="topleft"
+ left="3"
+ mouse_opaque="true"
+ name="avatar_icon"
+ top="3"
+ width="18" />
<text_chat
- top="-35"
- left="10"
- right="-10"
+ top="5"
+ left="30"
height="120"
- follows="left|right|bottom"
text_color="white"
word_wrap="true"
mouse_opaque="true"
name="msg_text">
- To be or not to be, that is the question. Tis a far far better thing I do than I have ever done. Tis a far far better place I go, than I have ever been.
</text_chat>
</panel>
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 &apos;Open
Resident Chooser&apos; to start.
</text>
<button
- font="SansSerifSmall"
height="20"
label="Open Resident Chooser"
layout="topleft"
@@ -53,7 +52,6 @@ Resident Chooser&apos; 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&apos; to start.
top_delta="16"
width="196" />
<button
- font="SansSerifSmall"
height="20"
label="Send Invitations"
layout="topleft"
@@ -91,7 +88,6 @@ Resident Chooser&apos; 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_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index d259623c0b..fe3e010cf9 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -27,8 +27,11 @@
<string
name="no_partner_text"
value="None" />
- <string name="RegisterDateFormat">[REG_DATE] ([AGE])</string>
- <scroll_container
+ <string
+ name="RegisterDateFormat">
+ [REG_DATE] ([AGE])
+ </string>
+ <scroll_container
color="DkGray2"
follows="all"
height="485"
@@ -46,7 +49,7 @@
top="0"
left="0"
width="313">
- <panel
+ <panel
follows="left|top"
height="117"
layout="topleft"
@@ -77,7 +80,7 @@
width="102" />
<text
follows="left|top|right"
- font.style="BOLD"
+ font.style="BOLD"
height="15"
layout="topleft"
left_pad="10"
@@ -104,7 +107,7 @@
follows="left|top"
height="117"
layout="topleft"
- top_pad="10"
+ top_pad="10"
left="10"
name="first_life_image_panel"
width="280">
@@ -130,7 +133,7 @@
width="102" />
<text
follows="left|top|right"
- font.style="BOLD"
+ font.style="BOLD"
height="15"
layout="topleft"
left_pad="10"
@@ -212,7 +215,7 @@
type="string"
follows="left|top"
font="SansSerifSmall"
- font.style="BOLD"
+ font.style="BOLD"
height="15"
layout="topleft"
left="10"
@@ -236,7 +239,7 @@
/>
<text
follows="left|top"
- font.style="BOLD"
+ font.style="BOLD"
height="10"
layout="topleft"
left="10"
@@ -409,7 +412,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_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 ece58180f7..ca84c9147b 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_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/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"