diff options
Diffstat (limited to 'indra')
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 & 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 & 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/> |