summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/lltextbase.cpp125
-rw-r--r--indra/llui/lltextbase.h14
-rw-r--r--indra/llui/lltexteditor.cpp14
-rw-r--r--indra/llui/lltexteditor.h2
-rw-r--r--indra/llui/lltooltip.cpp10
-rw-r--r--indra/llui/llurlentry.cpp85
-rw-r--r--indra/newview/llchathistory.cpp2
-rw-r--r--indra/newview/lleventnotifier.cpp2
-rw-r--r--indra/newview/llexpandabletextbox.cpp17
-rw-r--r--indra/newview/llexpandabletextbox.h2
-rw-r--r--indra/newview/llfavoritesbar.cpp78
-rw-r--r--indra/newview/llfloatersearch.cpp45
-rw-r--r--indra/newview/llfloatersearch.h8
-rw-r--r--indra/newview/llgroupactions.cpp2
-rw-r--r--indra/newview/llinspectavatar.cpp13
-rw-r--r--indra/newview/llinspectgroup.cpp7
-rw-r--r--indra/newview/lllandmarkactions.cpp45
-rw-r--r--indra/newview/lllandmarkactions.h13
-rw-r--r--indra/newview/llnavigationbar.cpp2
-rw-r--r--indra/newview/llviewertexteditor.cpp12
-rw-r--r--indra/newview/llworldmap.cpp7
-rw-r--r--indra/newview/llworldmap.h1
-rw-r--r--indra/newview/llworldmapview.cpp6
-rw-r--r--indra/newview/skins/default/colors.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_animation_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_preferences.xml8
-rw-r--r--indra/newview/skins/default/xui/en/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_inspectors.xml12
-rw-r--r--indra/newview/skins/default/xui/en/inspect_avatar.xml1
-rw-r--r--indra/newview/skins/default/xui/en/inspect_group.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_avatar_list_item.xml54
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_separator.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_list_item.xml27
-rw-r--r--indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml118
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_alerts.xml122
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml209
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_setup.xml341
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_sound.xml457
-rw-r--r--indra/newview/skins/default/xui/en/widgets/flat_list_view.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/textbase.xml4
44 files changed, 1589 insertions, 322 deletions
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 4cf8d76827..1d36a16ea7 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -340,11 +340,14 @@ void LLTextBase::drawSelectionBackground()
S32 segment_line_start = segmentp->getStart() + segment_offset;
S32 segment_line_end = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd);
+ S32 segment_width, segment_height;
+
// if selection after beginning of segment
if(selection_left >= segment_line_start)
{
S32 num_chars = llmin(selection_left, segment_line_end) - segment_line_start;
- selection_rect.mLeft += segmentp->getWidth(segment_offset, num_chars);
+ segmentp->getDimensions(segment_offset, num_chars, segment_width, segment_height);
+ selection_rect.mLeft += segment_width;
}
// if selection spans end of current segment...
@@ -352,13 +355,16 @@ void LLTextBase::drawSelectionBackground()
{
// extend selection slightly beyond end of line
// to indicate selection of newline character (use "n" character to determine width)
- selection_rect.mRight += segmentp->getWidth(segment_offset, segment_line_end - segment_line_start);
+ S32 num_chars = segment_line_end - segment_line_start;
+ segmentp->getDimensions(segment_offset, num_chars, segment_width, segment_height);
+ selection_rect.mRight += segment_width;
}
// else if selection ends on current segment...
else
{
S32 num_chars = selection_right - segment_line_start;
- selection_rect.mRight += segmentp->getWidth(segment_offset, num_chars);
+ segmentp->getDimensions(segment_offset, num_chars, segment_width, segment_height);
+ selection_rect.mRight += segment_width;
break;
}
@@ -424,7 +430,9 @@ void LLTextBase::drawCursor()
if (LL_KIM_OVERWRITE == gKeyboard->getInsertMode() && !hasSelection())
{
- S32 width = llmax(CURSOR_THICKNESS, segmentp->getWidth(mCursorPos - segmentp->getStart(), 1));
+ S32 segment_width, segment_height;
+ segmentp->getDimensions(mCursorPos - segmentp->getStart(), 1, segment_width, segment_height);
+ S32 width = llmax(CURSOR_THICKNESS, segment_width);
cursor_rect.mRight = cursor_rect.mLeft + width;
}
else
@@ -1087,24 +1095,18 @@ void LLTextBase::reflow(S32 start_index)
LLTextSegmentPtr segment = *seg_iter;
// track maximum height of any segment on this line
- line_height = llmax(line_height, segment->getMaxHeight());
S32 cur_index = segment->getStart() + seg_offset;
- // find run of text from this segment that we can display on one line
- S32 end_index = cur_index;
- while(end_index < segment->getEnd() && text[end_index] != '\n')
- {
- ++end_index;
- }
// ask segment how many character fit in remaining space
- S32 max_characters = end_index - cur_index;
S32 character_count = segment->getNumChars(getWordWrap() ? llmax(0, remaining_pixels) : S32_MAX,
seg_offset,
cur_index - line_start_index,
- max_characters);
-
+ S32_MAX);
- S32 segment_width = segment->getWidth(seg_offset, character_count);
+ S32 segment_width, segment_height;
+ segment->getDimensions(seg_offset, character_count, segment_width, segment_height);
+ // grow line height as necessary based on reported height of this segment
+ line_height = llmax(line_height, segment_height);
remaining_pixels -= segment_width;
seg_offset += character_count;
@@ -1120,16 +1122,6 @@ void LLTextBase::reflow(S32 start_index)
// if we didn't finish the current segment...
if (last_segment_char_on_line < segment->getEnd())
{
- // set up index for next line
- // ...skip newline, we don't want to draw
- S32 next_line_count = line_count;
- if (text[last_segment_char_on_line] == '\n')
- {
- seg_offset++;
- last_segment_char_on_line++;
- next_line_count++;
- }
-
// add line info and keep going
mLineInfoList.push_back(line_info(
line_start_index,
@@ -1141,7 +1133,6 @@ void LLTextBase::reflow(S32 start_index)
cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
remaining_pixels = text_width;
line_height = 0;
- line_count = next_line_count;
}
// ...just consumed last segment..
else if (++segment_set_t::iterator(seg_iter) == mSegments.end())
@@ -1801,7 +1792,8 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round
S32 segment_line_start = segmentp->getStart() + line_seg_offset;
S32 segment_line_length = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd - 1) - segment_line_start;
- S32 text_width = segmentp->getWidth(line_seg_offset, segment_line_length);
+ S32 text_width, text_height;
+ segmentp->getDimensions(line_seg_offset, segment_line_length, text_width, text_height);
if (local_x < start_x + text_width // cursor to left of right edge of text
|| segmentp->getEnd() >= line_iter->mDocIndexEnd - 1) // or this segment wraps to next line
{
@@ -1809,7 +1801,8 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round
S32 offset;
if (!segmentp->canEdit())
{
- S32 segment_width = segmentp->getWidth(0, segmentp->getEnd() - segmentp->getStart());
+ S32 segment_width, segment_height;
+ segmentp->getDimensions(0, segmentp->getEnd() - segmentp->getStart(), segment_width, segment_height);
if (round && local_x - start_x > segment_width / 2)
{
offset = segment_line_length;
@@ -1868,14 +1861,18 @@ LLRect LLTextBase::getLocalRectFromDocIndex(S32 pos) const
if (line_seg_iter == cursor_seg_iter)
{
// cursor advanced to right based on difference in offset of cursor to start of line
- local_rect.mLeft += segmentp->getWidth(line_seg_offset, cursor_seg_offset - line_seg_offset);
+ S32 segment_width, segment_height;
+ segmentp->getDimensions(line_seg_offset, cursor_seg_offset - line_seg_offset, segment_width, segment_height);
+ local_rect.mLeft += segment_width;
break;
}
else
{
// add remainder of current text segment to cursor position
- local_rect.mLeft += segmentp->getWidth(line_seg_offset, (segmentp->getEnd() - segmentp->getStart()) - line_seg_offset);
+ S32 segment_width, segment_height;
+ segmentp->getDimensions(line_seg_offset, (segmentp->getEnd() - segmentp->getStart()) - line_seg_offset, segment_width, segment_height);
+ local_rect.mLeft += segment_width;
// offset will be 0 for all segments after the first
line_seg_offset = 0;
// go to next text segment on this line
@@ -2115,12 +2112,11 @@ LLRect LLTextBase::getVisibleDocumentRect() const
LLTextSegment::~LLTextSegment()
{}
-S32 LLTextSegment::getWidth(S32 first_char, S32 num_chars) const { return 0; }
+void LLTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const { width = 0; height = 0; }
S32 LLTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const { return 0; }
S32 LLTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const { return 0; }
void LLTextSegment::updateLayout(const LLTextBase& editor) {}
F32 LLTextSegment::draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect) { return draw_rect.mLeft; }
-S32 LLTextSegment::getMaxHeight() const { return 0; }
bool LLTextSegment::canEdit() const { return false; }
void LLTextSegment::unlinkFromDocument(LLTextBase*) {}
void LLTextSegment::linkToDocument(LLTextBase*) {}
@@ -2158,7 +2154,7 @@ LLNormalTextSegment::LLNormalTextSegment( const LLStyleSP& style, S32 start, S32
mToken(NULL),
mEditor(editor)
{
- mMaxHeight = llceil(mStyle->getFont()->getLineHeight());
+ mFontHeight = llceil(mStyle->getFont()->getLineHeight());
}
LLNormalTextSegment::LLNormalTextSegment( const LLColor4& color, S32 start, S32 end, LLTextBase& editor, BOOL is_visible)
@@ -2168,7 +2164,7 @@ LLNormalTextSegment::LLNormalTextSegment( const LLColor4& color, S32 start, S32
{
mStyle = new LLStyle(LLStyle::Params().visible(is_visible).color(color));
- mMaxHeight = llceil(mStyle->getFont()->getLineHeight());
+ mFontHeight = llceil(mStyle->getFont()->getLineHeight());
}
F32 LLNormalTextSegment::draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect)
@@ -2266,11 +2262,6 @@ F32 LLNormalTextSegment::drawClippedSegment(S32 seg_start, S32 seg_end, S32 sele
return right_x;
}
-S32 LLNormalTextSegment::getMaxHeight() const
-{
- return mMaxHeight;
-}
-
BOOL LLNormalTextSegment::handleHover(S32 x, S32 y, MASK mask)
{
if (getStyle() && getStyle()->isLink())
@@ -2344,10 +2335,21 @@ void LLNormalTextSegment::setToolTip(const std::string& tooltip)
mTooltip = tooltip;
}
-S32 LLNormalTextSegment::getWidth(S32 first_char, S32 num_chars) const
+void LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
{
LLWString text = mEditor.getWText();
- return mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);
+
+ // look for any printable character, then return the font height
+ height = 0;
+ for (S32 index = mStart + first_char; index < mStart + first_char + num_chars; ++index)
+ {
+ if (text[index] != '\n')
+ {
+ height = mFontHeight;
+ break;
+ }
+ }
+ width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);
}
S32 LLNormalTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const
@@ -2363,6 +2365,17 @@ S32 LLNormalTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset,
S32 LLNormalTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const
{
LLWString text = mEditor.getWText();
+
+ // search for newline and if found, truncate there
+ S32 last_char = mStart + segment_offset;
+ for (; last_char != mEnd; ++last_char)
+ {
+ if (text[last_char] == '\n') break;
+ }
+
+ // set max characters to length of segment, or to first newline
+ max_chars = llmin(max_chars, last_char - (mStart + segment_offset));
+
S32 num_chars = mStyle->getFont()->maxDrawableChars(text.c_str() + segment_offset + mStart,
(F32)num_pixels,
max_chars,
@@ -2380,6 +2393,10 @@ S32 LLNormalTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 lin
// include terminating NULL
num_chars++;
}
+ else if (text[mStart + segment_offset + num_chars] == '\n')
+ {
+ num_chars++;
+ }
return num_chars;
}
@@ -2399,9 +2416,10 @@ void LLNormalTextSegment::dump() const
// LLInlineViewSegment
//
-LLInlineViewSegment::LLInlineViewSegment(LLView* view, S32 start, S32 end)
+LLInlineViewSegment::LLInlineViewSegment(LLView* view, S32 start, S32 end, bool force_new_line)
: LLTextSegment(start, end),
- mView(view)
+ mView(view),
+ mForceNewLine(force_new_line)
{
}
@@ -2410,21 +2428,29 @@ LLInlineViewSegment::~LLInlineViewSegment()
mView->die();
}
-S32 LLInlineViewSegment::getWidth(S32 first_char, S32 num_chars) const
+void LLInlineViewSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
{
if (first_char == 0 && num_chars == 0)
{
- return 0;
+ // we didn't fit on a line, the widget will fall on the next line
+ // so dimensions here are 0
+ width = 0;
+ height = 0;
}
else
{
- return mView->getRect().getWidth();
+ width = mView->getRect().getWidth();
+ height = mView->getRect().getHeight();
}
}
S32 LLInlineViewSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const
{
- if (line_offset != 0 && num_pixels < mView->getRect().getWidth())
+ // if putting a widget anywhere but at the beginning of a line
+ // and the widget doesn't fit or mForceNewLine is true
+ // then return 0 chars for that line, and all characters for the next
+ if (line_offset != 0
+ && (mForceNewLine || num_pixels < mView->getRect().getWidth()))
{
return 0;
}
@@ -2446,11 +2472,6 @@ F32 LLInlineViewSegment::draw(S32 start, S32 end, S32 selection_start, S32 selec
return (F32)(draw_rect.mLeft + mView->getRect().getWidth());
}
-S32 LLInlineViewSegment::getMaxHeight() const
-{
- return mView->getRect().getHeight();
-}
-
void LLInlineViewSegment::unlinkFromDocument(LLTextBase* editor)
{
editor->removeDocumentChild(mView);
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index ca9b1cc123..c05a31baec 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -366,12 +366,11 @@ public:
LLTextSegment(S32 start, S32 end) : mStart(start), mEnd(end){};
virtual ~LLTextSegment();
- virtual S32 getWidth(S32 first_char, S32 num_chars) const;
+ virtual void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
virtual S32 getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const;
virtual S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const;
virtual void updateLayout(const class LLTextBase& editor);
virtual F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect);
- virtual S32 getMaxHeight() const;
virtual bool canEdit() const;
virtual void unlinkFromDocument(class LLTextBase* editor);
virtual void linkToDocument(class LLTextBase* editor);
@@ -418,11 +417,10 @@ public:
LLNormalTextSegment( const LLStyleSP& style, S32 start, S32 end, LLTextBase& editor );
LLNormalTextSegment( const LLColor4& color, S32 start, S32 end, LLTextBase& editor, BOOL is_visible = TRUE);
- /*virtual*/ S32 getWidth(S32 first_char, S32 num_chars) const;
+ /*virtual*/ void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
/*virtual*/ S32 getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const;
/*virtual*/ S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const;
/*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect);
- /*virtual*/ S32 getMaxHeight() const;
/*virtual*/ bool canEdit() const { return true; }
/*virtual*/ const LLColor4& getColor() const { return mStyle->getColor(); }
/*virtual*/ void setColor(const LLColor4 &color) { mStyle->setColor(color); }
@@ -446,7 +444,7 @@ protected:
protected:
class LLTextBase& mEditor;
LLStyleSP mStyle;
- S32 mMaxHeight;
+ S32 mFontHeight;
LLKeywordToken* mToken;
std::string mTooltip;
};
@@ -460,19 +458,19 @@ public:
class LLInlineViewSegment : public LLTextSegment
{
public:
- LLInlineViewSegment(LLView* widget, S32 start, S32 end);
+ LLInlineViewSegment(LLView* widget, S32 start, S32 end, bool force_new_line);
~LLInlineViewSegment();
- /*virtual*/ S32 getWidth(S32 first_char, S32 num_chars) const;
+ /*virtual*/ void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
/*virtual*/ S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars) const;
/*virtual*/ void updateLayout(const class LLTextBase& editor);
/*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect);
- /*virtuaL*/ S32 getMaxHeight() const;
/*virtual*/ bool canEdit() const { return false; }
/*virtual*/ void unlinkFromDocument(class LLTextBase* editor);
/*virtual*/ void linkToDocument(class LLTextBase* editor);
private:
LLView* mView;
+ bool mForceNewLine;
};
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 7c925b8899..953c5b292f 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -2276,7 +2276,7 @@ void LLTextEditor::insertText(const std::string &new_text)
setEnabled( enabled );
}
-void LLTextEditor::appendWidget(LLView* widget, const std::string &widget_text, bool allow_undo, bool prepend_newline)
+void LLTextEditor::appendWidget(LLView* widget, const std::string &widget_text, bool allow_undo, bool force_new_line)
{
// Save old state
S32 selection_start = mSelectionStart;
@@ -2293,17 +2293,9 @@ void LLTextEditor::appendWidget(LLView* widget, const std::string &widget_text,
LLWString widget_wide_text;
// Add carriage return if not first line
- if (getLength() != 0
- && prepend_newline)
- {
- widget_wide_text = utf8str_to_wstring(std::string("\n") + widget_text);
- }
- else
- {
- widget_wide_text = utf8str_to_wstring(widget_text);
- }
+ widget_wide_text = utf8str_to_wstring(widget_text);
- LLTextSegmentPtr segment = new LLInlineViewSegment(widget, old_length, old_length + widget_text.size());
+ LLTextSegmentPtr segment = new LLInlineViewSegment(widget, old_length, old_length + widget_text.size(), force_new_line);
insert(getLength(), widget_wide_text, FALSE, segment);
needsReflow();
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index e232efbfb3..82f3956855 100644
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -165,7 +165,7 @@ public:
// inserts text at cursor
void insertText(const std::string &text);
- void appendWidget(LLView* widget, const std::string &widget_text, bool allow_undo, bool prepend_newline);
+ void appendWidget(LLView* widget, const std::string &widget_text, bool allow_undo, bool force_newline);
// Non-undoable
void setText(const LLStringExplicit &utf8str);
diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index f30e56b907..c8094f9c7c 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -183,6 +183,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)
params.font = p.font;
params.use_ellipses = true;
params.wrap = p.wrap;
+ params.allow_html = false; // disallow hyperlinks in tooltips, as they want to spawn their own explanatory tooltips
mTextBox = LLUICtrlFactory::create<LLTextBox> (params);
addChild(mTextBox);
@@ -319,9 +320,16 @@ void LLToolTipMgr::createToolTip(const LLToolTip::Params& params)
LLToolTip::Params tooltip_params(params);
// block mouse events if there is a click handler registered (specifically, hover)
- tooltip_params.mouse_opaque = params.click_callback.isProvided();
+ if (params.click_callback.isProvided())
+ {
+ // set mouse_opaque to true if it wasn't already set to something else
+ // this prevents mouse down from going "through" the tooltip and ultimately
+ // causing the tooltip to disappear
+ tooltip_params.mouse_opaque.setIfNotProvided(true);
+ }
tooltip_params.rect = LLRect (0, 1, 1, 0);
+
mToolTip = LLUICtrlFactory::create<LLToolTip> (tooltip_params);
mToolTip->setValue(params.message());
gToolTipView->addChild(mToolTip);
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index e04ccfbc2f..52e4229fb4 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -280,23 +280,37 @@ void LLUrlEntryAgent::onAgentNameReceived(const LLUUID& id,
std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
{
- std::string id = getIDStringFromUrl(url);
- if (gCacheName && ! id.empty())
+ if (!gCacheName)
{
- LLUUID uuid(id);
- std::string full_name;
- if (gCacheName->getFullName(uuid, full_name))
- {
- return full_name;
- }
- else
- {
- gCacheName->get(uuid, FALSE, boost::bind(&LLUrlEntryAgent::onAgentNameReceived, this, _1, _2, _3, _4));
- addObserver(id, url, cb);
- }
+ // probably at the login screen, use short string for layout
+ return LLTrans::getString("LoadingData");
+ }
+
+ std::string agent_id_string = getIDStringFromUrl(url);
+ if (agent_id_string.empty())
+ {
+ // something went wrong, just give raw url
+ return unescapeUrl(url);
}
- return LLTrans::getString("LoadingData");//unescapeUrl(url);
+ LLUUID agent_id(agent_id_string);
+ std::string full_name;
+ if (agent_id.isNull())
+ {
+ return LLTrans::getString("AvatarNameNobody");
+ }
+ else if (gCacheName->getFullName(agent_id, full_name))
+ {
+ return full_name;
+ }
+ else
+ {
+ gCacheName->get(agent_id, FALSE,
+ boost::bind(&LLUrlEntryAgent::onAgentNameReceived,
+ this, _1, _2, _3, _4));
+ addObserver(agent_id_string, url, cb);
+ return LLTrans::getString("LoadingData");
+ }
}
//
@@ -311,6 +325,7 @@ LLUrlEntryGroup::LLUrlEntryGroup()
mMenuName = "menu_url_group.xml";
mIcon = "Generic_Group";
mTooltip = LLTrans::getString("TooltipGroupUrl");
+ mColor = LLUIColorTable::instance().getColor("GroupLinkColor");
}
void LLUrlEntryGroup::onGroupNameReceived(const LLUUID& id,
@@ -324,23 +339,37 @@ void LLUrlEntryGroup::onGroupNameReceived(const LLUUID& id,
std::string LLUrlEntryGroup::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
{
- std::string id = getIDStringFromUrl(url);
- if (gCacheName && ! id.empty())
+ if (!gCacheName)
{
- LLUUID uuid(id);
- std::string group_name;
- if (gCacheName->getGroupName(uuid, group_name))
- {
- return group_name;
- }
- else
- {
- gCacheName->get(uuid, TRUE, boost::bind(&LLUrlEntryGroup::onGroupNameReceived, this, _1, _2, _3, _4));
- addObserver(id, url, cb);
- }
+ // probably at login screen, give something short for layout
+ return LLTrans::getString("LoadingData");
}
- return unescapeUrl(url);
+ std::string group_id_string = getIDStringFromUrl(url);
+ if (group_id_string.empty())
+ {
+ // something went wrong, give raw url
+ return unescapeUrl(url);
+ }
+
+ LLUUID group_id(group_id_string);
+ std::string group_name;
+ if (group_id.isNull())
+ {
+ return LLTrans::getString("GroupNameNone");
+ }
+ else if (gCacheName->getGroupName(group_id, group_name))
+ {
+ return group_name;
+ }
+ else
+ {
+ gCacheName->get(group_id, TRUE,
+ boost::bind(&LLUrlEntryGroup::onGroupNameReceived,
+ this, _1, _2, _3, _4));
+ addObserver(group_id_string, url, cb);
+ return LLTrans::getString("LoadingData");
+ }
}
///
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 80f3867a80..cc21b636f1 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -109,7 +109,7 @@ void LLChatHistory::appendWidgetMessage(const LLUUID& avatar_id, std::string& fr
view_text = from + MESSAGE_USERNAME_DATE_SEPARATOR + time;
}
//Prepare the rect for the view
- LLRect target_rect = mScroller->getContentWindowRect();
+ LLRect target_rect = getDocumentView()->getRect();
target_rect.mLeft += mLeftWidgetPad;
target_rect.mRight -= mRightWidgetPad;
view->reshape(target_rect.getWidth(), view->getRect().getHeight());
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp
index f6f23055ac..da20766e7e 100644
--- a/indra/newview/lleventnotifier.cpp
+++ b/indra/newview/lleventnotifier.cpp
@@ -196,7 +196,7 @@ bool LLEventNotification::handleResponse(const LLSD& notification, const LLSD& r
break;
}
case 1:
- LLFloaterReg::showInstance("search", LLSD().insert("panel", "event").insert("id", S32(getEventID())));
+ LLFloaterReg::showInstance("search", LLSD().insert("category", "events").insert("id", S32(getEventID())));
break;
case 2:
break;
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index e2d6bcee8f..48b5fc11b7 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -48,10 +48,11 @@ public:
mExpanderLabel(more_text)
{}
- /*virtual*/ S32 getWidth(S32 first_char, S32 num_chars) const
+ /*virtual*/ void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
{
// more label always spans width of text box
- return mEditor.getTextRect().getWidth();
+ width = mEditor.getTextRect().getWidth();
+ height = llceil(mStyle->getFont()->getLineHeight());
}
/*virtual*/ S32 getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const
{
@@ -85,8 +86,9 @@ public:
mEditor.getUseEllipses());
return right_x;
}
- /*virtual*/ S32 getMaxHeight() const { return llceil(mStyle->getFont()->getLineHeight()); }
/*virtual*/ bool canEdit() const { return false; }
+ // eat handleMouseDown event so we get the mouseup event
+ /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask) { return TRUE; }
/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask) { mEditor.onCommit(); return TRUE; }
/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask)
{
@@ -126,9 +128,12 @@ void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL calle
}
}
-void LLExpandableTextBox::LLTextBoxEx::setValue(const LLSD& value)
+void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text)
{
- LLTextBox::setValue(value);
+ // LLTextBox::setText will obliterate the expander segment, so make sure
+ // we generate it again by clearing mExpanderVisible
+ mExpanderVisible = false;
+ LLTextBox::setText(text);
// text contents have changed, segments are cleared out
// so hide the expander and determine if we need it
@@ -395,7 +400,6 @@ void LLExpandableTextBox::onTopLost()
void LLExpandableTextBox::setValue(const LLSD& value)
{
collapseTextBox();
-
mText = value.asString();
mTextBox->setValue(value);
}
@@ -403,7 +407,6 @@ void LLExpandableTextBox::setValue(const LLSD& value)
void LLExpandableTextBox::setText(const std::string& str)
{
collapseTextBox();
-
mText = str;
mTextBox->setText(str);
}
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index d6401e224f..d45527aabb 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -60,7 +60,7 @@ protected:
// adds or removes "More" link as needed
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
- /*virtual*/ void setValue(const LLSD& value);
+ /*virtual*/ void setText(const LLStringExplicit& text);
/**
* Returns difference between text box height and text height.
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 007c6b2c4c..76ece9d165 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -66,29 +66,46 @@ const S32 DROP_DOWN_MENU_WIDTH = 250;
* Helper for LLFavoriteLandmarkButton and LLFavoriteLandmarkMenuItem.
* Performing requests for SLURL for given Landmark ID
*/
-class LLSLURLGetter
+class LLLandmarkInfoGetter
{
public:
- LLSLURLGetter()
- : mLandmarkID(LLUUID::null)
- , mSLURL("(Loading...)")
- , mLoaded(false) {}
+ LLLandmarkInfoGetter()
+ : mLandmarkID(LLUUID::null),
+ mName("(Loading...)"),
+ mPosX(0),
+ mPosY(0),
+ mLoaded(false)
+ {}
void setLandmarkID(const LLUUID& id) { mLandmarkID = id; }
const LLUUID& getLandmarkId() const { return mLandmarkID; }
- const std::string& getSLURL()
+ const std::string& getName()
{
if(!mLoaded)
- requestSLURL();
+ requestNameAndPos();
- return mSLURL;
+ return mName;
+ }
+
+ S32 getPosX()
+ {
+ if (!mLoaded)
+ requestNameAndPos();
+ return mPosX;
+ }
+
+ S32 getPosY()
+ {
+ if (!mLoaded)
+ requestNameAndPos();
+ return mPosY;
}
private:
/**
* Requests landmark data from server.
*/
- void requestSLURL()
+ void requestNameAndPos()
{
if (mLandmarkID.isNull())
return;
@@ -96,19 +113,23 @@ private:
LLVector3d g_pos;
if(LLLandmarkActions::getLandmarkGlobalPos(mLandmarkID, g_pos))
{
- LLLandmarkActions::getSLURLfromPosGlobal(g_pos,
- boost::bind(&LLSLURLGetter::landmarkNameCallback, this, _1), false);
+ LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(g_pos,
+ boost::bind(&LLLandmarkInfoGetter::landmarkNameCallback, this, _1, _2, _3));
}
}
- void landmarkNameCallback(const std::string& name)
+ void landmarkNameCallback(const std::string& name, S32 x, S32 y)
{
- mSLURL = name;
+ mPosX = x;
+ mPosY = y;
+ mName = name;
mLoaded = true;
}
LLUUID mLandmarkID;
- std::string mSLURL;
+ std::string mName;
+ S32 mPosX;
+ S32 mPosY;
bool mLoaded;
};
@@ -125,7 +146,15 @@ public:
BOOL handleToolTip(S32 x, S32 y, MASK mask)
{
- LLToolTipMgr::instance().show(mUrlGetter.getSLURL());
+ std::string region_name = mLandmarkInfoGetter.getName();
+
+ if (!region_name.empty())
+ {
+ LLToolTip::Params params;
+ params.message = llformat("%s\n%s (%d, %d)", getLabelSelected().c_str(), region_name.c_str(), mLandmarkInfoGetter.getPosX(), mLandmarkInfoGetter.getPosY());
+ params.sticky_rect = calcScreenRect();
+ LLToolTipMgr::instance().show(params);
+ }
return TRUE;
}
@@ -141,8 +170,8 @@ public:
return LLButton::handleHover(x, y, mask);
}
- void setLandmarkID(const LLUUID& id){ mUrlGetter.setLandmarkID(id); }
- const LLUUID& getLandmarkId() const { return mUrlGetter.getLandmarkId(); }
+ void setLandmarkID(const LLUUID& id){ mLandmarkInfoGetter.setLandmarkID(id); }
+ const LLUUID& getLandmarkId() const { return mLandmarkInfoGetter.getLandmarkId(); }
void onMouseEnter(S32 x, S32 y, MASK mask)
{
@@ -161,7 +190,7 @@ protected:
friend class LLUICtrlFactory;
private:
- LLSLURLGetter mUrlGetter;
+ LLLandmarkInfoGetter mLandmarkInfoGetter;
};
/**
@@ -176,11 +205,18 @@ class LLFavoriteLandmarkMenuItem : public LLMenuItemCallGL
public:
BOOL handleToolTip(S32 x, S32 y, MASK mask)
{
- LLToolTipMgr::instance().show(mUrlGetter.getSLURL());
+ std::string region_name = mLandmarkInfoGetter.getName();
+ if (!region_name.empty())
+ {
+ LLToolTip::Params params;
+ params.message = llformat("%s\n%s (%d, %d)", getLabel().c_str(), region_name.c_str(), mLandmarkInfoGetter.getPosX(), mLandmarkInfoGetter.getPosY());
+ params.sticky_rect = calcScreenRect();
+ LLToolTipMgr::instance().show(params);
+ }
return TRUE;
}
- void setLandmarkID(const LLUUID& id){ mUrlGetter.setLandmarkID(id); }
+ void setLandmarkID(const LLUUID& id){ mLandmarkInfoGetter.setLandmarkID(id); }
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask)
{
@@ -212,7 +248,7 @@ protected:
friend class LLUICtrlFactory;
private:
- LLSLURLGetter mUrlGetter;
+ LLLandmarkInfoGetter mLandmarkInfoGetter;
LLFavoritesBarCtrl* fb;
};
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 904263e2c2..4c83530f43 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -40,6 +40,17 @@ LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
LLFloater(key),
mBrowser(NULL)
{
+ // declare a map that transforms a category name into
+ // the URL suffix that is used to search that category
+ mCategoryPaths = LLSD::emptyMap();
+ mCategoryPaths["all"] = "search";
+ mCategoryPaths["people"] = "search/people";
+ mCategoryPaths["places"] = "search/places";
+ mCategoryPaths["events"] = "search/events";
+ mCategoryPaths["groups"] = "search/groups";
+ mCategoryPaths["wiki"] = "search/wiki";
+ mCategoryPaths["destinations"] = "destinations";
+ mCategoryPaths["classifieds"] = "classifieds";
}
BOOL LLFloaterSearch::postBuild()
@@ -79,13 +90,33 @@ void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent eve
void LLFloaterSearch::search(const LLSD &key)
{
- if (mBrowser)
+ if (! mBrowser)
+ {
+ return;
+ }
+
+ // get the URL for the search page
+ std::string url = getString("search_url");
+ if (! LLStringUtil::endsWith(url, "/"))
{
- std::string query = getString("search_url");
- if (key.has("id"))
- {
- query += std::string("?q=") + key["id"].asString();
- }
- mBrowser->navigateTo(query);
+ url += "/";
}
+
+ // work out the subdir to use based on the requested category
+ std::string category = key.has("category") ? key["category"].asString() : "";
+ if (mCategoryPaths.has(category))
+ {
+ url += mCategoryPaths[category].asString();
+ }
+ else
+ {
+ url += mCategoryPaths["all"].asString();
+ }
+
+ // append the search query string
+ std::string search_text = key.has("id") ? key["id"].asString() : "";
+ url += std::string("?q=") + search_text;
+
+ // and load the URL in the web view
+ mBrowser->navigateTo(url);
}
diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h
index 46af53b154..743107484f 100644
--- a/indra/newview/llfloatersearch.h
+++ b/indra/newview/llfloatersearch.h
@@ -56,9 +56,14 @@ public:
LLFloaterSearch(const LLSD& key);
/// show the search floater with a new search
+ /// see search() for details on the key parameter.
/*virtual*/ void onOpen(const LLSD& key);
- /// perform a search with the specific search term
+ /// perform a search with the specific search term.
+ /// The key should be a map that can contain the following keys:
+ /// - "id": specifies the text phrase to search for
+ /// - "category": one of "all" (default), "people", "places",
+ /// "events", "groups", "wiki", "destinations", "classifieds"
void search(const LLSD &key);
private:
@@ -68,6 +73,7 @@ private:
/*virtual*/ void handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event);
LLMediaCtrl *mBrowser;
+ LLSD mCategoryPaths;
};
#endif // LL_LLFLOATERSEARCH_H
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index 220fb3c8a0..c46eedbef2 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -112,7 +112,7 @@ LLGroupHandler gGroupHandler;
// static
void LLGroupActions::search()
{
- LLFloaterReg::showInstance("search", LLSD().insert("panel", "group"));
+ LLFloaterReg::showInstance("search", LLSD().insert("category", "groups"));
}
// static
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 081e55971d..4eb6061bea 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -44,6 +44,7 @@
#include "llinspect.h"
#include "llmutelist.h"
#include "llpanelblockedlist.h"
+#include "llstartup.h"
#include "llviewermenu.h"
#include "llvoiceclient.h"
@@ -277,12 +278,12 @@ void LLInspectAvatar::requestUpdate()
// login screen (which is useful to work on the layout).
if (mAvatarID.isNull())
{
- getChild<LLUICtrl>("user_subtitle")->
- setValue("Test subtitle");
- getChild<LLUICtrl>("user_details")->
- setValue("Test details");
- getChild<LLUICtrl>("user_partner")->
- setValue("Test partner");
+ if (LLStartUp::getStartupState() >= STATE_STARTED)
+ {
+ // once we're running we don't want to show the test floater
+ // for bogus LLUUID::null links
+ closeFloater();
+ }
return;
}
diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp
index e079e27e56..c78bcd6afe 100644
--- a/indra/newview/llinspectgroup.cpp
+++ b/indra/newview/llinspectgroup.cpp
@@ -37,6 +37,7 @@
#include "llgroupactions.h"
#include "llgroupmgr.h"
#include "llinspect.h"
+#include "llstartup.h"
// Linden libraries
#include "llcontrol.h" // LLCachedControl
@@ -200,6 +201,12 @@ void LLInspectGroup::requestUpdate()
// login screen (which is useful to work on the layout).
if (mGroupID.isNull())
{
+ if (LLStartUp::getStartupState() >= STATE_STARTED)
+ {
+ // once we're running we don't want to show the test floater
+ // for bogus LLUUID::null links
+ closeFloater();
+ }
return;
}
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index 2e6615dd91..b36b7cf50e 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -270,23 +270,42 @@ void LLLandmarkActions::getSLURLfromPosGlobal(const LLVector3d& global_pos, slur
{
U64 new_region_handle = to_region_handle(global_pos);
- LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponse,
+ LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseSLURL,
cb,
global_pos,
escaped,
- _1, _2, _3, _4);
+ _2);
LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
}
}
-void LLLandmarkActions::onRegionResponse(slurl_callback_t cb,
+void LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(const LLVector3d& global_pos, region_name_and_coords_callback_t cb)
+{
+ std::string sim_name;
+ LLSimInfo* sim_infop = LLWorldMap::getInstance()->simInfoFromPosGlobal(global_pos);
+ if (sim_infop)
+ {
+ LLVector3 pos = sim_infop->getLocalPos(global_pos);
+ cb(sim_infop->mName, llround(pos.mV[VX]), llround(pos.mV[VY]));
+ }
+ else
+ {
+ U64 new_region_handle = to_region_handle(global_pos);
+
+ LLWorldMap::url_callback_t url_cb = boost::bind(&LLLandmarkActions::onRegionResponseNameAndCoords,
+ cb,
+ global_pos,
+ _1);
+
+ LLWorldMap::getInstance()->sendHandleRegionRequest(new_region_handle, url_cb, std::string("unused"), false);
+ }
+}
+
+void LLLandmarkActions::onRegionResponseSLURL(slurl_callback_t cb,
const LLVector3d& global_pos,
bool escaped,
- U64 region_handle,
- const std::string& url,
- const LLUUID& snapshot_id,
- bool teleport)
+ const std::string& url)
{
std::string sim_name;
std::string slurl;
@@ -303,6 +322,18 @@ void LLLandmarkActions::onRegionResponse(slurl_callback_t cb,
cb(slurl);
}
+void LLLandmarkActions::onRegionResponseNameAndCoords(region_name_and_coords_callback_t cb,
+ const LLVector3d& global_pos,
+ U64 region_handle)
+{
+ LLSimInfo* sim_infop = LLWorldMap::getInstance()->simInfoFromHandle(region_handle);
+ if (sim_infop)
+ {
+ LLVector3 local_pos = sim_infop->getLocalPos(global_pos);
+ cb(sim_infop->mName, llround(local_pos.mV[VX]), llround(local_pos.mV[VY]));
+ }
+}
+
bool LLLandmarkActions::getLandmarkGlobalPos(const LLUUID& landmarkInventoryItemID, LLVector3d& posGlobal)
{
LLLandmark* landmark = LLLandmarkActions::getLandmark(landmarkInventoryItemID);
diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h
index e882db0a92..d651259790 100644
--- a/indra/newview/lllandmarkactions.h
+++ b/indra/newview/lllandmarkactions.h
@@ -43,6 +43,7 @@ class LLLandmarkActions
{
public:
typedef boost::function<void(std::string& slurl)> slurl_callback_t;
+ typedef boost::function<void(std::string& slurl, S32 x, S32 y)> region_name_and_coords_callback_t;
/**
* @brief Fetches landmark LLViewerInventoryItems for the given landmark name.
@@ -92,6 +93,8 @@ public:
*/
static void getSLURLfromPosGlobal(const LLVector3d& global_pos, slurl_callback_t cb, bool escaped = true);
+ static void getRegionNameAndCoordsFromPosGlobal(const LLVector3d& global_pos, region_name_and_coords_callback_t cb);
+
/**
* @brief Gets landmark global position specified by inventory LLUUID.
* Found position is placed into "posGlobal" variable.
@@ -120,13 +123,13 @@ private:
LLLandmarkActions();
LLLandmarkActions(const LLLandmarkActions&);
- static void onRegionResponse(slurl_callback_t cb,
+ static void onRegionResponseSLURL(slurl_callback_t cb,
const LLVector3d& global_pos,
bool escaped,
- U64 region_handle,
- const std::string& url,
- const LLUUID& snapshot_id,
- bool teleport);
+ const std::string& url);
+ static void onRegionResponseNameAndCoords(region_name_and_coords_callback_t cb,
+ const LLVector3d& global_pos,
+ U64 region_handle);
};
#endif //LL_LLLANDMARKACTIONS_H
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 19fee20740..b77415dfee 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -535,7 +535,7 @@ void LLNavigationBar::handleLoginComplete()
void LLNavigationBar::invokeSearch(std::string search_text)
{
- LLFloaterReg::showInstance("search", LLSD().insert("panel", "all").insert("id", LLSD(search_text)));
+ LLFloaterReg::showInstance("search", LLSD().insert("category", "all").insert("id", LLSD(search_text)));
}
void LLNavigationBar::clearHistoryCache()
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 0ce1ecc6ee..65994dfb30 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -130,15 +130,17 @@ public:
mToolTip = inv_item->getName() + '\n' + inv_item->getDescription();
}
- /*virtual*/ S32 getWidth(S32 first_char, S32 num_chars) const
+ /*virtual*/ void getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
{
if (num_chars == 0)
{
- return 0;
+ width = 0;
+ height = 0;
}
else
{
- return EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidth(mLabel.c_str());
+ width = EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidth(mLabel.c_str());
+ height = llmax(mImage->getHeight(), llceil(mStyle->getFont()->getLineHeight()));
}
}
@@ -169,10 +171,6 @@ public:
return right_x;
}
- /*virtual*/ S32 getMaxHeight() const
- {
- return llmax(mImage->getHeight(), llceil(mStyle->getFont()->getLineHeight()));
- }
/*virtual*/ bool canEdit() const { return false; }
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index b8ecd9556f..829d631473 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -94,6 +94,13 @@ LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const
return pos;
}
+LLVector3 LLSimInfo::getLocalPos(LLVector3d global_pos) const
+{
+ LLVector3d sim_origin = from_region_handle(mHandle);
+ return LLVector3(global_pos - sim_origin);
+}
+
+
//---------------------------------------------------------------------------
// World Map
diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h
index 9daee38752..366de8f071 100644
--- a/indra/newview/llworldmap.h
+++ b/indra/newview/llworldmap.h
@@ -78,6 +78,7 @@ public:
LLSimInfo();
LLVector3d getGlobalPos(LLVector3 local_pos) const;
+ LLVector3 getLocalPos(LLVector3d global_pos) const;
public:
U64 mHandle;
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 5446a08ebf..3aad5c7378 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -1897,20 +1897,20 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
id.toString(uuid_str);
uuid_str = uuid_str.substr(28);
sscanf(uuid_str.c_str(), "%X", &event_id);
- LLFloaterReg::showInstance("search", LLSD().insert("panel", "event").insert("id", event_id));
+ LLFloaterReg::showInstance("search", LLSD().insert("category", "events").insert("id", event_id));
break;
}
case MAP_ITEM_LAND_FOR_SALE:
case MAP_ITEM_LAND_FOR_SALE_ADULT:
{
LLFloaterReg::hideInstance("world_map");
- LLFloaterReg::showInstance("search", LLSD().insert("panel", "land").insert("id", id));
+ LLFloaterReg::showInstance("search", LLSD().insert("category", "destinations").insert("id", id));
break;
}
case MAP_ITEM_CLASSIFIED:
{
LLFloaterReg::hideInstance("world_map");
- LLFloaterReg::showInstance("search", LLSD().insert("panel", "classified").insert("id", id));
+ LLFloaterReg::showInstance("search", LLSD().insert("category", "classifieds").insert("id", id));
break;
}
default:
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index e2cc1481c4..287c997c65 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -305,6 +305,9 @@
name="GridlineShadowColor"
value="0 0 0 0.31" />
<color
+ name="GroupLinkColor"
+ reference="White" />
+ <color
name="GroupNotifyBoxColor"
value="0.3344 0.5456 0.5159 1" />
<color
diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
index a6a6e0ec22..11773c34dc 100644
--- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
@@ -405,7 +405,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
layout="topleft"
left_pad="0"
name="preview_base_anim"
- tool_tip="Use this to test your animation behavior while your avatar performs common actions">
+ tool_tip="Use this to test your animation behavior while your avatar performs common actions.">
<combo_box.item
label="Standing"
name="Standing" />
diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index cf9e3a82fc..285045f2c8 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -63,14 +63,14 @@
name="display" />
<panel
class="panel_preference"
- filename="panel_preferences_im.xml"
+ filename="panel_preferences_privacy.xml"
label="Privacy"
layout="topleft"
help_topic="preferences_im_tab"
name="im" />
<panel
class="panel_preference"
- filename="panel_preferences_audio.xml"
+ filename="panel_preferences_sound.xml"
label="Sound"
layout="topleft"
help_topic="preferences_audio_tab"
@@ -84,14 +84,14 @@
name="chat" />
<panel
class="panel_preference"
- filename="panel_preferences_popups.xml"
+ filename="panel_preferences_alerts.xml"
label="Alerts"
layout="topleft"
help_topic="preferences_msgs_tab"
name="msgs" />
<panel
class="panel_preference"
- filename="panel_preferences_input.xml"
+ filename="panel_preferences_setup.xml"
label="Setup"
layout="topleft"
help_topic="preferences_input_tab"
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 4ac0edca5a..296cde92e3 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -13,7 +13,7 @@
width="620">
<floater.string
name="search_url">
- http://eniac21.lindenlab.com:10001/viewer/search/
+ http://eniac21.lindenlab.com:10001/viewer
</floater.string>
<floater.string
name="loading_text">
diff --git a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
index 126bca2074..ce20b03919 100644
--- a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
@@ -133,16 +133,4 @@
secondlife:///app/group/00000000-0000-0000-0000-000000000000/inspect
</text>
- <text
- follows="left|top"
- font="SansSerif"
- height="20"
- left="0"
- max_length="65536"
- name="slurl_group_about"
- top_pad="4"
- width="150">
- secondlife:///app/group/00000000-0000-0000-0000-000000000000/about
- </text>
-
</floater>
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index 5bf481e9cb..181c80ebc7 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -47,7 +47,6 @@
value="Grumpity ProductEngine"
width="240"
word_wrap="false" />
- <!-- Leave text fields blank so it doesn't flash when data arrives off the network -->
<text
follows="all"
height="16"
diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml
index d3f599cbbf..5b166e83b8 100644
--- a/indra/newview/skins/default/xui/en/inspect_group.xml
+++ b/indra/newview/skins/default/xui/en/inspect_group.xml
@@ -84,7 +84,8 @@ L$123 to join
top="35"
left_delta="110"
tab_stop="false"
- width="18" />
+ width="18"
+ commit_callback.function="InspectGroup.ViewProfile" />
<button
follows="bottom|left"
height="23"
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 69d90e4c7d..2c9109449c 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
@@ -8,7 +8,7 @@
top="0"
width="320">
<icon
- follows="top|right|left"
+ follows="top|right|left"
height="24"
image_name="ListItem_Over"
layout="topleft"
@@ -40,23 +40,22 @@
follows="left|right"
font="SansSerifSmall"
font.style="BOLD"
- height="20"
+ height="15"
layout="topleft"
left_pad="5"
name="avatar_name"
- text_color="grey"
- top="4"
- use_ellipses="true"
+ top="6"
+ use_ellipses="true"
value="Unknown"
- width="162" />
+ width="166" />
<text
- follows="right"
- font="SansSerif"
- height="20"
+ follows="left"
+ font="SansSerifSmall"
+ height="15"
layout="topleft"
left_pad="10"
name="avatar_status"
- text_color="0.5 0.5 0.5 1"
+ text_color="LtGray_50"
value="Away"
width="50" />
<output_monitor
@@ -65,40 +64,31 @@
draw_border="false"
height="16"
layout="topleft"
- left_pad="3"
+ left_pad="0"
mouse_opaque="true"
name="speaking_indicator"
- top="4"
visible="true"
width="20" />
<button
follows="right"
- font="SansSerifBigBold"
- height="18"
- image_disabled="Info"
- image_disabled_selected="Info"
- image_hover_selected="Info"
- image_selected="Info"
- image_unselected="Info"
+ height="16"
+ image_pressed="Info_Press"
+ image_hover="Info_Over"
+ image_unselected="Info_Off"
layout="topleft"
- left_pad="2"
+ left_pad="5"
name="info_btn"
picture_style="true"
- top="2"
- width="18" />
+ width="16" />
<button
follows="right"
- font="SansSerifBigBold"
- height="18"
- image_disabled="profile_chevron_btn.tga"
- image_disabled_selected="profile_chevron_btn.tga"
- image_hover_selected="profile_chevron_btn_active.tga"
- image_selected="profile_chevron_btn_active.tga"
- image_unselected="profile_chevron_btn.tga"
+ height="16"
+ image_selected="BuyArrow_Press"
+ image_pressed="BuyArrow_Press"
+ image_unselected="BuyArrow_Press"
layout="topleft"
- left_pad="2"
+ left_pad="5"
name="profile_btn"
picture_style="true"
- top="2"
- width="18" />
+ width="16" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index b4847368b2..100b2d7aaa 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -79,7 +79,7 @@
label="Move"
layout="topleft"
name="movement_btn"
- tool_tip="Shows/Hide Movement controls"
+ tool_tip="Shows/hides movement controls"
top="6"
width="70">
<button.init_callback
@@ -116,7 +116,7 @@
label="View"
layout="topleft"
left="0"
- tool_tip="Shows/Hide Camera controls"
+ tool_tip="Shows/hides camera controls"
top="6"
name="camera_btn"
width="70">
@@ -167,12 +167,12 @@
image_disabled_selected="camera_presets/camera_presets_arrow_right.png"
image_disabled="camera_presets/camera_presets_arrow_right.png"
name="snapshot_settings"
- tool_tip="Snapshot Settings" />
+ tool_tip="Snapshot settings" />
<split_button.item
image_selected="camera_presets/camera_presets_snapshot.png"
image_unselected="camera_presets/camera_presets_snapshot.png"
name="snapshot"
- tool_tip="Take Snapshot" />
+ tool_tip="Take snapshot" />
</split_button>
</layout_panel>
<layout_panel
diff --git a/indra/newview/skins/default/xui/en/panel_chat_separator.xml b/indra/newview/skins/default/xui/en/panel_chat_separator.xml
index dd27595cdb..bacc750e86 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_separator.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_separator.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="left|right|top"
- height="10"
+ height="9"
layout="topleft"
left="8"
name="chat_separator_container">
@@ -12,5 +12,5 @@
height="1"
layout="topleft"
name="chat_separator_panel"
- top_pad="5" />
+ top_pad="3" />
</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 3f49bfad36..6eec0ffe7a 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
@@ -8,7 +8,7 @@
top="0"
width="320">
<icon
- follows="top|right|left"
+ follows="top|right|left"
height="24"
image_name="ListItem_Over"
layout="topleft"
@@ -29,14 +29,14 @@
width="320" />
<icon
follows="top|left"
- height="18"
- image_name="icon_group.tga"
+ height="20"
+ image_name="Generic_Group"
layout="topleft"
left="5"
mouse_opaque="true"
- name="group_icon"
+ name="group_icon"
top="4"
- width="18" />
+ width="20" />
<text
follows="left|right"
font="SansSerifSmall"
@@ -44,23 +44,20 @@
layout="topleft"
left_pad="5"
name="group_name"
- text_color="white"
top="7"
- use_ellipses="true"
+ use_ellipses="true"
value="Unknown"
width="263" />
<button
follows="right"
- height="18"
- image_disabled="Info"
- image_disabled_selected="Info"
- image_hover_selected="Info"
- image_selected="Info"
- image_unselected="Info"
+ height="16"
+ image_pressed="Info_Press"
+ image_hover="Info_Over"
+ image_unselected="Info_Off"
layout="topleft"
name="info_btn"
picture_style="true"
right="-5"
- top="4"
- width="18" />
+ top="4"
+ width="16" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
index 3c8bf31e13..4219d9f58f 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
@@ -18,7 +18,7 @@
left_delta="7"
left="0"
name="chat_box"
- tool_tip="Press Enter to say, Ctrl+Enter to shout."
+ tool_tip="Press Enter to say, Ctrl+Enter to shout"
top="3"
width="250" />
<output_monitor
@@ -41,7 +41,8 @@
layout="topleft"
left_pad="5"
label="Log"
- height="20">
+ height="20"
+ tool_tip="Shows/hides nearby chat log">
<button.commit_callback function="Floater.Toggle" parameter="nearby_chat"/>
</button>
<chiclet_talk
@@ -54,7 +55,9 @@
left_pad="5"
name="talk"
top="3"
- width="100" />
+ width="100"
+ speak_button.tool_tip="Turns microphone on/off"
+ show_button.tool_tip="Shows/hides voice control panel" />
<gesture_combo_box
follows="right"
height="20"
@@ -63,5 +66,6 @@
name="Gesture"
left_pad="5"
top="3"
- width="90" />
+ width="90"
+ tool_tip="Shows/hides gestures" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index e53edf891d..8274beb538 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
background_visible="true"
-color="DkGray"
+ draw_border="false"
follows="all"
height="570"
label="People"
@@ -39,24 +39,26 @@ color="DkGray"
height="23"
layout="topleft"
left="15"
+ label="Filter"
max_length="300"
name="filter_input"
- text_color="black"
+ text_color="Black"
top="3"
- width="300" />
+ width="303" />
<tab_container
follows="all"
- height="488"
+ height="500"
layout="topleft"
left="10"
name="tabs"
- bevel_style="in"
+ tab_min_width="70"
+ tab_height="30"
tab_position="top"
- top_pad="15"
+ top_pad="10"
width="313">
<panel
- follows="all"
- height="488"
+ follows="all"
+ height="500"
label="Nearby"
layout="topleft"
left="0"
@@ -66,7 +68,7 @@ color="DkGray"
width="313">
<avatar_list
follows="all"
- height="430"
+ height="470"
layout="topleft"
left="0"
name="avatar_list"
@@ -74,9 +76,6 @@ color="DkGray"
volume_column_width="20"
width="313" />
<panel
- background_visible="true"
- bevel_style="none"
- top_pad="0"
follows="left|right|bottom"
height="30"
label="bottom_panel"
@@ -86,7 +85,7 @@ color="DkGray"
width="313">
<button
follows="bottom|left"
- tool_tip="Change sort and view of residents list"
+ tool_tip="Options"
height="18"
image_disabled="OptionsMenu_Disabled"
image_selected="OptionsMenu_Press"
@@ -100,11 +99,8 @@ color="DkGray"
</panel>
</panel>
<panel
- background_visible="true"
- bevel_style="none"
follows="all"
- color="DkGray2"
- height="460"
+ height="500"
left="0"
top="0"
label="Friends"
@@ -114,7 +110,7 @@ color="DkGray"
width="313">
<accordion
follows="all"
- height="430"
+ height="470"
layout="topleft"
left="0"
name="friends_accordion"
@@ -153,9 +149,6 @@ color="DkGray"
</accordion_tab>
</accordion>
<panel
- background_visible="true"
- bevel_style="none"
- top_pad="0"
follows="left|right|bottom"
height="30"
label="bottom_panel"
@@ -165,7 +158,7 @@ color="DkGray"
width="313">
<button
follows="bottom|left"
- tool_tip="Change sort and view of friends list"
+ tool_tip="Options"
height="18"
image_disabled="OptionsMenu_Disabled"
image_selected="OptionsMenu_Press"
@@ -196,7 +189,8 @@ color="DkGray"
image_unselected="TrashItem_Off"
image_disabled="TrashItem_Disabled"
layout="topleft"
- left_pad="230"
+ left_pad="10"
+ right="-10"
name="del_btn"
picture_style="true"
tool_tip="Remove selected person from your Friends list"
@@ -205,10 +199,8 @@ color="DkGray"
</panel>
</panel>
<panel
- background_visible="true"
- bevel_style="none"
follows="all"
- height="390"
+ height="500"
label="Groups"
top="0"
layout="topleft"
@@ -217,16 +209,13 @@ color="DkGray"
width="313">
<group_list
follows="all"
- height="357"
+ height="470"
layout="topleft"
- color="DkGray2"
left="0"
name="group_list"
- top="2"
+ top="0"
width="313" />
<panel
- background_visible="true"
- bevel_style="none"
top_pad="0"
follows="left|right|bottom"
height="30"
@@ -237,7 +226,7 @@ color="DkGray"
width="313">
<button
follows="bottom|left"
- tool_tip="Change sort and view of groups list"
+ tool_tip="Options"
height="18"
image_disabled="OptionsMenu_Disabled"
image_selected="OptionsMenu_Press"
@@ -246,7 +235,7 @@ color="DkGray"
left="10"
name="groups_viewsort_btn"
picture_style="true"
- top="5"
+ top="7"
width="18" />
<button
follows="bottom|left"
@@ -265,8 +254,8 @@ color="DkGray"
follows="bottom|left"
height="10"
image_hover_selected="Activate_Checkmark"
- image_selected="Activate_Checkmark"
- image_unselected="Activate_Checkmark"
+ image_selected="Activate_Checkmark"
+ image_unselected="Activate_Checkmark"
layout="topleft"
left_pad="24"
name="activate_btn"
@@ -280,7 +269,8 @@ color="DkGray"
image_selected="TrashItem_Press"
image_unselected="TrashItem_Off"
layout="topleft"
- left_pad="196"
+ left_pad="10"
+ right="-10"
name="minus_btn"
picture_style="true"
tool_tip="Leave selected group"
@@ -289,20 +279,17 @@ color="DkGray"
</panel>
</panel>
<panel
- background_visible="true"
- bevel_style="none"
top="0"
follows="all"
- height="390"
+ height="500"
label="Recent"
layout="topleft"
help_topic="people_recent_tab"
name="recent_panel"
width="313">
<avatar_list
- color="DkGray2"
follows="all"
- height="357"
+ height="470"
layout="topleft"
left="0"
name="avatar_list"
@@ -321,8 +308,7 @@ color="DkGray"
width="313">
<button
follows="bottom|left"
- font="SansSerifBigBold"
- tool_tip="Change sort and view of recent residents list"
+ tool_tip="Options"
height="18"
image_disabled="OptionsMenu_Disabled"
image_selected="OptionsMenu_Press"
@@ -331,7 +317,7 @@ color="DkGray"
left="10"
name="recent_viewsort_btn"
picture_style="true"
- top="5"
+ top="7"
width="18" />
</panel>
</panel>
@@ -340,7 +326,7 @@ color="DkGray"
animate="false"
border_size="0"
follows="left|right|bottom"
- height="27"
+ height="25"
layout="topleft"
left="10"
name="button_bar"
@@ -357,8 +343,8 @@ color="DkGray"
width="65">
<button
follows="top|left|right"
- font="SansSerifSmallBold"
- height="25"
+ font="SansSerifSmall"
+ height="19"
label="Profile"
layout="topleft"
name="view_profile_btn"
@@ -374,29 +360,29 @@ color="DkGray"
min_width="85"
name="add_friend_btn_panel"
top_delta="0"
- width="85">
+ width="50">
<button
follows="top|left|right"
- font="SansSerifSmallBold"
- height="25"
- label="Add Friend"
+ font="SansSerifSmall"
+ height="19"
+ label="Add"
layout="topleft"
name="add_friend_btn"
tool_tip="Add selected resident to your friends List"
- width="85" />
+ width="50" />
</layout_panel>
<layout_panel
default_tab_group="1"
follows="left|top|right"
- height="25"
+ height="19"
layout="topleft"
min_width="80"
name="group_info_btn_panel"
width="80">
<button
follows="top|left|right"
- font="SansSerifSmallBold"
- height="25"
+ font="SansSerifSmall"
+ height="19"
label="Group Profile"
layout="topleft"
name="group_info_btn"
@@ -414,8 +400,8 @@ color="DkGray"
width="45">
<button
follows="top|left|right"
- font="SansSerifSmallBold"
- height="25"
+ font="SansSerifSmall"
+ height="19"
label="Chat"
layout="topleft"
name="chat_btn"
@@ -433,8 +419,8 @@ color="DkGray"
width="35">
<button
follows="top|left|right"
- font="SansSerifSmallBold"
- height="25"
+ font="SansSerifSmall"
+ height="19"
label="IM"
layout="topleft"
name="im_btn"
@@ -454,8 +440,8 @@ color="DkGray"
<button
enabled="false"
follows="top|left|right"
- font="SansSerifSmallBold"
- height="25"
+ font="SansSerifSmall"
+ height="19"
label="Call"
layout="topleft"
name="call_btn"
@@ -472,15 +458,15 @@ color="DkGray"
width="65">
<button
follows="left|top|right"
- font="SansSerifSmallBold"
- height="25"
+ font="SansSerifSmall"
+ height="19"
label="Teleport"
layout="topleft"
name="teleport_btn"
tool_tip="Offer teleport"
width="65" />
</layout_panel>
- <layout_panel
+ <layout_panel
default_tab_group="1"
enabled="false"
follows="left|top|right"
@@ -494,8 +480,8 @@ color="DkGray"
<button
enabled="false"
follows="top|left|right"
- font="SansSerifSmallBold"
- height="25"
+ font="SansSerifSmall"
+ height="19"
label="Share"
layout="topleft"
name="share_btn"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
new file mode 100644
index 0000000000..159323538c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="true"
+ height="500"
+ label="Popups"
+ layout="topleft"
+ left="0"
+ name="popups"
+ top="500"
+ width="517">
+ <text
+ type="string"
+ length="1"
+ follows="top|left"
+ height="12"
+ layout="topleft"
+ left="30"
+ name="tell_me_label"
+ top="10"
+ width="300">
+ Tell me:
+ </text>
+ <check_box
+ control_name="NotifyMoneyChange"
+ height="16"
+ label="When I spend or get L$"
+ layout="topleft"
+ left_delta="50"
+ name="notify_money_change_checkbox"
+ top_pad="4"
+ width="300" />
+ <check_box
+ control_name="ChatOnlineNotification"
+ enabled="false"
+ height="16"
+ label="When my friends log out or in"
+ layout="topleft"
+ left_delta="0"
+ name="friends_online_notify_checkbox"
+ top_pad="4"
+ width="300" />
+ <text
+ type="string"
+ length="1"
+ follows="top|left"
+ font="SansSerifBold"
+ height="12"
+ layout="topleft"
+ left="30"
+ name="show_label"
+ top_pad="14"
+ width="450">
+ Always show these alerts:
+ </text>
+ <scroll_list
+ follows="top|left"
+ height="92"
+ layout="topleft"
+ left="10"
+ multi_select="true"
+ name="enabled_popups"
+ width="475" />
+ <button
+ enabled_control="FirstSelectedDisabledPopups"
+ follows="top|left"
+ height="20"
+ image_disabled="PushButton_Disabled"
+ image_disabled_selected="PushButton_Disabled"
+ image_overlay="Arrow_Up"
+ image_selected="PushButton_Selected"
+ image_unselected="PushButton_Off"
+ hover_glow_amount="0.15"
+ layout="topleft"
+ left_delta="137"
+ name="enable_this_popup"
+ picture_style="true"
+ top_pad="10"
+ width="43">
+ <button.commit_callback
+ function="Pref.ClickEnablePopup" />
+ </button>
+ <button
+ enabled_control="FirstSelectedEnabledPopups"
+ follows="top|left"
+ height="20"
+ image_disabled="PushButton_Disabled"
+ image_disabled_selected="PushButton_Disabled"
+ image_overlay="Arrow_Down"
+ image_selected="PushButton_Selected"
+ image_unselected="PushButton_Off"
+ hover_glow_amount="0.15"
+ layout="topleft"
+ left_pad="50"
+ name="disable_this_popup"
+ picture_style="true"
+ top_delta="0"
+ width="43">
+ <button.commit_callback
+ function="Pref.ClickDisablePopup" />
+ </button>
+ <text
+ type="string"
+ length="1"
+ follows="top|left"
+ font="SansSerifBold"
+ height="12"
+ layout="topleft"
+ left="30"
+ name="dont_show_label"
+ top_pad="10"
+ width="450">
+ Never show these alerts:
+ </text>
+ <scroll_list
+ follows="top|left"
+ height="92"
+ layout="topleft"
+ left="10"
+ multi_select="true"
+ name="disabled_popups"
+ width="475" />
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index f4696152f9..051cb51d25 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -29,7 +29,7 @@
height="16"
label="Medium"
layout="topleft"
- left_pad="12"
+ left_delta="145"
name="radio2"
top_delta="0"
width="125" />
@@ -37,7 +37,7 @@
height="16"
label="Large"
layout="topleft"
- left_pad="12"
+ left_delta="170"
name="radio3"
top_delta="0"
width="125" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 84fcf21623..519b469868 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -26,7 +26,7 @@
height="16"
label="Use fullscreen"
layout="topleft"
- left_delta="30"
+ left_delta="50"
name="windowed mode"
top_pad="4"
width="175">
@@ -103,7 +103,7 @@
increment="0.025"
initial_value="1"
layout="topleft"
- left_delta="32"
+ left_delta="52"
max_val="1.4"
min_val="0.75"
name="ui_scale_slider"
@@ -304,7 +304,7 @@
layout="topleft"
left_delta="0"
name="BasicShaders"
- tool_tip="Disabling this option may prevent some graphics card drivers from crashing."
+ tool_tip="Disabling this option may prevent some graphics card drivers from crashing"
top_pad="1"
width="315">
<check_box.commit_callback
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
new file mode 100644
index 0000000000..c4dc8834db
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="true"
+ follows="left|top|right|bottom"
+ height="408"
+ label="Communication"
+ layout="topleft"
+ left="102"
+ name="im"
+ top="1"
+ width="517">
+ <panel.string
+ name="log_in_to_change">
+ log in to change
+ </panel.string>
+ <button
+ follows="left|bottom"
+ height="20"
+ label="Clear History"
+ layout="topleft"
+ left="30"
+ name="clear_cache"
+ top="10"
+ width="145">
+ <button.commit_callback
+ function="Pref.WebClearCache" />
+ </button>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_pad="10"
+ mouse_opaque="false"
+ name="cache_size_label_l"
+ top_delta="3"
+ text_color="LtGray_50"
+ width="300">
+ (Locations, images, web, search history)
+ </text>
+ <check_box
+ height="16"
+ enabled="false"
+ label="Only friends and groups know I'm online"
+ layout="topleft"
+ left="30"
+ name="online_visibility"
+ top_pad="20"
+ width="350" />
+ <check_box
+ enabled_control="EnableVoiceChat"
+ control_name="VoiceCallsFriendsOnly"
+ height="16"
+ label="Only friends and groups can call or IM me"
+ layout="topleft"
+ left="30"
+ name="voice_call_friends_only_check"
+ top_pad="10"
+ width="350" />
+ <check_box
+ enabled_control="EnableVoiceChat"
+ control_name="AutoDisengageMic"
+ height="16"
+ label="Switch off microphone when ending calls"
+ layout="topleft"
+ left="30"
+ name="auto_disengage_mic_check"
+ top_pad="10"
+ width="350" />
+ <check_box
+ control_name="CookiesEnabled"
+ height="16"
+ label="Accept cookies"
+ layout="topleft"
+ left="30"
+ name="cookies_enabled"
+ top_pad="10"
+ width="350" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="30"
+ mouse_opaque="false"
+ top_pad="10"
+ width="350">
+ Logs:
+ </text>
+ <check_box
+ enabled="false"
+ control_name="LogInstantMessages"
+ height="16"
+ label="Save logs on my computer"
+ layout="topleft"
+ left="30"
+ name="log_instant_messages"
+ top_pad="10"
+ width="350">
+ <check_box.commit_callback
+ function="Pref.Logging" />
+ </check_box>
+ <radio_group
+ control_name="IMLogOptions"
+ enabled="false"
+ height="80"
+ layout="topleft"
+ left_delta="50"
+ name="ChatIMLogs"
+ width="350"
+ top_pad="0">
+ <radio_item
+ height="16"
+ label="Chat"
+ layout="topleft"
+ left="0"
+ name="radio1"
+ top="3"
+ width="200" />
+ <radio_item
+ height="16"
+ label="IM"
+ layout="topleft"
+ left_delta="0"
+ name="radio2"
+ top_pad="3"
+ width="200" />
+ <radio_item
+ height="16"
+ label="Both, together"
+ layout="topleft"
+ left_delta="0"
+ name="radio3"
+ top_pad="3"
+ width="200" />
+ <radio_item
+ height="16"
+ label="Both, separate"
+ layout="topleft"
+ left_delta="0"
+ name="radio4"
+ top_pad="3"
+ width="200" />
+ </radio_group>
+ <check_box
+ control_name="LogTimestamp"
+ enabled="false"
+ height="16"
+ label="Add timestamp"
+ layout="topleft"
+ left_delta="0"
+ name="show_timestamps_check_im"
+ top_pad="10"
+ width="237" />
+ <line_editor
+ bottom="366"
+ control_name="InstantMessageLogFolder"
+ enabled="false"
+ follows="top|left|right"
+ halign="right"
+ height="19"
+ layout="topleft"
+ left_delta="0"
+ mouse_opaque="false"
+ name="log_path_string"
+ top_pad="5" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="0"
+ mouse_opaque="false"
+ top_pad="1"
+ width="128"
+ text_color="LtGray_50">
+ Location of logs
+ </text>
+ <button
+ enabled="false"
+ follows="right|bottom"
+ height="20"
+ label="Browse"
+ label_selected="Browse"
+ layout="topleft"
+ left_pad="115"
+ name="log_path_button"
+ top_delta="-21"
+ width="145">
+ <button.commit_callback
+ function="Pref.LogPath" />
+ </button>
+ <button
+ follows="left|bottom"
+ height="20"
+ label="Block List"
+ layout="topleft"
+ left="30"
+ name="block_list"
+ top_pad="20"
+ width="145">
+ <button.commit_callback
+ function="SideTray.ShowPanel"
+ parameter="panel_block_list_sidetray" />
+ </button>
+ </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
new file mode 100644
index 0000000000..df347cfb5f
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -0,0 +1,341 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="true"
+ follows="left|top|right|bottom"
+ height="408"
+ label="Input &amp; Camera"
+ layout="topleft"
+ left="102"
+ name="Input panel"
+ top="1"
+ width="517">
+ <button
+ height="20"
+ label="Other Devices"
+ layout="topleft"
+ left="30"
+ name="joystick_setup_button"
+ top="10"
+ width="155">
+ <button.commit_callback
+ function="Floater.Show"
+ parameter="pref_joystick" />
+ </button>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="Mouselook:"
+ top_pad="10"
+ width="300">
+ Mouselook:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="50"
+ name=" Mouse Sensitivity"
+ top_pad="10"
+ width="150">
+ Mouse sensitivity
+ </text>
+ <slider
+ control_name="MouseSensitivity"
+ follows="left|top"
+ height="15"
+ initial_value="2"
+ layout="topleft"
+ show_text="false"
+ left_delta="150"
+ max_val="15"
+ name="mouse_sensitivity"
+ top_delta="0"
+ width="145" />
+ <check_box
+ control_name="InvertMouse"
+ height="16"
+ label="Invert"
+ layout="topleft"
+ left_pad="2"
+ name="invert_mouse"
+ top_delta="0"
+ width="128" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="Network:"
+ mouse_opaque="false"
+ top_pad="4"
+ width="300">
+ Network:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="50"
+ name="Maximum bandwidth"
+ mouse_opaque="false"
+ top_pad="10"
+ width="200">
+ Maximum bandwidth
+ </text>
+ <slider
+ can_edit_text="true"
+ control_name="ThrottleBandwidthKBPS"
+ decimal_digits="0"
+ follows="left|top"
+ height="15"
+ increment="10"
+ initial_value="50"
+ layout="topleft"
+ left_delta="150"
+ max_val="1500"
+ min_val="50"
+ name="max_bandwidth"
+ top_delta="0"
+ width="180" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_pad="6"
+ mouse_opaque="false"
+ name="text_box2"
+ top_delta="1"
+ width="200">
+ kbps
+ </text>
+ <check_box
+ control_name="ConnectionPortEnabled"
+ height="16"
+ label="Custom port"
+ layout="topleft"
+ left="77"
+ name="connection_port_enabled"
+ top_pad="20"
+ width="256">
+ <check_box.commit_callback
+ function="Notification.Show"
+ parameter="ChangeConnectionPort" />
+ </check_box>
+ <spinner
+ control_name="BrowserProxyPort"
+ enabled_control="BrowserProxyEnabled"
+ decimal_digits="0"
+ follows="left|top"
+ height="16"
+ increment="1"
+ initial_value="80"
+ label="Port Number:"
+ label_width="75"
+ layout="topleft"
+ left_delta="160"
+ max_val="12000"
+ min_val="10"
+ name="web_proxy_port"
+ top_delta="-2"
+ width="140" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="80"
+ mouse_opaque="false"
+ name="cache_size_label_l"
+ top_pad="20"
+ width="200">
+ Cache size
+ </text>
+ <slider
+ can_edit_text="true"
+ control_name="CacheSize"
+ decimal_digits="0"
+ follows="left|top"
+ height="15"
+ increment="10"
+ initial_value="50"
+ layout="topleft"
+ left_delta="150"
+ max_val="1000"
+ min_val="10"
+ name="cache_size"
+ top_delta="-1"
+ width="180" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_pad="6"
+ mouse_opaque="false"
+ name="text_box5"
+ top_delta="1"
+ width="40">
+ MB
+ </text>
+ <line_editor
+ control_name="CacheLocationTopFolder"
+ border_style="line"
+ border_thickness="1"
+ enabled="false"
+ follows="left|top"
+ font="SansSerif"
+ handle_edit_keys_directly="true"
+ height="20"
+ layout="topleft"
+ left="80"
+ max_length="4096"
+ name="cache_location"
+ top_pad="20"
+ width="205" />
+ <button
+ follows="left|top"
+ height="22"
+ label="Browse"
+ label_selected="Browse"
+ layout="topleft"
+ left_pad="5"
+ name="set_cache"
+ top_delta="-1"
+ width="100">
+ <button.commit_callback
+ function="Pref.SetCache" />
+ </button>
+ <button
+ follows="left|top"
+ height="22"
+ label="Reset"
+ label_selected="Set"
+ layout="topleft"
+ left_pad="3"
+ name="reset_cache"
+ top_delta="0"
+ width="100">
+ <button.commit_callback
+ function="Pref.ResetCache" />
+ </button>
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="80"
+ name="Cache location"
+ top_delta="20"
+ width="300"
+ text_color="LtGray_50">
+ Cache location
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="Web:"
+ top_pad="5"
+ width="300">
+ Web:
+ </text>
+ <radio_group
+ control_name="UseExternalBrowser"
+ draw_border="false"
+ follows="top|left"
+ height="40"
+ layout="topleft"
+ left_delta="50"
+ name="use_external_browser"
+ top_pad="4"
+ width="480">
+ <radio_item
+ height="20"
+ label="Use built-in browser"
+ layout="topleft"
+ left="0"
+ name="internal"
+ tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside [APP_NAME]."
+ top="0"
+ width="480" />
+ <radio_item
+ height="20"
+ label="Use my browser (IE, Firefox)"
+ layout="topleft"
+ left_delta="0"
+ name="external"
+ tool_tip="Use the default system web browser for help, web links, etc. Not recommended if running full screen."
+ top_delta="20"
+ width="480" />
+ </radio_group>
+
+ <check_box
+ top_delta="4"
+ enabled="true"
+ follows="left|top"
+ height="16"
+ initial_value="false"
+ label="Web Proxy"
+ left_delta="0"
+ mouse_opaque="true"
+ name="web_proxy_enabled"
+ radio_style="false"
+ width="400" />
+ <line_editor
+ control_name="BrowserProxyAddress"
+ enabled_control="BrowserProxyEnabled"
+ follows="left|top"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left_delta="1"
+ name="web_proxy_editor"
+ tool_tip="The name or IP address of the proxy you would like to use"
+ top_pad="4"
+ width="200" />
+ <button
+ follows="left|top"
+ height="22"
+ enabled="false"
+ label="Browse"
+ label_selected="Browse"
+ layout="topleft"
+ left_pad="5"
+ name="set_proxy"
+ top_pad="-21"
+ width="100">
+ <button.commit_callback
+ function="Pref.SetCache" />
+ </button>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="-203"
+ name="Proxy location"
+ top_delta="20"
+ width="300"
+ text_color="LtGray_50">
+ Proxy location
+ </text></panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
new file mode 100644
index 0000000000..f5f9850a4e
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -0,0 +1,457 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="true"
+ follows="left|top|right|bottom"
+ height="408"
+ label="Audio &amp; Video"
+ layout="topleft"
+ left="102"
+ name="Preference Media panel"
+ top="1"
+ width="517">
+ <slider
+ control_name="AudioLevelMaster"
+ follows="left|top"
+ height="15"
+ increment="0.05"
+ initial_value="0.5"
+ label="Master Volume"
+ label_width="125"
+ layout="topleft"
+ left="30"
+ name="System Volume"
+ show_text="false"
+ top_pad="5"
+ volume="true"
+ width="425">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteAudio" />
+ </slider>
+ <button
+ control_name="MuteAudio"
+ follows="top|right"
+ height="16"
+ image_selected="icn_speaker-muted_dark.tga"
+ image_unselected="icn_speaker_dark.tga"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="30"
+ name="mute_audio"
+ picture_style="true"
+ tab_stop="false"
+ top_delta="-1"
+ width="25" />
+ <check_box
+ control_name="MuteWhenMinimized"
+ height="16"
+ initial_value="true"
+ label="Mute if minimized"
+ layout="topleft"
+ left="165"
+ name="mute_when_minimized"
+ top_pad="5"
+ width="215" />
+ <slider
+ control_name="AudioLevelAmbient"
+ disabled_control="MuteAudio"
+ follows="left|topt"
+ height="15"
+ increment="0.05"
+ initial_value="0.5"
+ label="Ambient"
+ label_width="125"
+ layout="topleft"
+ left="30"
+ name="Wind Volume"
+ show_text="false"
+ top_pad="5"
+ volume="true"
+ width="300">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteAmbient" />
+ </slider>
+ <button
+ control_name="MuteAmbient"
+ disabled_control="MuteAudio"
+ follows="top|right"
+ height="16"
+ image_selected="icn_speaker-muted_dark.tga"
+ image_unselected="icn_speaker_dark.tga"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="30"
+ name="mute_wind"
+ picture_style="true"
+ tab_stop="false"
+ top_delta="-1"
+ width="25" />
+ <slider
+ control_name="AudioLevelSFX"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="15"
+ increment="0.05"
+ initial_value="0.5"
+ label="Sounds"
+ label_width="125"
+ layout="topleft"
+ left="30"
+ name="SFX Volume"
+ show_text="false"
+ top_pad="5"
+ volume="true"
+ width="300">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteSounds" />
+ </slider>
+ <button
+ control_name="MuteSounds"
+ disabled_control="MuteAudio"
+ follows="top|right"
+ height="16"
+ image_selected="icn_speaker-muted_dark.tga"
+ image_unselected="icn_speaker_dark.tga"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="30"
+ name="mute_sfx"
+ picture_style="true"
+ tab_stop="false"
+ top_delta="-1"
+ width="25" />
+ <slider
+ control_name="AudioLevelMedia"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="15"
+ increment="0.05"
+ initial_value="0.5"
+ label="Media"
+ label_width="125"
+ layout="topleft"
+ left="30"
+ name="Media Volume"
+ show_text="false"
+ top_pad="5"
+ volume="true"
+ width="300">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteMedia" />
+ </slider>
+ <button
+ control_name="MuteMedia"
+ disabled_control="MuteAudio"
+ follows="top|right"
+ height="16"
+ image_selected="icn_speaker-muted_dark.tga"
+ image_unselected="icn_speaker_dark.tga"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="30"
+ name="mute_media"
+ picture_style="true"
+ tab_stop="false"
+ top_delta="-1"
+ width="25" />
+ <slider
+ control_name="AudioLevelUI"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="15"
+ increment="0.05"
+ initial_value="0.5"
+ label="UI"
+ label_width="125"
+ layout="topleft"
+ left="30"
+ name="UI Volume"
+ show_text="false"
+ top_pad="5"
+ volume="true"
+ width="300">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteUI" />
+ </slider>
+ <button
+ control_name="MuteUI"
+ disabled_control="MuteAudio"
+ follows="top|right"
+ height="16"
+ image_selected="icn_speaker-muted_dark.tga"
+ image_unselected="icn_speaker_dark.tga"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="30"
+ name="mute_ui"
+ picture_style="true"
+ tab_stop="false"
+ top_delta="-1"
+ width="25" />
+ <slider
+ control_name="AudioLevelMusic"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="15"
+ increment="0.05"
+ initial_value="0.5"
+ label="Music"
+ label_width="125"
+ layout="topleft"
+ left="30"
+ name="Music Volume"
+ show_text="false"
+ top_pad="5"
+ volume="true"
+ width="300">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteMusic" />
+ </slider>
+ <button
+ control_name="MuteMusic"
+ disabled_control="MuteAudio"
+ follows="top|right"
+ height="16"
+ image_selected="icn_speaker-muted_dark.tga"
+ image_unselected="icn_speaker_dark.tga"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="30"
+ name="mute_music"
+ picture_style="true"
+ tab_stop="false"
+ top_delta="-1"
+ width="25" />
+ <slider
+ control_name="AudioLevelVoice"
+ disabled_control="MuteAudio"
+ follows="left|top"
+ height="15"
+ increment="0.05"
+ initial_value="0.5"
+ label="Voice"
+ label_width="125"
+ layout="topleft"
+ left="30"
+ name="Voice Volume"
+ show_text="false"
+ top_pad="5"
+ volume="true"
+ width="300">
+ <slider.commit_callback
+ function="Pref.setControlFalse"
+ parameter="MuteVoice" />
+ </slider>
+ <button
+ control_name="MuteVoice"
+ disabled_control="MuteAudio"
+ follows="top|right"
+ height="16"
+ image_selected="icn_speaker-muted_dark.tga"
+ image_unselected="icn_speaker_dark.tga"
+ is_toggle="true"
+ layout="topleft"
+ left_pad="30"
+ name="mute_voice"
+ picture_style="true"
+ tab_stop="false"
+ top_delta="-1"
+ width="25" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="30"
+ name="Listen from"
+ top_pad="5"
+ width="100">
+ Listen from:
+ </text>
+ <radio_group
+ enabled_control="EnableVoiceChat"
+ control_name="VoiceEarLocation"
+ draw_border="false"
+ height="40"
+ layout="topleft"
+ left_delta="50"
+ name="ear_location"
+ top_pad="0"
+ width="364">
+ <radio_item
+ height="16"
+ label="Listen from camera position"
+ layout="topleft"
+ left="3"
+ name="0"
+ top="3"
+ width="315" />
+ <radio_item
+ height="16"
+ label="Listen from avatar position"
+ layout="topleft"
+ left_delta="0"
+ name="1"
+ top_delta="16"
+ width="315" />
+ </radio_group>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="30"
+ name="Sound out/in"
+ top_pad="2"
+ width="100">
+ Sound out/in:
+ </text>
+ <button
+ enabled_control="EnableVoiceChat"
+ follows="left|top"
+ height="20"
+ label="Device Settings"
+ layout="topleft"
+ left_delta="55"
+ name="device_settings_btn"
+ top_pad="0"
+ width="155">
+ <button.commit_callback
+ function="Floater.Show"
+ parameter="pref_voicedevicesettings" />
+ </button>
+ <panel.string
+ name="default_text">
+ Default
+ </panel.string>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="30"
+ name="Input device (microphone):"
+ top_pad="5"
+ width="200">
+ Input device (microphone):
+ </text>
+ <combo_box
+ height="18"
+ layout="topleft"
+ left_delta="70"
+ max_chars="128"
+ name="voice_input_device"
+ top_pad="2"
+ width="225" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="30"
+ name="Output device (speakers):"
+ top_pad="5"
+ width="200">
+ Output device (speakers):
+ </text>
+ <combo_box
+ height="18"
+ layout="topleft"
+ left_delta="70"
+ max_chars="128"
+ name="voice_output_device"
+ top_pad="2"
+ width="225" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="30"
+ name="Input level:"
+ top_pad="10"
+ width="200">
+ Input Level
+ </text>
+ <slider_bar
+ follows="left|top"
+ height="17"
+ increment="0.05"
+ initial_value="1.0"
+ layout="topleft"
+ left_delta="125"
+ max_val="2"
+ name="mic_volume_slider"
+ tool_tip="Change the volume using this slider"
+ top_delta="-1"
+ width="175" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left_pad="5"
+ name="wait_text"
+ top_delta="1"
+ width="200">
+ Please wait
+ </text>
+ <locate
+ height="20"
+ layout="topleft"
+ left_delta="0"
+ name="bar0"
+ top_delta="5"
+ width="20" />
+ <locate
+ height="20"
+ layout="topleft"
+ left_pad="2"
+ name="bar1"
+ top_delta="0"
+ width="20" />
+ <locate
+ height="20"
+ layout="topleft"
+ left_pad="2"
+ name="bar2"
+ top_delta="0"
+ width="20" />
+ <locate
+ height="20"
+ layout="topleft"
+ left_pad="2"
+ name="bar3"
+ top_delta="0"
+ width="20" />
+ <locate
+ height="20"
+ layout="topleft"
+ left_pad="2"
+ name="bar4"
+ top_delta="0"
+ width="20" />
+ <text
+ type="string"
+ height="40"
+ left="30"
+ name="voice_intro_text1"
+ top_pad="-4"
+ width="480"
+ word_wrap="true">
+ Adjust the slider to control how loud you sound to other Residents. To test the input level, simply speak into your microphone.
+ </text>
+
+
+</panel>
diff --git a/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml b/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml
index 8078579806..888b4eaf7c 100644
--- a/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml
+++ b/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<flat_list_view
allow_select="true"
- color="DkGray2"
+ color="PanelFocusBackgroundColor"
item_pad="0"
keep_one_selected="true"
multi_select="false"
diff --git a/indra/newview/skins/default/xui/en/widgets/textbase.xml b/indra/newview/skins/default/xui/en/widgets/textbase.xml
index e5dc022633..6dd92ea34b 100644
--- a/indra/newview/skins/default/xui/en/widgets/textbase.xml
+++ b/indra/newview/skins/default/xui/en/widgets/textbase.xml
@@ -1,4 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<textbase allow_scroll="true"
- h_pad="5"
- v_pad="5"/>
+<textbase/>