summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llcommon/llstring.cpp29
-rw-r--r--indra/llrender/lltexture.h2
-rw-r--r--indra/llui/llfloater.cpp18
-rw-r--r--indra/llui/llfloaterreg.cpp2
-rw-r--r--indra/llui/lliconctrl.cpp19
-rw-r--r--indra/llui/lliconctrl.h8
-rw-r--r--indra/llui/llmenugl.cpp4
-rw-r--r--indra/llui/llmenugl.h2
-rw-r--r--indra/llui/llmultifloater.cpp3
-rw-r--r--indra/llui/llpanel.cpp2
-rw-r--r--indra/llui/llradiogroup.cpp2
-rw-r--r--indra/llui/llscrolllistcolumn.cpp15
-rw-r--r--indra/llui/llscrolllistcolumn.h15
-rw-r--r--indra/llui/lltextbase.cpp29
-rw-r--r--indra/llui/lltextbase.h3
-rw-r--r--indra/llui/lltexteditor.cpp34
-rw-r--r--indra/llui/lltooltip.cpp32
-rw-r--r--indra/llui/lltooltip.h15
-rw-r--r--indra/llui/llui.cpp5
-rw-r--r--indra/llui/llui.h14
-rw-r--r--indra/llui/lluictrl.cpp3
-rw-r--r--indra/llui/lluictrl.h3
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llavatariconctrl.cpp3
-rw-r--r--indra/newview/llcallingcard.cpp15
-rw-r--r--indra/newview/llexpandabletextbox.cpp7
-rw-r--r--indra/newview/llexpandabletextbox.h10
-rw-r--r--indra/newview/llface.h2
-rw-r--r--indra/newview/llflexibleobject.cpp2
-rw-r--r--indra/newview/llfloatersearch.cpp9
-rw-r--r--indra/newview/llimfloater.cpp157
-rw-r--r--indra/newview/llimfloater.h15
-rw-r--r--indra/newview/llimview.cpp88
-rw-r--r--indra/newview/llimview.h13
-rw-r--r--indra/newview/llnavigationbar.cpp4
-rw-r--r--indra/newview/llpanellandmarks.cpp5
-rw-r--r--indra/newview/llpanelmediasettingsgeneral.cpp5
-rw-r--r--indra/newview/llpanelpicks.cpp8
-rw-r--r--indra/newview/llsyswellwindow.cpp1
-rw-r--r--indra/newview/llviewerfloaterreg.cpp3
-rw-r--r--indra/newview/llviewermedia.cpp89
-rw-r--r--indra/newview/llviewermedia.h27
-rw-r--r--indra/newview/llviewermediafocus.cpp44
-rw-r--r--indra/newview/llviewermediafocus.h6
-rw-r--r--indra/newview/llviewertexture.cpp98
-rw-r--r--indra/newview/llviewertexture.h17
-rw-r--r--indra/newview/llviewerwindow.cpp22
-rw-r--r--indra/newview/llvoavatardefines.cpp11
-rw-r--r--indra/newview/llvopartgroup.cpp6
-rw-r--r--indra/newview/skins/default/colors.xml5
-rw-r--r--indra/newview/skins/default/textures/icons/ForSale_Badge.pngbin0 -> 5727 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Generic_Object_Small.pngbin0 -> 410 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.pngbin0 -> 391 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.pngbin0 -> 538 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/YouAreHere_Badge.pngbin0 -> 6143 bytes
-rw-r--r--indra/newview/skins/default/textures/navbar/BuyArrow_Over.pngbin2985 -> 2956 bytes
-rw-r--r--indra/newview/skins/default/textures/navbar/BuyArrow_Press.pngbin249 -> 2949 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml54
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml165
-rw-r--r--indra/newview/skins/default/xui/en/floater_inventory.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_widgets.xml96
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml9
-rw-r--r--indra/newview/skins/default/xui/en/floater_water.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_windlight_options.xml2
-rw-r--r--indra/newview/skins/default/xui/en/fonts.xml21
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml12
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml60
-rw-r--r--indra/newview/skins/default/xui/en/panel_activeim_row.xml43
-rw-r--r--indra/newview/skins/default/xui/en/panel_avatar_list_item.xml25
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_land_money.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_list_item.xml24
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_roles.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml138
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_list_item.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile_view.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml153
-rw-r--r--indra/newview/skins/default/xui/en/panel_sys_well_item.xml69
-rw-r--r--indra/newview/skins/default/xui/en/panel_teleport_history_item.xml46
-rw-r--r--indra/newview/skins/default/xui/en/panel_toast.xml47
-rw-r--r--indra/newview/skins/default/xui/en/widgets/expandable_text.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/panel.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/tab_container.xml4
-rw-r--r--indra/newview/skins/default/xui/en/widgets/tool_tip.xml10
86 files changed, 1155 insertions, 804 deletions
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index f2edd5c559..721e5670e7 100644
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -963,30 +963,29 @@ bool LLStringUtil::formatDatetime(std::string& replacement, std::string token,
// if never fell into those two ifs above, param must be utc
if (secFromEpoch < 0) secFromEpoch = 0;
- LLDate * datetime = new LLDate((F64)secFromEpoch);
+ LLDate datetime((F64)secFromEpoch);
std::string code = LLStringOps::getDatetimeCode (token);
// special case to handle timezone
if (code == "%Z") {
if (param == "utc")
+ {
replacement = "GMT";
- else if (param == "slt")
- replacement = "SLT";
- else if (param != "local") // *TODO Vadim: not local? then what?
+ }
+ else if (param == "local")
+ {
+ replacement = ""; // user knows their own timezone
+ }
+ else
+ {
+ // "slt" = Second Life Time, which is deprecated.
+ // If not utc or user local time, fallback to Pacific time
replacement = LLStringOps::getDaylightSavings() ? "PDT" : "PST";
-
- return true;
- }
- replacement = datetime->toHTTPDateString(code);
-
- if (code.empty())
- {
- return false;
- }
- else
- {
+ }
return true;
}
+ replacement = datetime.toHTTPDateString(code);
+ return !code.empty();
}
// LLStringUtil::format recogizes the following patterns.
diff --git a/indra/llrender/lltexture.h b/indra/llrender/lltexture.h
index c18917b663..0cd9667644 100644
--- a/indra/llrender/lltexture.h
+++ b/indra/llrender/lltexture.h
@@ -61,6 +61,8 @@ public:
//
//interfaces to access LLViewerTexture
//
+ virtual S8 getType() const = 0 ;
+ virtual void setKnownDrawSize(S32 width, S32 height) = 0 ;
virtual bool bindDefaultImage(const S32 stage = 0) const = 0 ;
virtual void forceImmediateUpdate() = 0 ;
virtual void setActive() = 0 ;
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 6dcc1957a9..8c72b079ee 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -268,21 +268,14 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)
mButtonsEnabled[i] = FALSE;
mButtons[i] = NULL;
}
- for (S32 i = 0; i < 4; i++)
- {
- mResizeBar[i] = NULL;
- mResizeHandle[i] = NULL;
- }
+ addDragHandle();
+ addResizeCtrls();
initFromParams(p);
// chrome floaters don't take focus at all
setFocusRoot(!getIsChrome());
- addDragHandle();
- addResizeCtrls();
- enableResizeCtrls(mResizable);
-
initFloater();
}
@@ -2589,7 +2582,7 @@ void LLFloater::setupParamsForExport(Params& p, LLView* parent)
void LLFloater::initFromParams(const LLFloater::Params& p)
{
- // *NOTE: We have too many classes derived from LLPanel to retrofit them
+ // *NOTE: We have too many classes derived from LLFloater to retrofit them
// all to pass in params via constructors. So we use this method.
// control_name, tab_stop, focus_lost_callback, initial_value, rect, enabled, visible
@@ -2603,11 +2596,10 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
setCanMinimize(p.can_minimize);
setCanClose(p.can_close);
setCanDock(p.can_dock);
+ setCanResize(p.can_resize);
+ setResizeLimits(p.min_width, p.min_height);
mDragOnLeft = p.can_drag_on_left;
- mResizable = p.can_resize;
- mMinWidth = p.min_width;
- mMinHeight = p.min_height;
mHeaderHeight = p.header_height;
mLegacyHeaderHeight = p.legacy_header_height;
mSingleInstance = p.single_instance;
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index d98d8a0e90..aca4dc56ee 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -127,7 +127,7 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
bool success = LLUICtrlFactory::getInstance()->buildFloater(res, xui_file, NULL);
if (!success)
{
- llwarns << "Failed to buid floater type: '" << name << "'." << llendl;
+ llwarns << "Failed to build floater type: '" << name << "'." << llendl;
return NULL;
}
diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp
index 66c2ba682f..1e2353b488 100644
--- a/indra/llui/lliconctrl.cpp
+++ b/indra/llui/lliconctrl.cpp
@@ -57,7 +57,9 @@ LLIconCtrl::LLIconCtrl(const LLIconCtrl::Params& p)
: LLUICtrl(p),
mColor(p.color()),
mImagep(p.image),
- mPriority(0)
+ mPriority(0),
+ mDrawWidth(0),
+ mDrawHeight(0)
{
if (mImagep.notNull())
{
@@ -100,6 +102,8 @@ void LLIconCtrl::setValue(const LLSD& value )
{
mImagep = LLUI::getUIImage(tvalue.asString(), mPriority);
}
+
+ setIconImageDrawSize();
}
std::string LLIconCtrl::getImageName() const
@@ -109,3 +113,16 @@ std::string LLIconCtrl::getImageName() const
else
return std::string();
}
+
+void LLIconCtrl::setIconImageDrawSize()
+{
+ if(mImagep.notNull() && mDrawWidth && mDrawHeight)
+ {
+ if(mImagep->getImage().notNull())
+ {
+ mImagep->getImage()->setKnownDrawSize(mDrawWidth, mDrawHeight) ;
+ }
+ }
+}
+
+
diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h
index 90f1693060..66368f979b 100644
--- a/indra/llui/lliconctrl.h
+++ b/indra/llui/lliconctrl.h
@@ -60,6 +60,7 @@ public:
protected:
LLIconCtrl(const Params&);
friend class LLUICtrlFactory;
+
public:
virtual ~LLIconCtrl();
@@ -73,9 +74,16 @@ public:
void setColor(const LLColor4& color) { mColor = color; }
+private:
+ void setIconImageDrawSize() ;
+
protected:
S32 mPriority;
+ //the output size of the icon image if set.
+ S32 mDrawWidth ;
+ S32 mDrawHeight ;
+
private:
LLUIColor mColor;
LLPointer<LLUIImage> mImagep;
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 6e058e4c62..91e7e46195 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -2894,8 +2894,8 @@ void hide_top_view( LLView* view )
}
-// x and y are the desired location for the popup, NOT necessarily the
-// mouse location
+// x and y are the desired location for the popup, in the spawning_view's
+// coordinate frame, NOT necessarily the mouse location
// static
void LLMenuGL::showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y)
{
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index 48887ec352..09d9e407c7 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -505,7 +505,7 @@ public:
void buildDrawLabels();
void createJumpKeys();
- // Show popup at a specific location.
+ // Show popup at a specific location, in the spawn_view's coordinate frame
static void showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y);
// Whether to drop shadow menu bar
diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp
index 7d21c7e0c1..78738c826d 100644
--- a/indra/llui/llmultifloater.cpp
+++ b/indra/llui/llmultifloater.cpp
@@ -434,6 +434,7 @@ void LLMultiFloater::onTabSelected()
void LLMultiFloater::setCanResize(BOOL can_resize)
{
LLFloater::setCanResize(can_resize);
+ if (!mTabContainer) return;
if (isResizable() && mTabContainer->getTabPosition() == LLTabContainer::BOTTOM)
{
mTabContainer->setRightTabBtnOffset(RESIZE_HANDLE_WIDTH);
@@ -457,6 +458,8 @@ BOOL LLMultiFloater::postBuild()
}
mTabContainer = getChild<LLTabContainer>("Preview Tabs");
+
+ setCanResize(mResizable);
return TRUE;
}
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 0d340699c5..07c0f3ce84 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -110,8 +110,6 @@ LLPanel::LLPanel(const LLPanel::Params& p)
// *NOTE: Be sure to also change LLPanel::initFromParams(). We have too
// many classes derived from LLPanel to retrofit them all to pass in params.
{
- setIsChrome(FALSE);
-
if (p.has_border)
{
addBorder(p.border);
diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp
index f9f0307d17..86bd2f05ce 100644
--- a/indra/llui/llradiogroup.cpp
+++ b/indra/llui/llradiogroup.cpp
@@ -106,7 +106,7 @@ void LLRadioGroup::setIndexEnabled(S32 index, BOOL enabled)
child->setEnabled(enabled);
if (index == mSelectedIndex && enabled == FALSE)
{
- mSelectedIndex = -1;
+ setSelectedIndex(-1);
}
break;
}
diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp
index 073e14386f..ba53f84877 100644
--- a/indra/llui/llscrolllistcolumn.cpp
+++ b/indra/llui/llscrolllistcolumn.cpp
@@ -47,6 +47,21 @@ const S32 MIN_COLUMN_WIDTH = 20;
//---------------------------------------------------------------------------
// LLScrollColumnHeader
//---------------------------------------------------------------------------
+LLScrollColumnHeader::Params::Params()
+: column("column")
+{
+ name = "column_header";
+ image_unselected.name("square_btn_32x128.tga");
+ image_selected.name("square_btn_selected_32x128.tga");
+ image_disabled.name("square_btn_32x128.tga");
+ image_disabled_selected.name("square_btn_selected_32x128.tga");
+ image_overlay.name("combobox_arrow.tga");
+ image_overlay_alignment("right");
+ font_halign = LLFontGL::LEFT;
+ tab_stop(false);
+ scale_image(true);
+}
+
LLScrollColumnHeader::LLScrollColumnHeader(const LLScrollColumnHeader::Params& p)
: LLButton(p), // use combobox params to steal images
diff --git a/indra/llui/llscrolllistcolumn.h b/indra/llui/llscrolllistcolumn.h
index 23318fd7c4..5aef6e8e94 100644
--- a/indra/llui/llscrolllistcolumn.h
+++ b/indra/llui/llscrolllistcolumn.h
@@ -50,20 +50,7 @@ public:
{
Mandatory<LLScrollListColumn*> column;
- Params()
- : column("column")
- {
- name = "column_header";
- image_unselected.name("square_btn_32x128.tga");
- image_selected.name("square_btn_selected_32x128.tga");
- image_disabled.name("square_btn_32x128.tga");
- image_disabled_selected.name("square_btn_selected_32x128.tga");
- image_overlay.name("combobox_arrow.tga");
- image_overlay_alignment("right");
- font_halign = LLFontGL::LEFT;
- tab_stop(false);
- scale_image(true);
- }
+ Params();
};
LLScrollColumnHeader(const Params&);
~LLScrollColumnHeader();
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 2b1d677ffb..9a26f0b472 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -933,13 +933,16 @@ BOOL LLTextBase::handleToolTip(S32 x, S32 y, MASK mask)
void LLTextBase::reshape(S32 width, S32 height, BOOL called_from_parent)
{
- LLUICtrl::reshape( width, height, called_from_parent );
+ if (width != getRect().getWidth() || height != getRect().getHeight())
+ {
+ LLUICtrl::reshape( width, height, called_from_parent );
- // do this first after reshape, because other things depend on
- // up-to-date mTextRect
- updateRects();
-
- needsReflow();
+ // do this first after reshape, because other things depend on
+ // up-to-date mTextRect
+ updateRects();
+
+ needsReflow();
+ }
}
void LLTextBase::draw()
@@ -1193,11 +1196,10 @@ void LLTextBase::reflow(S32 start_index)
//llassert_always(getLocalRectFromDocIndex(mScrollIndex).mBottom == first_char_rect.mBottom);
}
}
- }
-
- // reset desired x cursor position
- updateCursorXPos();
+ // reset desired x cursor position
+ updateCursorXPos();
+ }
}
LLRect LLTextBase::getContentsRect()
@@ -2108,9 +2110,12 @@ LLRect LLTextBase::getVisibleDocumentRect() const
}
else
{
- // entire document rect when not scrolling
+ // entire document rect is visible when not scrolling
+ // but offset according to height of widget
LLRect doc_rect = mDocumentView->getLocalRect();
- doc_rect.translate(-mDocumentView->getRect().mLeft, -mDocumentView->getRect().mBottom);
+ doc_rect.mLeft -= mDocumentView->getRect().mLeft;
+ // adjust for height of text above widget baseline
+ doc_rect.mBottom = llmin(0, doc_rect.getHeight() - mTextRect.getHeight());
return doc_rect;
}
}
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 14fd786127..4cca522a23 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -154,6 +154,9 @@ public:
LLRect getContentsRect();
LLRect getVisibleDocumentRect() const;
+ S32 getVPad() { return mVPad; }
+ S32 getHPad() { return mHPad; }
+
S32 getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round ) const;
LLRect getLocalRectFromDocIndex(S32 pos) const;
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index f0238dba49..3ce5a0320b 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -652,6 +652,13 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
{
BOOL handled = FALSE;
+ // set focus first, in case click callbacks want to change it
+ // RN: do we really need to have a tab stop?
+ if (hasTabStop())
+ {
+ setFocus( TRUE );
+ }
+
// Let scrollbar have first dibs
handled = LLTextBase::handleMouseDown(x, y, mask);
@@ -694,12 +701,6 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
handled = TRUE;
}
- if (hasTabStop())
- {
- setFocus( TRUE );
- handled = TRUE;
- }
-
// Delay cursor flashing
resetCursorBlink();
@@ -708,29 +709,32 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
- BOOL handled = LLTextBase::handleRightMouseDown(x, y, mask);
- if (!handled && hasTabStop())
+ if (hasTabStop())
+ {
+ setFocus(TRUE);
+ }
+ if (!LLTextBase::handleRightMouseDown(x, y, mask))
{
- setFocus( TRUE );
showContextMenu(x, y);
- handled = TRUE;
}
- return handled;
+ return TRUE;
}
BOOL LLTextEditor::handleMiddleMouseDown(S32 x, S32 y, MASK mask)
{
- BOOL handled = FALSE;
- handled = LLTextBase::handleMouseDown(x, y, mask);
+ if (hasTabStop())
+ {
+ setFocus(TRUE);
+ }
- if (!handled)
+ if (!LLTextBase::handleMouseDown(x, y, mask))
{
- setFocus( TRUE );
if( canPastePrimary() )
{
setCursorAtLocalPos( x, y, true );
+ // does not rely on focus being set
pastePrimary();
}
}
diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index 34501ae080..23c87c7522 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -161,10 +161,7 @@ LLToolTip::Params::Params()
web_based_media("web_based_media", false),
media_playing("media_playing", false)
{
- name = "tooltip";
- font = LLFontGL::getFontSansSerif();
- bg_opaque_color = LLUIColorTable::instance().getColor( "ToolTipBgColor" );
- background_visible = true;
+ chrome = true;
}
LLToolTip::LLToolTip(const LLToolTip::Params& p)
@@ -208,6 +205,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
icon_params.rect = icon_rect;
//icon_params.follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM;
icon_params.image_unselected(imagep);
+ icon_params.image_selected(imagep);
icon_params.scale_image(true);
icon_params.flash_color(icon_params.highlight_color());
mInfoButton = LLUICtrlFactory::create<LLButton>(icon_params);
@@ -221,7 +219,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
mTextBox->translate(TOOLTIP_ICON_SIZE + mPadding, 0);
}
- if (p.time_based_media.isProvided() && p.time_based_media == true)
+ if (p.time_based_media)
{
LLButton::Params p_button;
p_button.name(std::string("play_media"));
@@ -238,17 +236,14 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
{
mPlayMediaButton->setCommitCallback(boost::bind(p.click_playmedia_callback()));
}
- if(p.media_playing.isProvided())
- {
- mPlayMediaButton->setToggleState(p.media_playing);
- }
+ mPlayMediaButton->setToggleState(p.media_playing);
addChild(mPlayMediaButton);
// move text over to fit image in
mTextBox->translate(TOOLTIP_PLAYBUTTON_SIZE + mPadding, 0);
}
- if (p.web_based_media.isProvided() && p.web_based_media == true)
+ if (p.web_based_media)
{
LLButton::Params p_w_button;
p_w_button.name(std::string("home_page"));
@@ -455,7 +450,10 @@ void LLToolTipMgr::show(const std::string& msg)
void LLToolTipMgr::show(const LLToolTip::Params& params)
{
- if (!params.validateBlock())
+ // fill in default tooltip params from tool_tip.xml
+ LLToolTip::Params params_with_defaults(params);
+ params_with_defaults.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLToolTip>());
+ if (!params_with_defaults.validateBlock())
{
llwarns << "Could not display tooltip!" << llendl;
return;
@@ -467,12 +465,12 @@ void LLToolTipMgr::show(const LLToolTip::Params& params)
// are we ready to show the tooltip?
if (!mToolTipsBlocked // we haven't hit a key, moved the mouse, etc.
- && LLUI::getMouseIdleTime() > params.delay_time) // the mouse has been still long enough
+ && LLUI::getMouseIdleTime() > params_with_defaults.delay_time) // the mouse has been still long enough
{
- bool tooltip_changed = mLastToolTipParams.message() != params.message()
- || mLastToolTipParams.pos() != params.pos()
- || mLastToolTipParams.time_based_media() != params.time_based_media()
- || mLastToolTipParams.web_based_media() != params.web_based_media();
+ bool tooltip_changed = mLastToolTipParams.message() != params_with_defaults.message()
+ || mLastToolTipParams.pos() != params_with_defaults.pos()
+ || mLastToolTipParams.time_based_media() != params_with_defaults.time_based_media()
+ || mLastToolTipParams.web_based_media() != params_with_defaults.web_based_media();
bool tooltip_shown = mToolTip
&& mToolTip->getVisible()
@@ -480,7 +478,7 @@ void LLToolTipMgr::show(const LLToolTip::Params& params)
mNeedsToolTip = tooltip_changed || !tooltip_shown;
// store description of tooltip for later creation
- mNextToolTipParams = params;
+ mNextToolTipParams = params_with_defaults;
}
}
diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h
index 4a5f60f93d..30d251266c 100644
--- a/indra/llui/lltooltip.h
+++ b/indra/llui/lltooltip.h
@@ -78,16 +78,13 @@ public:
visible_time_far; // time for which tooltip is visible while mouse moved away
Optional<LLRect> sticky_rect;
Optional<const LLFontGL*> font;
-
- Optional<click_callback_t> click_callback;
Optional<LLUIImage*> image;
-
-
- Optional<bool> time_based_media;
- Optional<bool> web_based_media;
- Optional<bool> media_playing;
- Optional<click_callback_t> click_playmedia_callback;
- Optional<click_callback_t> click_homepage_callback;
+ Optional<bool> time_based_media,
+ web_based_media,
+ media_playing;
+ Optional<click_callback_t> click_callback,
+ click_playmedia_callback,
+ click_homepage_callback;
Optional<S32> max_width;
Optional<S32> padding;
Optional<bool> wrap;
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 48504a1e54..a82e6eb372 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -1953,11 +1953,6 @@ namespace LLInitParam
}
}
- if (mData.mValue == NULL)
- {
- mData.mValue = LLFontGL::getFontDefault();
- }
-
// default to current value
return mData.mValue;
}
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index efb1b0a36f..5ec07f1941 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -404,6 +404,20 @@ namespace LLInitParam
LLUIColor getValueFromBlock() const;
};
+ // provide a better default for Optional<const LLFontGL*> than NULL
+ template <>
+ struct DefaultInitializer<const LLFontGL*>
+ {
+ // return reference to a single default instance of T
+ // built-in types will be initialized to zero, default constructor otherwise
+ static const LLFontGL* get()
+ {
+ static const LLFontGL* sDefaultFont = LLFontGL::getFontDefault();
+ return sDefaultFont;
+ }
+ };
+
+
template<>
class TypedParam<const LLFontGL*>
: public BlockValue<const LLFontGL*>
diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp
index 0faff5eff6..08fc8fb784 100644
--- a/indra/llui/lluictrl.cpp
+++ b/indra/llui/lluictrl.cpp
@@ -42,6 +42,7 @@ static LLDefaultChildRegistry::Register<LLUICtrl> r("ui_ctrl");
LLUICtrl::Params::Params()
: tab_stop("tab_stop", true),
+ chrome("chrome", false),
label("label"),
initial_value("value"),
init_callback("init_callback"),
@@ -86,6 +87,7 @@ void LLUICtrl::initFromParams(const Params& p)
{
LLView::initFromParams(p);
+ setIsChrome(p.chrome);
setControlName(p.control_name);
if(p.enabled_controls.isProvided())
{
@@ -582,7 +584,6 @@ void LLUICtrl::setIsChrome(BOOL is_chrome)
// virtual
BOOL LLUICtrl::getIsChrome() const
{
-
LLView* parent_ctrl = getParent();
while(parent_ctrl)
{
diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h
index 45fe47772b..dd22851100 100644
--- a/indra/llui/lluictrl.h
+++ b/indra/llui/lluictrl.h
@@ -126,7 +126,8 @@ public:
struct Params : public LLInitParam::Block<Params, LLView::Params>
{
Optional<std::string> label;
- Optional<bool> tab_stop;
+ Optional<bool> tab_stop,
+ chrome;
Optional<LLSD> initial_value;
Optional<CommitCallbackParam> init_callback,
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index a7681e4a1d..0133d2222d 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -185,6 +185,7 @@ set(viewer_SOURCE_FILES
llfloatermediasettings.cpp
llfloatermemleak.cpp
llfloaternamedesc.cpp
+ llfloaternearbymedia.cpp
llfloaternotificationsconsole.cpp
llfloateropenobject.cpp
llfloaterparcel.cpp
@@ -665,6 +666,7 @@ set(viewer_HEADER_FILES
llfloatermediasettings.h
llfloatermemleak.h
llfloaternamedesc.h
+ llfloaternearbymedia.h
llfloaternotificationsconsole.h
llfloateropenobject.h
llfloaterparcel.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c0eefaa642..c4722b772e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -9030,17 +9030,6 @@
<key>Value</key>
<string>5748decc-f629-461c-9a36-a35a221fe21f</string>
</map>
- <key>UIImgDefaultTattooUUID</key>
- <map>
- <key>Comment</key>
- <string />
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
- </map>
<key>UIImgDefaultUnderwearUUID</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index ebcda13dd4..b56e8d1ec2 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -155,6 +155,8 @@ LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p)
mPriority = LLViewerFetchedTexture::BOOST_ICON;
LLRect rect = p.rect;
+ mDrawWidth = llmax(32, rect.getWidth()) ;
+ mDrawHeight = llmax(32, rect.getHeight()) ;
static LLUICachedControl<S32> llavatariconctrl_symbol_hpad("UIAvatariconctrlSymbolHPad", 2);
static LLUICachedControl<S32> llavatariconctrl_symbol_vpad("UIAvatariconctrlSymbolVPad", 2);
@@ -193,7 +195,6 @@ LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p)
LLIconCtrl::setValue("default_profile_picture.j2c");
}
-
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
registrar.add("AvatarIcon.Action", boost::bind(&LLAvatarIconCtrl::onAvatarIconContextMenuItemClicked, this, _2));
diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 7a81d0c4a1..e8812d87ee 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -62,7 +62,6 @@
#include "llviewerwindow.h"
#include "llvoavatar.h"
#include "llimview.h"
-#include "llimpanel.h"
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
@@ -719,18 +718,8 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
// If there's an open IM session with this agent, send a notification there too.
LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, agent_id);
- LLFloaterIMPanel *floater = gIMMgr->findFloaterBySession(session_id);
- if (floater)
- {
- std::string notifyMsg = notification->getMessage();
- if (!notifyMsg.empty())
- {
- floater->addHistoryLine(notifyMsg,LLUIColorTable::instance().getColor("SystemChatColor"));
- }
- }
-
- //*TODO instead of adding IM message about online/offline status
- //do something like graying avatar icon on messages from a user that went offline, and make it colored when online.
+ std::string notify_msg = notification->getMessage();
+ LLIMModel::instance().proccessOnlineOfflineNotification(session_id, notify_msg);
}
mModifyMask |= LLFriendObserver::ONLINE;
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 48b5fc11b7..7bc48185e6 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -51,7 +51,7 @@ public:
/*virtual*/ void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
{
// more label always spans width of text box
- width = mEditor.getTextRect().getWidth();
+ width = mEditor.getTextRect().getWidth() - mEditor.getHPad();
height = llceil(mStyle->getFont()->getLineHeight());
}
/*virtual*/ S32 getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const
@@ -153,6 +153,11 @@ void LLExpandableTextBox::LLTextBoxEx::showExpandText()
{
if (!mExpanderVisible)
{
+ // make sure we're scrolled to top when collapsing
+ if (mScroller)
+ {
+ mScroller->goToTop();
+ }
// get fully visible lines
std::pair<S32, S32> visible_lines = getVisibleLines(true);
S32 last_line = visible_lines.second - 1;
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index d45527aabb..3fe646c29c 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -69,16 +69,6 @@ protected:
virtual S32 getVerticalTextDelta();
/**
- * Returns text vertical padding
- */
- virtual S32 getVPad() { return mVPad; }
-
- /**
- * Returns text horizontal padding
- */
- virtual S32 getHPad() { return mHPad; }
-
- /**
* Shows "More" link
*/
void showExpandText();
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index d734b327d9..2b134c8c31 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -246,7 +246,7 @@ protected:
//atlas
LLPointer<LLTextureAtlasSlot> mAtlasInfop ;
- BOOL mUsingAtlas ;
+ BOOL mUsingAtlas ;
protected:
static BOOL sSafeRenderSelect;
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
index 216bca8262..fc8790c172 100644
--- a/indra/newview/llflexibleobject.cpp
+++ b/indra/newview/llflexibleobject.cpp
@@ -704,7 +704,7 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)
}
if (volume->mLODChanged || volume->mFaceMappingChanged ||
- volume->mVolumeChanged)
+ volume->mVolumeChanged || drawable->isState(LLDrawable::REBUILD_MATERIAL))
{
volume->regenFaces();
volume->mDrawable->setState(LLDrawable::REBUILD_VOLUME);
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 4c83530f43..bd9798c18e 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -34,6 +34,7 @@
#include "llviewerprecompiledheaders.h"
#include "llfloatersearch.h"
#include "llmediactrl.h"
+#include "llagent.h"
LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
@@ -117,6 +118,14 @@ void LLFloaterSearch::search(const LLSD &key)
std::string search_text = key.has("id") ? key["id"].asString() : "";
url += std::string("?q=") + search_text;
+ // append the maturity and teen capabilities for this agent
+ BOOL godlike = gAgent.isGodlike();
+ bool mature_enabled = gAgent.canAccessMature() || godlike;
+ bool adult_enabled = gAgent.canAccessAdult() || godlike;
+ std::string mature = (mature_enabled) ? "True" : "False";
+ std::string teen = (!adult_enabled) ? "True" : "False";
+ url += "&t=" + teen + "&m=" + mature;
+
// and load the URL in the web view
mBrowser->navigateTo(url);
}
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index f61a928813..dee86f4a22 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -51,6 +51,7 @@
#include "llviewerwindow.h"
#include "llvoicechannel.h"
#include "lltransientfloatermgr.h"
+#include "llinventorymodel.h"
@@ -602,6 +603,162 @@ void LLIMFloater::processSessionUpdate(const LLSD& session_update)
}
}
+BOOL LLIMFloater::handleDragAndDrop(S32 x, S32 y, MASK mask,
+ BOOL drop, EDragAndDropType cargo_type,
+ void *cargo_data, EAcceptance *accept,
+ std::string& tooltip_msg)
+{
+
+ if (mDialog == IM_NOTHING_SPECIAL)
+ {
+ LLToolDragAndDrop::handleGiveDragAndDrop(mOtherParticipantUUID, mSessionID, drop,
+ cargo_type, cargo_data, accept);
+ }
+
+ // handle case for dropping calling cards (and folders of calling cards) onto invitation panel for invites
+ else if (isInviteAllowed())
+ {
+ *accept = ACCEPT_NO;
+
+ if (cargo_type == DAD_CALLINGCARD)
+ {
+ if (dropCallingCard((LLInventoryItem*)cargo_data, drop))
+ {
+ *accept = ACCEPT_YES_MULTI;
+ }
+ }
+ else if (cargo_type == DAD_CATEGORY)
+ {
+ if (dropCategory((LLInventoryCategory*)cargo_data, drop))
+ {
+ *accept = ACCEPT_YES_MULTI;
+ }
+ }
+ }
+ return TRUE;
+}
+
+BOOL LLIMFloater::dropCallingCard(LLInventoryItem* item, BOOL drop)
+{
+ BOOL rv = isInviteAllowed();
+ if(rv && item && item->getCreatorUUID().notNull())
+ {
+ if(drop)
+ {
+ std::vector<LLUUID> ids;
+ ids.push_back(item->getCreatorUUID());
+ inviteToSession(ids);
+ }
+ }
+ else
+ {
+ // set to false if creator uuid is null.
+ rv = FALSE;
+ }
+ return rv;
+}
+
+BOOL LLIMFloater::dropCategory(LLInventoryCategory* category, BOOL drop)
+{
+ BOOL rv = isInviteAllowed();
+ if(rv && category)
+ {
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ LLUniqueBuddyCollector buddies;
+ gInventory.collectDescendentsIf(category->getUUID(),
+ cats,
+ items,
+ LLInventoryModel::EXCLUDE_TRASH,
+ buddies);
+ S32 count = items.count();
+ if(count == 0)
+ {
+ rv = FALSE;
+ }
+ else if(drop)
+ {
+ std::vector<LLUUID> ids;
+ ids.reserve(count);
+ for(S32 i = 0; i < count; ++i)
+ {
+ ids.push_back(items.get(i)->getCreatorUUID());
+ }
+ inviteToSession(ids);
+ }
+ }
+ return rv;
+}
+
+BOOL LLIMFloater::isInviteAllowed() const
+{
+
+ return ( (IM_SESSION_CONFERENCE_START == mDialog)
+ || (IM_SESSION_INVITE == mDialog) );
+}
+
+class LLSessionInviteResponder : public LLHTTPClient::Responder
+{
+public:
+ LLSessionInviteResponder(const LLUUID& session_id)
+ {
+ mSessionID = session_id;
+ }
+
+ void error(U32 statusNum, const std::string& reason)
+ {
+ llinfos << "Error inviting all agents to session" << llendl;
+ //throw something back to the viewer here?
+ }
+
+private:
+ LLUUID mSessionID;
+};
+
+BOOL LLIMFloater::inviteToSession(const std::vector<LLUUID>& ids)
+{
+ LLViewerRegion* region = gAgent.getRegion();
+ if (!region)
+ {
+ return FALSE;
+ }
+
+ S32 count = ids.size();
+
+ if( isInviteAllowed() && (count > 0) )
+ {
+ llinfos << "LLIMFloater::inviteToSession() - inviting participants" << llendl;
+
+ std::string url = region->getCapability("ChatSessionRequest");
+
+ LLSD data;
+
+ data["params"] = LLSD::emptyArray();
+ for (int i = 0; i < count; i++)
+ {
+ data["params"].append(ids[i]);
+ }
+
+ data["method"] = "invite";
+ data["session-id"] = mSessionID;
+ LLHTTPClient::post(
+ url,
+ data,
+ new LLSessionInviteResponder(
+ mSessionID));
+ }
+ else
+ {
+ llinfos << "LLIMFloater::inviteToSession -"
+ << " no need to invite agents for "
+ << mDialog << llendl;
+ // successful add, because everyone that needed to get added
+ // was added.
+ }
+
+ return TRUE;
+}
+
void LLIMFloater::addTypingIndicator(const LLIMInfo* im_info)
{
// We may have lost a "stop-typing" packet, don't add it twice
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index d2aac57ee2..f5edb3188a 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -35,11 +35,13 @@
#include "lltransientdockablefloater.h"
#include "lllogchat.h"
+#include "lltooldraganddrop.h"
class LLLineEditor;
class LLPanelChatControlPanel;
class LLChatHistory;
-
+class LLInventoryItem;
+class LLInventoryCategory;
/**
* Individual IM window that appears at the bottom of the screen,
@@ -90,10 +92,21 @@ public:
void processIMTyping(const LLIMInfo* im_info, BOOL typing);
void processSessionUpdate(const LLSD& session_update);
+ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
+ BOOL drop, EDragAndDropType cargo_type,
+ void *cargo_data, EAcceptance *accept,
+ std::string& tooltip_msg);
+
private:
// process focus events to set a currently active session
/* virtual */ void onFocusLost();
/* virtual */ void onFocusReceived();
+
+ BOOL dropCallingCard(LLInventoryItem* item, BOOL drop);
+ BOOL dropCategory(LLInventoryCategory* category, BOOL drop);
+
+ BOOL isInviteAllowed() const;
+ BOOL inviteToSession(const std::vector<LLUUID>& agent_ids);
static void onInputEditorFocusReceived( LLFocusableElement* caller, void* userdata );
static void onInputEditorFocusLost(LLFocusableElement* caller, void* userdata);
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 49fc9d8055..66a3e3e85c 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -89,9 +89,6 @@ LLIMMgr* gIMMgr = NULL;
const static std::string IM_SEPARATOR(": ");
-std::map<LLUUID, LLIMModel::LLIMSession*> LLIMModel::sSessionsMap;
-
-
void toast_callback(const LLSD& msg){
// do not show toast in busy mode or it goes from agent
@@ -105,7 +102,13 @@ void toast_callback(const LLSD& msg){
{
return;
}
-
+
+ // Skip toasting for system messages
+ if (msg["from_id"].asUUID() == LLUUID::null)
+ {
+ return;
+ }
+
LLSD args;
args["MESSAGE"] = msg["message"];
args["TIME"] = msg["time"];
@@ -232,6 +235,12 @@ void LLIMModel::LLIMSession::addMessage(const std::string& from, const LLUUID& f
message["index"] = (LLSD::Integer)mMsgs.size();
mMsgs.push_front(message);
+
+ if (mSpeakers && from_id.notNull())
+ {
+ mSpeakers->speakerChatted(from_id);
+ mSpeakers->setSpeakerTyping(from_id, FALSE);
+ }
}
void LLIMModel::LLIMSession::chatFromLogFile(LLLogChat::ELogLineType type, const LLSD& msg, void* userdata)
@@ -252,12 +261,11 @@ void LLIMModel::LLIMSession::chatFromLogFile(LLLogChat::ELogLineType type, const
LLIMModel::LLIMSession* LLIMModel::findIMSession(const LLUUID& session_id) const
{
- return get_if_there(LLIMModel::instance().sSessionsMap, session_id,
+ return get_if_there(mId2SessionMap, session_id,
(LLIMModel::LLIMSession*) NULL);
}
-//*TODO change name to represent session initialization aspect (IB)
-void LLIMModel::updateSessionID(const LLUUID& old_session_id, const LLUUID& new_session_id)
+void LLIMModel::processSessionInitializedReply(const LLUUID& old_session_id, const LLUUID& new_session_id)
{
LLIMSession* session = findIMSession(old_session_id);
if (session)
@@ -266,8 +274,8 @@ void LLIMModel::updateSessionID(const LLUUID& old_session_id, const LLUUID& new_
if (old_session_id != new_session_id)
{
- sSessionsMap.erase(old_session_id);
- sSessionsMap[new_session_id] = session;
+ mId2SessionMap.erase(old_session_id);
+ mId2SessionMap[new_session_id] = session;
gIMMgr->notifyObserverSessionIDUpdated(old_session_id, new_session_id);
}
@@ -316,14 +324,14 @@ void LLIMModel::testMessages()
bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type,
const LLUUID& other_participant_id, const std::vector<LLUUID>& ids)
{
- if (is_in_map(sSessionsMap, session_id))
+ if (findIMSession(session_id))
{
llwarns << "IM Session " << session_id << " already exists" << llendl;
return false;
}
LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids);
- sSessionsMap[session_id] = session;
+ mId2SessionMap[session_id] = session;
LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id);
@@ -333,9 +341,9 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co
bool LLIMModel::clearSession(const LLUUID& session_id)
{
- if (sSessionsMap.find(session_id) == sSessionsMap.end()) return false;
- delete (sSessionsMap[session_id]);
- sSessionsMap.erase(session_id);
+ if (mId2SessionMap.find(session_id) == mId2SessionMap.end()) return false;
+ delete (mId2SessionMap[session_id]);
+ mId2SessionMap.erase(session_id);
return true;
}
@@ -383,7 +391,6 @@ bool LLIMModel::addToHistory(const LLUUID& session_id, const std::string& from,
return true;
}
-//*TODO rewrite chat history persistence using LLSD serialization (IB)
bool LLIMModel::logToFile(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text)
{
S32 im_log_option = gSavedPerAccountSettings.getS32("IMLogOptions");
@@ -403,6 +410,23 @@ bool LLIMModel::logToFile(const LLUUID& session_id, const std::string& from, con
return false;
}
+bool LLIMModel::proccessOnlineOfflineNotification(
+ const LLUUID& session_id,
+ const std::string& utf8_text)
+{
+ // Add message to old one floater
+ LLFloaterIMPanel *floater = gIMMgr->findFloaterBySession(session_id);
+ if ( floater )
+ {
+ if ( !utf8_text.empty() )
+ {
+ floater->addHistoryLine(utf8_text, LLUIColorTable::instance().getColor("SystemChatColor"));
+ }
+ }
+ // Add system message to history
+ return addMessage(session_id, SYSTEM_FROM, LLUUID::null, utf8_text);
+}
+
bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& from_id,
const std::string& utf8_text, bool log2file /* = true */) {
LLIMSession* session = findIMSession(session_id);
@@ -547,8 +571,7 @@ void LLIMModel::sendLeaveSession(const LLUUID& session_id, const LLUUID& other_p
}
}
-
-//*TODO update list of messages in a LLIMSession (IB)
+//*TODO this method is better be moved to the LLIMMgr
void LLIMModel::sendMessage(const std::string& utf8_text,
const LLUUID& im_session_id,
const LLUUID& other_participant_id,
@@ -1443,14 +1466,6 @@ void LLIMMgr::addMessage(
else
{
floater->addHistoryLine(msg, color, true, other_participant_id, from); // Insert linked name to front of message
-
- //*TODO consider moving that speaker management stuff into model (IB)
- LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(new_session_id);
- if (speaker_mgr)
- {
- speaker_mgr->speakerChatted(gAgentID);
- speaker_mgr->setSpeakerTyping(gAgentID, FALSE);
- }
}
LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);
@@ -1516,7 +1531,7 @@ S32 LLIMMgr::getNumberOfUnreadIM()
std::map<LLUUID, LLIMModel::LLIMSession*>::iterator it;
S32 num = 0;
- for(it = LLIMModel::sSessionsMap.begin(); it != LLIMModel::sSessionsMap.end(); ++it)
+ for(it = LLIMModel::getInstance()->mId2SessionMap.begin(); it != LLIMModel::getInstance()->mId2SessionMap.end(); ++it)
{
num += (*it).second->mNumUnread;
}
@@ -1582,7 +1597,9 @@ LLUUID LLIMMgr::addSession(
LLUUID session_id = computeSessionID(dialog,other_participant_id);
- if (!LLIMModel::getInstance()->findIMSession(session_id))
+ bool new_session = !LLIMModel::getInstance()->findIMSession(session_id);
+
+ if (new_session)
{
LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids);
}
@@ -1604,6 +1621,9 @@ LLUUID LLIMMgr::addSession(
ids);
}
+ //we don't need to show notes about online/offline, mute/unmute users' statuses for existing sessions
+ if (!new_session) return session_id;
+
noteOfflineUsers(session_id, floater, ids);
// Only warn for regular IMs - not group IMs
@@ -1612,8 +1632,6 @@ LLUUID LLIMMgr::addSession(
noteMutedUsers(session_id, floater, ids);
}
-
-
return session_id;
}
@@ -2013,7 +2031,7 @@ void LLIMMgr::noteOfflineUsers(
{
const LLRelationship* info = NULL;
LLAvatarTracker& at = LLAvatarTracker::instance();
- LLIMModel* im_model = LLIMModel::getInstance();
+ LLIMModel& im_model = LLIMModel::instance();
for(S32 i = 0; i < count; ++i)
{
info = at.getBuddyInfo(ids.get(i));
@@ -2024,13 +2042,7 @@ void LLIMMgr::noteOfflineUsers(
LLUIString offline = LLTrans::getString("offline_message");
offline.setArg("[FIRST]", first);
offline.setArg("[LAST]", last);
-
- if (floater)
- {
- floater->addHistoryLine(offline, LLUIColorTable::instance().getColor("SystemChatColor"));
- }
-
- im_model->addMessage(session_id, SYSTEM_FROM, LLUUID::null, offline);
+ im_model.proccessOnlineOfflineNotification(session_id, offline);
}
}
}
@@ -2122,7 +2134,7 @@ public:
{
session_id = body["session_id"].asUUID();
- LLIMModel::getInstance()->updateSessionID(temp_session_id, session_id);
+ LLIMModel::getInstance()->processSessionInitializedReply(temp_session_id, session_id);
LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);
if (speaker_mgr)
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index d0bd594df1..f986d9dcdb 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -92,8 +92,8 @@ public:
void resetActiveSessionID() { mActiveSessionID.setNull(); }
LLUUID getActiveSessionID() { return mActiveSessionID; }
- //*TODO make it non-static as LLIMMOdel is a singleton (IB)
- static std::map<LLUUID, LLIMSession*> sSessionsMap; //mapping session_id to session
+ /** Session id to session object */
+ std::map<LLUUID, LLIMSession*> mId2SessionMap;
typedef boost::signals2::signal<void(const LLSD&)> session_signal_t;
typedef boost::function<void(const LLSD&)> session_callback_t;
@@ -109,7 +109,7 @@ public:
/**
* Rebind session data to a new session id.
*/
- void updateSessionID(const LLUUID& old_session_id, const LLUUID& new_session_id);
+ void processSessionInitializedReply(const LLUUID& old_session_id, const LLUUID& new_session_id);
boost::signals2::connection addNewMsgCallback( session_callback_t cb ) { return mNewMsgSignal.connect(cb); }
boost::signals2::connection addNoUnreadMsgsCallback( session_callback_t cb ) { return mNoUnreadMsgsSignal.connect(cb); }
@@ -136,7 +136,12 @@ public:
* It sends new message signal for each added message.
*/
bool addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& other_participant_id, const std::string& utf8_text, bool log2file = true);
-
+
+ /**
+ * Add a system message to an IM Model
+ */
+ bool proccessOnlineOfflineNotification(const LLUUID& session_id, const std::string& utf8_text);
+
/**
* Get a session's name.
* For a P2P chat - it's an avatar's name,
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 9a05812847..e63daac4af 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -517,8 +517,8 @@ void LLNavigationBar::showTeleportHistoryMenu()
// *TODO: why to draw/update anything before showing the menu?
mTeleportHistoryMenu->buildDrawLabels();
mTeleportHistoryMenu->updateParent(LLMenuGL::sMenuContainer);
- LLRect btnBackRect = mBtnBack->getRect();
- LLMenuGL::showPopup(this, mTeleportHistoryMenu, btnBackRect.mLeft, btnBackRect.mBottom);
+ const S32 MENU_SPAWN_PAD = -1;
+ LLMenuGL::showPopup(mBtnBack, mTeleportHistoryMenu, 0, MENU_SPAWN_PAD);
// *HACK pass the mouse capturing to the drop-down menu
gFocusMgr.setMouseCapture( NULL );
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 6bff01ee5e..c9598a2576 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -184,8 +184,9 @@ void LLLandmarksPanel::updateVerbs()
if (!isTabVisible())
return;
- mTeleportBtn->setEnabled(isActionEnabled("teleport"));
- mShowOnMapBtn->setEnabled(isActionEnabled("show_on_map"));
+ bool landmark_selected = isLandmarkSelected();
+ mTeleportBtn->setEnabled(landmark_selected && isActionEnabled("teleport"));
+ mShowOnMapBtn->setEnabled(landmark_selected && isActionEnabled("show_on_map"));
// TODO: mantipov: Uncomment when mShareBtn is supported
// Share button should be enabled when neither a folder nor a landmark is selected
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 6a3617f008..a198499b47 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -134,6 +134,11 @@ void LLPanelMediaSettingsGeneral::draw()
LLPluginClassMedia* media_plugin = mPreviewMedia->getMediaPlugin();
if( media_plugin )
{
+ // turn off volume (if we can) for preview. Note: this really only
+ // works for QuickTime movies right now - no way to control the
+ // volume of a flash app embedded in a page for example
+ media_plugin->setVolume( 0 );
+
// some controls are only appropriate for time or browser type plugins
// so we selectively enable/disable them - need to do it in draw
// because the information from plugins arrives assynchronously
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index aa6909560d..6181531f82 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -73,10 +73,10 @@ LLPanelPicks::LLPanelPicks()
mPopupMenu(NULL),
mProfilePanel(NULL),
mPickPanel(NULL),
- mPicksList(NULL)
- , mPanelPickInfo(NULL)
- , mPanelPickEdit(NULL)
- , mOverflowMenu(NULL)
+ mPicksList(NULL),
+ mPanelPickInfo(NULL),
+ mPanelPickEdit(NULL),
+ mOverflowMenu(NULL)
{
}
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index 419603e14e..c255418429 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -409,7 +409,6 @@ bool LLSysWellWindow::isWindowEmpty()
void LLSysWellWindow::sessionAdded(const LLUUID& session_id,
const std::string& name, const LLUUID& other_participant_id)
{
- //*TODO get rid of get_session_value, session_id's are unique, cause performance degradation with lots chiclets (IB)
if (mMessageList->getItemByValue(session_id) == NULL)
{
S32 chicletCounter = LLIMModel::getInstance()->getNumUnread(session_id);
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index dace3f875f..9ca2d3f61d 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -80,6 +80,7 @@
#include "llfloatermap.h"
#include "llfloatermemleak.h"
#include "llfloaternamedesc.h"
+#include "llfloaternearbymedia.h"
#include "llfloaternotificationsconsole.h"
#include "llfloateropenobject.h"
#include "llfloaterpay.h"
@@ -187,6 +188,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("mute_object_by_name", "floater_mute_object.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGetBlockedObjectName>);
LLFloaterReg::add("mini_map", "floater_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMap>);
LLFloaterReg::add("syswell_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLSysWellWindow>);
+
+ LLFloaterReg::add("nearby_media", "floater_nearby_media.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNearbyMedia>);
LLFloaterReg::add("notifications_console", "floater_notifications_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotificationConsole>);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index e2d9f5a2c9..e89f17cf72 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -168,8 +168,7 @@ public:
viewer_media_t mMediaImpl;
bool mInitialized;
};
-typedef std::vector<LLViewerMediaImpl*> impl_list;
-static impl_list sViewerMediaImplList;
+static LLViewerMedia::impl_list sViewerMediaImplList;
static LLTimer sMediaCreateTimer;
static const F32 LLVIEWERMEDIA_CREATE_DELAY = 1.0f;
static F32 sGlobalVolume = 1.0f;
@@ -183,8 +182,8 @@ static void add_media_impl(LLViewerMediaImpl* media)
//////////////////////////////////////////////////////////////////////////////////////////
static void remove_media_impl(LLViewerMediaImpl* media)
{
- impl_list::iterator iter = sViewerMediaImplList.begin();
- impl_list::iterator end = sViewerMediaImplList.end();
+ LLViewerMedia::impl_list::iterator iter = sViewerMediaImplList.begin();
+ LLViewerMedia::impl_list::iterator end = sViewerMediaImplList.end();
for(; iter != end; iter++)
{
@@ -203,6 +202,7 @@ class LLViewerMediaMuteListObserver : public LLMuteListObserver
static LLViewerMediaMuteListObserver sViewerMediaMuteListObserver;
static bool sViewerMediaMuteListObserverInitialized = false;
+static bool sInWorldMediaDisabled = false;
//////////////////////////////////////////////////////////////////////////////////////////
@@ -428,15 +428,34 @@ void LLViewerMedia::muteListChanged()
}
}
+//////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::setInWorldMediaDisabled(bool disabled)
+{
+ sInWorldMediaDisabled = disabled;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// static
+bool LLViewerMedia::getInWorldMediaDisabled()
+{
+ return sInWorldMediaDisabled;
+}
+
+LLViewerMedia::impl_list &LLViewerMedia::getPriorityList()
+{
+ return sViewerMediaImplList;
+}
+
// This is the predicate function used to sort sViewerMediaImplList by priority.
-static inline bool compare_impl_interest(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)
+bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)
{
- if(i1->mIsMuted || i1->mMediaSourceFailed)
+ if(i1->isForcedUnloaded())
{
// Muted or failed items always go to the end of the list, period.
return false;
}
- else if(i2->mIsMuted || i2->mMediaSourceFailed)
+ else if(i2->isForcedUnloaded())
{
// Muted or failed items always go to the end of the list, period.
return true;
@@ -483,7 +502,7 @@ void LLViewerMedia::updateMedia()
}
// Sort the static instance list using our interest criteria
- std::stable_sort(sViewerMediaImplList.begin(), sViewerMediaImplList.end(), compare_impl_interest);
+ std::stable_sort(sViewerMediaImplList.begin(), sViewerMediaImplList.end(), priorityComparitor);
// Go through the list again and adjust according to priority.
iter = sViewerMediaImplList.begin();
@@ -493,6 +512,7 @@ void LLViewerMedia::updateMedia()
int impl_count_total = 0;
int impl_count_interest_low = 0;
int impl_count_interest_normal = 0;
+ int i = 0;
#if 0
LL_DEBUGS("PluginPriority") << "Sorted impls:" << llendl;
@@ -515,7 +535,7 @@ void LLViewerMedia::updateMedia()
LLPluginClassMedia::EPriority new_priority = LLPluginClassMedia::PRIORITY_NORMAL;
- if(pimpl->mIsMuted || pimpl->mMediaSourceFailed || (impl_count_total > (int)max_instances))
+ if(pimpl->isForcedUnloaded() || (impl_count_total > (int)max_instances))
{
// Never load muted or failed impls.
// Hard limit on the number of instances that will be loaded at one time
@@ -583,6 +603,17 @@ void LLViewerMedia::updateMedia()
}
pimpl->setPriority(new_priority);
+
+ if(pimpl->getUsedInUI())
+ {
+ // Any impls used in the UI should not be in the proximity list.
+ pimpl->mProximity = -1;
+ }
+ else
+ {
+ // Other impls just get the same ordering as the priority list (for now).
+ pimpl->mProximity = i;
+ }
#if 0
LL_DEBUGS("PluginPriority") << " " << pimpl
@@ -595,6 +626,8 @@ void LLViewerMedia::updateMedia()
#endif
total_cpu += pimpl->getCPUUsage();
+
+ i++;
}
LL_DEBUGS("PluginPriority") << "Total reported CPU usage is " << total_cpu << llendl;
@@ -641,6 +674,8 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id,
mNeedsMuteCheck(false),
mPreviousMediaState(MEDIA_NONE),
mPreviousMediaTime(0.0f),
+ mIsDisabled(false),
+ mProximity(-1),
mIsUpdated(false)
{
@@ -1562,7 +1597,7 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage()
//////////////////////////////////////////////////////////////////////////////////////////
-LLUUID LLViewerMediaImpl::getMediaTextureID()
+LLUUID LLViewerMediaImpl::getMediaTextureID() const
{
return mTextureId;
}
@@ -1650,6 +1685,27 @@ void LLViewerMediaImpl::resetPreviousMediaState()
}
//////////////////////////////////////////////////////////////////////////////////////////
+//
+bool LLViewerMediaImpl::isForcedUnloaded() const
+{
+ if(mIsMuted || mMediaSourceFailed || mIsDisabled)
+ {
+ return true;
+ }
+
+ if(sInWorldMediaDisabled)
+ {
+ // When inworld media is disabled, all instances that aren't marked as "used in UI" will not be loaded.
+ if(!mUsedInUI)
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event)
{
switch(event)
@@ -2017,6 +2073,19 @@ const std::list< LLVOVolume* >* LLViewerMediaImpl::getObjectList() const
return &mObjectList ;
}
+LLVOVolume *LLViewerMediaImpl::getSomeObject()
+{
+ LLVOVolume *result = NULL;
+
+ std::list< LLVOVolume* >::iterator iter = mObjectList.begin() ;
+ if(iter != mObjectList.end())
+ {
+ result = *iter;
+ }
+
+ return result;
+}
+
//////////////////////////////////////////////////////////////////////////////////////////
//static
void LLViewerMedia::toggleMusicPlay(void*)
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 5444abf854..dac0482078 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -66,10 +66,15 @@ private:
observerListType mObservers;
};
+class LLViewerMediaImpl;
+
class LLViewerMedia
{
LOG_CLASS(LLViewerMedia);
public:
+
+ typedef std::vector<LLViewerMediaImpl*> impl_list;
+
// Special case early init for just web browser component
// so we can show login screen. See .cpp file for details. JC
@@ -97,6 +102,14 @@ class LLViewerMedia
static void mediaStop(void*);
static F32 getVolume();
static void muteListChanged();
+ static void setInWorldMediaDisabled(bool disabled);
+ static bool getInWorldMediaDisabled();
+
+ // Returns the priority-sorted list of all media impls.
+ static impl_list &getPriorityList();
+
+ // This is the comparitor used to sort the list.
+ static bool priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2);
};
// Implementation functions not exported into header file
@@ -159,7 +172,7 @@ public:
bool handleUnicodeCharHere(llwchar uni_char);
bool canNavigateForward();
bool canNavigateBack();
- std::string getMediaURL() { return mMediaURL; }
+ std::string getMediaURL() const { return mMediaURL; }
std::string getCurrentMediaURL();
std::string getHomeURL() { return mHomeURL; }
void setHomeURL(const std::string& home_url) { mHomeURL = home_url; };
@@ -168,7 +181,7 @@ public:
void update();
void updateImagesMediaStreams();
- LLUUID getMediaTextureID();
+ LLUUID getMediaTextureID() const;
void suspendUpdates(bool suspend) { mSuspendUpdates = suspend; };
void setVisible(bool visible);
@@ -179,6 +192,12 @@ public:
bool hasMedia();
bool isMediaFailed() { return mMediaSourceFailed; };
void resetPreviousMediaState();
+
+ void setDisabled(bool disabled) { mIsDisabled = disabled; };
+ bool isMediaDisabled() { return mIsDisabled; };
+
+ // returns true if this instance should not be loaded (disabled, muted object, crashed, etc.)
+ bool isForcedUnloaded() const;
ECursorType getLastSetCursor() { return mLastSetCursor; };
@@ -231,6 +250,7 @@ public:
void addObject(LLVOVolume* obj) ;
void removeObject(LLVOVolume* obj) ;
const std::list< LLVOVolume* >* getObjectList() const ;
+ LLVOVolume *getSomeObject();
void setUpdated(BOOL updated) ;
BOOL isUpdated() ;
@@ -238,6 +258,7 @@ public:
void calculateInterest();
F64 getInterest() const { return mInterest; };
F64 getApproximateTextureInterest();
+ S32 getProximity() { return mProximity; };
// Mark this object as being used in a UI panel instead of on a prim
// This will be used as part of the interest sorting algorithm.
@@ -301,6 +322,8 @@ public:
bool mNeedsMuteCheck;
int mPreviousMediaState;
F64 mPreviousMediaTime;
+ bool mIsDisabled;
+ S32 mProximity;
private:
BOOL mIsUpdated ;
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index 0ef4679057..2f7040aaa3 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -50,6 +50,7 @@
#include "llmediaentry.h"
#include "llkeyboard.h"
#include "lltoolmgr.h"
+#include "llvovolume.h"
//
// LLViewerMediaFocus
@@ -473,3 +474,46 @@ LLViewerObject* LLViewerMediaFocus::getHoverObject()
{
return gObjectList.findObject(mHoverObjectID);
}
+
+void LLViewerMediaFocus::focusZoomOnMedia(LLUUID media_id)
+{
+ LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(media_id);
+
+ if(impl)
+ {
+ // Get the first object from the media impl's object list. This is completely arbitrary, but should suffice.
+ LLVOVolume *obj = impl->getSomeObject();
+ if(obj)
+ {
+ // This media is attached to at least one object. Figure out which face it's on.
+ S32 face = obj->getFaceIndexWithMediaImpl(impl, -1);
+
+ // We don't have a proper pick normal here, and finding a face's real normal is... complicated.
+ // For now, use +z to look at the top of the object.
+ LLVector3 normal(0.0f, 0.0f, 1.0f);
+
+ // Attempt to focus/zoom on that face.
+ setFocusFace(obj, face, impl, normal);
+
+ if(mMediaControls.get())
+ {
+ mMediaControls.get()->resetZoomLevel();
+ mMediaControls.get()->nextZoomLevel();
+ }
+ }
+ }
+}
+
+LLUUID LLViewerMediaFocus::getControlsMediaID()
+{
+ if(getFocusedMediaImpl())
+ {
+ return mFocusedImplID;
+ }
+ else if(getHoverMediaImpl())
+ {
+ return mHoverImplID;
+ }
+
+ return LLUUID::null;
+}
diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h
index c1179de39d..e5f36d341c 100644
--- a/indra/newview/llviewermediafocus.h
+++ b/indra/newview/llviewermediafocus.h
@@ -81,6 +81,12 @@ public:
LLViewerMediaImpl* getHoverMediaImpl();
LLViewerObject* getHoverObject();
S32 getHoverFace() { return mHoverObjectFace; }
+
+ // Try to focus/zoom on the specified media (if it's on an object in world).
+ void focusZoomOnMedia(LLUUID media_id);
+
+ // Return the ID of the media instance the controls are currently attached to (either focus or hover).
+ LLUUID getControlsMediaID();
protected:
/*virtual*/ void onFocusReceived();
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index e5c53c91c9..758bf8c1aa 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -93,6 +93,7 @@ BOOL LLViewerTexture::sUseTextureAtlas = FALSE ;
const F32 desired_discard_bias_min = -2.0f; // -max number of levels to improve image quality by
const F32 desired_discard_bias_max = 1.5f; // max number of levels to reduce image quality by
+const F64 log_2 = log(2.0);
//----------------------------------------------------------------------------------------------
//namespace: LLViewerTextureAccess
@@ -134,7 +135,7 @@ LLViewerMediaTexture* LLViewerTextureManager::getMediaTexture(const LLUUID& id,
return tex ;
}
-LLViewerFetchedTexture* LLViewerTextureManager::staticCastToFetchedTexture(LLViewerTexture* tex, BOOL report_error)
+LLViewerFetchedTexture* LLViewerTextureManager::staticCastToFetchedTexture(LLTexture* tex, BOOL report_error)
{
if(!tex)
{
@@ -415,6 +416,7 @@ void LLViewerTexture::init(bool firstinit)
mDontDiscard = FALSE;
mMaxVirtualSize = 0.f;
mNeedsResetMaxVirtualSize = FALSE ;
+ mParcelMedia = NULL ;
}
//virtual
@@ -522,6 +524,12 @@ F32 LLViewerTexture::getMaxVirtualSize()
return mMaxVirtualSize ;
}
+//virtual
+void LLViewerTexture::setKnownDrawSize(S32 width, S32 height)
+{
+ //nothing here.
+}
+
//virtual
void LLViewerTexture::addFace(LLFace* facep)
{
@@ -852,6 +860,7 @@ void LLViewerFetchedTexture::init(bool firstinit)
mKnownDrawWidth = 0;
mKnownDrawHeight = 0;
+ mKnownDrawSizeChanged = FALSE ;
if (firstinit)
{
@@ -1084,10 +1093,17 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
}
// Call with 0,0 to turn this feature off.
+//virtual
void LLViewerFetchedTexture::setKnownDrawSize(S32 width, S32 height)
{
- mKnownDrawWidth = width;
- mKnownDrawHeight = height;
+ if(mKnownDrawWidth != width || mKnownDrawHeight != height)
+ {
+ mKnownDrawWidth = width;
+ mKnownDrawHeight = height;
+
+ mKnownDrawSizeChanged = TRUE ;
+ mFullyLoaded = FALSE ;
+ }
addTextureStats((F32)(width * height));
}
@@ -1104,13 +1120,26 @@ void LLViewerFetchedTexture::processTextureStats()
mDesiredDiscardLevel = getMaxDiscardLevel() ;
}
else
- {
- mDesiredDiscardLevel = 0;
- if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
+ {
+ if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)
{
- mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
+ if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
+ {
+ mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
+ }
+ else
+ {
+ mDesiredDiscardLevel = 0;
+ }
}
-
+ else if(mKnownDrawSizeChanged)//known draw size is set
+ {
+ mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2,
+ log((F32)mFullHeight / mKnownDrawHeight) / log_2) ;
+ mDesiredDiscardLevel = llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ;
+ }
+ mKnownDrawSizeChanged = FALSE ;
+
if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel))
{
mFullyLoaded = TRUE ;
@@ -1121,8 +1150,6 @@ void LLViewerFetchedTexture::processTextureStats()
//texture does not have any data, so we don't know the size of the image, treat it like 32 * 32.
F32 LLViewerFetchedTexture::calcDecodePriorityForUnknownTexture(F32 pixel_priority)
{
- static const F64 log_2 = log(2.0);
-
F32 desired = (F32)(log(32.0/pixel_priority) / log_2);
S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired + 1;
ddiscard = llclamp(ddiscard, 1, 9);
@@ -1169,7 +1196,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
// Don't decode anything we don't need
priority = -1.0f;
}
- else if (mBoostLevel == LLViewerTexture::BOOST_UI && !have_all_data)
+ else if ((mBoostLevel == LLViewerTexture::BOOST_UI || mBoostLevel == LLViewerTexture::BOOST_ICON) && !have_all_data)
{
priority = 1.f;
}
@@ -2121,22 +2148,29 @@ void LLViewerMediaTexture::updateClass()
{
static const F32 MAX_INACTIVE_TIME = 30.f ;
+#if 0
+ //force to play media.
+ gSavedSettings.setBOOL("AudioSteamingMedia", true) ;
+ gSavedSettings.setBOOL("AudioStreamingVideo", true) ;
+#endif
+
for(media_map_t::iterator iter = sMediaMap.begin() ; iter != sMediaMap.end(); )
{
LLViewerMediaTexture* mediap = iter->second;
-
- //
- //Note: delay some time to delete the media textures to stop endlessly creating and immediately removing media texture.
- //
- if(mediap->getNumRefs() == 1 && mediap->getLastReferencedTimer()->getElapsedTimeF32() > MAX_INACTIVE_TIME) //one by sMediaMap
- {
- media_map_t::iterator cur = iter++ ;
- sMediaMap.erase(cur) ;
- }
- else
+
+ if(mediap->getNumRefs() == 1) //one reference by sMediaMap
{
- ++iter ;
+ //
+ //Note: delay some time to delete the media textures to stop endlessly creating and immediately removing media texture.
+ //
+ if(mediap->getLastReferencedTimer()->getElapsedTimeF32() > MAX_INACTIVE_TIME)
+ {
+ media_map_t::iterator cur = iter++ ;
+ sMediaMap.erase(cur) ;
+ continue ;
+ }
}
+ ++iter ;
}
}
@@ -2189,11 +2223,22 @@ LLViewerMediaTexture::LLViewerMediaTexture(const LLUUID& id, BOOL usemipmaps, LL
mIsPlaying = FALSE ;
setMediaImpl() ;
+
+ LLViewerTexture* tex = gTextureList.findImage(mID) ;
+ if(tex) //this media is a parcel media for tex.
+ {
+ tex->setParcelMedia(this) ;
+ }
}
//virtual
LLViewerMediaTexture::~LLViewerMediaTexture()
{
+ LLViewerTexture* tex = gTextureList.findImage(mID) ;
+ if(tex) //this media is a parcel media for tex.
+ {
+ tex->setParcelMedia(NULL) ;
+ }
}
void LLViewerMediaTexture::reinit(BOOL usemipmaps /* = TRUE */)
@@ -2244,10 +2289,9 @@ BOOL LLViewerMediaTexture::findFaces()
mMediaFaceList.clear() ;
BOOL ret = TRUE ;
-
- //for parcel media
- LLViewerTexture* tex = gTextureList.findImage(mID) ;
- if(tex)
+
+ LLViewerTexture* tex = gTextureList.findImage(mID) ;
+ if(tex) //this media is a parcel media for tex.
{
const ll_face_list_t* face_list = tex->getFaceList() ;
for(ll_face_list_t::const_iterator iter = face_list->begin(); iter != face_list->end(); ++iter)
@@ -2358,7 +2402,7 @@ void LLViewerMediaTexture::addFace(LLFace* facep)
mTextureList.push_back(facep->getTexture()) ; //a parcel media.
return ;
}
-
+
llerrs << "The face does not have a valid texture before media texture." << llendl ;
}
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 480e1c1cbc..020478beef 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -163,6 +163,7 @@ public:
S32 getFullWidth() const { return mFullWidth; }
S32 getFullHeight() const { return mFullHeight; }
+ /*virtual*/ void setKnownDrawSize(S32 width, S32 height);
virtual void addFace(LLFace* facep) ;
virtual void removeFace(LLFace* facep) ;
@@ -220,6 +221,10 @@ public:
BOOL getDontDiscard() const { return mDontDiscard; }
//-----------------
+ void setParcelMedia(LLViewerMediaTexture* media) {mParcelMedia = media;}
+ BOOL hasParcelMedia() const { return mParcelMedia != NULL;}
+ LLViewerMediaTexture* getParcelMedia() const { return mParcelMedia;}
+
/*virtual*/ void updateBindStatsForTester() ;
protected:
void cleanup() ;
@@ -246,6 +251,9 @@ protected:
LLPointer<LLImageGL> mGLTexturep ;
S8 mDontDiscard; // Keep full res version of this image (for UI, etc)
+ //do not use LLPointer here.
+ LLViewerMediaTexture* mParcelMedia ;
+
protected:
typedef enum
{
@@ -357,7 +365,7 @@ public:
// Override the computation of discard levels if we know the exact output
// size of the image. Used for UI textures to not decode, even if we have
// more data.
- void setKnownDrawSize(S32 width, S32 height);
+ /*virtual*/ void setKnownDrawSize(S32 width, S32 height);
void setIsMissingAsset();
/*virtual*/ BOOL isMissingAsset() const { return mIsMissingAsset; }
@@ -406,6 +414,8 @@ private:
BOOL mFullyLoaded;
protected:
+ std::string mLocalFileName;
+
S32 mOrigWidth;
S32 mOrigHeight;
@@ -413,8 +423,7 @@ protected:
// Used for UI textures to not decode, even if we have more data.
S32 mKnownDrawWidth;
S32 mKnownDrawHeight;
-
- std::string mLocalFileName;
+ BOOL mKnownDrawSizeChanged ;
S8 mDesiredDiscardLevel; // The discard level we'd LIKE to have - if we have it and there's space
S8 mMinDesiredDiscardLevel; // The minimum discard level we'd like to have
@@ -570,7 +579,7 @@ public:
static LLTexturePipelineTester* sTesterp ;
//returns NULL if tex is not a LLViewerFetchedTexture nor derived from LLViewerFetchedTexture.
- static LLViewerFetchedTexture* staticCastToFetchedTexture(LLViewerTexture* tex, BOOL report_error = FALSE) ;
+ static LLViewerFetchedTexture* staticCastToFetchedTexture(LLTexture* tex, BOOL report_error = FALSE) ;
//
//"find-texture" just check if the texture exists, if yes, return it, otherwise return null.
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index ba32e07464..b574a9c110 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2424,19 +2424,35 @@ void LLViewerWindow::updateUI()
BOOL handled_by_top_ctrl = FALSE;
LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
+ LLView* captor_view = dynamic_cast<LLView*>(mouse_captor);
+
+ //FIXME: only include captor and captor's ancestors if mouse is truly over them --RN
//build set of views containing mouse cursor by traversing UI hierarchy and testing
//screen rect against mouse cursor
view_handle_set_t mouse_hover_set;
- // start at current mouse captor (if is a view) or UI root
- LLView* root_view = NULL;
- root_view = dynamic_cast<LLView*>(mouse_captor);
+ // constraint mouse enter events to children of mouse captor
+ LLView* root_view = captor_view;
+
+ // if mouse captor doesn't exist or isn't a LLView
+ // then allow mouse enter events on entire UI hierarchy
if (!root_view)
{
root_view = mRootView;
}
+ // include all ancestors of captor_view as automatically having mouse
+ if (captor_view)
+ {
+ LLView* captor_parent_view = captor_view->getParent();
+ while(captor_parent_view)
+ {
+ mouse_hover_set.insert(captor_parent_view->getHandle());
+ captor_parent_view = captor_parent_view->getParent();
+ }
+ }
+
// aggregate visible views that contain mouse cursor in display order
// while the top_ctrl contains the mouse cursor, only it and its descendants will receive onMouseEnter events
diff --git a/indra/newview/llvoavatardefines.cpp b/indra/newview/llvoavatardefines.cpp
index 17b502ae80..5624f19c8d 100644
--- a/indra/newview/llvoavatardefines.cpp
+++ b/indra/newview/llvoavatardefines.cpp
@@ -68,9 +68,9 @@ LLVOAvatarDictionary::Textures::Textures()
addEntry(TEX_EYES_ALPHA, new TextureEntry("eyes_alpha", TRUE, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", WT_ALPHA));
addEntry(TEX_HAIR_ALPHA, new TextureEntry("hair_alpha", TRUE, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", WT_ALPHA));
- addEntry(TEX_HEAD_TATTOO, new TextureEntry("head_tattoo", TRUE, BAKED_NUM_INDICES, "UIImgDefaultTattooUUID", WT_TATTOO));
- addEntry(TEX_UPPER_TATTOO, new TextureEntry("upper_tattoo", TRUE, BAKED_NUM_INDICES, "UIImgDefaultTattooUUID", WT_TATTOO));
- addEntry(TEX_LOWER_TATTOO, new TextureEntry("lower_tattoo", TRUE, BAKED_NUM_INDICES, "UIImgDefaultTattooUUID", WT_TATTOO));
+ addEntry(TEX_HEAD_TATTOO, new TextureEntry("head_tattoo", TRUE, BAKED_NUM_INDICES, "", WT_TATTOO));
+ addEntry(TEX_UPPER_TATTOO, new TextureEntry("upper_tattoo", TRUE, BAKED_NUM_INDICES, "", WT_TATTOO));
+ addEntry(TEX_LOWER_TATTOO, new TextureEntry("lower_tattoo", TRUE, BAKED_NUM_INDICES, "", WT_TATTOO));
addEntry(TEX_HEAD_BAKED, new TextureEntry("head-baked", FALSE, BAKED_HEAD));
addEntry(TEX_UPPER_BAKED, new TextureEntry("upper-baked", FALSE, BAKED_UPPER));
@@ -248,8 +248,6 @@ EBakedTextureIndex LLVOAvatarDictionary::findBakedByRegionName(std::string name)
//static
const LLUUID LLVOAvatarDictionary::getDefaultTextureImageID(ETextureIndex index)
{
- /* switch( index )
- case TEX_UPPER_SHIRT: return LLUUID( gSavedSettings.getString("UIImgDefaultShirtUUID") ); */
const TextureEntry *texture_dict = getInstance()->getTexture(index);
const std::string &default_image_name = texture_dict->mDefaultImageName;
if (default_image_name == "")
@@ -265,9 +263,6 @@ const LLUUID LLVOAvatarDictionary::getDefaultTextureImageID(ETextureIndex index)
// static
EWearableType LLVOAvatarDictionary::getTEWearableType(ETextureIndex index )
{
- /* switch(index)
- case TEX_UPPER_SHIRT:
- return WT_SHIRT; */
return getInstance()->getTexture(index)->mWearableType;
}
diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp
index 7585842623..143cd2d9c6 100644
--- a/indra/newview/llvopartgroup.cpp
+++ b/indra/newview/llvopartgroup.cpp
@@ -249,6 +249,12 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)
facep->mCenterLocal = part->mPosAgent;
facep->setFaceColor(part->mColor);
facep->setTexture(part->mImagep);
+
+ //check if this particle texture is replaced by a parcel media texture.
+ if(part->mImagep.notNull() && part->mImagep->hasParcelMedia())
+ {
+ part->mImagep->getParcelMedia()->addMediaToFace(facep) ;
+ }
mPixelArea = tot_area * pixel_meter_ratio;
const F32 area_scale = 10.f; // scale area to increase priority a bit
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 6e22472153..1e0da13162 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -66,6 +66,9 @@
name="Blue"
value="0 0 1 1" />
<color
+ name="Yellow"
+ value="1 1 0 1" />
+ <color
name="Unused?"
value="1 0 1 1" />
<color
@@ -411,7 +414,7 @@
reference="Green" />
<color
name="MapAvatarFriendColor"
- reference="Unused?" />
+ reference="Yellow" />
<color
name="MapAvatarSelfColor"
value="0.53125 0 0.498047 1" />
diff --git a/indra/newview/skins/default/textures/icons/ForSale_Badge.png b/indra/newview/skins/default/textures/icons/ForSale_Badge.png
new file mode 100644
index 0000000000..5bee570cee
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/ForSale_Badge.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Generic_Object_Small.png b/indra/newview/skins/default/textures/icons/Generic_Object_Small.png
new file mode 100644
index 0000000000..223874e631
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Generic_Object_Small.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png
new file mode 100644
index 0000000000..f2ae828efc
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png
new file mode 100644
index 0000000000..d454d4cd48
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png b/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png
new file mode 100644
index 0000000000..c057e9743d
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png
index 7c10aaaead..41cb88628a 100644
--- a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png
+++ b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png
index 9d7716c6de..a02675502a 100644
--- a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png
+++ b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index fdc7deab1c..f7b0bb4629 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -29,9 +29,9 @@
<texture name="BottomTray_BG" file_name="bottomtray/BottomTray_BG.png" preload="false" />
- <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="false" />
- <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="false" />
- <texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="false" />
+ <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
+ <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
+ <texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="Cam_Avatar_Disabled" file_name="bottomtray/Cam_Avatar_Disabled.png" preload="false" />
<texture name="Cam_Avatar_Over" file_name="bottomtray/Cam_Avatar_Over.png" preload="false" />
@@ -93,11 +93,15 @@
<texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" />
<texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" />
+ <texture name="ForSale_Badge" file_name="icons/ForSale_Badge.png" preload="false" />
<texture name="ForwardArrow_Off" file_name="icons/ForwardArrow_Off.png" preload="false" />
<texture name="ForwardArrow_Press" file_name="icons/ForwardArrow_Press.png" preload="false" />
<texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" />
<texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" />
+ <texture name="Generic_Object_Medium" file_name="icons/Generic_Object_Medium.png" preload="false" />
+ <texture name="Generic_Object_Small" file_name="icons/ Generic_Object_Small.png" preload="false" />
+ <texture name="Generic_Object_Large" file_name="icons/Generic_Object_Large.png" preload="false" />
<texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />
<texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" />
@@ -161,6 +165,8 @@
<texture name="Inv_Gloves" file_name="icons/Inv_Gloves.png" preload="false" />
<texture name="Inv_Hair" file_name="icons/Inv_Hair.png" preload="false" />
<texture name="Inv_Jacket" file_name="icons/Inv_Jacket.png" preload="false" />
+ <texture name="Inv_LookFolderOpen" file_name="icons/Inv_LookFolderOpen.png" preload="false" />
+ <texture name="Inv_LookFolderClosed" file_name="icons/Inv_LookFolderClosed.png" preload="false" />
<texture name="Inv_Landmark" file_name="icons/Inv_Landmark.png" preload="false" />
<texture name="Inv_Notecard" file_name="icons/Inv_Notecard.png" preload="false" />
<texture name="Inv_Object" file_name="icons/Inv_Object.png" preload="false" />
@@ -254,6 +260,42 @@
<texture name="Overhead_M" file_name="world/Overhead_M.png" preload="false" />
<texture name="Overhead_S" file_name="world/Overhead_S.png" preload="false" />
+ <texture name="parcel_drk_Build" file_name="icons/parcel_drk_Build.png" preload="false" />
+ <texture name="parcel_drk_BuildNo" file_name="icons/parcel_drk_BuildNo.png" preload="false" />
+ <texture name="parcel_drk_Damage" file_name="icons/parcel_drk_Damage.png" preload="false" />
+ <texture name="parcel_drk_DamageNo" file_name="icons/parcel_drk_DamageNo.png" preload="false" />
+ <texture name="parcel_drk_Fly" file_name="icons/parcel_drk_Fly.png" preload="false" />
+ <texture name="parcel_drk_FlyNo" file_name="icons/parcel_drk_FlyNo.png" preload="false" />
+ <texture name="parcel_drk_ForSale" file_name="icons/parcel_drk_ForSale.png" preload="false" />
+ <texture name="parcel_drk_ForSaleNo" file_name="icons/parcel_drk_ForSaleNo.png" preload="false" />
+ <texture name="parcel_drk_M" file_name="icons/parcel_drk_M.png" preload="false" />
+ <texture name="parcel_drk_PG" file_name="icons/parcel_drk_PG.png" preload="false" />
+ <texture name="parcel_drk_Push" file_name="icons/parcel_drk_Push.png" preload="false" />
+ <texture name="parcel_drk_PushNo" file_name="icons/parcel_drk_PushNo.png" preload="false" />
+ <texture name="parcel_drk_R" file_name="icons/parcel_drk_R.png" preload="false" />
+ <texture name="parcel_drk_Scripts" file_name="icons/parcel_drk_Scripts.png" preload="false" />
+ <texture name="parcel_drk_ScriptsNo" file_name="icons/parcel_drk_ScriptsNo.png" preload="false" />
+ <texture name="parcel_drk_Voice" file_name="icons/parcel_drk_Voice.png" preload="false" />
+ <texture name="parcel_drk_VoiceNo" file_name="icons/parcel_drk_VoiceNo.png" preload="false" />
+
+ <texture name="parcel_lght_Build" file_name="icons/parcel_lght_Build.png" preload="false" />
+ <texture name="parcel_lght_BuildNo" file_name="icons/parcel_lght_BuildNo.png" preload="false" />
+ <texture name="parcel_lght_Damage" file_name="icons/parcel_lght_Damage.png" preload="false" />
+ <texture name="parcel_lght_DamageNo" file_name="icons/parcel_lght_DamageNo.png" preload="false" />
+ <texture name="parcel_lght_Fly" file_name="icons/parcel_lght_Fly.png" preload="false" />
+ <texture name="parcel_lght_FlyNo" file_name="icons/parcel_lght_FlyNo.png" preload="false" />
+ <texture name="parcel_lght_ForSale" file_name="icons/parcel_lght_ForSale.png" preload="false" />
+ <texture name="parcel_lght_ForSaleNo" file_name="icons/parcel_lght_ForSaleNo.png" preload="false" />
+ <texture name="parcel_lght_M" file_name="icons/parcel_lght_M.png" preload="false" />
+ <texture name="parcel_lght_PG" file_name="icons/parcel_lght_PG.png" preload="false" />
+ <texture name="parcel_lght_Push" file_name="icons/parcel_lght_Push.png" preload="false" />
+ <texture name="parcel_lght_PushNo" file_name="icons/parcel_lght_PushNo.png" preload="false" />
+ <texture name="parcel_lght_R" file_name="icons/parcel_lght_R.png" preload="false" />
+ <texture name="parcel_lght_Scripts" file_name="icons/parcel_lght_Scripts.png" preload="false" />
+ <texture name="parcel_lght_ScriptsNo" file_name="icons/parcel_lght_ScriptsNo.png" preload="false" />
+ <texture name="parcel_lght_Voice" file_name="icons/parcel_lght_Voice.png" preload="false" />
+ <texture name="parcel_lght_VoiceNo" file_name="icons/parcel_lght_VoiceNo.png" preload="false" />
+
<texture name="Progress_1" file_name="icons/Progress_1.png" preload="false" />
<texture name="Progress_2" file_name="icons/Progress_2.png" preload="false" />
<texture name="Progress_3" file_name="icons/Progress_3.png" preload="false" />
@@ -433,15 +475,17 @@
<texture name="Widget_DownArrow" file_name="icons/Widget_DownArrow.png" preload="true" />
<texture name="Widget_UpArrow" file_name="icons/Widget_UpArrow.png" preload="true" />
- <texture name="Window_Background" file_name="windows/Window_Background.png" preload="true"
+ <texture name="Window_Background" file_name="windows/Window_Background.png" preload="true"
scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" />
- <texture name="Window_Foreground" file_name="windows/Window_Foreground.png" preload="true"
+ <texture name="Window_Foreground" file_name="windows/Window_Foreground.png" preload="true"
scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" />
<texture name="Window_NoTitle_Background" file_name="windows/Window_NoTitle_Background.png" preload="true"
scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" />
<texture name="Window_NoTitle_Foreground" file_name="windows/Window_NoTitle_Foreground.png" preload="true"
scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" />
+ <texture name="YouAreHere_Badge" file_name="icons/YouAreHere_Badge.png" preload="false" />
+
<!--WARNING OLD ART *do not use*-->
<texture name="Banner_ForSale" file_name="Banner_ForSale.png" preload="false" />
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 c245f877c7..e13aa610e5 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -26,26 +26,28 @@
remaining
</floater.string>
<tab_container
- follows="left|top|right|bottom"
+ follows="all"
height="400"
+ halign="center"
layout="topleft"
font="SansSerifSmall"
left="1"
- tab_padding_right="5"
+ tab_padding_right="5"
+ tab_height="20"
name="landtab"
tab_position="top"
top="20"
width="459">
- <panel
+ <panel
border="true"
- follows="left|top|right|bottom"
+ follows="all"
height="380"
label="General"
layout="topleft"
left="1"
help_topic="land_general_tab"
name="land_general_panel"
- top="-31"
+ top="0"
width="458">
<panel.string
name="new users only">
@@ -534,7 +536,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
+ follows="all"
height="380"
label="Covenant"
layout="topleft"
@@ -630,7 +632,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
length="1"
enabled="false"
follows="left|top|right|bottom"
- handle_edit_keys_directly="true"
+ handle_edit_keys_directly="true"
height="115"
layout="topleft"
left_delta="0"
@@ -801,7 +803,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
+ follows="all"
height="380"
label="Objects"
layout="topleft"
@@ -1167,7 +1169,7 @@ Go to World menu &gt; About Land or select another parcel to show its details.
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
+ follows="all"
height="333"
label="Options"
layout="topleft"
@@ -1603,16 +1605,15 @@ Only large parcels can be listed in search.
value="Anywhere" />
</combo_box>
</panel>
- <panel
+ <panel
border="true"
- follows="left|top|right|bottom"
+ follows="all"
height="363"
label="Media"
layout="topleft"
left_delta="0"
help_topic="land_media_tab"
name="land_media_panel"
- top_delta="1"
width="458">
<text
type="string"
@@ -1623,24 +1624,22 @@ Only large parcels can be listed in search.
left="10"
name="with media:"
top="9"
- width="65">
+ width="100">
Type:
</text>
<combo_box
- height="18"
+ height="20"
layout="topleft"
- left_pad="5"
+ left_pad="10"
name="media type"
tool_tip="Specify if the URL is a movie, web page, or other media"
- top_delta="-2"
- width="120" />
+ width="150" />
<text
follows="left|top"
height="16"
layout="topleft"
left_pad="10"
name="mime_type"
- top_delta="2"
width="200" />
<text
type="string"
@@ -1650,32 +1649,30 @@ Only large parcels can be listed in search.
layout="topleft"
left="10"
name="at URL:"
- top="29"
- width="65">
+ top_pad="10"
+ width="100">
Home URL:
</text>
<line_editor
- bottom_delta="0"
follows="left|top"
- height="16"
+ height="20"
layout="topleft"
- left="80"
+ left_pad="10"
max_length="255"
name="media_url"
- right="-80"
select_on_focus="true"
- text_readonly_color="0.576471 0.662745 0.835294 1" />
+ width="270"
+ />
<button
follows="left|top"
font="SansSerifSmall"
- height="16"
- label="Set..."
- label_selected="Set..."
+ height="20"
+ label="Set"
+ label_selected="Set"
layout="topleft"
- left_pad="8"
+ left_pad="5"
name="set_media_url"
- top_delta="0"
- width="60" />
+ width="50" />
<text
type="string"
length="1"
@@ -1684,37 +1681,34 @@ Only large parcels can be listed in search.
layout="topleft"
left="10"
name="CurrentURL:"
- top="49"
- width="65">
+ top_pad="10"
+ width="100">
Current URL:
</text>
<text
follows="left|top"
height="16"
layout="topleft"
- left_pad="5"
+ left_pad="10"
name="current_url"
- top_delta="0"
- width="300" />
+ width="260">http://</text>
<button
follows="left|top"
- font="SansSerifSmall"
- height="16"
- label="Reset..."
- label_selected="Reset..."
+ height="20"
+ label="Reset"
+ label_selected="Reset"
layout="topleft"
left_pad="6"
name="reset_media_url"
- top_delta="0"
width="60" />
<check_box
height="16"
label="Hide URL"
layout="topleft"
- left="100"
+ left="120"
name="hide_media_url"
tool_tip="Checking this option will hide the media url to any non-authorized viewers of this parcel information. Note this is not available for HTML types."
- top="89"
+ top_pad="2"
width="200" />
<text
type="string"
@@ -1724,23 +1718,20 @@ Only large parcels can be listed in search.
layout="topleft"
left="10"
name="Description:"
- top="49"
- width="364">
+ top_pad="10"
+ width="100">
Description:
</text>
<line_editor
- border_style="line"
- border_thickness="1"
- bottom_delta="0"
follows="left|top"
- height="16"
+ height="35"
layout="topleft"
- left="80"
- max_length="255"
name="url_description"
- right="-80"
+ left_pad="10"
select_on_focus="true"
- tool_tip="Text displayed next to play/load button" />
+ tool_tip="Text displayed next to play/load button"
+ top_delta="0"
+ width="270" />
<text
type="string"
length="1"
@@ -1749,10 +1740,9 @@ Only large parcels can be listed in search.
layout="topleft"
left="10"
name="Media texture:"
- top="69"
- width="364">
- Replace
-Texture:
+ top_pad="10"
+ width="100">
+ Replace Texture:
</text>
<texture_picker
allow_no_texture="true"
@@ -1760,7 +1750,7 @@ Texture:
follows="left|top"
height="80"
layout="topleft"
- left_delta="70"
+ left_pad="10"
name="media texture"
tool_tip="Click to choose a picture"
top_delta="0"
@@ -1769,25 +1759,22 @@ Texture:
type="string"
length="1"
follows="left|top"
- height="16"
+ height="50"
layout="topleft"
- left_delta="75"
+ left_pad="10"
name="replace_texture_help"
- top="85"
- width="270">
- Objects using this texture will show the movie or
- web page after you click the play arrow.
-
- Select the thumbnail to choose a different texture.
+ top_delta="0"
+ word_wrap="true"
+ width="240">
+ Objects using this texture will show the movie or web page after you click the play arrow.
</text>
<check_box
height="16"
label="Auto scale"
layout="topleft"
- left_delta="70"
name="media_auto_scale"
tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required."
- top_delta="0"
+ top_pad="3"
width="200" />
<text
type="string"
@@ -1795,11 +1782,11 @@ Texture:
follows="left|top"
height="16"
layout="topleft"
- left="85"
+ left="10"
+ top_pad="10"
name="media_size"
tool_tip="Size to render Web media, leave 0 for default."
- top="185"
- width="85">
+ width="100">
Size:
</text>
<spinner
@@ -1811,12 +1798,22 @@ Texture:
increment="1"
initial_value="0"
layout="topleft"
- left_delta="65"
+ left_pad="10"
max_val="1024"
name="media_size_width"
tool_tip="Size to render Web media, leave 0 for default."
top_delta="0"
width="64" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_pad="5"
+ name="pixels">
+ px wide
+ </text>
<spinner
decimal_digits="0"
enabled="false"
@@ -1826,23 +1823,21 @@ Texture:
increment="1"
initial_value="0"
layout="topleft"
- left_pad="16"
+ left="120"
+ top_pad="3"
max_val="1024"
name="media_size_height"
tool_tip="Size to render Web media, leave 0 for default."
- top_delta="0"
width="64" />
<text
type="string"
length="1"
- bottom_delta="0"
follows="left|top"
height="16"
layout="topleft"
- left_delta="70"
- name="pixels"
- right="-10">
- pixels
+ left_pad="5"
+ name="pixels">
+ px high
</text>
<text
type="string"
@@ -1852,15 +1847,15 @@ Texture:
layout="topleft"
left="10"
name="Options:"
- top="237"
- width="292">
+ top_pad="10"
+ width="100">
Options:
</text>
<check_box
height="16"
label="Loop"
layout="topleft"
- left_delta="70"
+ left_pad="10"
name="media_loop"
tool_tip="Play media in a loop. When the media has finished playing, it will restart from the beginning."
top_delta="0"
@@ -1868,9 +1863,9 @@ Texture:
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
+ follows="all"
height="363"
- label="Audio"
+ label="Sound"
layout="topleft"
left_delta="0"
help_topic="land_audio_tab"
@@ -1972,7 +1967,7 @@ Texture:
</panel>
<panel
border="true"
- follows="left|top|right|bottom"
+ follows="all"
height="333"
label="Access"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml
index 2011635790..dfa6c83b4e 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory.xml
@@ -42,13 +42,15 @@
top="34"
width="455" />
<tab_container
- follows="left|top|right|bottom"
+ follows="all"
height="508"
+ halign="center"
layout="topleft"
left_delta="-4"
name="inventory filter tabs"
tab_position="top"
- top_pad="4"
+ tab_height="20"
+ top_pad="5"
width="463">
<inventory_panel
follows="left|top|right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
index 12d7e18762..129fd863dd 100644
--- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<!-- Sample "floater" window with examples of common widgets.
+<!-- Sample "floater" window with examples of common widgets.
Notes:
XML UI (XUI) files use spaces for indentation, not tabs.
@@ -16,17 +16,17 @@
-->
<floater
legacy_header_height="18"
- can_dock="true"
+ can_dock="true"
can_resize="true"
title="Test Floater"
height="500"
- min_width="850"
- min_height="500"
+ min_width="850"
+ min_height="500"
layout="topleft"
name="floater_test_widgets"
help_topic="floater_test_widgets"
width="850">
-
+
<!-- Strings are used by C++ code for localization. They are not visible
unless the C++ code uses them to fill in another widget. -->
<floater.string
@@ -35,15 +35,15 @@
<floater.string
name="other_string"
value="Other String" />
-
+
<!-- Floaters can contain drop-down menus.
The menu_bar widget contains the inividual menus.
The width is automatically computed to fit the labels. -->
<menu_bar
height="18"
layout="topleft"
- follows="top|left"
- tool_tip="menu"
+ follows="top|left"
+ tool_tip="menu"
left="2"
name="test_menu_bar"
top="16">
@@ -71,7 +71,7 @@
name="test_menu_item_2" />
</menu>
</menu_bar>
-
+
<!-- "text" is one or more read-only lines of text.
It can be made clickable but this requires C++ code
support. URLs are not automatically underlined. -->
@@ -85,27 +85,27 @@
</text>
<!-- First column -->
-
+
<button
height="20"
- follows="top|left"
+ follows="top|left"
label="Button"
layout="topleft"
left_delta="0"
name="test_button"
- tool_tip="button"
+ tool_tip="button"
top="80"
- width="100" />
+ width="100" />
<!-- "flyout_button" is a button that can spawn a menu -->
<flyout_button
- follows="top|left"
+ follows="top|left"
height="20"
label="Flyout"
layout="topleft"
left_delta="0"
name="fly_btn"
top_pad="15"
- tool_tip="flyout button"
+ tool_tip="flyout button"
width="100">
<flyout_button.item
label="Item 1"
@@ -121,19 +121,19 @@
bottom_delta="35"
label="Checkbox"
layout="topleft"
- tool_tip="checkbox"
+ tool_tip="checkbox"
name="test_checkbox" />
<!-- "combo_box" is a pop-menu of items. Optionally the box itself can
contain a general purpose line input editor, allowing the user to
provide input that is not a list item. -->
<combo_box
bottom_delta="35"
- follows="top|left"
+ follows="top|left"
height="16"
width="150"
label="Combobox"
layout="topleft"
- tool_tip="combo box"
+ tool_tip="combo box"
name="test_combo_box">
<combo_box.item
name="item1"
@@ -149,21 +149,21 @@
image_name="icon_avatar_online.tga"
layout="topleft"
left_delta="0"
- tool_tip="icon"
+ tool_tip="icon"
name="test_icon"
top_pad="40"
width="16" />
- <!-- "line_editor" allows a single line of editable text input.
+ <!-- "line_editor" allows a single line of editable text input.
The contents of this XML node are used as the initial value for
the text. -->
<line_editor
height="20"
- follows="top|left"
+ follows="top|left"
layout="topleft"
left_delta="0"
name="test_line_editor"
top_pad="20"
- tool_tip="line editor"
+ tool_tip="line editor"
width="200">
Line Editor Sample Text
</line_editor>
@@ -176,18 +176,18 @@
layout="topleft"
left_delta="0"
name="search editor"
- tool_tip="search editor"
+ tool_tip="search editor"
top_pad="30"
width="200" />
<!-- "progress_bar" percent completed gets set in C++ code -->
<progress_bar
height="16"
- follows="top|left"
+ follows="top|left"
layout="topleft"
left_delta="0"
name="test_progress_bar"
top_pad="30"
- tool_tip="progress bar"
+ tool_tip="progress bar"
width="200" />
<!-- "stat_view" is a container for statistics graphs. It is only used
for debugging/diagnostic displays. -->
@@ -199,10 +199,10 @@
name="axis_view"
show_label="true"
top_pad="30"
- tool_tip="stat view"
+ tool_tip="stat view"
width="200">
<stat_bar
- width="100"
+ width="100"
bar_max="100"
bottom_delta="30"
label="Test Stat"
@@ -211,9 +211,9 @@
bar_min="20"
name="test_stat_bar" />
</stat_view>
-
+
<!-- New column -->
-
+
<!-- "radio_group" is a set of mutually exclusive choices, like the buttons
on a car radio that allow a single radio station to be chosen. -->
<radio_group
@@ -221,7 +221,7 @@
layout="topleft"
left_pad="90"
name="size_radio_group"
- tool_tip="radio group"
+ tool_tip="radio group"
top="80"
width="200">
<radio_item
@@ -237,10 +237,10 @@
<!-- "scroll_list" is a scrolling list of columnar data. -->
<scroll_list
bottom_delta="100"
- follows="top|left"
+ follows="top|left"
height="80"
draw_heading="true"
- tool_tip="scroll list"
+ tool_tip="scroll list"
layout="topleft">
<scroll_list.columns
dynamic_width="true"
@@ -262,29 +262,29 @@
<!-- "slider" is a horizontal input widget for numerical data. -->
<slider
bottom_delta="45"
- follows="top|left"
+ follows="top|left"
layout="topleft"
min_val="0"
max_val="100"
initial_value="20"
label="Slider"
name="test_slider"
- tool_tip="slider"
+ tool_tip="slider"
width="200" />
<!-- "spinner" is a numerical input widget with an up and down arrow to
change the value. -->
<spinner
bottom_delta="35"
- follows="top|left"
+ follows="top|left"
label="Spinner"
layout="topleft"
- label_width="45"
- name="test_spinner"
+ label_width="45"
+ name="test_spinner"
tool_tip="spinner"/>
<text
bottom_delta="50"
- follows="top|left"
- font.name="SansSerifSmall"
+ follows="top|left"
+ font.name="SansSerifSmall"
font.style = "UNDERLINE"
layout="topleft"
name="test_text"
@@ -293,23 +293,23 @@
</text>
<text
top_pad="10"
- follows="top|left"
+ follows="top|left"
layout="topleft"
- width="60"
- use_ellipses="true"
+ width="60"
+ use_ellipses="true"
name="test_text"
tool_tip="text">
Truncated text here
</text>
- <!-- "text_editor" is a multi-line text input widget, similar to
+ <!-- "text_editor" is a multi-line text input widget, similar to
textarea in HTML. -->
<text_editor
height="40"
- follows="top|left|bottom"
+ follows="top|left|bottom"
layout="topleft"
left_delta="0"
name="test_text_editor"
- tool_tip="text editor"
+ tool_tip="text editor"
top_pad="25"
width="200">
Text Editor
@@ -330,17 +330,19 @@ many
line to actually fit
</text>
<!-- And a third column -->
-
+
<!-- "tab_container" is a holder for multiple panels of UI widgets.
Tabs can appear at the top, bottom, or left of the container. -->
<tab_container
follows="all"
height="400"
+ halign="center"
layout="topleft"
left="575"
name="group_tab_container"
tab_position="top"
- tool_tip="tab container"
+ tab_height="20"
+ tool_tip="tab container"
top="80"
width="250">
<!-- "panel" is a container for widgets. It is automatically resized to
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index e6ac39e40b..ca12538302 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -4,8 +4,8 @@
follows="left|top|right"
height="570"
layout="topleft"
- bg_opaque_image="Window_NoTitle_Foreground"
- bg_alpha_image="Window_NoTitle_Background"
+ bg_opaque_image="Window_NoTitle_Foreground"
+ bg_alpha_image="Window_NoTitle_Background"
name="toolbox floater"
help_topic="toolbox_floater"
save_rect="true"
@@ -749,6 +749,7 @@
<tab_container
follows="left|top"
height="400"
+ halign="center"
left="0"
name="Object Info Tabs"
tab_max_width="55"
@@ -2739,8 +2740,8 @@
function="BuildTool.EditMedia"/>
</button>
<web_browser
- visible="false"
- enabled="false"
+ visible="false"
+ enabled="false"
border_visible="true"
bottom_delta="0"
follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml
index 9c55e8ea16..af3606fd1c 100644
--- a/indra/newview/skins/default/xui/en/floater_water.xml
+++ b/indra/newview/skins/default/xui/en/floater_water.xml
@@ -62,10 +62,12 @@
<tab_container
follows="left|top"
height="180"
+ halign="center"
layout="topleft"
left="0"
name="Water Tabs"
tab_position="top"
+ tab_height="20"
top="60"
width="700">
<panel
diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
index 0ea769921f..2c09e82f08 100644
--- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
@@ -71,10 +71,12 @@
<tab_container
follows="left|top"
height="160"
+ halign="center"
layout="topleft"
left="0"
name="WindLight Tabs"
tab_position="top"
+ tab_height="20"
top="60"
width="700">
<panel
diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml
index b261281c64..65dfb13f4a 100644
--- a/indra/newview/skins/default/xui/en/fonts.xml
+++ b/indra/newview/skins/default/xui/en/fonts.xml
@@ -18,7 +18,7 @@
</os>
</font>
- <font name="SansSerifBold"
+ <font name="SansSerifBold"
comment="Name of bold sans-serif font">
<file>DejaVuSans-Bold.ttf</file>
<os name="Windows">
@@ -39,20 +39,20 @@
</os>
</font>
- <font name="SansSerif"
- comment="Name of bold sans-serif font"
+ <font name="SansSerif"
+ comment="Name of bold sans-serif font"
font_style="BOLD">
<file>DejaVuSans-Bold.ttf</file>
</font>
- <font name="SansSerif"
- comment="Name of italic sans-serif font"
+ <font name="SansSerif"
+ comment="Name of italic sans-serif font"
font_style="ITALIC">
<file>DejaVuSans-Oblique.ttf</file>
</font>
- <font name="SansSerif"
- comment="Name of bold italic sans-serif font"
+ <font name="SansSerif"
+ comment="Name of bold italic sans-serif font"
font_style="BOLD|ITALIC">
<file>DejaVuSans-BoldOblique.ttf</file>
</font>
@@ -140,11 +140,11 @@
<font_size name="Monospace"
comment="Size for monospaced font (points, or 1/72 of an inch)"
- size="9.0"
+ size="8.0"
/>
<font_size name="Huge"
comment="Size of huge font (points, or 1/72 of an inch)"
- size="16.0"
+ size="15.0"
/>
<font_size name="Large"
comment="Size of large font (points, or 1/72 of an inch)"
@@ -158,7 +158,6 @@
/>
<font_size name="Small"
comment="Size of small font (points, or 1/72 of an inch)"
- size="8.0"
+ size="7.8"
/>
</fonts>
-
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index a59a8b065f..3f63f493b1 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -167,6 +167,18 @@
function="Floater.Toggle"
parameter="active_speakers" />
</menu_item_check>
+ <menu_item_check
+ label="Nearby Media"
+ layout="topleft"
+ name="Nearby Media"
+ shortcut="control|alt|N">
+ <menu_item_check.on_check
+ function="Floater.Visible"
+ parameter="nearby_media" />
+ <menu_item_check.on_click
+ function="Floater.Toggle"
+ parameter="nearby_media" />
+ </menu_item_check>
<!--menu_item_check
label="Block List"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 9aacb8a92c..d51cb13093 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -13,7 +13,7 @@
<global name="implicitclosebutton">
Close
</global>
-
+
<template name="okbutton">
<form>
<button
@@ -154,7 +154,7 @@ No tutorial is currently available.
icon="alertmodal.tga"
name="BadInstallation"
type="alertmodal">
- An error occurred while updating [APP_NAME]. Please download the latest version of the Viewer. http://get.secondlife.com
+ An error occurred while updating [APP_NAME]. Please [http://get.secondlife.com download the latest version] of the Viewer.
<usetemplate
name="okbutton"
yestext="Ok"/>
@@ -507,7 +507,7 @@ For L$[COST] you can enter this land (&apos;[PARCEL_NAME]&apos;) for [TIME] hour
notext="Cancel"
yestext="OK"/>
</notification>
-
+
<notification
icon="alertmodal.tga"
name="SalePriceRestriction"
@@ -664,7 +664,7 @@ Scripts must be allowed to run for weapons to work.
icon="alertmodal.tga"
name="MultipleFacesSelected"
type="alertmodal">
-Multiple faces are currently selected.
+Multiple faces are currently selected.
If you continue this action, separate instances of media will be set on multiple faces of the object.
To place the media on only one face, choose Select Texture and click on the desired face of that object then click Add.
<usetemplate
@@ -791,7 +791,7 @@ Oops! Something was left blank.
You need to enter both the First and Last name of your avatar.
You need an account to enter [SECOND_LIFE]. Would you like to create one now?
- <url
+ <url
option="0"
name="url"
openexternally = "1">
@@ -808,7 +808,7 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now?
icon="alertmodal.tga"
name="AddClassified"
type="alertmodal">
-Classified ads appear in the &apos;Classified&apos; section of the Search directory and on www.secondlife.com for one week.
+Classified ads appear in the &apos;Classified&apos; section of the Search directory and on [http://www.secondlife.com secondlife.com] for one week.
Fill out your ad, then click &apos;Publish...&apos; to add it to the directory.
You&apos;ll be asked for a price to pay when clicking Publish.
Paying more makes your ad appear higher in the list, and also appear higher when people search for keywords.
@@ -1060,13 +1060,13 @@ There was a problem saving a compiled script due to the following reason: [REASO
icon="alertmodal.tga"
name="StartRegionEmpty"
type="alertmodal">
-Oops, Your Start Region is not defined.
-Please type the Region name in Start Location box or choose My Last Location or My Home as your Start Location.
+Oops, Your Start Region is not defined.
+Please type the Region name in Start Location box or choose My Last Location or My Home as your Start Location.
<usetemplate
name="okbutton"
yestext="OK"/>
</notification>
-
+
<notification
icon="alertmodal.tga"
name="CouldNotStartStopScript"
@@ -2409,7 +2409,7 @@ You can use [SECOND_LIFE] normally and other people will see you correctly.
[APP_NAME] installation is complete.
If this is your first time using [SECOND_LIFE], you will need to create an account before you can log in.
-Return to www.secondlife.com to create a new account?
+Return to [http://join.secondlife.com secondlife.com] to create a new account?
<usetemplate
name="okcancelbuttons"
notext="Continue"
@@ -2426,7 +2426,7 @@ You can either check your Internet connection and try again in a few minutes, cl
<url option="1" name="url">
http://secondlife.com/support/
- </url>
+ </url>
<form name="form">
<button
default="true"
@@ -2801,7 +2801,7 @@ Do you want to open your Web browser to view this content?
icon="alertmodal.tga"
name="WebLaunchJoinNow"
type="alertmodal">
-Go to secondlife.com to manage your account?
+Go to your [http://secondlife.com/account/ Dashboard] to manage your account?
<usetemplate
ignoretext="Launch my browser to manage my account"
name="okcancelignore"
@@ -3163,7 +3163,7 @@ Teleport to [PICK]?
notext="Cancel"
yestext="Teleport"/>
</notification>
-
+
<notification
icon="alert.tga"
label="Message everyone in your Estate"
@@ -3657,7 +3657,7 @@ Default: off
label="Bulk Change Content Permissions"
name="HelpBulkPermission"
type="alertmodal">
-The Bulk Permissions tool helps you to quickly change the permissions on multiple items in the contents of the selected object(s). However, please note that you are only setting permissions on the items in the Contents of the selected objects -- not permissions on the container object(s) themselves.
+The Bulk Permissions tool helps you to quickly change the permissions on multiple items in the contents of the selected object(s). However, please note that you are only setting permissions on the items in the Contents of the selected objects -- not permissions on the container object(s) themselves.
Also note, the permissions are not applied to the nested contents of any of the contained items. Your request only operates on items exactly one level deep.
@@ -4251,7 +4251,7 @@ There are no items in this object that you are allowed to copy.
icon="alertmodal.tga"
name="WebLaunchAccountHistory"
type="alertmodal">
-Go to secondlife.com to see your account history?
+Go to your [http://secondlife.com/account/ Dashboard] to see your account history?
<usetemplate
ignoretext="Launch my browser to see my account history"
name="okcancelignore"
@@ -4288,14 +4288,9 @@ Are you sure you want to quit?
icon="alertmodal.tga"
name="HelpReportAbuseEmailLL"
type="alertmodal">
-Use this tool to report violations of the Terms of Service and Community Standards. See:
-
-http://secondlife.com/corporate/tos.php
-http://secondlife.com/corporate/cs.php
+Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
-All reported abuses of the Terms of Service and Community Standards are investigated and resolved. You can view the incident resolution on the Incident Report at:
-
-http://secondlife.com/support/incidentreport.php
+All reported abuses are investigated and resolved. You can view the resolution by reading the [http://secondlife.com/support/incidentreport.php Incident Report].
<unique/>
</notification>
@@ -4363,9 +4358,9 @@ Dear Resident,
You appear to be reporting intellectual property infringement. Please make sure you are reporting it correctly:
-(1) The Abuse Process. You may submit an abuse report if you believe a Resident is exploiting the [SECOND_LIFE] permissions system, for example, by using CopyBot or similar copying tools, to infringe intellectual property rights. The Abuse Team investigates and issues appropriate disciplinary action for behavior that violates the [SECOND_LIFE] Community Standards or Terms of Service. However, the Abuse Team does not handle and will not respond to requests to remove content from the [SECOND_LIFE] world.
+(1) The Abuse Process. You may submit an abuse report if you believe a Resident is exploiting the [SECOND_LIFE] permissions system, for example, by using CopyBot or similar copying tools, to infringe intellectual property rights. The Abuse Team investigates and issues appropriate disciplinary action for behavior that violates the [SECOND_LIFE] [http://secondlife.com/corporate/tos.php Terms of Service] or [http://secondlife.com/corporate/cs.php Community Standards]. However, the Abuse Team does not handle and will not respond to requests to remove content from the [SECOND_LIFE] world.
-(2) The DMCA or Content Removal Process. To request removal of content from [SECOND_LIFE], you MUST submit a valid notification of infringement as provided in our DMCA Policy at http://secondlife.com/corporate/dmca.php.
+(2) The DMCA or Content Removal Process. To request removal of content from [SECOND_LIFE], you MUST submit a valid notification of infringement as provided in our [http://secondlife.com/corporate/dmca.php DMCA Policy].
If you still wish to continue with the abuse process, please close this window and finish submitting your report. You may need to select the specific category &apos;CopyBot or Permissions Exploit&apos;.
@@ -5463,7 +5458,7 @@ Deactivated gestures with same trigger:
name="NoQuickTime"
type="notify">
Apple&apos;s QuickTime software does not appear to be installed on your system.
-If you want to view streaming media on parcels that support it you should go to the QuickTime site (http://www.apple.com/quicktime) and install the QuickTime Player.
+If you want to view streaming media on parcels that support it you should go to the [http://www.apple.com/quicktime QuickTime site] and install the QuickTime Player.
</notification>
<notification
icon="notify.tga"
@@ -5527,7 +5522,7 @@ The objects on the selected parcel that are NOT owned by you have been returned
type="notify">
[MSG]
</notification>
-
+
<notification
icon="notify.tga"
name="NotSafe"
@@ -6149,7 +6144,7 @@ Thank you for your payment!
Your L$ balance will be updated when processing completes. If processing takes more than 20 mins, your transaction may be cancelled. In that case, the purchase amount will be credited to your US$ balance.
-The status of your payment can be checked on your Transaction History page at Me > My Dashboard, or http://secondlife.com/account/
+The status of your payment can be checked on your Transaction History page on your [http://secondlife.com/account/ Dashboard]
</notification>
<notification
icon="notify.tga"
@@ -6603,12 +6598,11 @@ Yes
<global name="PermNo">
No
</global>
-<!-- this is alert string from server. the name needs to match entire the server string, and needs to be changed
- whenever the server string changes -->
+<!-- this is alert string from server. the name needs to match entire the server string, and needs to be changed
+ whenever the server string changes -->
<global name="You can only set your 'Home Location' on your land or at a mainland Infohub.">
-If you own a piece of land, you can make it your home location.
+If you own a piece of land, you can make it your home location.
Otherwise, you can look at the Map and find places marked &quot;Infohub&quot;.
- </global>
-
-</notifications>
+ </global>
+</notifications>
diff --git a/indra/newview/skins/default/xui/en/panel_activeim_row.xml b/indra/newview/skins/default/xui/en/panel_activeim_row.xml
index 4dc4a9ff46..8b815b0f71 100644
--- a/indra/newview/skins/default/xui/en/panel_activeim_row.xml
+++ b/indra/newview/skins/default/xui/en/panel_activeim_row.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
+<panel
name="panel_activeim_row"
layout="topleft"
follows="left|right"
@@ -7,56 +7,51 @@
left="0"
height="35"
width="318"
- background_visible="true"
- bevel_style="in"
- bg_alpha_color="0 0 0 0">
+ background_visible="false">
<chiclet_im_p2p
name="p2p_chiclet"
layout="topleft"
follows="left"
- top="5"
+ top="3"
left="5"
height="25"
- width="45">
+ width="25">
</chiclet_im_p2p>
<chiclet_im_group
name="group_chiclet"
layout="topleft"
follows="left"
- top="5"
+ top="3"
left="5"
height="25"
- width="45">
+ width="25">
</chiclet_im_group>
<text
type="string"
name="contact_name"
layout="topleft"
- top="8"
- left_pad="6"
- height="28"
- width="235"
+ top="10"
+ left_pad="0"
+ height="14"
+ width="245"
length="1"
follows="right|left"
- font="SansSerifBold"
- text_color="White">
- Contact Name
+ use_ellipses="true"
+ font="SansSerifBold">
+ Grumpity ProductEngine
</text>
<button
- top="5"
- left_pad="5"
- width="15"
- height="15"
+ top="10"
+ right="-5"
+ width="17"
+ height="17"
layout="topleft"
follows="right"
name="hide_btn"
mouse_opaque="true"
label=""
tab_stop="false"
- image_unselected="toast_hide_btn.tga"
- image_disabled="toast_hide_btn.tga"
- image_selected="toast_hide_btn.tga"
- image_hover_selected="toast_hide_btn.tga"
- image_disabled_selected="toast_hide_btn.tga"
+ image_unselected="Toast_CloseBtn"
+ image_selected="Toast_CloseBtn"
/>
</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
index 8aaa462aaf..18761c3bb9 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
@@ -39,7 +39,6 @@
<text
follows="left|right"
font="SansSerifSmall"
- font.style="BOLD"
height="15"
layout="topleft"
left_pad="5"
@@ -47,13 +46,13 @@
top="6"
use_ellipses="true"
value="Unknown"
- width="196" />
+ width="182" />
<text
follows="right"
font="SansSerifSmall"
height="15"
layout="topleft"
- left_pad="10"
+ left_pad="8"
name="last_interaction"
text_color="LtGray_50"
value="0s"
@@ -69,28 +68,26 @@
name="speaking_indicator"
visible="true"
width="20" />
- <button
+ <button
follows="right"
height="16"
image_pressed="Info_Press"
- image_hover="Info_Over"
- image_unselected="Info_Off"
- layout="topleft"
+ image_unselected="Info_Over"
left_pad="3"
- right="-25"
+ right="-31"
name="info_btn"
picture_style="true"
+ top_delta="-2"
width="16" />
<button
follows="right"
- height="16"
- image_selected="BuyArrow_Press"
- image_pressed="BuyArrow_Press"
- image_unselected="BuyArrow_Press"
+ height="20"
+ image_overlay="ForwardArrow_Off"
layout="topleft"
left_pad="5"
- right="-5"
+ right="-3"
name="profile_btn"
picture_style="true"
- width="16" />
+ top_delta="-2"
+ width="20" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 9bf684f1fd..9bf3458d29 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -10,6 +10,7 @@
left="0"
name="bottom_tray"
top="28"
+ chrome="true"
border_visible="false"
width="1000">
<layout_stack
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index 0845ec014e..04e0ad3be8 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -230,7 +230,7 @@
top_delta="0"
width="250">
Group members must contribute more land credits to support land in use.
- </text>
+ </text>
<text
type="string"
follows="left|top"
@@ -247,15 +247,17 @@
<tab_container
follows="all"
height="200"
+ halign="center"
layout="topleft"
left="10"
name="group_money_tab_container"
tab_position="top"
+ tab_height="20"
top_pad="10"
width="265">
<panel
border="true"
- follows="left|top|right|bottom"
+ follows="all"
height="180"
label="Planning"
layout="topleft"
@@ -305,7 +307,7 @@
width="250"
word_wrap="true">
Computing...
- </text_editor>
+ </text_editor>
<button
height="20"
label="&lt; Earlier"
@@ -325,7 +327,7 @@
name="later_details_button"
tool_tip="Go forward in time"
top_delta="0"
- width="125" />
+ width="125" />
</panel>
<panel
border="true"
@@ -375,4 +377,4 @@
width="125" />
</panel>
</tab_container>
-</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
index 7bdcaafe31..ffa485051c 100644
--- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
@@ -28,13 +28,11 @@
visible="false"
width="320" />
<icon
- follows="top|left"
height="20"
image_name="Generic_Group"
name="group_icon"
- layout="topleft"
- left="5"
mouse_opaque="true"
+ left="5"
top="2"
width="20" />
<text
@@ -47,28 +45,28 @@
top="6"
use_ellipses="true"
value="Unknown"
- width="246" />
+ width="242" />
<button
follows="right"
height="16"
image_pressed="Info_Press"
- image_hover="Info_Over"
- image_unselected="Info_Off"
+ image_unselected="Info_Over"
left_pad="3"
- right="-25"
+ right="-31"
name="info_btn"
picture_style="true"
+ top_delta="-2"
width="16" />
+ <!--*TODO: Should only appear on rollover-->
<button
follows="right"
- height="16"
- image_selected="BuyArrow_Press"
- image_pressed="BuyArrow_Press"
- image_unselected="BuyArrow_Press"
+ height="20"
+ image_overlay="ForwardArrow_Off"
layout="topleft"
left_pad="5"
- right="-5"
+ right="-3"
name="profile_btn"
picture_style="true"
- width="16" />
+ top_delta="-2"
+ width="20" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index e2e4ca8b8f..909c3f4577 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -163,6 +163,7 @@
border="true"
follows="left|top"
height="260"
+ halign="center"
layout="topleft"
left="5"
name="roles_tab_container"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 0db5a41cc5..e234a7b358 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -34,7 +34,6 @@ background_visible="true"
value="Filter Groups" />
<filter_editor
follows="left|top|right"
- font="SansSerif"
height="23"
layout="topleft"
left="15"
@@ -49,18 +48,17 @@ background_visible="true"
height="500"
layout="topleft"
left="10"
- font="SansSerifBigBold"
name="tabs"
tab_min_width="70"
tab_height="30"
tab_position="top"
top_pad="10"
- halign="center"
+ halign="center"
width="313">
<panel
follows="all"
height="500"
- label="Nearby"
+ label="NEARBY"
layout="topleft"
left="0"
help_topic="people_nearby_tab"
@@ -100,17 +98,30 @@ background_visible="true"
picture_style="true"
top="5"
width="18" />
+ <button
+ follows="bottom|left"
+ height="18"
+ image_selected="AddItem_Press"
+ image_unselected="AddItem_Off"
+ image_disabled="AddItem_Disabled"
+ layout="topleft"
+ left_pad="5"
+ name="add_friend_btn"
+ picture_style="true"
+ top_delta="0"
+ tool_tip="Add selected resident to your friends List"
+ width="18" />
</panel>
</panel>
<panel
follows="all"
height="500"
- left="0"
- top="0"
- label="Friends"
+ label="FRIENDS"
layout="topleft"
+ left="0"
help_topic="people_friends_tab"
name="friends_panel"
+ top="0"
width="313">
<accordion
follows="all"
@@ -123,14 +134,13 @@ background_visible="true"
<accordion_tab
can_resize="false"
layout="topleft"
- height="230"
+ height="235"
min_height="150"
name="tab_online"
title="Online">
<avatar_list
allow_select="true"
follows="all"
- height="150"
layout="topleft"
left="0"
multi_select="true"
@@ -141,13 +151,12 @@ background_visible="true"
<accordion_tab
can_resize="false"
layout="topleft"
- height="230"
+ height="235"
name="tab_all"
title="All">
<avatar_list
allow_select="true"
follows="all"
- height="230"
layout="topleft"
left="0"
multi_select="true"
@@ -209,11 +218,12 @@ background_visible="true"
<panel
follows="all"
height="500"
- label="Groups"
- top="0"
+ label="GROUPS"
layout="topleft"
+ left="0"
help_topic="people_groups_tab"
name="groups_panel"
+ top="0"
width="313">
<group_list
follows="all"
@@ -287,13 +297,14 @@ background_visible="true"
</panel>
</panel>
<panel
- top="0"
follows="all"
height="500"
- label="Recent"
+ label="RECENT"
layout="topleft"
+ left="0"
help_topic="people_recent_tab"
name="recent_panel"
+ top="0"
width="313">
<avatar_list
allow_select="true"
@@ -304,11 +315,9 @@ background_visible="true"
multi_select="true"
name="avatar_list"
show_last_interaction_time="true"
- top="2"
+ top="0"
width="313" />
<panel
- background_visible="true"
- bevel_style="none"
top_pad="0"
follows="left|right|bottom"
height="30"
@@ -330,6 +339,19 @@ background_visible="true"
picture_style="true"
top="7"
width="18" />
+ <button
+ follows="bottom|left"
+ height="18"
+ image_selected="AddItem_Press"
+ image_unselected="AddItem_Off"
+ image_disabled="AddItem_Disabled"
+ layout="topleft"
+ left_pad="5"
+ name="add_friend_btn"
+ picture_style="true"
+ top_delta="0"
+ tool_tip="Add selected resident to your friends List"
+ width="18" />
</panel>
</panel>
</tab_container>
@@ -345,104 +367,88 @@ background_visible="true"
width="313">
<layout_panel
default_tab_group="1"
- follows="left|top|right"
+ follows="left|top"
height="25"
layout="topleft"
left="0"
name="view_profile_btn_panel"
top="-25"
- width="65">
+ width="100">
<button
- follows="top|left|right"
+ follows="top|left"
font="SansSerifSmall"
height="19"
label="Profile"
layout="topleft"
name="view_profile_btn"
tool_tip="Show picture, groups, and other residents information"
- width="65" />
- </layout_panel>
- <layout_panel
- default_tab_group="1"
- follows="left|top|right"
- height="25"
- layout="topleft"
- left_delta="0"
- min_width="85"
- name="add_friend_btn_panel"
- top_delta="0"
- width="50">
- <button
- follows="top|left|right"
- font="SansSerifSmall"
- height="19"
- label="Add"
- layout="topleft"
- name="add_friend_btn"
- tool_tip="Add selected resident to your friends List"
- width="50" />
+ width="100" />
</layout_panel>
<layout_panel
default_tab_group="1"
- follows="left|top|right"
+ follows="left|top"
height="19"
layout="topleft"
+ left="0"
min_width="80"
name="group_info_btn_panel"
- width="80">
+ width="100">
<button
- follows="top|left|right"
+ follows="top|left"
font="SansSerifSmall"
height="19"
label="Group Profile"
layout="topleft"
name="group_info_btn"
tool_tip="Show group information"
- width="80" />
+ width="100" />
</layout_panel>
<layout_panel
default_tab_group="1"
- follows="left|top|right"
+ follows="left|top"
height="25"
layout="topleft"
+ left_pad="5"
min_width="45"
name="chat_btn_panel"
top_delta="0"
- width="45">
+ width="100">
<button
- follows="top|left|right"
+ follows="top|left"
font="SansSerifSmall"
height="19"
- label="Chat"
+ label="Group Chat"
layout="topleft"
name="chat_btn"
tool_tip="Open chat session"
- width="45" />
+ width="100" />
</layout_panel>
<layout_panel
default_tab_group="1"
- follows="left|top|right"
+ follows="left|top|"
height="25"
layout="topleft"
+ left_pad="5"
min_width="35"
name="im_btn_panel"
top_delta="0"
- width="35">
+ width="50">
<button
- follows="top|left|right"
+ follows="top|left"
font="SansSerifSmall"
height="19"
label="IM"
layout="topleft"
name="im_btn"
tool_tip="Open instant message session"
- width="35" />
+ width="50" />
</layout_panel>
<layout_panel
default_tab_group="1"
follows="left|top|right"
height="25"
layout="topleft"
+ left_pad="5"
min_width="40"
name="call_btn_panel"
top_delta="0"
@@ -450,53 +456,55 @@ background_visible="true"
width="40">
<button
enabled="false"
- follows="top|left|right"
+ follows="top|left"
font="SansSerifSmall"
height="19"
label="Call"
layout="topleft"
name="call_btn"
- width="40" />
+ width="50" />
</layout_panel>
<layout_panel
default_tab_group="1"
- follows="left|top|right"
+ follows="left|top"
height="25"
layout="topleft"
+ left_pad="5"
min_width="65"
name="teleport_btn_panel"
top_delta="0"
- width="65">
+ width="100">
<button
- follows="left|top|right"
+ follows="left|top"
font="SansSerifSmall"
height="19"
label="Teleport"
layout="topleft"
name="teleport_btn"
tool_tip="Offer teleport"
- width="65" />
+ width="100" />
</layout_panel>
<layout_panel
default_tab_group="1"
enabled="false"
- follows="left|top|right"
+ follows="left|top"
height="25"
layout="topleft"
+ left_pad="5"
min_width="50"
name="share_btn_panel"
top_delta="0"
visible="false"
- width="50">
+ width="80">
<button
enabled="false"
- follows="top|left|right"
+ follows="top|left"
font="SansSerifSmall"
height="19"
label="Share"
layout="topleft"
name="share_btn"
- width="50" />
+ width="80" />
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
index 1074dd4627..38ea6b6196 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
@@ -57,7 +57,7 @@
use_ellipses="false"
width="197"
word_wrap="false" />
- <text
+ <expandable_text
follows="top|left|right"
font="SansSerifSmall"
height="40"
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 50108aa21f..5aa53ab46b 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -12,10 +12,10 @@ background_visible="true"
width="333">
<string
name="landmarks_tab_title"
- value="My Landmarks" />
+ value="MY LANDMARKS" />
<string
name="teleport_history_tab_title"
- value="Teleport History" />
+ value="TELEPORT HISTORY" />
<filter_editor
follows="left|top|right"
font="SansSerif"
@@ -29,11 +29,12 @@ background_visible="true"
width="303" />
<tab_container
follows="all"
+ halign="center"
height="500"
layout="topleft"
left="10"
name="Places Tabs"
- tab_min_width="70"
+ tab_min_width="80"
tab_height="30"
tab_position="top"
top_pad="10"
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 7a5781651d..195b731531 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -50,6 +50,7 @@
<tab_container
follows="all"
height="535"
+ halign="center"
layout="topleft"
left="10"
min_width="333"
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 795e0ffc0d..7b9c9f47a2 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -41,20 +41,18 @@
</panel.string>
<button
auto_resize="true"
- halign="right"
+ halign="right"
follows="right|bottom"
font="SansSerifSmall"
- image_color="White_05"
- flash_color="EmphasisColor"
- image_overlay="BuyArrow_Over"
- height="18"
- layout="topleft"
- left="-225"
+ image_selected="BuyArrow_Over"
+ image_unselected="BuyArrow_Off"
+ image_pressed="BuyArrow_Press"
+ height="16"
+ left="-220"
name="buycurrency"
- pad_right="23px"
- picture_style="true"
+ pad_right="22px"
tool_tip="My Balance: Click to buy more L$"
- top="0"
+ top="1"
width="117" />
<text
type="string"
@@ -65,148 +63,21 @@
height="16"
top="3"
layout="topleft"
- left_pad="20"
+ left_pad="15"
name="TimeText"
text_color="TimeTextColor"
tool_tip="Current time (Pacific)"
width="80">
12:00 AM
</text>
- <button
- follows="right|bottom"
- height="16"
- layout="topleft"
- left_delta="-537"
- image_selected="Inv_DangerousScript"
- image_unselected="Inv_DangerousScript"
- name="scriptout"
- picture_style="true"
- scale_image="false"
- tool_tip="Script warnings and errors"
- top="0"
- visible="false"
- width="16" />
- <button
- follows="right|bottom"
- height="16"
- image_selected="Health"
- image_unselected="Health"
- layout="topleft"
- left_pad="7"
- name="health"
- picture_style="true"
- scale_image="false"
- tool_tip="Health"
- top="0"
- visible="false"
- width="16" />
- <text
- bg_visible="false"
- text_readonly_color="HealthTextColor"
- follows="rsight|bottom"
- font_shadow="none"
- height="16"
- layout="topleft"
- left_pad="18"
- name="HealthText"
- text_color="HealthTextColor"
- tool_tip="Health"
- top="0"
- visible="false"
- width="31">
- 100%
- </text>
- <button
- follows="right|bottom"
- height="16"
- image_selected="Move_Fly_Disabled"
- image_unselected="Move_Fly_Disabled"
- layout="topleft"
- left_pad="7"
- name="no_fly"
- picture_style="true"
- scale_image="false"
- tool_tip="Flying not allowed"
- top="3"
- visible="false"
- width="16" />
- <button
- follows="right|bottom"
- height="16"
- image_selected="Tool_Create"
- image_unselected="Tool_Create"
- layout="topleft"
- left_pad="7"
- name="no_build"
- picture_style="true"
- scale_image="false"
- tool_tip="Building/rezzing not allowed"
- top="0"
- visible="false"
- width="16" />
- <button
- follows="right|bottom"
- height="16"
- image_selected="Inv_Script"
- image_unselected="Inv_Script"
- layout="topleft"
- left_pad="7"
- name="no_scripts"
- picture_style="true"
- scale_image="false"
- tool_tip="Scripts not allowed"
- top="0"
- visible="false"
- width="16" />
- <button
- follows="right|bottom"
- height="16"
- image_selected="Inv_Gesture"
- image_unselected="Inv_Gesture"
- layout="topleft"
- left_pad="7"
- name="restrictpush"
- picture_style="true"
- scale_image="false"
- tool_tip="No pushing"
- top="0"
- visible="false"
- width="16" />
- <button
- follows="right|bottom"
- height="18"
- image_selected="Microphone_Mute"
- image_unselected="Microphone_Mute"
- layout="topleft"
- left_pad="7"
- name="status_no_voice"
- picture_style="true"
- scale_image="false"
- tool_tip="Voice not available here"
- top="1"
- visible="false"
- width="16" />
- <button
- follows="right|bottom"
- height="16"
- image_selected="Icon_For_Sale"
- image_unselected="Icon_For_Sale"
- layout="topleft"
- left_pad="7"
- name="buyland"
- picture_style="true"
- tool_tip="Buy this parcel"
- top="0"
- visible="false"
- width="16" />
<text
enabled="true"
follows="right|bottom"
halign="center"
height="12"
layout="topleft"
- left_delta="-4"
+ left_delta="0"
name="stat_btn"
- top_delta="3"
- width="20" />
+ top_delta="0"
+ width="20"/>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_sys_well_item.xml b/indra/newview/skins/default/xui/en/panel_sys_well_item.xml
index 53ee0d159d..7722583ce2 100644
--- a/indra/newview/skins/default/xui/en/panel_sys_well_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_sys_well_item.xml
@@ -1,65 +1,40 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- All our XML is utf-8 encoded. -->
-
<panel
- name="sys_well_item"
- title="sys_well_item"
+ name="sys_well_item"
+ title="sys_well_item"
visible="true"
- top="0"
- left="0"
- width="318"
- height="35"
+ top="0"
+ left="0"
+ width="300"
+ height="35"
layout="topleft"
- follows="left|right"
- background_opaque="false"
- background_visible="true"
- bg_alpha_color="0.0 0.0 0.0 0.0" >
-
- <icon
- top="8"
- left="8"
- width="20"
- height="20"
- layout="topleft"
- follows="left"
- name="icon"
- label=""
- mouse_opaque="false"
- image_name="lag_status_warning.tga"
- />
-
+ follows="left|right">
<text
- top="2"
- left_pad="8"
- width="255"
- height="28"
+ top="2"
+ left="10"
+ width="267"
+ height="28"
layout="topleft"
follows="right|left"
- font="SansSerifBold"
text_color="white"
- use_ellipses="true"
+ use_ellipses="true"
word_wrap="true"
mouse_opaque="false"
name="title" >
- Select your streaming media preference. Select your streaming media preference.
- </text>
-
+ Beware the trout. BEWARE! THE! TROUT!
+ </text>
<button
- top="5"
- left_pad="5"
- width="15"
- height="15"
+ top="5"
+ right="-5"
+ width="17"
+ height="17"
layout="topleft"
follows="right"
- name="close_btn"
+ name="close_btn"
mouse_opaque="true"
- label=""
tab_stop="false"
- image_unselected="toast_hide_btn.tga"
- image_disabled="toast_hide_btn.tga"
- image_selected="toast_hide_btn.tga"
- image_hover_selected="toast_hide_btn.tga"
- image_disabled_selected="toast_hide_btn.tga"
+ image_unselected="Icon_Close_Toast"
+ image_selected="Icon_Close_Toast"
/>
-
-</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
index 63c2d4538e..f559343b34 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
@@ -18,7 +18,7 @@
visible="false"
width="380" />
<icon
- height="20"
+ height="24"
follows="top|right|left"
image_name="ListItem_Select"
layout="topleft"
@@ -26,17 +26,16 @@
name="selected_icon"
top="0"
visible="false"
- width="380" />
+ width="320" />
<icon
- height="20"
- follows="top|right|left"
- image_name="ListItem_Select"
+ height="16"
+ follows="top|left"
+ image_name="Inv_Landmark"
layout="topleft"
left="0"
name="landmark_icon"
top="0"
- visible="false"
- width="20" />
+ width="16" />
<text
follows="left|right"
height="20"
@@ -46,21 +45,28 @@
name="region"
text_color="white"
top="4"
- value="Unknown"
- width="330" />
+ value="..."
+ width="242" />
<button
follows="right"
- height="18"
- image_disabled="Info"
- image_disabled_selected="Info"
- image_hover_selected="Info"
- image_selected="Info"
- image_unselected="Info"
- layout="topleft"
+ height="16"
+ image_pressed="Info_Press"
+ image_unselected="Info_Over"
+ left_pad="3"
+ right="-31"
name="info_btn"
picture_style="true"
- visible="false"
- right="-5"
- top="2"
- width="18" />
+ top_delta="-2"
+ width="16" />
+ <button
+ follows="right"
+ height="20"
+ image_overlay="ForwardArrow_Off"
+ layout="topleft"
+ left_pad="5"
+ right="-3"
+ name="profile_btn"
+ picture_style="true"
+ top_delta="-2"
+ width="20" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml
index 66237d585a..7f7777586c 100644
--- a/indra/newview/skins/default/xui/en/panel_toast.xml
+++ b/indra/newview/skins/default/xui/en/panel_toast.xml
@@ -12,15 +12,15 @@
width="305"
left="0"
top="0"
- follows="right|bottom"
- bg_opaque_image="Toast_Background"
- bg_alpha_image="Toast_Background"
+ follows="right|bottom"
+ bg_opaque_image="Toast_Background"
+ bg_alpha_image="Toast_Background"
can_minimize="false"
can_tear_off="false"
can_resize="false"
can_drag_on_left="false"
can_close="false"
- can_dock="false"
+ can_dock="false"
border_visible = "false"
border_drop_shadow_visible = "false"
drop_shadow_visible = "false"
@@ -43,36 +43,33 @@
Toast text;
</text>
<icon
- top="20"
- left="10"
- width="32"
+ top="20"
+ left="10"
+ width="32"
height="32"
follows="top|left"
layout="topleft"
visible="false"
- color="1 1 1 1"
- enabled="true"
+ color="1 1 1 1"
+ enabled="true"
image_name="notify_tip_icon.tga"
- mouse_opaque="true"
+ mouse_opaque="true"
name="icon"
/>-->
<button
layout="topleft"
- top="-6"
- left="293"
- width="17"
- height="17"
+ top="-6"
+ left="293"
+ width="17"
+ height="17"
follows="top|right"
- visible="false"
- enabled="true"
- mouse_opaque="false"
- name="hide_btn"
- label=""
+ visible="false"
+ enabled="true"
+ mouse_opaque="false"
+ name="hide_btn"
+ label=""
tab_stop="false"
- image_unselected="windows/Toast_CloseBtn.png"
- image_disabled="windows/Toast_CloseBtn.png"
- image_selected="windows/Toast_CloseBtn.png"
- image_hover_selected="windows/Toast_CloseBtn.png"
- image_disabled_selected="windows/Toast_CloseBtn.png"
+ image_unselected="Toast_CloseBtn"
+ image_selected="Toast_CloseBtn"
/>
-</floater>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
index 319beac291..f59c46b2f5 100644
--- a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
+++ b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
@@ -3,7 +3,7 @@
max_height="300" >
<textbox
more_label="More"
- follows="left|top"
+ follows="left|top|right"
name="text"
allow_scroll="true"
use_ellipses="true"
diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml
index 1bd5a5bda2..7262c0dc5c 100644
--- a/indra/newview/skins/default/xui/en/widgets/panel.xml
+++ b/indra/newview/skins/default/xui/en/widgets/panel.xml
@@ -7,4 +7,5 @@
<panel bg_opaque_color="PanelFocusBackgroundColor"
bg_alpha_color="PanelDefaultBackgroundColor"
background_visible="false"
- background_opaque="false"/>
+ background_opaque="false"
+ chrome="false"/> \ No newline at end of file
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 7d10df1af7..fe2f1423b7 100644
--- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml
+++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<tab_container tab_min_width="60"
tab_max_width="150"
- font_halign="left"
- tab_height="16">
+ font_halign="center"
+ tab_height="21">
<first_tab tab_top_image_unselected="TabTop_Left_Off"
tab_top_image_selected="TabTop_Left_Selected"
tab_bottom_image_unselected="Toolbar_Left_Off"
diff --git a/indra/newview/skins/default/xui/en/widgets/tool_tip.xml b/indra/newview/skins/default/xui/en/widgets/tool_tip.xml
new file mode 100644
index 0000000000..6b49f832fd
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/tool_tip.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- See also settings.xml UIFloater* settings for configuration -->
+<tool_tip name="tooltip"
+ max_width="200"
+ padding="4"
+ wrap="true"
+ font="SansSerif"
+ bg_opaque_color="ToolTipBgColor"
+ background_visible="true"
+ />