diff options
author | gabriel lee <gabriel@lindenlab.com> | 2010-02-02 10:58:47 +0000 |
---|---|---|
committer | gabriel lee <gabriel@lindenlab.com> | 2010-02-02 10:58:47 +0000 |
commit | 95d0df4ab05c4cfcc78f684ab28d36b9cc84410e (patch) | |
tree | b1621cd22044edade98019af9d1b77383e3b88ef /indra | |
parent | 5dfdb0d5a41143512180390193ce79644bcb9469 (diff) | |
parent | 4ad357ec70e15afdfe78816990cb23c7ba17619c (diff) |
merged back my last changes
Diffstat (limited to 'indra')
117 files changed, 2242 insertions, 1117 deletions
diff --git a/indra/cmake/DragDrop.cmake b/indra/cmake/DragDrop.cmake new file mode 100644 index 0000000000..c0424396e5 --- /dev/null +++ b/indra/cmake/DragDrop.cmake @@ -0,0 +1,23 @@ +# -*- cmake -*- + +if (VIEWER) + + set(OS_DRAG_DROP ON CACHE BOOL "Build the viewer with OS level drag and drop turned on or off") + + if (OS_DRAG_DROP) + + if (WINDOWS) + add_definitions(-DLL_OS_DRAGDROP_ENABLED=1) + endif (WINDOWS) + + if (DARWIN) + add_definitions(-DLL_OS_DRAGDROP_ENABLED=1) + endif (DARWIN) + + if (LINUX) + add_definitions(-DLL_OS_DRAGDROP_ENABLED=0) + endif (LINUX) + + endif (OS_DRAG_DROP) + +endif (VIEWER) diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h index 5a4c644859..09812de2b8 100644 --- a/indra/llcommon/llerror.h +++ b/indra/llcommon/llerror.h @@ -242,7 +242,7 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG; do { \ static LLError::CallSite _site( \ level, __FILE__, __LINE__, typeid(_LL_CLASS_TO_LOG), __FUNCTION__, broadTag, narrowTag, once);\ - if (_site.shouldLog()) \ + if (LL_UNLIKELY(_site.shouldLog())) \ { \ std::ostringstream* _out = LLError::Log::out(); \ (*_out) diff --git a/indra/llcommon/llpointer.h b/indra/llcommon/llpointer.h index 2c37eadcc6..e6c736a263 100644 --- a/indra/llcommon/llpointer.h +++ b/indra/llcommon/llpointer.h @@ -95,7 +95,6 @@ public: bool notNull() const { return (mPointer != NULL); } operator Type*() const { return mPointer; } - operator const Type*() const { return mPointer; } bool operator !=(Type* ptr) const { return (mPointer != ptr); } bool operator ==(Type* ptr) const { return (mPointer == ptr); } bool operator ==(const LLPointer<Type>& ptr) const { return (mPointer == ptr.mPointer); } diff --git a/indra/llcommon/llrefcount.cpp b/indra/llcommon/llrefcount.cpp index 33b6875fb0..c90b52f482 100644 --- a/indra/llcommon/llrefcount.cpp +++ b/indra/llcommon/llrefcount.cpp @@ -35,6 +35,17 @@ #include "llerror.h" +LLRefCount::LLRefCount(const LLRefCount& other) +: mRef(0) +{ +} + +LLRefCount& LLRefCount::operator=(const LLRefCount&) +{ + // do nothing, since ref count is specific to *this* reference + return *this; +} + LLRefCount::LLRefCount() : mRef(0) { diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h index 9ab844eb22..a18f6706a9 100644 --- a/indra/llcommon/llrefcount.h +++ b/indra/llcommon/llrefcount.h @@ -41,22 +41,20 @@ class LL_COMMON_API LLRefCount { -private: - LLRefCount(const LLRefCount& other); // no implementation -private: - LLRefCount& operator=(const LLRefCount&); // no implementation protected: + LLRefCount(const LLRefCount& other); + LLRefCount& operator=(const LLRefCount&); virtual ~LLRefCount(); // use unref() public: LLRefCount(); - void ref() + void ref() const { mRef++; } - S32 unref() + S32 unref() const { llassert(mRef >= 1); if (0 == --mRef) @@ -67,13 +65,15 @@ public: return mRef; } + //NOTE: when passing around a const LLRefCount object, this can return different results + // at different types, since mRef is mutable S32 getNumRefs() const { return mRef; } private: - S32 mRef; + mutable S32 mRef; }; #endif diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h index 7a5d51ff76..209b506c30 100644 --- a/indra/llmath/llmath.h +++ b/indra/llmath/llmath.h @@ -203,7 +203,7 @@ inline S32 llfloor( F32 f ) } return result; #else - return (S32)floor(f); + return (S32)floorf(f); #endif } diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 8bcc4723ae..36ac3ff119 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1693,11 +1693,11 @@ void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in) return; } - U32 pick_width = width/2; - U32 pick_height = height/2; + U32 pick_width = width/2 + 1; + U32 pick_height = height/2 + 1; - U32 size = llmax(pick_width, (U32) 1) * llmax(pick_height, (U32) 1); - size = size/8 + 1; + U32 size = pick_width * pick_height; + size = (size + 7) / 8; // pixelcount-to-bits mPickMask = new U8[size]; mPickMaskWidth = pick_width; mPickMaskHeight = pick_height; @@ -1745,8 +1745,8 @@ BOOL LLImageGL::getMask(const LLVector2 &tc) llassert(mPickMaskWidth > 0 && mPickMaskHeight > 0); - S32 x = (S32)(u * mPickMaskWidth); - S32 y = (S32)(v * mPickMaskHeight); + S32 x = llfloor(u * mPickMaskWidth); + S32 y = llfloor(v * mPickMaskHeight); if (LL_UNLIKELY(x >= mPickMaskWidth)) { diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp index 74438b184a..57baf28dab 100644 --- a/indra/llui/lldockablefloater.cpp +++ b/indra/llui/lldockablefloater.cpp @@ -146,7 +146,7 @@ void LLDockableFloater::setVisible(BOOL visible) if (visible) { - LLFloater::setFrontmost(TRUE); + LLFloater::setFrontmost(getAutoFocus()); } LLFloater::setVisible(visible); } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 8c9dacbd20..2166d8db8a 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -301,6 +301,7 @@ protected: const LLRect& getExpandedRect() const { return mExpandedRect; } void setAutoFocus(BOOL focus) { mAutoFocus = focus; } // whether to automatically take focus when opened + BOOL getAutoFocus() const { return mAutoFocus; } LLDragHandle* getDragHandle() const { return mDragHandle; } void destroy() { die(); } // Don't call this directly. You probably want to call closeFloater() diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index 20a1ab7af3..28f3788817 100644 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -270,13 +270,19 @@ void LLSpinCtrl::clear() mbHasBeenSet = FALSE; } - +void LLSpinCtrl::updateLabelColor() +{ + if( mLabelBox ) + { + mLabelBox->setColor( getEnabled() ? mTextEnabledColor.get() : mTextDisabledColor.get() ); + } +} void LLSpinCtrl::updateEditor() { LLLocale locale(LLLocale::USER_LOCALE); - // Don't display very small negative values as -0.000 + // Don't display very small negative valu es as -0.000 F32 displayed_value = clamp_precision((F32)getValue().asReal(), mPrecision); // if( S32( displayed_value * pow( 10, mPrecision ) ) == 0 ) @@ -339,10 +345,7 @@ void LLSpinCtrl::setEnabled(BOOL b) { LLView::setEnabled( b ); mEditor->setEnabled( b ); - if( mLabelBox ) - { - mLabelBox->setColor( b ? mTextEnabledColor.get() : mTextDisabledColor.get() ); - } + updateLabelColor(); } @@ -390,6 +393,7 @@ void LLSpinCtrl::setLabel(const LLStringExplicit& label) { llwarns << "Attempting to set label on LLSpinCtrl constructed without one " << getName() << llendl; } + updateLabelColor(); } void LLSpinCtrl::setAllowEdit(BOOL allow_edit) diff --git a/indra/llui/llspinctrl.h b/indra/llui/llspinctrl.h index 0e610b7741..00d6f86f83 100644 --- a/indra/llui/llspinctrl.h +++ b/indra/llui/llspinctrl.h @@ -81,8 +81,8 @@ public: virtual void setPrecision(S32 precision); void setLabel(const LLStringExplicit& label); - void setLabelColor(const LLColor4& c) { mTextEnabledColor = c; } - void setDisabledLabelColor(const LLColor4& c) { mTextDisabledColor = c; } + void setLabelColor(const LLColor4& c) { mTextEnabledColor = c; updateLabelColor(); } + void setDisabledLabelColor(const LLColor4& c) { mTextDisabledColor = c; updateLabelColor();} void setAllowEdit(BOOL allow_edit); virtual void onTabInto(); @@ -103,6 +103,7 @@ public: void onDownBtn(const LLSD& data); private: + void updateLabelColor(); void updateEditor(); void reportInvalidData(); diff --git a/indra/llui/llstyle.h b/indra/llui/llstyle.h index ee9ca730e9..2067e8e8be 100644 --- a/indra/llui/llstyle.h +++ b/indra/llui/llstyle.h @@ -59,11 +59,12 @@ public: void setColor(const LLColor4 &color) { mColor = color; } const LLColor4& getReadOnlyColor() const { return mReadOnlyColor; } + void setReadOnlyColor(const LLColor4& color) { mReadOnlyColor = color; } BOOL isVisible() const; void setVisible(BOOL is_visible); - LLFontGL::ShadowType getShadowType() { return mDropShadow; } + LLFontGL::ShadowType getShadowType() const { return mDropShadow; } void setFont(const LLFontGL* font); const LLFontGL* getFont() const; @@ -116,5 +117,6 @@ private: }; typedef LLPointer<LLStyle> LLStyleSP; +typedef LLPointer<const LLStyle> LLStyleConstSP; #endif // LL_LLSTYLE_H diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 978bd317e2..259522a932 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -292,9 +292,13 @@ bool LLTextBase::truncate() return did_truncate; } -LLStyle::Params LLTextBase::getDefaultStyle() +LLStyle::Params LLTextBase::getDefaultStyleParams() { - return LLStyle::Params().color(mFgColor.get()).readonly_color(mReadOnlyFgColor.get()).font(mDefaultFont).drop_shadow(mFontShadow); + return LLStyle::Params() + .color(LLUIColor(&mFgColor)) + .readonly_color(LLUIColor(&mReadOnlyFgColor)) + .font(mDefaultFont) + .drop_shadow(mFontShadow); } void LLTextBase::onValueChange(S32 start, S32 end) @@ -308,7 +312,6 @@ void LLTextBase::drawSelectionBackground() // Draw selection even if we don't have keyboard focus for search/replace if( hasSelection() && !mLineInfoList.empty()) { - LLWString text = getWText(); std::vector<LLRect> selection_rects; S32 selection_left = llmin( mSelectionStart, mSelectionEnd ); @@ -407,7 +410,7 @@ void LLTextBase::drawCursor() && gFocusMgr.getAppHasFocus() && !mReadOnly) { - LLWString wtext = getWText(); + const LLWString &wtext = getWText(); const llwchar* text = wtext.c_str(); LLRect cursor_rect = getLocalRectFromDocIndex(mCursorPos); @@ -493,7 +496,6 @@ void LLTextBase::drawCursor() void LLTextBase::drawText() { - LLWString text = getWText(); const S32 text_len = getLength(); if( text_len <= 0 ) { @@ -620,7 +622,8 @@ S32 LLTextBase::insertStringNoUndo(S32 pos, const LLWString &wstr, LLTextBase::s else { // create default editable segment to hold new text - default_segment = new LLNormalTextSegment( new LLStyle(getDefaultStyle()), pos, pos + insert_len, *this); + LLStyleConstSP sp(new LLStyle(getDefaultStyleParams())); + default_segment = new LLNormalTextSegment( sp, pos, pos + insert_len, *this); } // shift remaining segments to right @@ -744,7 +747,8 @@ void LLTextBase::createDefaultSegment() // ensures that there is always at least one segment if (mSegments.empty()) { - LLTextSegmentPtr default_segment = new LLNormalTextSegment( new LLStyle(getDefaultStyle()), 0, getLength() + 1, *this); + LLStyleConstSP sp(new LLStyle(getDefaultStyleParams())); + LLTextSegmentPtr default_segment = new LLNormalTextSegment( sp, 0, getLength() + 1, *this); mSegments.insert(default_segment); default_segment->linkToDocument(this); } @@ -774,7 +778,8 @@ void LLTextBase::insertSegment(LLTextSegmentPtr segment_to_insert) cur_segmentp->setEnd(segment_to_insert->getStart()); // advance to next segment // insert remainder of old segment - LLTextSegmentPtr remainder_segment = new LLNormalTextSegment( cur_segmentp->getStyle(), segment_to_insert->getStart(), old_segment_end, *this); + LLStyleConstSP sp = cur_segmentp->getStyle(); + LLTextSegmentPtr remainder_segment = new LLNormalTextSegment( sp, segment_to_insert->getStart(), old_segment_end, *this); mSegments.insert(cur_seg_iter, remainder_segment); remainder_segment->linkToDocument(this); // insert new segment before remainder of old segment @@ -1010,16 +1015,6 @@ void LLTextBase::draw() void LLTextBase::setColor( const LLColor4& c ) { mFgColor = c; - //textsegments have own style property , - //so we have to update it also to apply changes, EXT-4433 - for(segment_set_t::iterator it = mSegments.begin(); it != mSegments.end(); it++) - { - LLTextSegment* segment = it->get(); - if(segment) - { - segment->setColor(mFgColor); - } - } } //virtual @@ -1119,7 +1114,6 @@ void LLTextBase::reflow(S32 start_index) S32 line_start_index = 0; const S32 text_available_width = mVisibleTextRect.getWidth() - mHPad; // reserve room for margin S32 remaining_pixels = text_available_width; - LLWString text(getWText()); S32 line_count = 0; // find and erase line info structs starting at start_index and going to end of document @@ -1521,16 +1515,7 @@ std::string LLTextBase::getText() const void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, const LLStyle::Params& input_params) { LLStyle::Params style_params(input_params); - style_params.fillFrom(getDefaultStyle()); - - if (!style_params.font.isProvided()) - { - style_params.font = mDefaultFont; - } - if (!style_params.drop_shadow.isProvided()) - { - style_params.drop_shadow = mFontShadow; - } + style_params.fillFrom(getDefaultStyleParams()); S32 part = (S32)LLTextParser::WHOLE; if(mParseHTML) @@ -1547,13 +1532,7 @@ void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, c LLStyle::Params link_params = style_params; link_params.color = match.getColor(); link_params.readonly_color = match.getColor(); - // apply font name from requested style_params - std::string font_name = LLFontGL::nameFromFont(style_params.font()); - std::string font_size = LLFontGL::sizeFromFont(style_params.font()); - link_params.font.name(font_name); - link_params.font.size(font_size); link_params.font.style("UNDERLINE"); - link_params.link_href = match.getUrl(); // output the text before the Url @@ -1630,9 +1609,9 @@ void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, c } } -void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepend_newline, S32 highlight_part, const LLStyle::Params& stylep) +void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepend_newline, S32 highlight_part, const LLStyle::Params& style_params) { - if (new_text.empty()) return; + if (new_text.empty()) return; // Save old state S32 selection_start = mSelectionStart; @@ -1650,7 +1629,7 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepen if (mParseHighlights && highlight) { - LLStyle::Params highlight_params = stylep; + LLStyle::Params highlight_params(style_params); LLSD pieces = highlight->parsePartialLineHighlights(new_text, highlight_params.color(), (LLTextParser::EHighlightPosition)highlight_part); for (S32 i = 0; i < pieces.size(); i++) @@ -1670,7 +1649,8 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepen wide_text = utf8str_to_wstring(pieces[i]["text"].asString()); } S32 cur_length = getLength(); - LLTextSegmentPtr segmentp = new LLNormalTextSegment(new LLStyle(highlight_params), cur_length, cur_length + wide_text.size(), *this); + LLStyleConstSP sp(new LLStyle(highlight_params)); + LLTextSegmentPtr segmentp = new LLNormalTextSegment(sp, cur_length, cur_length + wide_text.size(), *this); segment_vec_t segments; segments.push_back(segmentp); insertStringNoUndo(cur_length, wide_text, &segments); @@ -1694,7 +1674,8 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, bool prepen segment_vec_t segments; S32 segment_start = old_length; S32 segment_end = old_length + wide_text.size(); - segments.push_back(new LLNormalTextSegment(new LLStyle(stylep), segment_start, segment_end, *this )); + LLStyleConstSP sp(new LLStyle(style_params)); + segments.push_back(new LLNormalTextSegment(sp, segment_start, segment_end, *this )); insertStringNoUndo(getLength(), wide_text, &segments); } @@ -1738,7 +1719,7 @@ void LLTextBase::replaceUrlLabel(const std::string &url, for (it = mSegments.begin(); it != mSegments.end(); ++it) { LLTextSegment *seg = *it; - const LLStyleSP style = seg->getStyle(); + LLStyleConstSP style = seg->getStyle(); // update segment start/end length in case we replaced text earlier S32 seg_length = seg->getEnd() - seg->getStart(); @@ -1775,7 +1756,7 @@ void LLTextBase::setWText(const LLWString& text) setText(wstring_to_utf8str(text)); } -LLWString LLTextBase::getWText() const +const LLWString& LLTextBase::getWText() const { return getViewModel()->getDisplay(); } @@ -2231,9 +2212,9 @@ bool LLTextSegment::canEdit() const { return false; } void LLTextSegment::unlinkFromDocument(LLTextBase*) {} void LLTextSegment::linkToDocument(LLTextBase*) {} const LLColor4& LLTextSegment::getColor() const { return LLColor4::white; } -void LLTextSegment::setColor(const LLColor4 &color) {} -const LLStyleSP LLTextSegment::getStyle() const {static LLStyleSP sp(new LLStyle()); return sp; } -void LLTextSegment::setStyle(const LLStyleSP &style) {} +//void LLTextSegment::setColor(const LLColor4 &color) {} +LLStyleConstSP LLTextSegment::getStyle() const {static LLStyleConstSP sp(new LLStyle()); return sp; } +void LLTextSegment::setStyle(LLStyleConstSP style) {} void LLTextSegment::setToken( LLKeywordToken* token ) {} LLKeywordToken* LLTextSegment::getToken() const { return NULL; } void LLTextSegment::setToolTip( const std::string &msg ) {} @@ -2258,7 +2239,7 @@ BOOL LLTextSegment::hasMouseCapture() { return FALSE; } // LLNormalTextSegment // -LLNormalTextSegment::LLNormalTextSegment( const LLStyleSP& style, S32 start, S32 end, LLTextBase& editor ) +LLNormalTextSegment::LLNormalTextSegment( LLStyleConstSP style, S32 start, S32 end, LLTextBase& editor ) : LLTextSegment(start, end), mStyle( style ), mToken(NULL), @@ -2470,7 +2451,7 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt if (num_chars > 0) { height = mFontHeight; - LLWString text = mEditor.getWText(); + const LLWString &text = mEditor.getWText(); // if last character is a newline, then return true, forcing line break llwchar last_char = text[mStart + first_char + num_chars - 1]; if (last_char == '\n') @@ -2497,7 +2478,7 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt S32 LLNormalTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const { - LLWString text = mEditor.getWText(); + const LLWString &text = mEditor.getWText(); return mStyle->getFont()->charFromPixelOffset(text.c_str(), mStart + start_offset, (F32)segment_local_x_coord, F32_MAX, @@ -2507,12 +2488,12 @@ 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(); + const LLWString &text = mEditor.getWText(); LLUIImagePtr image = mStyle->getImage(); if( image.notNull()) { - num_pixels -= image->getWidth(); + num_pixels = llmax(0, num_pixels - image->getWidth()); } // search for newline and if found, truncate there diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index dc3671eab1..b5c7fab67a 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -145,7 +145,7 @@ public: // wide-char versions void setWText(const LLWString& text); - LLWString getWText() const; + const LLWString& getWText() const; void appendText(const std::string &new_text, bool prepend_newline, const LLStyle::Params& input_params = LLStyle::Params()); // force reflow of text @@ -185,7 +185,6 @@ public: bool scrolledToEnd(); const LLFontGL* getDefaultFont() const { return mDefaultFont; } - LLStyle::Params getDefaultStyle(); public: // Fired when a URL link is clicked @@ -282,7 +281,8 @@ protected: void createDefaultSegment(); virtual void updateSegments(); void insertSegment(LLTextSegmentPtr segment_to_insert); - + LLStyle::Params getDefaultStyleParams(); + // manage lines S32 getLineStart( S32 line ) const; S32 getLineEnd( S32 line ) const; @@ -389,9 +389,9 @@ public: virtual void linkToDocument(class LLTextBase* editor); virtual const LLColor4& getColor() const; - virtual void setColor(const LLColor4 &color); - virtual const LLStyleSP getStyle() const; - virtual void setStyle(const LLStyleSP &style); + //virtual void setColor(const LLColor4 &color); + virtual LLStyleConstSP getStyle() const; + virtual void setStyle(LLStyleConstSP style); virtual void setToken( LLKeywordToken* token ); virtual LLKeywordToken* getToken() const; virtual void setToolTip(const std::string& tooltip); @@ -427,7 +427,7 @@ protected: class LLNormalTextSegment : public LLTextSegment { public: - LLNormalTextSegment( const LLStyleSP& style, S32 start, S32 end, LLTextBase& editor ); + LLNormalTextSegment( LLStyleConstSP style, S32 start, S32 end, LLTextBase& editor ); LLNormalTextSegment( const LLColor4& color, S32 start, S32 end, LLTextBase& editor, BOOL is_visible = TRUE); ~LLNormalTextSegment(); @@ -437,9 +437,8 @@ public: /*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect); /*virtual*/ bool canEdit() const { return true; } /*virtual*/ const LLColor4& getColor() const { return mStyle->getColor(); } - /*virtual*/ void setColor(const LLColor4 &color) { mStyle->setColor(color); } - /*virtual*/ const LLStyleSP getStyle() const { return mStyle; } - /*virtual*/ void setStyle(const LLStyleSP &style) { mStyle = style; } + /*virtual*/ LLStyleConstSP getStyle() const { return mStyle; } + /*virtual*/ void setStyle(LLStyleConstSP style) { mStyle = style; } /*virtual*/ void setToken( LLKeywordToken* token ) { mToken = token; } /*virtual*/ LLKeywordToken* getToken() const { return mToken; } /*virtual*/ BOOL getToolTip( std::string& msg ) const; @@ -457,7 +456,7 @@ protected: protected: class LLTextBase& mEditor; - LLStyleSP mStyle; + LLStyleConstSP mStyle; S32 mFontHeight; LLKeywordToken* mToken; std::string mTooltip; diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 06ba0d80e9..e76fee9f17 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -2404,7 +2404,7 @@ void LLTextEditor::replaceUrlLabel(const std::string &url, for (it = mSegments.begin(); it != mSegments.end(); ++it) { LLTextSegment *seg = *it; - const LLStyleSP style = seg->getStyle(); + LLStyleConstSP style = seg->getStyle(); // update segment start/end length in case we replaced text earlier S32 seg_length = seg->getEnd() - seg->getStart(); @@ -2573,13 +2573,16 @@ void LLTextEditor::updateLinkSegments() // if the link's label (what the user can edit) is a valid Url, // then update the link's HREF to be the same as the label text. // This lets users edit Urls in-place. - LLStyleSP style = static_cast<LLStyleSP>(segment->getStyle()); + LLStyleConstSP style = segment->getStyle(); + LLStyle* new_style = new LLStyle(*style); LLWString url_label = wtext.substr(segment->getStart(), segment->getEnd()-segment->getStart()); if (LLUrlRegistry::instance().hasUrl(url_label)) { std::string new_url = wstring_to_utf8str(url_label); LLStringUtil::trim(new_url); - style->setLinkHREF(new_url); + new_style->setLinkHREF(new_url); + LLStyleConstSP sp(new_style); + segment->setStyle(sp); } } } diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index d0ed3b6fca..76f07373b4 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -1911,10 +1911,10 @@ namespace LLInitParam void TypedParam<LLUIColor>::setBlockFromValue() { LLColor4 color = mData.mValue.get(); - red = color.mV[VRED]; - green = color.mV[VGREEN]; - blue = color.mV[VBLUE]; - alpha = color.mV[VALPHA]; + red.set(color.mV[VRED], false); + green.set(color.mV[VGREEN], false); + blue.set(color.mV[VBLUE], false); + alpha.set(color.mV[VALPHA], false); control.set("", false); } @@ -1965,9 +1965,9 @@ namespace LLInitParam { if (mData.mValue) { - name = LLFontGL::nameFromFont(mData.mValue); - size = LLFontGL::sizeFromFont(mData.mValue); - style = LLFontGL::getStringFromStyle(mData.mValue->getFontDesc().getStyle()); + name.set(LLFontGL::nameFromFont(mData.mValue), false); + size.set(LLFontGL::sizeFromFont(mData.mValue), false); + style.set(LLFontGL::getStringFromStyle(mData.mValue->getFontDesc().getStyle()), false); } } @@ -2073,8 +2073,8 @@ namespace LLInitParam void TypedParam<LLCoordGL>::setBlockFromValue() { - x = mData.mValue.mX; - y = mData.mValue.mY; + x.set(mData.mValue.mX, false); + y.set(mData.mValue.mY, false); } diff --git a/indra/llui/lluicolortable.h b/indra/llui/lluicolortable.h index 59be0c4f9a..c87695f456 100644 --- a/indra/llui/lluicolortable.h +++ b/indra/llui/lluicolortable.h @@ -94,7 +94,7 @@ private: bool loadFromFilename(const std::string& filename); // consider using sorted vector, can be much faster - typedef std::map<std::string, LLColor4> string_color_map_t; + typedef std::map<std::string, LLUIColor> string_color_map_t; void clearTable(string_color_map_t& table); void setColor(const std::string& name, const LLColor4& color, string_color_map_t& table); diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp index 966d919dc7..8cd6460b66 100644 --- a/indra/llui/lluiimage.cpp +++ b/indra/llui/lluiimage.cpp @@ -182,11 +182,11 @@ namespace LLInitParam { if (mData.mValue == NULL) { - name = "none"; + name.set("none", false); } else { - name = mData.mValue->getName(); + name.set(mData.mValue->getName(), false); } } diff --git a/indra/llui/llviewmodel.h b/indra/llui/llviewmodel.h index c8a9b52cca..992365d44d 100644 --- a/indra/llui/llviewmodel.h +++ b/indra/llui/llviewmodel.h @@ -107,7 +107,8 @@ public: // New functions /// Get the stored value in string form - LLWString getDisplay() const { return mDisplay; } + const LLWString& getDisplay() const { return mDisplay; } + /** * Set the display string directly (see LLTextEditor). What the user is * editing is actually the LLWString value rather than the underlying diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt index 7b1cab696f..77c6fa57b6 100644 --- a/indra/llwindow/CMakeLists.txt +++ b/indra/llwindow/CMakeLists.txt @@ -12,6 +12,7 @@ project(llwindow) include(00-Common) include(DirectX) +include(DragDrop) include(LLCommon) include(LLImage) include(LLMath) @@ -102,11 +103,13 @@ if (WINDOWS) llwindowwin32.cpp lldxhardware.cpp llkeyboardwin32.cpp + lldragdropwin32.cpp ) list(APPEND llwindow_HEADER_FILES llwindowwin32.h lldxhardware.h llkeyboardwin32.h + lldragdropwin32.h ) list(APPEND llwindow_LINK_LIBRARIES comdlg32 # Common Dialogs for ChooseColor diff --git a/indra/llwindow/lldragdropwin32.cpp b/indra/llwindow/lldragdropwin32.cpp new file mode 100644 index 0000000000..9b80fe0a84 --- /dev/null +++ b/indra/llwindow/lldragdropwin32.cpp @@ -0,0 +1,370 @@ +/** + * @file lldragdrop32.cpp + * @brief Handler for Windows specific drag and drop (OS to client) code + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#if LL_WINDOWS + +#if LL_OS_DRAGDROP_ENABLED + +#include "linden_common.h" + +#include "llwindowwin32.h" +#include "llkeyboardwin32.h" +#include "llwindowcallbacks.h" +#include "lldragdropwin32.h" + +class LLDragDropWin32Target: + public IDropTarget +{ + public: + //////////////////////////////////////////////////////////////////////////////// + // + LLDragDropWin32Target( HWND hWnd ) : + mRefCount( 1 ), + mAppWindowHandle( hWnd ), + mAllowDrop( false) + { + }; + + virtual ~LLDragDropWin32Target() + { + }; + + //////////////////////////////////////////////////////////////////////////////// + // + ULONG __stdcall AddRef( void ) + { + return InterlockedIncrement( &mRefCount ); + }; + + //////////////////////////////////////////////////////////////////////////////// + // + ULONG __stdcall Release( void ) + { + LONG count = InterlockedDecrement( &mRefCount ); + + if ( count == 0 ) + { + delete this; + return 0; + } + else + { + return count; + }; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + HRESULT __stdcall QueryInterface( REFIID iid, void** ppvObject ) + { + if ( iid == IID_IUnknown || iid == IID_IDropTarget ) + { + AddRef(); + *ppvObject = this; + return S_OK; + } + else + { + *ppvObject = 0; + return E_NOINTERFACE; + }; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + HRESULT __stdcall DragEnter( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) + { + FORMATETC fmtetc = { CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; + + // support CF_TEXT using a HGLOBAL? + if ( S_OK == pDataObject->QueryGetData( &fmtetc ) ) + { + mAllowDrop = true; + mDropUrl = std::string(); + mIsSlurl = false; + + STGMEDIUM stgmed; + if( S_OK == pDataObject->GetData( &fmtetc, &stgmed ) ) + { + PVOID data = GlobalLock( stgmed.hGlobal ); + mDropUrl = std::string( (char*)data ); + // XXX MAJOR MAJOR HACK! + LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(mAppWindowHandle, GWL_USERDATA); + if (NULL != window_imp) + { + LLCoordGL gl_coord( 0, 0 ); + + POINT pt2; + pt2.x = pt.x; + pt2.y = pt.y; + ScreenToClient( mAppWindowHandle, &pt2 ); + + LLCoordWindow cursor_coord_window( pt2.x, pt2.y ); + window_imp->convertCoords(cursor_coord_window, &gl_coord); + MASK mask = gKeyboard->currentMask(TRUE); + + LLWindowCallbacks::DragNDropResult result = window_imp->completeDragNDropRequest( gl_coord, mask, + LLWindowCallbacks::DNDA_START_TRACKING, mDropUrl ); + + switch (result) + { + case LLWindowCallbacks::DND_COPY: + *pdwEffect = DROPEFFECT_COPY; + break; + case LLWindowCallbacks::DND_LINK: + *pdwEffect = DROPEFFECT_LINK; + break; + case LLWindowCallbacks::DND_MOVE: + *pdwEffect = DROPEFFECT_MOVE; + break; + case LLWindowCallbacks::DND_NONE: + default: + *pdwEffect = DROPEFFECT_NONE; + break; + } + }; + + GlobalUnlock( stgmed.hGlobal ); + ReleaseStgMedium( &stgmed ); + }; + SetFocus( mAppWindowHandle ); + } + else + { + mAllowDrop = false; + *pdwEffect = DROPEFFECT_NONE; + }; + + return S_OK; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + HRESULT __stdcall DragOver( DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) + { + if ( mAllowDrop ) + { + // XXX MAJOR MAJOR HACK! + LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(mAppWindowHandle, GWL_USERDATA); + if (NULL != window_imp) + { + LLCoordGL gl_coord( 0, 0 ); + + POINT pt2; + pt2.x = pt.x; + pt2.y = pt.y; + ScreenToClient( mAppWindowHandle, &pt2 ); + + LLCoordWindow cursor_coord_window( pt2.x, pt2.y ); + window_imp->convertCoords(cursor_coord_window, &gl_coord); + MASK mask = gKeyboard->currentMask(TRUE); + + LLWindowCallbacks::DragNDropResult result = window_imp->completeDragNDropRequest( gl_coord, mask, + LLWindowCallbacks::DNDA_TRACK, mDropUrl ); + + switch (result) + { + case LLWindowCallbacks::DND_COPY: + *pdwEffect = DROPEFFECT_COPY; + break; + case LLWindowCallbacks::DND_LINK: + *pdwEffect = DROPEFFECT_LINK; + break; + case LLWindowCallbacks::DND_MOVE: + *pdwEffect = DROPEFFECT_MOVE; + break; + case LLWindowCallbacks::DND_NONE: + default: + *pdwEffect = DROPEFFECT_NONE; + break; + } + }; + } + else + { + *pdwEffect = DROPEFFECT_NONE; + }; + + return S_OK; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + HRESULT __stdcall DragLeave( void ) + { + // XXX MAJOR MAJOR HACK! + LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(mAppWindowHandle, GWL_USERDATA); + if (NULL != window_imp) + { + LLCoordGL gl_coord( 0, 0 ); + MASK mask = gKeyboard->currentMask(TRUE); + window_imp->completeDragNDropRequest( gl_coord, mask, LLWindowCallbacks::DNDA_STOP_TRACKING, mDropUrl ); + }; + return S_OK; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + HRESULT __stdcall Drop( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) + { + if ( mAllowDrop ) + { + // window impl stored in Window data (neat!) + LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong( mAppWindowHandle, GWL_USERDATA ); + if ( NULL != window_imp ) + { + LLCoordGL gl_coord( 0, 0 ); + + POINT pt_client; + pt_client.x = pt.x; + pt_client.y = pt.y; + ScreenToClient( mAppWindowHandle, &pt_client ); + + LLCoordWindow cursor_coord_window( pt_client.x, pt_client.y ); + window_imp->convertCoords(cursor_coord_window, &gl_coord); + llinfos << "### (Drop) URL is: " << mDropUrl << llendl; + llinfos << "### raw coords are: " << pt.x << " x " << pt.y << llendl; + llinfos << "### client coords are: " << pt_client.x << " x " << pt_client.y << llendl; + llinfos << "### GL coords are: " << gl_coord.mX << " x " << gl_coord.mY << llendl; + llinfos << llendl; + + // no keyboard modifier option yet but we could one day + MASK mask = gKeyboard->currentMask( TRUE ); + + // actually do the drop + LLWindowCallbacks::DragNDropResult result = window_imp->completeDragNDropRequest( gl_coord, mask, + LLWindowCallbacks::DNDA_DROPPED, mDropUrl ); + + switch (result) + { + case LLWindowCallbacks::DND_COPY: + *pdwEffect = DROPEFFECT_COPY; + break; + case LLWindowCallbacks::DND_LINK: + *pdwEffect = DROPEFFECT_LINK; + break; + case LLWindowCallbacks::DND_MOVE: + *pdwEffect = DROPEFFECT_MOVE; + break; + case LLWindowCallbacks::DND_NONE: + default: + *pdwEffect = DROPEFFECT_NONE; + break; + } + }; + } + else + { + *pdwEffect = DROPEFFECT_NONE; + }; + + return S_OK; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + private: + LONG mRefCount; + HWND mAppWindowHandle; + bool mAllowDrop; + std::string mDropUrl; + bool mIsSlurl; + friend class LLWindowWin32; +}; + +//////////////////////////////////////////////////////////////////////////////// +// +LLDragDropWin32::LLDragDropWin32() : + mDropTarget( NULL ), + mDropWindowHandle( NULL ) + +{ +} + +//////////////////////////////////////////////////////////////////////////////// +// +LLDragDropWin32::~LLDragDropWin32() +{ +} + +//////////////////////////////////////////////////////////////////////////////// +// +bool LLDragDropWin32::init( HWND hWnd ) +{ + if ( NOERROR != OleInitialize( NULL ) ) + return FALSE; + + mDropTarget = new LLDragDropWin32Target( hWnd ); + if ( mDropTarget ) + { + HRESULT result = CoLockObjectExternal( mDropTarget, TRUE, FALSE ); + if ( S_OK == result ) + { + result = RegisterDragDrop( hWnd, mDropTarget ); + if ( S_OK != result ) + { + // RegisterDragDrop failed + return false; + }; + + // all ok + mDropWindowHandle = hWnd; + } + else + { + // Unable to lock OLE object + return false; + }; + }; + + // success + return true; +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLDragDropWin32::reset() +{ + if ( mDropTarget ) + { + RevokeDragDrop( mDropWindowHandle ); + CoLockObjectExternal( mDropTarget, FALSE, TRUE ); + mDropTarget->Release(); + }; + + OleUninitialize(); +} + +#endif // LL_OS_DRAGDROP_ENABLED + +#endif // LL_WINDOWS + diff --git a/indra/llwindow/lldragdropwin32.h b/indra/llwindow/lldragdropwin32.h new file mode 100644 index 0000000000..9686626d7c --- /dev/null +++ b/indra/llwindow/lldragdropwin32.h @@ -0,0 +1,80 @@ +/** + * @file lldragdrop32.cpp + * @brief Handler for Windows specific drag and drop (OS to client) code + * + * $LicenseInfo:firstyear=2004&license=viewergpl$ + * + * Copyright (c) 2004-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#if LL_WINDOWS + +#if LL_OS_DRAGDROP_ENABLED + +#ifndef LL_LLDRAGDROP32_H +#define LL_LLDRAGDROP32_H + +#include <windows.h> +#include <ole2.h> + +class LLDragDropWin32 +{ + public: + LLDragDropWin32(); + ~LLDragDropWin32(); + + bool init( HWND hWnd ); + void reset(); + + private: + IDropTarget* mDropTarget; + HWND mDropWindowHandle; +}; +#endif // LL_LLDRAGDROP32_H + +#else // LL_OS_DRAGDROP_ENABLED + +#ifndef LL_LLDRAGDROP32_H +#define LL_LLDRAGDROP32_H + +#include <windows.h> +#include <ole2.h> + +// imposter class that does nothing +class LLDragDropWin32 +{ + public: + LLDragDropWin32() {}; + ~LLDragDropWin32() {}; + + bool init( HWND hWnd ) { return false; }; + void reset() { }; +}; +#endif // LL_LLDRAGDROP32_H + +#endif // LL_OS_DRAGDROP_ENABLED + +#endif // LL_WINDOWS diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp index 72f9997149..6d9f012cc3 100644 --- a/indra/llwindow/llwindowcallbacks.cpp +++ b/indra/llwindow/llwindowcallbacks.cpp @@ -163,6 +163,11 @@ void LLWindowCallbacks::handleDataCopy(LLWindow *window, S32 data_type, void *da { } +LLWindowCallbacks::DragNDropResult LLWindowCallbacks::handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, DragNDropAction action, std::string data ) +{ + return LLWindowCallbacks::DND_NONE; +} + BOOL LLWindowCallbacks::handleTimerEvent(LLWindow *window) { return FALSE; diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h index abc66c42a2..42add8dde0 100644 --- a/indra/llwindow/llwindowcallbacks.h +++ b/indra/llwindow/llwindowcallbacks.h @@ -71,6 +71,21 @@ public: virtual BOOL handleTimerEvent(LLWindow *window); virtual BOOL handleDeviceChange(LLWindow *window); + enum DragNDropAction { + DNDA_START_TRACKING = 0,// Start tracking an incoming drag + DNDA_TRACK, // User is dragging an incoming drag around the window + DNDA_STOP_TRACKING, // User is no longer dragging an incoming drag around the window (may have either cancelled or dropped on the window) + DNDA_DROPPED // User dropped an incoming drag on the window (this is the "commit" event) + }; + + enum DragNDropResult { + DND_NONE = 0, // No drop allowed + DND_MOVE, // Drop accepted would result in a "move" operation + DND_COPY, // Drop accepted would result in a "copy" operation + DND_LINK // Drop accepted would result in a "link" operation + }; + virtual DragNDropResult handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, DragNDropAction action, std::string data); + virtual void handlePingWatchdog(LLWindow *window, const char * msg); virtual void handlePauseWatchdog(LLWindow *window); virtual void handleResumeWatchdog(LLWindow *window); diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index ed62faece6..9ccd4c7f97 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -278,6 +278,8 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks, mMoveEventCampartorUPP = NewEventComparatorUPP(staticMoveEventComparator); mGlobalHandlerRef = NULL; mWindowHandlerRef = NULL; + + mDragOverrideCursor = -1; // We're not clipping yet SetRect( &mOldMouseClip, 0, 0, 0, 0 ); @@ -499,8 +501,11 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits // Set up window event handlers (some window-related events ONLY go to window handlers.) InstallStandardEventHandler(GetWindowEventTarget(mWindow)); - InstallWindowEventHandler (mWindow, mEventHandlerUPP, GetEventTypeCount (WindowHandlerEventList), WindowHandlerEventList, (void*)this, &mWindowHandlerRef); // add event handler - + InstallWindowEventHandler(mWindow, mEventHandlerUPP, GetEventTypeCount (WindowHandlerEventList), WindowHandlerEventList, (void*)this, &mWindowHandlerRef); // add event handler +#if LL_OS_DRAGDROP_ENABLED + InstallTrackingHandler( dragTrackingHandler, mWindow, (void*)this ); + InstallReceiveHandler( dragReceiveHandler, mWindow, (void*)this ); +#endif // LL_OS_DRAGDROP_ENABLED } { @@ -2174,11 +2179,8 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e } else { - MASK mask = 0; - if(modifiers & shiftKey) { mask |= MASK_SHIFT; } - if(modifiers & (cmdKey | controlKey)) { mask |= MASK_CONTROL; } - if(modifiers & optionKey) { mask |= MASK_ALT; } - + MASK mask = LLWindowMacOSX::modifiersToMask(modifiers); + llassert( actualType == typeUnicodeText ); // The result is a UTF16 buffer. Pass the characters in turn to handleUnicodeChar. @@ -2795,6 +2797,14 @@ void LLWindowMacOSX::setCursor(ECursorType cursor) { OSStatus result = noErr; + if (mDragOverrideCursor != -1) + { + // A drag is in progress...remember the requested cursor and we'll + // restore it when it is done + mCurrentCursor = cursor; + return; + } + if (cursor == UI_CURSOR_ARROW && mBusyCount > 0) { @@ -3379,3 +3389,174 @@ std::vector<std::string> LLWindowMacOSX::getDynamicFallbackFontList() return std::vector<std::string>(); } +// static +MASK LLWindowMacOSX::modifiersToMask(SInt16 modifiers) +{ + MASK mask = 0; + if(modifiers & shiftKey) { mask |= MASK_SHIFT; } + if(modifiers & (cmdKey | controlKey)) { mask |= MASK_CONTROL; } + if(modifiers & optionKey) { mask |= MASK_ALT; } + return mask; +} + +#if LL_OS_DRAGDROP_ENABLED + +OSErr LLWindowMacOSX::dragTrackingHandler(DragTrackingMessage message, WindowRef theWindow, + void * handlerRefCon, DragRef drag) +{ + OSErr result = noErr; + LLWindowMacOSX *self = (LLWindowMacOSX*)handlerRefCon; + + lldebugs << "drag tracking handler, message = " << message << llendl; + + switch(message) + { + case kDragTrackingInWindow: + result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_TRACK); + break; + + case kDragTrackingEnterHandler: + result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_START_TRACKING); + break; + + case kDragTrackingLeaveHandler: + result = self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_STOP_TRACKING); + break; + + default: + break; + } + + return result; +} + +OSErr LLWindowMacOSX::dragReceiveHandler(WindowRef theWindow, void * handlerRefCon, + DragRef drag) +{ + LLWindowMacOSX *self = (LLWindowMacOSX*)handlerRefCon; + return self->handleDragNDrop(drag, LLWindowCallbacks::DNDA_DROPPED); + +} + +OSErr LLWindowMacOSX::handleDragNDrop(DragRef drag, LLWindowCallbacks::DragNDropAction action) +{ + OSErr result = dragNotAcceptedErr; // overall function result + OSErr err = noErr; // for local error handling + + // Get the mouse position and modifiers of this drag. + SInt16 modifiers, mouseDownModifiers, mouseUpModifiers; + ::GetDragModifiers(drag, &modifiers, &mouseDownModifiers, &mouseUpModifiers); + MASK mask = LLWindowMacOSX::modifiersToMask(modifiers); + + Point mouse_point; + // This will return the mouse point in global screen coords + ::GetDragMouse(drag, &mouse_point, NULL); + LLCoordScreen screen_coords(mouse_point.h, mouse_point.v); + LLCoordGL gl_pos; + convertCoords(screen_coords, &gl_pos); + + // Look at the pasteboard and try to extract an URL from it + PasteboardRef pasteboard; + if(GetDragPasteboard(drag, &pasteboard) == noErr) + { + ItemCount num_items = 0; + // Treat an error here as an item count of 0 + (void)PasteboardGetItemCount(pasteboard, &num_items); + + // Only deal with single-item drags. + if(num_items == 1) + { + PasteboardItemID item_id = NULL; + CFArrayRef flavors = NULL; + CFDataRef data = NULL; + + err = PasteboardGetItemIdentifier(pasteboard, 1, &item_id); // Yes, this really is 1-based. + + // Try to extract an URL from the pasteboard + if(err == noErr) + { + err = PasteboardCopyItemFlavors( pasteboard, item_id, &flavors); + } + + if(err == noErr) + { + if(CFArrayContainsValue(flavors, CFRangeMake(0, CFArrayGetCount(flavors)), kUTTypeURL)) + { + // This is an URL. + err = PasteboardCopyItemFlavorData(pasteboard, item_id, kUTTypeURL, &data); + } + else if(CFArrayContainsValue(flavors, CFRangeMake(0, CFArrayGetCount(flavors)), kUTTypeUTF8PlainText)) + { + // This is a string that might be an URL. + err = PasteboardCopyItemFlavorData(pasteboard, item_id, kUTTypeUTF8PlainText, &data); + } + + } + + if(flavors != NULL) + { + CFRelease(flavors); + } + + if(data != NULL) + { + std::string url; + url.assign((char*)CFDataGetBytePtr(data), CFDataGetLength(data)); + CFRelease(data); + + if(!url.empty()) + { + LLWindowCallbacks::DragNDropResult res = + mCallbacks->handleDragNDrop(this, gl_pos, mask, action, url); + + switch (res) { + case LLWindowCallbacks::DND_NONE: // No drop allowed + if (action == LLWindowCallbacks::DNDA_TRACK) + { + mDragOverrideCursor = kThemeNotAllowedCursor; + } + else { + mDragOverrideCursor = -1; + } + break; + case LLWindowCallbacks::DND_MOVE: // Drop accepted would result in a "move" operation + mDragOverrideCursor = kThemePointingHandCursor; + result = noErr; + break; + case LLWindowCallbacks::DND_COPY: // Drop accepted would result in a "copy" operation + mDragOverrideCursor = kThemeCopyArrowCursor; + result = noErr; + break; + case LLWindowCallbacks::DND_LINK: // Drop accepted would result in a "link" operation: + mDragOverrideCursor = kThemeAliasArrowCursor; + result = noErr; + break; + default: + mDragOverrideCursor = -1; + break; + } + // This overrides the cursor being set by setCursor. + // This is a bit of a hack workaround because lots of areas + // within the viewer just blindly set the cursor. + if (mDragOverrideCursor == -1) + { + // Restore the cursor + ECursorType temp_cursor = mCurrentCursor; + // get around the "setting the same cursor" code in setCursor() + mCurrentCursor = UI_CURSOR_COUNT; + setCursor(temp_cursor); + } + else { + // Override the cursor + SetThemeCursor(mDragOverrideCursor); + } + + } + } + } + } + + return result; +} + +#endif // LL_OS_DRAGDROP_ENABLED diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h index fbfa07fab4..377f10b6d4 100644 --- a/indra/llwindow/llwindowmacosx.h +++ b/indra/llwindow/llwindowmacosx.h @@ -34,6 +34,7 @@ #define LL_LLWINDOWMACOSX_H #include "llwindow.h" +#include "llwindowcallbacks.h" #include "lltimer.h" @@ -159,8 +160,15 @@ protected: void adjustCursorDecouple(bool warpingMouse = false); void fixWindowSize(void); void stopDockTileBounce(); - - + static MASK modifiersToMask(SInt16 modifiers); + +#if LL_OS_DRAGDROP_ENABLED + static OSErr dragTrackingHandler(DragTrackingMessage message, WindowRef theWindow, + void * handlerRefCon, DragRef theDrag); + static OSErr dragReceiveHandler(WindowRef theWindow, void * handlerRefCon, DragRef theDrag); + OSErr handleDragNDrop(DragRef theDrag, LLWindowCallbacks::DragNDropAction action); +#endif // LL_OS_DRAGDROP_ENABLED + // // Platform specific variables // @@ -193,11 +201,13 @@ protected: U32 mFSAASamples; BOOL mForceRebuild; + S32 mDragOverrideCursor; + F32 mBounceTime; NMRec mBounceRec; LLTimer mBounceTimer; - // Imput method management through Text Service Manager. + // Input method management through Text Service Manager. TSMDocumentID mTSMDocument; BOOL mLanguageTextInputAllowed; ScriptCode mTSMScriptCode; diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index b591111b75..57a4921d92 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -38,6 +38,7 @@ // LLWindow library includes #include "llkeyboardwin32.h" +#include "lldragdropwin32.h" #include "llpreeditor.h" #include "llwindowcallbacks.h" @@ -52,6 +53,7 @@ #include <mapi.h> #include <process.h> // for _spawn #include <shellapi.h> +#include <fstream> #include <Imm.h> // Require DirectInput version 8 @@ -383,6 +385,9 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks, gKeyboard = new LLKeyboardWin32(); gKeyboard->setCallbacks(callbacks); + // Initialize the Drag and Drop functionality + mDragDrop = new LLDragDropWin32; + // Initialize (boot strap) the Language text input management, // based on the system's (user's) default settings. allowLanguageTextInput(mPreeditor, FALSE); @@ -620,6 +625,8 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks, LLWindowWin32::~LLWindowWin32() { + delete mDragDrop; + delete [] mWindowTitle; mWindowTitle = NULL; @@ -671,6 +678,8 @@ void LLWindowWin32::close() return; } + mDragDrop->reset(); + // Make sure cursor is visible and we haven't mangled the clipping state. setMouseClipping(FALSE); showCursor(); @@ -1349,6 +1358,11 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO } SetWindowLong(mWindowHandle, GWL_USERDATA, (U32)this); + + // register this window as handling drag/drop events from the OS + DragAcceptFiles( mWindowHandle, TRUE ); + + mDragDrop->init( mWindowHandle ); //register joystick timer callback SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer @@ -2354,11 +2368,15 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ return 0; case WM_COPYDATA: - window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_COPYDATA"); - // received a URL - PCOPYDATASTRUCT myCDS = (PCOPYDATASTRUCT) l_param; - window_imp->mCallbacks->handleDataCopy(window_imp, myCDS->dwData, myCDS->lpData); + { + window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_COPYDATA"); + // received a URL + PCOPYDATASTRUCT myCDS = (PCOPYDATASTRUCT) l_param; + window_imp->mCallbacks->handleDataCopy(window_imp, myCDS->dwData, myCDS->lpData); + }; return 0; + + break; } window_imp->mCallbacks->handlePauseWatchdog(window_imp); @@ -3528,6 +3546,13 @@ static LLWString find_context(const LLWString & wtext, S32 focus, S32 focus_leng return wtext.substr(start, end - start); } +// final stage of handling drop requests - both from WM_DROPFILES message +// for files and via IDropTarget interface requests. +LLWindowCallbacks::DragNDropResult LLWindowWin32::completeDragNDropRequest( const LLCoordGL gl_coord, const MASK mask, LLWindowCallbacks::DragNDropAction action, const std::string url ) +{ + return mCallbacks->handleDragNDrop( this, gl_coord, mask, action, url ); +} + // Handle WM_IME_REQUEST message. // If it handled the message, returns TRUE. Otherwise, FALSE. // When it handled the message, the value to be returned from diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index e4e9179db7..6aca31b63e 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -39,6 +39,8 @@ #include <windows.h> #include "llwindow.h" +#include "llwindowcallbacks.h" +#include "lldragdropwin32.h" // Hack for async host by name #define LL_WM_HOST_RESOLVED (WM_APP + 1) @@ -114,6 +116,8 @@ public: /*virtual*/ void interruptLanguageTextInput(); /*virtual*/ void spawnWebBrowser(const std::string& escaped_url); + LLWindowCallbacks::DragNDropResult completeDragNDropRequest( const LLCoordGL gl_coord, const MASK mask, LLWindowCallbacks::DragNDropAction action, const std::string url ); + static std::vector<std::string> getDynamicFallbackFontList(); protected: @@ -205,6 +209,8 @@ protected: LLPreeditor *mPreeditor; + LLDragDropWin32* mDragDrop; + friend class LLWindowManager; }; diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp index d908c85da6..fb0a04dc58 100644 --- a/indra/llxuixml/llinitparam.cpp +++ b/indra/llxuixml/llinitparam.cpp @@ -84,8 +84,7 @@ namespace LLInitParam // BaseBlock // BaseBlock::BaseBlock() - : mLastChangedParam(0), - mChangeVersion(0), + : mChangeVersion(0), mBlockDescriptor(NULL) {} @@ -348,7 +347,6 @@ namespace LLInitParam if (deserialize_func && deserialize_func(*paramp, p, name_stack, name_stack.first == name_stack.second ? -1 : name_stack.first->second)) { - mLastChangedParam = (*it)->mParamHandle; return true; } } @@ -417,9 +415,11 @@ namespace LLInitParam void BaseBlock::setLastChangedParam(const Param& last_param, bool user_provided) { - mLastChangedParam = getHandleFromParam(&last_param); + if (user_provided) + { mChangeVersion++; } + } const std::string& BaseBlock::getParamName(const BlockDescriptor& block_data, const Param* paramp) const { @@ -472,7 +472,6 @@ namespace LLInitParam { Param* paramp = getParamFromHandle(it->mParamHandle); param_changed |= merge_func(*paramp, *other_paramp, true); - mLastChangedParam = it->mParamHandle; } } return param_changed; @@ -493,7 +492,6 @@ namespace LLInitParam { Param* paramp = getParamFromHandle(it->mParamHandle); param_changed |= merge_func(*paramp, *other_paramp, false); - mLastChangedParam = it->mParamHandle; } } return param_changed; diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index a84e47f998..d264cea3b2 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -472,7 +472,6 @@ namespace LLInitParam // Blocks can override this to do custom tracking of changes virtual void setLastChangedParam(const Param& last_param, bool user_provided); - const Param* getLastChangedParam() const { return mLastChangedParam ? getParamFromHandle(mLastChangedParam) : NULL; } S32 getLastChangeVersion() const { return mChangeVersion; } bool isDefault() const { return mChangeVersion == 0; } @@ -507,7 +506,6 @@ namespace LLInitParam bool fillFromImpl(BlockDescriptor& block_data, const BaseBlock& other); // can be updated in getters - mutable param_handle_t mLastChangedParam; mutable S32 mChangeVersion; BlockDescriptor* mBlockDescriptor; // most derived block descriptor @@ -1734,6 +1732,7 @@ namespace LLInitParam void set(value_assignment_t val, bool flag_as_provided = true) { Param::enclosingBlock().setLastChangedParam(*this, flag_as_provided); + // set param version number to be up to date, so we ignore block contents mData.mLastParamVersion = BaseBlock::getLastChangeVersion(); diff --git a/indra/llxuixml/lluicolor.cpp b/indra/llxuixml/lluicolor.cpp index 424d878a6b..0049ec055c 100644 --- a/indra/llxuixml/lluicolor.cpp +++ b/indra/llxuixml/lluicolor.cpp @@ -16,13 +16,15 @@ LLUIColor::LLUIColor() { } -LLUIColor::LLUIColor(const LLColor4* color) - :mColorPtr(color) + +LLUIColor::LLUIColor(const LLColor4& color) +: mColor(color), + mColorPtr(NULL) { } -LLUIColor::LLUIColor(const LLColor4& color) - :mColor(color), mColorPtr(NULL) +LLUIColor::LLUIColor(const LLUIColor* color) +: mColorPtr(color) { } @@ -32,14 +34,14 @@ void LLUIColor::set(const LLColor4& color) mColorPtr = NULL; } -void LLUIColor::set(const LLColor4* color) +void LLUIColor::set(const LLUIColor* color) { mColorPtr = color; } const LLColor4& LLUIColor::get() const { - return (mColorPtr == NULL ? mColor : *mColorPtr); + return (mColorPtr == NULL ? mColor : mColorPtr->get()); } LLUIColor::operator const LLColor4& () const diff --git a/indra/llxuixml/lluicolor.h b/indra/llxuixml/lluicolor.h index bb0f786326..0ef2f78b24 100644 --- a/indra/llxuixml/lluicolor.h +++ b/indra/llxuixml/lluicolor.h @@ -22,11 +22,11 @@ class LLUIColor { public: LLUIColor(); - LLUIColor(const LLColor4* color); LLUIColor(const LLColor4& color); + LLUIColor(const LLUIColor* color); void set(const LLColor4& color); - void set(const LLColor4* color); + void set(const LLUIColor* color); const LLColor4& get() const; @@ -38,7 +38,7 @@ public: private: friend struct LLInitParam::ParamCompare<LLUIColor, false>; - const LLColor4* mColorPtr; + const LLUIColor* mColorPtr; LLColor4 mColor; }; @@ -47,7 +47,7 @@ namespace LLInitParam template<> struct ParamCompare<LLUIColor, false> { - static bool equals(const class LLUIColor& a, const class LLUIColor& b); + static bool equals(const LLUIColor& a, const LLUIColor& b); }; } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 1c32c690a8..cd7c002096 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -7,6 +7,7 @@ include(Boost) include(BuildVersion) include(DBusGlib) include(DirectX) +include(DragDrop) include(ELFIO) include(FMOD) include(OPENAL) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 2a7c3b0f74..62197406b6 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5527,6 +5527,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>PrimMediaDragNDrop</key> + <map> + <key>Comment</key> + <string>Enable drag and drop of URLs onto prim faces</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>PrimMediaMaxRetries</key> <map> <key>Comment</key> @@ -10820,6 +10831,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>SLURLDragNDrop</key> + <map> + <key>Comment</key> + <string>Enable drag and drop of SLURLs onto the viewer</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>soundsbeacon</key> <map> <key>Comment</key> diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 8f4ce4498e..5088c65122 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1081,7 +1081,6 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up // MULTI-WEARABLES: revisit if more than one per type is allowed. else if (areMatchingWearables(vitem,inv_item)) { - gAgentWearables.removeWearable(inv_item->getWearableType(),true,0); if (inv_item->getIsLinkType()) { gInventory.purgeObject(inv_item->getUUID()); diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index a58a562378..aeed4fee08 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -57,11 +57,11 @@ public: struct Params : public LLInitParam::Block<Params, LLFlatListView::Params> { - Optional<bool> ignore_online_status; // show all items as online - Optional<bool> show_last_interaction_time; // show most recent interaction time. *HACK: move this to a derived class - Optional<bool> show_info_btn; - Optional<bool> show_profile_btn; - Optional<bool> show_speaking_indicator; + Optional<bool> ignore_online_status, // show all items as online + show_last_interaction_time, // show most recent interaction time. *HACK: move this to a derived class + show_info_btn, + show_profile_btn, + show_speaking_indicator; Params(); }; diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 2bcd097717..846b2843dd 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -48,6 +48,17 @@ S32 LLAvatarListItem::sLeftPadding = 0; S32 LLAvatarListItem::sRightNamePadding = 0; S32 LLAvatarListItem::sChildrenWidths[LLAvatarListItem::ALIC_COUNT]; +static LLWidgetNameRegistry::StaticRegistrar sRegisterAvatarListItemParams(&typeid(LLAvatarListItem::Params), "avatar_list_item"); + +LLAvatarListItem::Params::Params() +: default_style("default_style"), + voice_call_invited_style("voice_call_invited_style"), + voice_call_joined_style("voice_call_joined_style"), + voice_call_left_style("voice_call_left_style"), + online_style("online_style"), + offline_style("offline_style") +{}; + LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/) : LLPanel(), @@ -166,9 +177,30 @@ void LLAvatarListItem::setHighlight(const std::string& highlight) void LLAvatarListItem::setState(EItemState item_style) { - item_style_map_t& item_styles_params_map = getItemStylesParams(); + const LLAvatarListItem::Params& params = LLUICtrlFactory::getDefaultParams<LLAvatarListItem>(); - mAvatarNameStyle = item_styles_params_map[item_style]; + switch(item_style) + { + default: + case IS_DEFAULT: + mAvatarNameStyle = params.default_style(); + break; + case IS_VOICE_INVITED: + mAvatarNameStyle = params.voice_call_invited_style(); + break; + case IS_VOICE_JOINED: + mAvatarNameStyle = params.voice_call_joined_style(); + break; + case IS_VOICE_LEFT: + mAvatarNameStyle = params.voice_call_left_style(); + break; + case IS_ONLINE: + mAvatarNameStyle = params.online_style(); + break; + case IS_OFFLINE: + mAvatarNameStyle = params.offline_style(); + break; + } // *NOTE: You cannot set the style on a text box anymore, you must // rebuild the text. This will cause problems if the text contains @@ -353,58 +385,6 @@ std::string LLAvatarListItem::formatSeconds(U32 secs) } // static -LLAvatarListItem::item_style_map_t& LLAvatarListItem::getItemStylesParams() -{ - static item_style_map_t item_styles_params_map; - if (!item_styles_params_map.empty()) return item_styles_params_map; - - LLPanel::Params params = LLUICtrlFactory::getDefaultParams<LLPanel>(); - LLPanel* params_panel = LLUICtrlFactory::create<LLPanel>(params); - - BOOL sucsess = LLUICtrlFactory::instance().buildPanel(params_panel, "panel_avatar_list_item_params.xml"); - - if (sucsess) - { - - item_styles_params_map.insert( - std::make_pair(IS_DEFAULT, - params_panel->getChild<LLTextBox>("default_style")->getDefaultStyle())); - - item_styles_params_map.insert( - std::make_pair(IS_VOICE_INVITED, - params_panel->getChild<LLTextBox>("voice_call_invited_style")->getDefaultStyle())); - - item_styles_params_map.insert( - std::make_pair(IS_VOICE_JOINED, - params_panel->getChild<LLTextBox>("voice_call_joined_style")->getDefaultStyle())); - - item_styles_params_map.insert( - std::make_pair(IS_VOICE_LEFT, - params_panel->getChild<LLTextBox>("voice_call_left_style")->getDefaultStyle())); - - item_styles_params_map.insert( - std::make_pair(IS_ONLINE, - params_panel->getChild<LLTextBox>("online_style")->getDefaultStyle())); - - item_styles_params_map.insert( - std::make_pair(IS_OFFLINE, - params_panel->getChild<LLTextBox>("offline_style")->getDefaultStyle())); - } - else - { - item_styles_params_map.insert(std::make_pair(IS_DEFAULT, LLStyle::Params())); - item_styles_params_map.insert(std::make_pair(IS_VOICE_INVITED, LLStyle::Params())); - item_styles_params_map.insert(std::make_pair(IS_VOICE_JOINED, LLStyle::Params())); - item_styles_params_map.insert(std::make_pair(IS_VOICE_LEFT, LLStyle::Params())); - item_styles_params_map.insert(std::make_pair(IS_ONLINE, LLStyle::Params())); - item_styles_params_map.insert(std::make_pair(IS_OFFLINE, LLStyle::Params())); - } - if (params_panel) params_panel->die(); - - return item_styles_params_map; -} - -// static LLAvatarListItem::icon_color_map_t& LLAvatarListItem::getItemIconColorMap() { static icon_color_map_t item_icon_color_map; diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index 61c0a8660e..426d80e0a8 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -46,6 +46,18 @@ class LLAvatarIconCtrl; class LLAvatarListItem : public LLPanel, public LLFriendObserver { public: + struct Params : public LLInitParam::Block<Params, LLPanel::Params> + { + Optional<LLStyle::Params> default_style, + voice_call_invited_style, + voice_call_joined_style, + voice_call_left_style, + online_style, + offline_style; + + Params(); + }; + typedef enum e_item_state_type { IS_DEFAULT, IS_VOICE_INVITED, @@ -143,9 +155,6 @@ private: std::string formatSeconds(U32 secs); - typedef std::map<EItemState, LLStyle::Params> item_style_map_t; - static item_style_map_t& getItemStylesParams(); - typedef std::map<EItemState, LLColor4> icon_color_map_t; static icon_color_map_t& getItemIconColorMap(); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index a570862675..581c210bd5 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -518,7 +518,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL chatters += *it; if (++it != mUnreadChatSources.end()) { - chatters += ","; + chatters += ", "; } } LLStringUtil::format_map_t args; diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 9f6412c0ab..e0a9e080fa 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -169,8 +169,7 @@ void LLExpandableTextBox::LLTextBoxEx::showExpandText() std::pair<S32, S32> visible_lines = getVisibleLines(true); S32 last_line = visible_lines.second - 1; - LLStyle::Params expander_style = getDefaultStyle(); - expander_style.font.name(LLFontGL::nameFromFont(expander_style.font)); + LLStyle::Params expander_style(getDefaultStyleParams()); expander_style.font.style = "UNDERLINE"; expander_style.color = LLUIColorTable::instance().getColor("HTMLLinkColor"); LLExpanderSegment* expanderp = new LLExpanderSegment(new LLStyle(expander_style), getLineStart(last_line), getLength() + 1, mExpanderLabel, *this); @@ -186,8 +185,8 @@ void LLExpandableTextBox::LLTextBoxEx::hideExpandText() if (mExpanderVisible) { // this will overwrite the expander segment and all text styling with a single style - LLNormalTextSegment* segmentp = new LLNormalTextSegment( - new LLStyle(getDefaultStyle()), 0, getLength() + 1, *this); + LLStyleConstSP sp(new LLStyle(getDefaultStyleParams())); + LLNormalTextSegment* segmentp = new LLNormalTextSegment(sp, 0, getLength() + 1, *this); insertSegment(segmentp); mExpanderVisible = false; diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp index 2e0ae3265e..f3c6b286ab 100644 --- a/indra/newview/llfloaterhelpbrowser.cpp +++ b/indra/newview/llfloaterhelpbrowser.cpp @@ -85,13 +85,22 @@ void LLFloaterHelpBrowser::onClose(bool app_quitting) void LLFloaterHelpBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) { - if(event == MEDIA_EVENT_LOCATION_CHANGED) + switch (event) { + case MEDIA_EVENT_LOCATION_CHANGED: setCurrentURL(self->getLocation()); - } - else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE) - { - // nothing yet + break; + + case MEDIA_EVENT_NAVIGATE_BEGIN: + childSetText("status_text", getString("loading_text")); + break; + + case MEDIA_EVENT_NAVIGATE_COMPLETE: + childSetText("status_text", getString("done_text")); + break; + + default: + break; } } diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index 568f4b254e..051ab585e2 100644 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -142,8 +142,8 @@ void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation ) // Rotation is in radians. // Rotation of 0 means x = 1, y = 0 on the unit circle. - F32 map_half_height = (F32)(getRect().getHeight() / 2); - F32 map_half_width = (F32)(getRect().getWidth() / 2); + F32 map_half_height = (F32)(getRect().getHeight() / 2) - getHeaderHeight()/2; + F32 map_half_width = (F32)(getRect().getWidth() / 2) ; F32 text_half_height = (F32)(text_box->getRect().getHeight() / 2); F32 text_half_width = (F32)(text_box->getRect().getWidth() / 2); F32 radius = llmin( map_half_height - text_half_height, map_half_width - text_half_width ); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index a0031f0193..b6e9fb3f6c 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -2084,6 +2084,10 @@ void LLFloaterSnapshot::draw() S32 offset_x = (getRect().getWidth() - previewp->getThumbnailWidth()) / 2 ; S32 offset_y = thumbnail_rect.mBottom + (thumbnail_rect.getHeight() - previewp->getThumbnailHeight()) / 2 ; + if (! gSavedSettings.getBOOL("AdvanceSnapshot")) + { + offset_y += getUIWinHeightShort() - getUIWinHeightLong(); + } glMatrixMode(GL_MODELVIEW); gl_draw_scaled_image(offset_x, offset_y, diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 645f8ef054..c6e12476bd 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -1091,7 +1091,9 @@ void LLFloaterUIPreview::onClickEditFloater() char *args2 = new char[args.size() + 1]; // Windows requires that the second parameter to CreateProcessA be a writable (non-const) string... strcpy(args2, args.c_str()); - if(!CreateProcessA(exe_path.c_str(), args2, NULL, NULL, FALSE, 0, NULL, exe_dir.c_str(), &sinfo, &pinfo)) + // we don't want the current directory to be the executable directory, since the file path is now relative. By using + // NULL for the current directory instead of exe_dir.c_str(), the path to the target file will work. + if(!CreateProcessA(exe_path.c_str(), args2, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo)) { // DWORD dwErr = GetLastError(); std::string warning = "Creating editor process failed!"; diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 9e52d4c6c2..4a18c8640f 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -510,6 +510,20 @@ void LLIMFloater::setVisible(BOOL visible) } } +BOOL LLIMFloater::getVisible() +{ + if(isChatMultiTab()) + { + LLIMFloaterContainer* im_container = LLIMFloaterContainer::getInstance(); + // Tabbed IM window is "visible" when we minimize it. + return !im_container->isMinimized() && im_container->getVisible(); + } + else + { + return LLTransientDockableFloater::getVisible(); + } +} + //static bool LLIMFloater::toggle(const LLUUID& session_id) { @@ -585,6 +599,9 @@ void LLIMFloater::updateMessages() { // LLUIColor chat_color = LLUIColorTable::instance().getColor("IMChatColor"); + LLSD chat_args; + chat_args["use_plain_text_chat_history"] = use_plain_text_chat_history; + std::ostringstream message; std::list<LLSD>::const_reverse_iterator iter = messages.rbegin(); std::list<LLSD>::const_reverse_iterator iter_end = messages.rend(); @@ -614,7 +631,7 @@ void LLIMFloater::updateMessages() chat.mText = message; } - mChatHistory->appendMessage(chat, use_plain_text_chat_history); + mChatHistory->appendMessage(chat, chat_args); mLastMessageIndex = msg["index"].asInteger(); } } diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index 9552b30737..2f034d02b8 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -58,6 +58,7 @@ public: // LLView overrides /*virtual*/ BOOL postBuild(); /*virtual*/ void setVisible(BOOL visible); + /*virtual*/ BOOL getVisible(); // Check typing timeout timer. /*virtual*/ void draw(); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 80d2778934..db6b2041f8 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1467,6 +1467,7 @@ LLCallDialog::LLCallDialog(const LLSD& payload) mPayload(payload), mLifetime(DEFAULT_LIFETIME) { + setAutoFocus(FALSE); } void LLCallDialog::getAllowedRect(LLRect& rect) @@ -1733,6 +1734,9 @@ void LLIncomingCallDialog::onLifetimeExpired() { // close invitation if call is already not valid mLifetimeTimer.stop(); + LLUUID session_id = mPayload["session_id"].asUUID(); + gIMMgr->clearPendingAgentListUpdates(session_id); + gIMMgr->clearPendingInvitation(session_id); closeFloater(); } } @@ -1791,7 +1795,7 @@ BOOL LLIncomingCallDialog::postBuild() childSetAction("Accept", onAccept, this); childSetAction("Reject", onReject, this); childSetAction("Start IM", onStartIM, this); - childSetFocus("Accept"); + setDefaultBtn("Accept"); std::string notify_box_type = mPayload["notify_box_type"].asString(); if(notify_box_type != "VoiceInviteGroup" && notify_box_type != "VoiceInviteAdHoc") @@ -2421,7 +2425,7 @@ void LLIMMgr::inviteToSession( } else { - LLFloaterReg::showInstance("incoming_call", payload, TRUE); + LLFloaterReg::showInstance("incoming_call", payload, FALSE); } mPendingInvitations[session_id.asString()] = LLSD(); } @@ -2434,7 +2438,7 @@ void LLIMMgr::onInviteNameLookup(LLSD payload, const LLUUID& id, const std::stri std::string notify_box_type = payload["notify_box_type"].asString(); - LLFloaterReg::showInstance("incoming_call", payload, TRUE); + LLFloaterReg::showInstance("incoming_call", payload, FALSE); } //*TODO disconnects all sessions diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index e04d3ec5a0..e8a4899a0b 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4634,6 +4634,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { case LLAssetType::AT_CLOTHING: items.push_back(std::string("Take Off")); + // Fallthrough since clothing and bodypart share wear options case LLAssetType::AT_BODYPART: if (get_is_item_worn(item->getUUID())) { diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 050cfcc3d9..4f40a0a532 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -153,6 +153,23 @@ private: LLLocationInputCtrl* mInput; }; +class LLParcelChangeObserver : public LLParcelObserver +{ +public: + LLParcelChangeObserver(LLLocationInputCtrl* input) : mInput(input) {} + +private: + /*virtual*/ void changed() + { + if (mInput) + { + mInput->refreshParcelIcons(); + } + } + + LLLocationInputCtrl* mInput; +}; + //============================================================================ @@ -335,7 +352,10 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) mAddLandmarkObserver = new LLAddLandmarkObserver(this); gInventory.addObserver(mRemoveLandmarkObserver); gInventory.addObserver(mAddLandmarkObserver); - + + mParcelChangeObserver = new LLParcelChangeObserver(this); + LLViewerParcelMgr::getInstance()->addObserver(mParcelChangeObserver); + mAddLandmarkTooltip = LLTrans::getString("LocationCtrlAddLandmarkTooltip"); mEditLandmarkTooltip = LLTrans::getString("LocationCtrlEditLandmarkTooltip"); getChild<LLView>("Location History")->setToolTip(LLTrans::getString("LocationCtrlComboBtnTooltip")); @@ -349,6 +369,9 @@ LLLocationInputCtrl::~LLLocationInputCtrl() delete mRemoveLandmarkObserver; delete mAddLandmarkObserver; + LLViewerParcelMgr::getInstance()->removeObserver(mParcelChangeObserver); + delete mParcelChangeObserver; + mParcelMgrConnection.disconnect(); mLocationHistoryConnection.disconnect(); } @@ -673,15 +696,39 @@ void LLLocationInputCtrl::refreshParcelIcons() if (show_properties) { LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance(); + + LLViewerRegion* agent_region = gAgent.getRegion(); LLParcel* agent_parcel = vpm->getAgentParcel(); - bool allow_buy = vpm->canAgentBuyParcel( agent_parcel, false); - bool allow_voice = vpm->allowAgentVoice(); - bool allow_fly = vpm->allowAgentFly(); - bool allow_push = vpm->allowAgentPush(); - bool allow_build = agent_parcel && agent_parcel->getAllowModify(); // true when anyone is allowed to build. See EXT-4610. - bool allow_scripts = vpm->allowAgentScripts(); - bool allow_damage = vpm->allowAgentDamage(); - + if (!agent_region || !agent_parcel) + return; + + LLParcel* current_parcel; + LLViewerRegion* selection_region = vpm->getSelectionRegion(); + LLParcel* selected_parcel = vpm->getParcelSelection()->getParcel(); + + // If agent is in selected parcel we use its properties because + // they are updated more often by LLViewerParcelMgr than agent parcel properties. + // See LLViewerParcelMgr::processParcelProperties(). + // This is needed to reflect parcel restrictions changes without having to leave + // the parcel and then enter it again. See EXT-2987 + if (selected_parcel && selected_parcel->getLocalID() == agent_parcel->getLocalID() + && selection_region == agent_region) + { + current_parcel = selected_parcel; + } + else + { + current_parcel = agent_parcel; + } + + bool allow_buy = vpm->canAgentBuyParcel(current_parcel, false); + bool allow_voice = vpm->allowAgentVoice(agent_region, current_parcel); + bool allow_fly = vpm->allowAgentFly(agent_region, current_parcel); + bool allow_push = vpm->allowAgentPush(agent_region, current_parcel); + bool allow_build = vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610. + bool allow_scripts = vpm->allowAgentScripts(agent_region, current_parcel); + bool allow_damage = vpm->allowAgentDamage(agent_region, current_parcel); + // Most icons are "block this ability" mForSaleBtn->setVisible(allow_buy); mParcelIcon[VOICE_ICON]->setVisible( !allow_voice ); diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h index 607ccd4da6..a830b33f6f 100644 --- a/indra/newview/lllocationinputctrl.h +++ b/indra/newview/lllocationinputctrl.h @@ -42,6 +42,7 @@ class LLLandmark; // internals class LLAddLandmarkObserver; class LLRemoveLandmarkObserver; +class LLParcelChangeObserver; class LLMenuGL; class LLTeleportHistoryItem; @@ -56,6 +57,7 @@ class LLLocationInputCtrl LOG_CLASS(LLLocationInputCtrl); friend class LLAddLandmarkObserver; friend class LLRemoveLandmarkObserver; + friend class LLParcelChangeObserver; public: struct Params @@ -164,6 +166,7 @@ private: LLAddLandmarkObserver* mAddLandmarkObserver; LLRemoveLandmarkObserver* mRemoveLandmarkObserver; + LLParcelChangeObserver* mParcelChangeObserver; boost::signals2::connection mParcelMgrConnection; boost::signals2::connection mLocationHistoryConnection; diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 9f04558d50..8c875c9b63 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -162,7 +162,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask) localRectToScreen(cell_rect, &sticky_rect); // Spawn at right side of cell - LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop ); + LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop + (sticky_rect.getHeight()-16)/2 ); LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small"); // Should we show a group or an avatar inspector? diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index 16218f6d53..e2a748a1c5 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -153,7 +153,7 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi { const std::string name = LLHandlerUtil::getSubstitutionName(notification); - const std::string session_name = notification->getPayload().has( + std::string session_name = notification->getPayload().has( "SESSION_NAME") ? notification->getPayload()["SESSION_NAME"].asString() : name; // don't create IM p2p session with objects, it's necessary condition to log @@ -162,6 +162,12 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi { LLUUID from_id = notification->getPayload()["from_id"]; + //*HACK for ServerObjectMessage the sesson name is really weird, see EXT-4779 + if (SERVER_OBJECT_MESSAGE == notification->getName()) + { + session_name = "chat"; + } + if(to_file_only) { logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(), diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index f816dc589d..388fdeea7a 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -251,6 +251,11 @@ void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id) { if (speaker_id.isNull() || speaker_id == mSpeakerId) return; + if (mSpeakerId.notNull()) + { + // Unregister previous registration to avoid crash. EXT-4782. + LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); + } mSpeakerId = speaker_id; LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this); diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 87d101b00f..af9e791223 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -689,6 +689,23 @@ void LLPanelLogin::refreshLocation( bool force_visible ) } // static +void LLPanelLogin::updateLocationUI() +{ + if (!sInstance) return; + + std::string sim_string = LLURLSimString::sInstance.mSimString; + if (!sim_string.empty()) + { + // Replace "<Type region name>" with this region name + LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo"); + combo->remove(2); + combo->add( sim_string ); + combo->setTextEntry(sim_string); + combo->setCurrentByIndex( 2 ); + } +} + +// static void LLPanelLogin::closePanel() { if (sInstance) diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index 97350ce5c7..1fdc3a9361 100644 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -71,6 +71,7 @@ public: static void addServer(const std::string& server, S32 domain_name); static void refreshLocation( bool force_visible ); + static void updateLocationUI(); static void getFields(std::string *firstname, std::string *lastname, std::string *password); @@ -102,7 +103,7 @@ private: static void onPassKey(LLLineEditor* caller, void* user_data); static void onSelectServer(LLUICtrl*, void*); static void onServerComboLostFocus(LLFocusableElement*); - + private: LLPointer<LLUIImage> mLogoImage; boost::scoped_ptr<LLPanelLoginListener> mListener; diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 8d689b2c5e..9e5f9da0ea 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -340,8 +340,10 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, std::string on = getString("on"); std::string off = getString("off"); + LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance(); + // Processing parcel characteristics - if (parcel->getParcelFlagAllowVoice()) + if (vpm->allowAgentVoice(region, parcel)) { mVoiceIcon->setValue(icon_voice); mVoiceText->setText(on); @@ -352,7 +354,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, mVoiceText->setText(off); } - if (!region->getBlockFly() && parcel->getAllowFly()) + if (vpm->allowAgentFly(region, parcel)) { mFlyIcon->setValue(icon_fly); mFlyText->setText(on); @@ -363,18 +365,18 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, mFlyText->setText(off); } - if (region->getRestrictPushObject() || parcel->getRestrictPushObject()) + if (vpm->allowAgentPush(region, parcel)) { - mPushIcon->setValue(icon_push_no); - mPushText->setText(off); + mPushIcon->setValue(icon_push); + mPushText->setText(on); } else { - mPushIcon->setValue(icon_push); - mPushText->setText(on); + mPushIcon->setValue(icon_push_no); + mPushText->setText(off); } - if (parcel->getAllowModify()) + if (vpm->allowAgentBuild(parcel)) { mBuildIcon->setValue(icon_build); mBuildText->setText(on); @@ -385,20 +387,18 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, mBuildText->setText(off); } - if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) || - (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) || - !parcel->getAllowOtherScripts()) + if (vpm->allowAgentScripts(region, parcel)) { - mScriptsIcon->setValue(icon_scripts_no); - mScriptsText->setText(off); + mScriptsIcon->setValue(icon_scripts); + mScriptsText->setText(on); } else { - mScriptsIcon->setValue(icon_scripts); - mScriptsText->setText(on); + mScriptsIcon->setValue(icon_scripts_no); + mScriptsText->setText(off); } - if (region->getAllowDamage() || parcel->getAllowDamage()) + if (vpm->allowAgentDamage(region, parcel)) { mDamageIcon->setValue(icon_damage); mDamageText->setText(on); @@ -461,12 +461,8 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, S32 claim_price; S32 rent_price; F32 dwell; - BOOL for_sale = parcel->getForSale(); - LLViewerParcelMgr::getInstance()->getDisplayInfo(&area, - &claim_price, - &rent_price, - &for_sale, - &dwell); + BOOL for_sale; + vpm->getDisplayInfo(&area, &claim_price, &rent_price, &for_sale, &dwell); if (for_sale) { const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID(); diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp index 5e1d408e8d..d33c050ee4 100644 --- a/indra/newview/llspeakingindicatormanager.cpp +++ b/indra/newview/llspeakingindicatormanager.cpp @@ -114,6 +114,13 @@ private: void switchSpeakerIndicators(const speaker_ids_t& speakers_uuids, BOOL switch_on); /** + * Ensures that passed instance of Speaking Indicator does not exist among registered ones. + * If yes, it will be removed. + */ + void ensureInstanceDoesNotExist(LLSpeakingIndicator* const speaking_indicator); + + + /** * Multimap with all registered speaking indicators */ speaking_indicators_mmap_t mSpeakingIndicators; @@ -135,7 +142,11 @@ void SpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_i { // do not exclude agent's indicators. They should be processed in the same way as others. See EXT-3889. - LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << LL_ENDL; + LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << "|"<< speaking_indicator << LL_ENDL; + + + ensureInstanceDoesNotExist(speaking_indicator); + speaking_indicator_value_t value_type(speaker_id, speaking_indicator); mSpeakingIndicators.insert(value_type); @@ -148,12 +159,14 @@ void SpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_i void SpeakingIndicatorManager::unregisterSpeakingIndicator(const LLUUID& speaker_id, const LLSpeakingIndicator* const speaking_indicator) { + LL_DEBUGS("SpeakingIndicator") << "Unregistering indicator: " << speaker_id << "|"<< speaking_indicator << LL_ENDL; speaking_indicators_mmap_t::iterator it; it = mSpeakingIndicators.find(speaker_id); for (;it != mSpeakingIndicators.end(); ++it) { if (it->second == speaking_indicator) { + LL_DEBUGS("SpeakingIndicator") << "Unregistered." << LL_ENDL; mSpeakingIndicators.erase(it); break; } @@ -231,6 +244,32 @@ void SpeakingIndicatorManager::switchSpeakerIndicators(const speaker_ids_t& spea } } +void SpeakingIndicatorManager::ensureInstanceDoesNotExist(LLSpeakingIndicator* const speaking_indicator) +{ + LL_DEBUGS("SpeakingIndicator") << "Searching for an registered indicator instance: " << speaking_indicator << LL_ENDL; + speaking_indicators_mmap_t::iterator it = mSpeakingIndicators.begin(); + for (;it != mSpeakingIndicators.end(); ++it) + { + if (it->second == speaking_indicator) + { + LL_DEBUGS("SpeakingIndicator") << "Found" << LL_ENDL; + break; + } + } + + // It is possible with LLOutputMonitorCtrl the same instance of indicator is registered several + // times with different UUIDs. This leads to crash after instance is destroyed because the + // only one (specified by UUID in unregisterSpeakingIndicator()) is removed from the map. + // So, using stored deleted pointer leads to crash. See EXT-4782. + if (it != mSpeakingIndicators.end()) + { + llwarns << "The same instance of indicator has already been registered, removing it: " << it->first << "|"<< speaking_indicator << llendl; + llassert(it == mSpeakingIndicators.end()); + mSpeakingIndicators.erase(it); + } +} + + /************************************************************************/ /* LLSpeakingIndicatorManager namespace implementation */ /************************************************************************/ diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 38103f9e41..934981b0ad 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -242,10 +242,29 @@ void audio_update_wind(bool force_update) // outside the fade-in. F32 master_volume = gSavedSettings.getBOOL("MuteAudio") ? 0.f : gSavedSettings.getF32("AudioLevelMaster"); F32 ambient_volume = gSavedSettings.getBOOL("MuteAmbient") ? 0.f : gSavedSettings.getF32("AudioLevelAmbient"); + F32 max_wind_volume = master_volume * ambient_volume; - F32 wind_volume = master_volume * ambient_volume; - gAudiop->mMaxWindGain = wind_volume; - + const F32 WIND_SOUND_TRANSITION_TIME = 2.f; + // amount to change volume this frame + F32 volume_delta = (LLFrameTimer::getFrameDeltaTimeF32() / WIND_SOUND_TRANSITION_TIME) * max_wind_volume; + if (force_update) + { + // initialize wind volume (force_update) by using large volume_delta + // which is sufficient to completely turn off or turn on wind noise + volume_delta = max_wind_volume; + } + + // mute wind when not flying + if (gAgent.getFlying()) + { + // volume increases by volume_delta, up to no more than max_wind_volume + gAudiop->mMaxWindGain = llmin(gAudiop->mMaxWindGain + volume_delta, max_wind_volume); + } + else + { + // volume decreases by volume_delta, down to no less than 0 + gAudiop->mMaxWindGain = llmax(gAudiop->mMaxWindGain - volume_delta, 0.f); + } last_camera_water_height = camera_water_height; gAudiop->updateWind(gRelativeWindVec, camera_water_height); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 9240833632..b0952dd698 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -870,8 +870,7 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f //////////////////////////////////////////////////////////////////////////////// // Don't highlight if it's in certain "quiet" folders which don't need UI // notification (e.g. trash, cof, lost-and-found). - const BOOL user_is_away = gAwayTimer.getStarted(); - if(!user_is_away) + if(!gAgent.getAFK()) { const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id); if (parent) diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 9d7ccd99c6..7ec650629d 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -666,31 +666,38 @@ bool LLViewerParcelMgr::allowAgentBuild() const } } +// Return whether anyone can build on the given parcel +bool LLViewerParcelMgr::allowAgentBuild(const LLParcel* parcel) const +{ + return parcel->getAllowModify(); +} + bool LLViewerParcelMgr::allowAgentVoice() const { - LLViewerRegion* region = gAgent.getRegion(); + return allowAgentVoice(gAgent.getRegion(), mAgentParcel); +} + +bool LLViewerParcelMgr::allowAgentVoice(const LLViewerRegion* region, const LLParcel* parcel) const +{ return region && region->isVoiceEnabled() - && mAgentParcel && mAgentParcel->getParcelFlagAllowVoice(); + && parcel && parcel->getParcelFlagAllowVoice(); } -bool LLViewerParcelMgr::allowAgentFly() const +bool LLViewerParcelMgr::allowAgentFly(const LLViewerRegion* region, const LLParcel* parcel) const { - LLViewerRegion* region = gAgent.getRegion(); return region && !region->getBlockFly() - && mAgentParcel && mAgentParcel->getAllowFly(); + && parcel && parcel->getAllowFly(); } // Can the agent be pushed around by LLPushObject? -bool LLViewerParcelMgr::allowAgentPush() const +bool LLViewerParcelMgr::allowAgentPush(const LLViewerRegion* region, const LLParcel* parcel) const { - LLViewerRegion* region = gAgent.getRegion(); return region && !region->getRestrictPushObject() - && mAgentParcel && !mAgentParcel->getRestrictPushObject(); + && parcel && !parcel->getRestrictPushObject(); } -bool LLViewerParcelMgr::allowAgentScripts() const +bool LLViewerParcelMgr::allowAgentScripts(const LLViewerRegion* region, const LLParcel* parcel) const { - LLViewerRegion* region = gAgent.getRegion(); // *NOTE: This code does not take into account group-owned parcels // and the flag to allow group-owned scripted objects to run. // This mirrors the traditional menu bar parcel icon code, but is not @@ -698,15 +705,14 @@ bool LLViewerParcelMgr::allowAgentScripts() const return region && !(region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) && !(region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) - && mAgentParcel - && mAgentParcel->getAllowOtherScripts(); + && parcel + && parcel->getAllowOtherScripts(); } -bool LLViewerParcelMgr::allowAgentDamage() const +bool LLViewerParcelMgr::allowAgentDamage(const LLViewerRegion* region, const LLParcel* parcel) const { - LLViewerRegion* region = gAgent.getRegion(); return (region && region->getAllowDamage()) - || (mAgentParcel && mAgentParcel->getAllowDamage()); + || (parcel && parcel->getAllowDamage()); } BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const @@ -1591,6 +1597,14 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use instance->mTeleportInProgress = FALSE; instance->mTeleportFinishedSignal(gAgent.getPositionGlobal()); } + + // HACK: This makes agents drop from the sky if they enter a parcel + // which is set to no fly. + BOOL was_flying = gAgent.getFlying(); + if (was_flying && !parcel->getAllowFly()) + { + gAgent.setFlying(gAgent.canFly()); + } } } diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 379190789b..98be8e2c7b 100644 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -171,26 +171,28 @@ public: // Can this agent build on the parcel he is on? // Used for parcel property icons in nav bar. bool allowAgentBuild() const; + bool allowAgentBuild(const LLParcel* parcel) const; // Can this agent speak on the parcel he is on? // Used for parcel property icons in nav bar. bool allowAgentVoice() const; - + bool allowAgentVoice(const LLViewerRegion* region, const LLParcel* parcel) const; + // Can this agent start flying on this parcel? // Used for parcel property icons in nav bar. - bool allowAgentFly() const; + bool allowAgentFly(const LLViewerRegion* region, const LLParcel* parcel) const; // Can this agent be pushed by llPushObject() on this parcel? // Used for parcel property icons in nav bar. - bool allowAgentPush() const; + bool allowAgentPush(const LLViewerRegion* region, const LLParcel* parcel) const; // Can scripts written by non-parcel-owners run on the agent's current // parcel? Used for parcel property icons in nav bar. - bool allowAgentScripts() const; + bool allowAgentScripts(const LLViewerRegion* region, const LLParcel* parcel) const; // Can the agent be damaged here? // Used for parcel property icons in nav bar. - bool allowAgentDamage() const; + bool allowAgentDamage(const LLViewerRegion* region, const LLParcel* parcel) const; F32 getHoverParcelWidth() const { return F32(mHoverEastNorth.mdV[VX] - mHoverWestSouth.mdV[VX]); } diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 2e92512b31..ea8af223c3 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -246,7 +246,7 @@ public: return FALSE; } - /*virtual*/ const LLStyleSP getStyle() const { return mStyle; } + /*virtual*/ LLStyleConstSP getStyle() const { return mStyle; } private: LLUIImagePtr mImage; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index cd6b9e2c50..fdc6675db1 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -51,6 +51,7 @@ #include "llviewquery.h" #include "llxmltree.h" +#include "llslurl.h" //#include "llviewercamera.h" #include "llrender.h" @@ -80,6 +81,9 @@ #include "timing.h" #include "llviewermenu.h" #include "lltooltip.h" +#include "llmediaentry.h" +#include "llurldispatcher.h" +#include "llurlsimstring.h" // newview includes #include "llagent.h" @@ -795,6 +799,137 @@ BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MAS // Always handled as far as the OS is concerned. return TRUE; } + +LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *window, LLCoordGL pos, MASK mask, LLWindowCallbacks::DragNDropAction action, std::string data) +{ + LLWindowCallbacks::DragNDropResult result = LLWindowCallbacks::DND_NONE; + + const bool prim_media_dnd_enabled = gSavedSettings.getBOOL("PrimMediaDragNDrop"); + const bool slurl_dnd_enabled = gSavedSettings.getBOOL("SLURLDragNDrop"); + + if ( prim_media_dnd_enabled || slurl_dnd_enabled ) + { + switch(action) + { + // Much of the handling for these two cases is the same. + case LLWindowCallbacks::DNDA_TRACK: + case LLWindowCallbacks::DNDA_DROPPED: + case LLWindowCallbacks::DNDA_START_TRACKING: + { + bool drop = (LLWindowCallbacks::DNDA_DROPPED == action); + + if (slurl_dnd_enabled) + { + // special case SLURLs + if ( LLSLURL::isSLURL( data ) ) + { + if (drop) + { + LLURLDispatcher::dispatch( data, NULL, true ); + LLURLSimString::setStringRaw( LLSLURL::stripProtocol( data ) ); + LLPanelLogin::refreshLocation( true ); + LLPanelLogin::updateLocationUI(); + } + return LLWindowCallbacks::DND_MOVE; + }; + } + + if (prim_media_dnd_enabled) + { + LLPickInfo pick_info = pickImmediate( pos.mX, pos.mY, TRUE /*BOOL pick_transparent*/ ); + + LLUUID object_id = pick_info.getObjectID(); + S32 object_face = pick_info.mObjectFace; + std::string url = data; + + lldebugs << "Object: picked at " << pos.mX << ", " << pos.mY << " - face = " << object_face << " - URL = " << url << llendl; + + LLVOVolume *obj = dynamic_cast<LLVOVolume*>(static_cast<LLViewerObject*>(pick_info.getObject())); + + if (obj && obj->permModify() && !obj->getRegion()->getCapability("ObjectMedia").empty()) + { + LLTextureEntry *te = obj->getTE(object_face); + if (te) + { + if (drop) + { + if (! te->hasMedia()) + { + // Create new media entry + LLSD media_data; + // XXX Should we really do Home URL too? + media_data[LLMediaEntry::HOME_URL_KEY] = url; + media_data[LLMediaEntry::CURRENT_URL_KEY] = url; + media_data[LLMediaEntry::AUTO_PLAY_KEY] = true; + obj->syncMediaData(object_face, media_data, true, true); + // XXX This shouldn't be necessary, should it ?!? + if (obj->getMediaImpl(object_face)) + obj->getMediaImpl(object_face)->navigateReload(); + obj->sendMediaDataUpdate(); + + result = LLWindowCallbacks::DND_COPY; + } + else { + // Check the whitelist + if (te->getMediaData()->checkCandidateUrl(url)) + { + // just navigate to the URL + if (obj->getMediaImpl(object_face)) + { + obj->getMediaImpl(object_face)->navigateTo(url); + } + else { + // This is very strange. Navigation should + // happen via the Impl, but we don't have one. + // This sends it to the server, which /should/ + // trigger us getting it. Hopefully. + LLSD media_data; + media_data[LLMediaEntry::CURRENT_URL_KEY] = url; + obj->syncMediaData(object_face, media_data, true, true); + obj->sendMediaDataUpdate(); + } + result = LLWindowCallbacks::DND_LINK; + } + } + LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject); + mDragHoveredObject = NULL; + + } + else { + // Check the whitelist, if there's media (otherwise just show it) + if (te->getMediaData() == NULL || te->getMediaData()->checkCandidateUrl(url)) + { + if ( obj != mDragHoveredObject) + { + // Highlight the dragged object + LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject); + mDragHoveredObject = obj; + LLSelectMgr::getInstance()->highlightObjectOnly(mDragHoveredObject); + } + result = (! te->hasMedia()) ? LLWindowCallbacks::DND_COPY : LLWindowCallbacks::DND_LINK; + } + } + } + } + } + } + break; + + case LLWindowCallbacks::DNDA_STOP_TRACKING: + // The cleanup case below will make sure things are unhilighted if necessary. + break; + } + + if (prim_media_dnd_enabled && + result == LLWindowCallbacks::DND_NONE && !mDragHoveredObject.isNull()) + { + LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject); + mDragHoveredObject = NULL; + } + } + + return result; +} BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask) { diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index c0a9180b53..98d2958d9a 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -166,7 +166,8 @@ public: /*virtual*/ BOOL handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK mask); /*virtual*/ BOOL handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask); /*virtual*/ BOOL handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask); - /*virtual*/ void handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask); + /*virtual*/ LLWindowCallbacks::DragNDropResult handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, LLWindowCallbacks::DragNDropAction action, std::string data); + void handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask); /*virtual*/ void handleMouseLeave(LLWindow *window); /*virtual*/ void handleResize(LLWindow *window, S32 x, S32 y); /*virtual*/ void handleFocus(LLWindow *window); @@ -472,6 +473,10 @@ protected: static std::string sSnapshotDir; static std::string sMovieBaseName; + +private: + // Object temporarily hovered over while dragging + LLPointer<LLViewerObject> mDragHoveredObject; }; void toggle_flying(void*); diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 560c2ab469..c062dd1732 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -3439,12 +3439,17 @@ void LLVoiceClient::sendPositionalUpdate(void) << "<Volume>" << volume << "</Volume>" << "</Request>\n\n\n"; - // Send a "mute for me" command for the user - stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Session.SetParticipantMuteForMe.1\">" - << "<SessionHandle>" << getAudioSessionHandle() << "</SessionHandle>" - << "<ParticipantURI>" << p->mURI << "</ParticipantURI>" - << "<Mute>" << (mute?"1":"0") << "</Mute>" - << "</Request>\n\n\n"; + if(!mAudioSession->mIsP2P) + { + // Send a "mute for me" command for the user + // Doesn't work in P2P sessions + stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Session.SetParticipantMuteForMe.1\">" + << "<SessionHandle>" << getAudioSessionHandle() << "</SessionHandle>" + << "<ParticipantURI>" << p->mURI << "</ParticipantURI>" + << "<Mute>" << (mute?"1":"0") << "</Mute>" + << "<Scope>Audio</Scope>" + << "</Request>\n\n\n"; + } } p->mVolumeDirty = false; diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index e248047930..ec196245a1 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -47,7 +47,7 @@ <color name="Black" value="0 0 0 1" /> - <color + <colork name="Black_10" value="0 0 0 0.1" /> <color @@ -77,6 +77,16 @@ <color name="Purple" value="1 0 1 1" /> + <color + name="Lime" + value=".8 1 .73 1" /> + <color + name="LtYellow" + value="1 1 .79 1" /> + <color + name="LtOrange" + value="1 .85 .73 1" /> + <!-- This color name makes potentially unused colors show up bright purple. Leave this here until all Unused? are removed below, otherwise the viewer generates many warnings on startup. --> @@ -97,7 +107,7 @@ value="1 0.82 0.46 1" /> <color name="AlertCautionTextColor" - reference="Black" /> + reference="LtYellow" /> <color name="AgentLinkColor" reference="White" /> @@ -226,10 +236,10 @@ reference="White" /> <color name="ColorPaletteEntry16" - reference="White" /> + reference="LtYellow" /> <color name="ColorPaletteEntry17" - reference="White" /> + reference="LtGreen" /> <color name="ColorPaletteEntry18" reference="LtGray" /> @@ -544,7 +554,7 @@ reference="White" /> <color name="ObjectChatColor" - reference="EmphasisColor" /> + reference="EmphasisColor_35" /> <color name="OverdrivenColor" reference="Red" /> @@ -592,7 +602,7 @@ value="0.39 0.39 0.39 1" /> <color name="ScriptErrorColor" - value="0.82 0.27 0.27 1" /> + value="Red" /> <color name="ScrollBGStripeColor" reference="Transparent" /> @@ -649,7 +659,7 @@ reference="FrogGreen" /> <color name="SystemChatColor" - reference="White" /> + reference="LtGray" /> <color name="TextBgFocusColor" reference="White" /> @@ -703,7 +713,7 @@ reference="White" /> <color name="llOwnerSayChatColor" - reference="LtGray" /> + reference="LtYellow" /> <!-- New Colors --> <color diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png Binary files differindex 28ff6ba976..9e7291d6fb 100644 --- a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png Binary files differindex 0455a52fdc..e0b18b2451 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png Binary files differindex be0c379d84..101aaa42b1 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png +++ b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png Binary files differindex ed4a512e04..c27f18e3c7 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png Binary files differindex 2f5871b8ff..60e6a00a25 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Light.png b/indra/newview/skins/default/textures/icons/Parcel_M_Light.png Binary files differindex 724ac22744..55f97f3b4e 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_M_Light.png +++ b/indra/newview/skins/default/textures/icons/Parcel_M_Light.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png Binary files differindex f0565f02dd..11ab1f1e60 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png Binary files differindex f32b0570a1..b536762ddc 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png +++ b/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png Binary files differindex e0e6e14cca..bf618752f6 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png +++ b/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Light.png b/indra/newview/skins/default/textures/icons/Parcel_R_Light.png Binary files differindex efca6776da..a67bbd0cc5 100644 --- a/indra/newview/skins/default/textures/icons/Parcel_R_Light.png +++ b/indra/newview/skins/default/textures/icons/Parcel_R_Light.png diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml index c8f6c613af..4fc2b698d8 100644 --- a/indra/newview/skins/default/xui/en/floater_beacons.xml +++ b/indra/newview/skins/default/xui/en/floater_beacons.xml @@ -25,7 +25,7 @@ name="label_show" text_color="White" type="string"> - Show: + Show : </text> <check_box control_name="renderbeacons" @@ -117,6 +117,7 @@ <check_box control_name="soundsbeacon" height="16" + left="0" label="Sound sources" layout="topleft" name="sounds" > diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml index 0daef29bc5..2fa112af8c 100644 --- a/indra/newview/skins/default/xui/en/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml @@ -13,20 +13,19 @@ type="string" length="1" follows="left|top" - font="SansSerif" - height="10" + height="20" layout="topleft" - left="12" + left="10" mouse_opaque="false" name="r_val_text" - top="35" + top="25" width="413"> Red: </text> <spinner decimal_digits="0" follows="left" - height="16" + height="20" increment="1" initial_value="128" layout="topleft" @@ -39,20 +38,18 @@ type="string" length="1" follows="left|top" - font="SansSerif" - height="10" + height="20" layout="topleft" - left="12" + left="10" mouse_opaque="false" name="g_val_text" - top="56" width="413"> Green: </text> <spinner decimal_digits="0" follows="left" - height="16" + height="20" increment="1" initial_value="128" layout="topleft" @@ -65,20 +62,18 @@ type="string" length="1" follows="left|top" - font="SansSerif" - height="10" + height="20" layout="topleft" - left="12" + left="10" mouse_opaque="false" name="b_val_text" - top="77" width="413"> Blue: </text> <spinner decimal_digits="0" follows="left" - height="16" + height="20" increment="1" initial_value="128" layout="topleft" @@ -91,20 +86,18 @@ type="string" length="1" follows="left|top" - font="SansSerif" - height="10" + height="20" layout="topleft" - left="12" + left="10" mouse_opaque="false" name="h_val_text" - top="108" width="413"> Hue: </text> <spinner decimal_digits="0" follows="left" - height="16" + height="20" increment="1" initial_value="180" layout="topleft" @@ -117,20 +110,18 @@ type="string" length="1" follows="left|top" - font="SansSerif" - height="10" + height="20" layout="topleft" - left="12" + left="10" mouse_opaque="false" name="s_val_text" - top="129" width="413"> Sat: </text> <spinner decimal_digits="0" follows="left" - height="16" + height="20" increment="1" initial_value="50" layout="topleft" @@ -143,20 +134,18 @@ type="string" length="1" follows="left|top" - font="SansSerif" - height="10" + height="20" layout="topleft" - left="12" + left="10" mouse_opaque="false" name="l_val_text" - top="150" width="413"> Lum: </text> <spinner decimal_digits="0" follows="left" - height="16" + height="20" increment="1" initial_value="50" layout="topleft" @@ -170,11 +159,11 @@ height="20" label="Apply now" layout="topleft" - left="12" + left="10" name="apply_immediate" top_pad="185" width="100" /> - <button + <button follows="left|bottom" height="28" image_selected="eye_button_active.tga" @@ -185,7 +174,7 @@ width="28" /> <button follows="right|bottom" - height="20" + height="23" label="OK" label_selected="OK" layout="topleft" @@ -195,7 +184,7 @@ width="100" /> <button follows="right|bottom" - height="20" + height="23" label="Cancel" label_selected="Cancel" layout="topleft" @@ -209,7 +198,7 @@ follows="left|top" height="16" layout="topleft" - left="12" + left="10" name="Current color:" top="172" width="110"> @@ -221,7 +210,7 @@ follows="left|top" height="16" layout="topleft" - left="12" + left="10" name="(Drag below to save.)" top_pad="66" width="130"> diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml index e83bc1555c..be32e917e5 100644 --- a/indra/newview/skins/default/xui/en/floater_help_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml @@ -4,8 +4,8 @@ can_resize="true" height="480" layout="topleft" - min_height="140" - min_width="467" + min_height="150" + min_width="500" name="floater_help_browser" help_topic="floater_help_browser" save_rect="true" @@ -13,37 +13,44 @@ title="HELP BROWSER" width="620"> <floater.string - name="home_page_url"> - http://www.secondlife.com + name="loading_text"> + Loading... </floater.string> <floater.string - name="support_page_url"> - http://support.secondlife.com + name="done_text"> </floater.string> <layout_stack bottom="480" follows="left|right|top|bottom" layout="topleft" - left="10" + left="5" name="stack1" top="20" - width="600"> + width="610"> <layout_panel - height="1" layout="topleft" left_delta="0" - name="external_controls" top_delta="0" + name="external_controls" user_resize="false" width="590"> <web_browser - bottom="-4" + bottom="-11" follows="left|right|top|bottom" layout="topleft" left="0" name="browser" top="0" + height="500" width="590" /> + <text + follows="bottom|left" + height="16" + layout="topleft" + left_delta="2" + name="status_text" + top_pad="5" + width="150" /> </layout_panel> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml index ff9f0daee6..e187eabd3a 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory.xml @@ -12,11 +12,11 @@ save_rect="true" save_visibility="true" single_instance="false" - title="INVENTORY" + title="MY INVENTORY" width="467"> <floater.string name="Title"> - Inventory + MY INVENTORY </floater.string> <floater.string name="TitleFetching"> diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml index e94717fe32..990be55847 100644 --- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml @@ -5,7 +5,7 @@ border_style="line" can_resize="true" follows="left|top" - height="570" + height="580" layout="topleft" min_height="271" min_width="290" @@ -13,7 +13,7 @@ help_topic="script_ed_float" save_rect="true" title="SCRIPT: NEW SCRIPT" - width="500"> + width="508"> <floater.string name="not_allowed"> You can not view or edit this script, since it has been set as "no copy". You need full permissions to view or edit a script inside an object. @@ -24,19 +24,31 @@ </floater.string> <floater.string name="Title"> - Script: [NAME] + SCRIPT: [NAME] </floater.string> + <panel + bevel_style="none" + + border_style="line" + follows="left|top|right|bottom" + height="522" + layout="topleft" + left="10" + name="script ed panel" + top="20" + width="497" /> <button - follows="right|bottom" - height="20" + follows="left|bottom" + height="23" label="Reset" label_selected="Reset" layout="topleft" - left="358" name="Reset" - top="545" - width="128" /> + left="10" + width="61" /> <check_box + left_delta="71" + top_delta="3" enabled="false" follows="left|bottom" font="SansSerif" @@ -44,30 +56,17 @@ initial_value="true" label="Running" layout="topleft" - left_delta="-350" name="running" - top_delta="2" width="100" /> <check_box - enabled="false" + left_delta="75" + enabled="true" follows="left|bottom" font="SansSerif" height="18" initial_value="true" label="Mono" layout="topleft" - left_delta="70" name="mono" - top_delta="0" width="100" /> - <panel - bevel_style="none" - border_style="line" - follows="left|top|right|bottom" - height="506" - layout="topleft" - left="1" - name="script ed panel" - top="18" - width="497" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml index 3ddb7bc349..1903e7c714 100644 --- a/indra/newview/skins/default/xui/en/floater_map.xml +++ b/indra/newview/skins/default/xui/en/floater_map.xml @@ -6,7 +6,7 @@ center_horiz="true" center_vert="true" follows="top|right" - height="225" + height="218" layout="topleft" min_height="60" min_width="174" @@ -55,116 +55,116 @@ </floater.string> <net_map bg_color="NetMapBackgroundColor" - bottom="225" follows="top|left|bottom|right" layout="topleft" left="0" mouse_opaque="false" name="Net Map" - right="198" - top="2" /> + width="200" + height="200" + top="18"/> <text type="string" length="1" - bottom="225" + bottom="218" label="N" layout="topleft" left="0" name="floater_map_north" right="10" text_color="1 1 1 0.7" - top="215"> + top="209"> N </text> <text type="string" length="1" - bottom="225" + bottom="218" label="E" layout="topleft" left="0" name="floater_map_east" right="10" text_color="1 1 1 0.7" - top="215"> + top="209"> E </text> <text type="string" length="1" - bottom="225" + bottom="205" label="W" layout="topleft" left="0" name="floater_map_west" right="11" text_color="1 1 1 0.7" - top="215"> + top="195"> W </text> <text type="string" length="1" - bottom="225" + bottom="218" label="S" layout="topleft" left="0" name="floater_map_south" right="10" text_color="1 1 1 0.7" - top="215"> + top="209"> S </text> <text type="string" length="1" - bottom="225" + bottom="218" label="SE" layout="topleft" left="0" name="floater_map_southeast" right="20" text_color="1 1 1 0.7" - top="215"> + top="209"> SE </text> <text type="string" length="1" - bottom="225" + bottom="218" label="NE" layout="topleft" left="0" name="floater_map_northeast" right="20" text_color="1 1 1 0.7" - top="215"> + top="209"> NE </text> <text type="string" length="1" - bottom="225" + bottom="218" label="SW" layout="topleft" left="0" name="floater_map_southwest" right="20" text_color="1 1 1 0.7" - top="215"> + top="209"> SW </text> <text type="string" length="1" - bottom="225" + bottom="218" label="NW" layout="topleft" left="0" name="floater_map_northwest" right="20" text_color="1 1 1 0.7" - top="215"> + top="209"> NW </text> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml index bbfb362337..6dc073728b 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml @@ -38,7 +38,7 @@ width="170" /> <button height="20" - label="Play in World" + label="Play Inworld" label_selected="Stop" layout="topleft" left="10" diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml index 68a78d5017..f3be8c4131 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml @@ -38,8 +38,8 @@ <button follows="left|top" height="22" - label="Play in World" - label_selected="Play in World" + label="Play Inworld" + label_selected="Play Inworld" layout="topleft" name="Sound play btn" sound_flags="0" diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml index bb0702c353..d0cd00d147 100644 --- a/indra/newview/skins/default/xui/en/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_script_preview.xml @@ -3,26 +3,24 @@ legacy_header_height="18" auto_tile="true" can_resize="true" - height="550" + height="570" layout="topleft" - left_delta="343" min_height="271" min_width="290" name="preview lsl text" help_topic="preview_lsl_text" save_rect="true" title="SCRIPT: ROTATION SCRIPT" - top_delta="0" - width="500"> + width="508"> <floater.string name="Title"> - Script: [NAME] + SCRIPT: [NAME] </floater.string> <panel follows="left|top|right|bottom" - height="508" + height="522" layout="topleft" - left="0" + left="10" name="script panel" top="42" width="497" /> diff --git a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml index c828f6b284..1935edfcc1 100644 --- a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml @@ -72,83 +72,4 @@ name="font_checkbox" top_pad="14" width="150" /> - -<chiclet_im_p2p - height="25" - name="im_p2p_chiclet" - show_speaker="false" - width="25"> - <chiclet_im_p2p.chiclet_button - height="25" - image_selected="PushButton_Selected" - image_unselected="PushButton_Off" - name="chiclet_button" - tab_stop="false" - width="25"/> - <chiclet_im_p2p.speaker - auto_update="true" - draw_border="false" - height="25" - left="25" - name="speaker" - visible="false" - width="20" /> - <chiclet_im_p2p.avatar_icon - bottom="3" - follows="left|top|bottom" - height="20" - left="2" - mouse_opaque="false" - name="avatar_icon" - width="21" /> - <chiclet_im_p2p.unread_notifications - height="25" - font_halign="center" - left="25" - mouse_opaque="false" - name="unread" - text_color="white" - v_pad="5" - visible="false" - width="20"/> - <chiclet_im_p2p.new_message_icon - bottom="11" - height="14" - image_name="Unread_Chiclet" - left="12" - name="new_message_icon" - visible="false" - width="14" /> -</chiclet_im_p2p> - - -<chiclet_offer - height="25" - name="offer_chiclet" - width="25"> - <chiclet_offer.chiclet_button - height="25" - image_selected="PushButton_Selected" - image_unselected="PushButton_Off" - name="chiclet_button" - tab_stop="false" - width="25"/> - <chiclet_offer.icon - bottom="3" - default_icon="Generic_Object_Small" - follows="all" - height="19" - left="3" - mouse_opaque="false" - name="chiclet_icon" - width="19" /> - <chiclet_offer.new_message_icon - bottom="11" - height="14" - image_name="Unread_Chiclet" - left="12" - name="new_message_icon" - visible="false" - width="14" /> -</chiclet_offer> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml index 65c9c2a8fa..e1df50bf58 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -403,7 +403,7 @@ height="16" image_name="map_track_16.tga" layout="topleft" - left="5" + left="3" top="11" mouse_opaque="true" name="friends_icon" @@ -415,7 +415,7 @@ label="Online Friends" layout="topleft" top_delta="-4" - left_pad="5" + left_pad="7" max_chars="60" name="friend combo" tool_tip="Show friends on map" @@ -433,7 +433,7 @@ height="16" image_name="map_track_16.tga" layout="topleft" - left="5" + left="3" top_pad="8" mouse_opaque="true" name="landmark_icon" @@ -445,7 +445,7 @@ label="My Landmarks" layout="topleft" top_delta="-3" - left_pad="5" + left_pad="7" max_chars="64" name="landmark combo" tool_tip="Landmark to show on map" @@ -463,7 +463,7 @@ height="16" image_name="map_track_16.tga" layout="topleft" - left="5" + left="3" top_pad="7" mouse_opaque="true" name="region_icon" @@ -476,7 +476,7 @@ label="Regions by Name" layout="topleft" top_delta="-2" - left_pad="5" + left_pad="7" name="location" select_on_focus="true" tool_tip="Type the name of a region" @@ -497,6 +497,19 @@ <button.commit_callback function="WMap.Location" /> </button> + <button + image_overlay="Refresh_Off" + follows="top|right" + height="23" + layout="topleft" + left="0" + name="Clear" + tool_tip="Clear tracking lines and reset map" + top_pad="5" + width="23"> + <button.commit_callback + function="WMap.Clear" /> + </button> <scroll_list draw_stripes="false" bg_writeable_color="MouseGray" @@ -505,7 +518,7 @@ layout="topleft" left="28" name="search_results" - top_pad="5" + top_pad="-23" width="209" sort_column="1"> <scroll_list.columns @@ -545,19 +558,6 @@ <button.commit_callback function="WMap.CopySLURL" /> </button> - <!-- <button - follows="right|bottom" - height="23" - label="Clear" - layout="topleft" - left="10" - name="Clear" - tool_tip="Stop tracking" - top_pad="5" - width="105"> - <button.commit_callback - function="WMap.Clear" /> - </button>--> <button enabled="false" follows="right|bottom" diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 1e10467148..1993af6730 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -516,7 +516,7 @@ layout="topleft" name="Animation Separator" /> <menu_item_call - label="Play in World" + label="Play Inworld" layout="topleft" name="Animation Play"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index bbe6892b27..ba74104594 100644 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -60,6 +60,7 @@ </menu_item_call> </menu> <menu + visible="false" create_jump_keys="true" label="Debug" name="Debug" diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml index 35518cd13b..56028bb2e5 100644 --- a/indra/newview/skins/default/xui/en/menu_object.xml +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -87,16 +87,6 @@ label="Remove >" name="Remove"> <menu_item_call - enabled="false" - label="Take" - name="Pie Object Take"> - <menu_item_call.on_click - function="Tools.BuyOrTake" /> - <menu_item_call.on_enable - function="Tools.EnableBuyOrTake" - parameter="Buy,Take" /> - </menu_item_call> - <menu_item_call enabled="false" label="Report Abuse" name="Report Abuse..."> @@ -134,6 +124,16 @@ </menu_item_call> </context_menu> <menu_item_separator layout="topleft" /> + <menu_item_call + enabled="false" + label="Take" + name="Pie Object Take"> + <menu_item_call.on_click + function="Tools.BuyOrTake" /> + <menu_item_call.on_enable + function="Tools.EnableBuyOrTake" + parameter="Buy,Take" /> + </menu_item_call> <menu_item_call enabled="false" label="Take Copy" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index a98a049c17..7a4f63bfe4 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -662,6 +662,18 @@ <menu_item_call.on_enable function="Tools.EnableUnlink" /> </menu_item_call> + <menu_item_check + label="Edit Linked Parts" + layout="topleft" + name="Edit Linked Parts"> + <menu_item_check.on_check + control="EditLinkedParts" /> + <menu_item_check.on_click + function="Tools.EditLinkedParts" + parameter="EditLinkedParts" /> + <menu_item_check.on_enable + function="Tools.EnableToolNotPie" /> + </menu_item_check> <menu_item_separator layout="topleft" /> <menu_item_call @@ -799,18 +811,6 @@ layout="topleft" name="Options" tear_off="true"> - <menu_item_check - label="Edit Linked Parts" - layout="topleft" - name="Edit Linked Parts"> - <menu_item_check.on_check - control="EditLinkedParts" /> - <menu_item_check.on_click - function="Tools.EditLinkedParts" - parameter="EditLinkedParts" /> - <menu_item_check.on_enable - function="Tools.EnableToolNotPie" /> - </menu_item_check> <menu_item_call label="Set Default Upload Permissions" layout="topleft" @@ -819,10 +819,10 @@ function="Floater.Toggle" parameter="perm_prefs" /> </menu_item_call> - <menu_item_check - label="Show Advanced Permissions" - layout="topleft" - name="DebugPermissions"> + <menu_item_check + label="Show Advanced Permissions" + layout="topleft" + name="DebugPermissions"> <menu_item_check.on_check function="CheckControl" parameter="DebugPermissions" /> @@ -832,13 +832,7 @@ </menu_item_check> <menu_item_separator layout="topleft" /> - <menu - create_jump_keys="true" - label="Selection" - layout="topleft" - name="Selection" - tear_off="true"> - <menu_item_check + <menu_item_check label="Select Only My Objects" layout="topleft" name="Select Only My Objects"> @@ -866,14 +860,9 @@ control="RectangleSelectInclusive" /> <menu_item_check.on_click function="Tools.SelectBySurrounding" /> - </menu_item_check> - </menu> - <menu - create_jump_keys="true" - label="Show" - layout="topleft" - name="Show" - tear_off="true"> + </menu_item_check> + <menu_item_separator + layout="topleft" /> <menu_item_check label="Show Hidden Selection" layout="topleft" @@ -902,13 +891,8 @@ function="ToggleControl" parameter="ShowSelectionBeam" /> </menu_item_check> - </menu> - <menu - create_jump_keys="true" - label="Grid" - layout="topleft" - name="Grid" - tear_off="true"> + <menu_item_separator + layout="topleft" /> <menu_item_check label="Snap to Grid" layout="topleft" @@ -953,7 +937,6 @@ <menu_item_call.on_enable function="Tools.EnableToolNotPie" /> </menu_item_call> - </menu> </menu> <menu create_jump_keys="true" diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml index 8268937e7f..8f7750628e 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -60,32 +60,33 @@ <scroll_container color="DkGray2" follows="all" - height="505" + height="493" min_height="300" layout="topleft" - left="0" + left="9" + width="290" name="profile_scroll" reserve_scroll_corner="true" opaque="true" - top="0"> + top="10"> <panel name="scroll_content_panel" follows="left|top|right" layout="topleft" top="0" - height="505" + height="493" min_height="300" left="0" - width="313"> + width="290"> <panel name="data_panel" follows="left|top|right" layout="topleft" top="0" - height="505" + height="493" min_height="300" left="0" - width="313"> + width="290"> <panel name="lifes_images_panel" follows="left|top|right" @@ -93,7 +94,7 @@ layout="topleft" top="0" left="0" - width="285"> + width="290"> <panel follows="left|top" height="117" @@ -101,25 +102,26 @@ left="10" name="second_life_image_panel" top="0" - width="285"> + width="280"> <text follows="left|top|right" font.style="BOLD" height="15" layout="topleft" left="0" + top="10" name="second_life_photo_title_text" text_color="white" value="[SECOND_LIFE]:" - width="170" /> + width="100" /> <texture_picker allow_no_texture="true" default_image_name="None" enabled="false" follows="top|left" - height="117" + height="124" layout="topleft" - left="0" + left="1" name="2nd_life_pic" top_pad="0" width="102" /> @@ -140,13 +142,13 @@ length="1" follows="left|top|right" font="SansSerifSmall" - height="100" + height="102" layout="topleft" - left="120" - top="18" + left="123" + top="25" max_length="512" name="sl_description_edit" - width="173" + width="157" word_wrap="true"> </text_editor> <panel @@ -163,18 +165,19 @@ height="15" layout="topleft" left="0" + top_pad="10" name="real_world_photo_title_text" text_color="white" value="Real World:" - width="173" /> + width="100" /> <texture_picker allow_no_texture="true" default_image_name="None" enabled="false" follows="top|left" - height="117" + height="124" layout="topleft" - left="0" + left="1" name="real_world_pic" top_pad="0" width="102" /> @@ -194,13 +197,13 @@ length="1" follows="left|top|right" font="SansSerifSmall" - height="100" + height="102" layout="topleft" - left="120" + left="123" max_length="512" - top="142" + top="157" name="fl_description_edit" - width="173" + width="157" word_wrap="true"> </text_editor> <text @@ -215,7 +218,7 @@ name="title_homepage_text" text_color="white" top_pad="10" - width="285"> + width="100"> Homepage: </text> <line_editor @@ -227,19 +230,19 @@ top_pad="0" value="http://" name="homepage_edit" - width="285"> + width="270"> </line_editor> <check_box follows="left|top" font="SansSerifSmall" label="Show me in Search results" layout="topleft" - left="10" + left="8" name="show_in_search_checkbox" height="15" text_enabled_color="white" - top_pad="10" - width="240" /> + top_pad="12" + width="100" /> <text follows="left|top" font="SansSerifSmall" @@ -249,9 +252,19 @@ left="10" name="title_acc_status_text" text_color="white" - top_pad="5" + top_pad="10" value="My Account:" - width="285" /> + width="100" /> + <text + follows="left|top|right" + height="15" + layout="topleft" + left="10" + name="acc_status_text" + top_pad="5" + value="Resident. No payment info on file." + width="200" + word_wrap="true" /> <text type="string" follows="left|top" @@ -261,17 +274,7 @@ left="10" name="my_account_link" value="[[URL] Go to My Dashboard]" - width="285" /> - <text - follows="left|top|right" - height="20" - layout="topleft" - left="10" - name="acc_status_text" - top_pad="5" - value="Resident. No payment info on file." - width="285" - word_wrap="true" /> + width="200" /> <text follows="left|top" font="SansSerifSmall" @@ -281,26 +284,16 @@ left="10" name="title_partner_text" text_color="white" - top_pad="0" + top_pad="10" value="My Partner:" width="150" /> - <text - follows="left|top" - height="15" - halign="right" - layout="topleft" - left_pad="10" - right="-10" - name="partner_edit_link" - value="[[URL] Edit]" - width="50" /> <panel follows="left|top|right" height="15" layout="topleft" left="10" name="partner_data_panel" - width="285"> + width="200"> <name_box follows="left|top|right" height="30" @@ -310,36 +303,43 @@ link="true" name="partner_text" top="0" - width="285" + width="200" word_wrap="true" /> </panel> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="partner_edit_link" + value="[[URL] Edit]" + width="50" /> </panel> </panel> </scroll_container> <panel follows="bottom|left" - height="20" - left="10" + height="28" + left="0" name="profile_me_buttons_panel" - top_pad="5" - width="303"> + top_pad="0" + width="313"> <button follows="bottom|left" - height="19" + height="23" label="Save Changes" layout="topleft" - left="0" + left="9" name="save_btn" - top="0" - width="130" /> + top="5" + width="152" /> <button follows="bottom|left" - height="19" + height="23" label="Cancel" layout="topleft" - left_pad="10" + left_pad="4" name="cancel_btn" - right="-1" - width="130" /> + width="152" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml index b903032ed5..618167181f 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - follows="all" - height="395" label="General" + follows="all" + height="604" + width="313" class="panel_group_general" - layout="topleft" - name="general_tab" - width="323"> + name="general_tab"> <panel.string name="help_text"> The General tab contains general information about this group, a list of members, general Group Preferences and member options. @@ -25,12 +24,14 @@ Hover your mouse over the options for more help. type="string" follows="left|top|right" left="5" - height="60" + height="150" layout="topleft" max_length="511" name="charter" top="5" right="-1" + bg_readonly_color="DkGray2" + text_readonly_color="White" word_wrap="true"> Group Charter </text_editor> @@ -38,8 +39,8 @@ Hover your mouse over the options for more help. column_padding="0" draw_heading="true" follows="left|top|right" - heading_height="20" - height="156" + heading_height="23" + height="200" layout="topleft" left="0" name="visible_members" @@ -63,17 +64,29 @@ Hover your mouse over the options for more help. height="12" layout="left|top|right" left="5" + text_color="EmphasisColor" + name="my_group_settngs_label" + top_pad="10" + width="300"> + Me + </text> + <text + follows="left|top|right" + type="string" + height="12" + layout="left|top|right" + left="10" name="active_title_label" top_pad="5" width="300"> - My Title + My title: </text> <combo_box follows="left|top|right" - height="20" + height="23" layout="topleft" - left="5" - right="-5" + left="10" + right="-5" name="active_title" tool_tip="Sets the title that appears in your avatar's name tag when this group is active." top_pad="2" /> @@ -82,7 +95,7 @@ Hover your mouse over the options for more help. font="SansSerifSmall" label="Receive group notices" layout="topleft" - left="5" + left="10" name="receive_notices" tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you." top_pad="5" @@ -91,36 +104,46 @@ Hover your mouse over the options for more help. height="16" label="Show in my profile" layout="topleft" - left="5" + left="10" name="list_groups_in_profile" tool_tip="Sets whether you want to show this group in your profile" top_pad="5" width="295" /> - <panel + <panel background_visible="true" bevel_style="in" border="true" bg_alpha_color="FloaterUnfocusBorderColor" follows="left|top|right" - height="88" + height="140" + width="313" layout="topleft" - left="2" - right="-1" + left="0" name="preferences_container" - top_pad="2"> + top_pad="5"> + <text + follows="left|top|right" + type="string" + height="12" + layout="left|top|right" + left="5" + text_color="EmphasisColor" + name="group_settngs_label" + width="300"> + Group + </text> <check_box follows="right|top|left" height="16" - label="Open enrollment" + label="Anyone can join" layout="topleft" left="10" name="open_enrollement" tool_tip="Sets whether this group allows new members to join without being invited." - top_pad="5" width="90" /> <check_box height="16" - label="Enrollment fee" + label="Cost to join" layout="topleft" left_delta="0" name="check_enrollment_fee" @@ -129,27 +152,26 @@ Hover your mouse over the options for more help. width="300" /> <spinner decimal_digits="0" - follows="left|top|right" + follows="left|top" halign="left" - height="16" + height="23" increment="1" label_width="15" label="L$" layout="topleft" - right="-30" max_val="99999" - left_pad="0" + left="30" name="spin_enrollment_fee" tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked." - width="80" /> - <combo_box - follows="left|top|right" - height="20" + width="170" /> + <combo_box + follows="left|top" + height="23" layout="topleft" left="10" name="group_mature_check" tool_tip="Sets whether your group contains information rated as Moderate" - top_pad="0" + top_pad="4" width="190"> <combo_box.item label="General Content" @@ -161,7 +183,7 @@ Hover your mouse over the options for more help. value="Mature" /> </combo_box> <check_box - follows="left|top|right" + follows="left|top" height="16" initial_value="true" label="Show in search" @@ -171,5 +193,6 @@ Hover your mouse over the options for more help. tool_tip="Let people see this group in search results" top_pad="4" width="300" /> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index 1968d96205..9727c54c6b 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -2,17 +2,17 @@ <panel background_visible="true" follows="all" - height="635" - label="Group Info" + height="570" + label="Group Profile" layout="topleft" - min_height="460" + min_height="350" left="0" top="20" name="GroupInfo" - width="323"> + width="313"> <panel.string name="default_needs_apply_text"> - There are unsaved changes to the current tab + There are unsaved changes </panel.string> <panel.string name="want_apply_text"> @@ -26,6 +26,14 @@ background_visible="true" name="group_join_free"> Free </panel.string> + <panel + name="group_info_top" + follows="top|left" + top="0" + left="0" + height="129" + width="313" + layout="topleft"> <button follows="top|right" height="23" @@ -37,18 +45,19 @@ background_visible="true" top="2" width="23" /> <text - allow_html="false" - follows="top|left|right" - font="SansSerifHugeBold" - height="26" layout="topleft" - left_pad="10" name="group_name" - text_color="white" - top="0" value="(Loading...)" + font="SansSerifHuge" + height="20" + left_pad="5" + text_color="white" + top="3" use_ellipses="true" - width="300" /> + width="270" + follows="top|left" + word_wrap="true" + mouse_opaque="false"/> <line_editor follows="left|top" font="SansSerif" @@ -58,7 +67,7 @@ background_visible="true" max_length="35" name="group_name_editor" top_delta="5" - width="250" + width="270" height="20" visible="false" /> <texture_picker @@ -66,22 +75,25 @@ background_visible="true" height="113" label="" layout="topleft" - left="20" + left="10" name="insignia" no_commit_on_selection="true" tool_tip="Click to choose a picture" top_pad="5" width="100" /> <text + font="SansSerifSmall" + text_color="White_50" + width="190" + follows="top|left" + layout="topleft" + mouse_opaque="false" type="string" - follows="left|top" height="16" length="1" - layout="topleft" left_pad="10" name="prepend_founded_by" - top_delta="0" - width="140"> + top_delta="0"> Founder: </text> <name_box @@ -94,9 +106,9 @@ background_visible="true" name="founder_name" top_pad="2" use_ellipses="true" - width="140" /> + width="190" /> <text - font="SansSerifBig" + font="SansSerifMedium" text_color="EmphasisColor" type="string" follows="left|top" @@ -106,7 +118,7 @@ background_visible="true" name="join_cost_text" top_pad="10" visible="true" - width="140"> + width="190"> Free </text> <button @@ -118,17 +130,31 @@ background_visible="true" name="btn_join" visible="true" width="120" /> + </panel> + <layout_stack + name="layout" + orientation="vertical" + follows="all" + left="0" + top_pad="0" + height="437" + width="313" + border_size="0"> + <layout_panel + name="group_accordions" + follows="all" + layout="topleft" + auto_resize="true" + > <accordion + left="0" + top="0" single_expansion="true" follows="all" - height="478" layout="topleft" - left="0" - name="groups_accordion" - top_pad="10" - width="323"> + name="groups_accordion"> <accordion_tab - expanded="false" + expanded="true" layout="topleft" name="group_general_tab" title="General"> @@ -138,12 +164,13 @@ background_visible="true" filename="panel_group_general.xml" layout="topleft" left="0" + follows="all" help_topic="group_general_tab" name="group_general_tab_panel" top="0" /> </accordion_tab> <accordion_tab - expanded="true" + expanded="false" layout="topleft" name="group_roles_tab" title="Roles"> @@ -186,28 +213,37 @@ background_visible="true" top="0" /> </accordion_tab> </accordion> - <panel + </layout_panel> + <layout_panel + height="25" + layout="topleft" + auto_resize="false" + left="0" name="button_row" - height="23" follows="bottom|left" - top_pad="-1" - width="323"> + width="313"> <button - follows="top|left" - height="22" + follows="bottom|left" + height="23" image_overlay="Refresh_Off" layout="topleft" - left="10" + left="5" + top="0" name="btn_refresh" width="23" /> <button - height="22" - label="Create" - label_selected="New group" + follows="bottom|left" + height="18" + image_selected="AddItem_Press" + image_unselected="AddItem_Off" + image_disabled="AddItem_Disabled" + layout="topleft" + left_pad="2" + top_delta="3" name="btn_create" - left_pad="10" - visible="false" - width="100" /> + visible="true" + tool_tip="Create a new Group" + width="18" /> <!-- <button left_pad="10" height="20" @@ -217,28 +253,30 @@ background_visible="true" visible="false" width="65" />--> <button - follows="bottom|right" - label="Group Chat" + follows="bottom|left" + label="Chat" name="btn_chat" - right="-184" left_pad="2" - height="22" - width="85" /> + height="23" + top_delta="-3" + width="60" /> <button - follows="bottom|right" - label="Group Call" + follows="bottom|left" + left_pad="2" + height="23" name="btn_call" - right="-97" - left_pad="2" - height="22" - width="85" /> + label="Group Call" + layout="topleft" + tool_tip="Call this group" + width="95" /> <button - height="22" + follows="bottom|left" + height="23" label="Save" label_selected="Save" name="btn_apply" - left_pad="10" - right="-10" + left_pad="2" width="85" /> - </panel> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml index db156f7877..38b0f234d5 100644 --- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml @@ -2,13 +2,13 @@ <panel border="false" follows="all" - height="420" + height="500" label="Land & L$" layout="topleft" left="0" name="land_money_tab" top="0" - width="310"> + width="313"> <panel.string name="help_text"> A warning appears until the Total Land in Use is less than or = to the Total Contribution. @@ -41,16 +41,24 @@ width="260"> Group Owned Land </text> --> + <panel + name="layout_panel_landmoney" + follows="top|left|right" + left="0" + right="-1" + height="250" + width="313" + > <scroll_list draw_heading="true" follows="top|left|right" - heading_height="20" height="130" layout="topleft" left="0" + right="-1" top="0" name="group_parcel_list" - width="310"> + width="313"> <scroll_list.columns label="Parcel" name="name" @@ -67,16 +75,12 @@ label="Area" name="area" width="50" /> - <scroll_list.columns - label="" - name="hidden" - width="-1" /> </scroll_list> <text type="string" follows="left|top" halign="right" - height="15" + height="16" layout="topleft" left="0" name="total_contributed_land_label" @@ -87,30 +91,30 @@ text_color="EmphasisColor" type="string" follows="left|top" - height="15" + height="16" layout="topleft" left_pad="5" name="total_contributed_land_value" top_delta="0" - width="120"> + width="90"> [AREA] m² </text> <button follows="top" - height="20" + height="23" label="Map" label_selected="Map" layout="topleft" name="map_button" - right="-5" + top_delta="-4" left_pad="0" - width="95" + width="60" enabled="false" /> <text type="string" follows="left|top" halign="right" - height="15" + height="16" layout="topleft" left="0" name="total_land_in_use_label" @@ -122,7 +126,7 @@ text_color="EmphasisColor" type="string" follows="left|top" - height="15" + height="16" layout="topleft" left_pad="5" name="total_land_in_use_value" @@ -134,7 +138,7 @@ type="string" follows="left|top" halign="right" - height="15" + height="16" layout="topleft" left="0" name="land_available_label" @@ -146,7 +150,7 @@ text_color="EmphasisColor" type="string" follows="left|top" - height="15" + height="16" layout="topleft" left_pad="5" name="land_available_value" @@ -158,7 +162,7 @@ type="string" follows="left|top" halign="right" - height="15" + height="16" layout="topleft" left="0" name="your_contribution_label" @@ -190,21 +194,22 @@ <text type="string" follows="left|top" - halign="right" - height="12" + halign="left" + height="16" layout="topleft" left="140" name="your_contribution_max_value" top_pad="2" - width="95"> + width="170"> ([AMOUNT] max) </text> <icon - height="18" - image_name="BuyArrow_Over" + height="16" + image_name="Parcel_Exp_Color" layout="topleft" left="75" name="group_over_limit_icon" + color="Green" top_pad="0" visible="true" width="18" /> @@ -212,12 +217,11 @@ follows="left|top" type="string" word_wrap="true" - font="SansSerifSmall" height="20" layout="topleft" left_pad="2" name="group_over_limit_text" - text_color="EmphasisColor" + text_color="ColorPaletteEntry29" top_delta="0" width="213"> More land credits are needed to support land in use @@ -235,39 +239,39 @@ width="100"> Group L$ </text> + </panel> <tab_container follows="all" - height="180" + height="230" halign="center" layout="topleft" left="0" + right="-1" name="group_money_tab_container" tab_position="top" - tab_height="20" top_pad="2" - tab_min_width="75" - width="310"> + tab_min_width="90" + width="313"> <panel border="false" follows="all" - height="180" label="PLANNING" layout="topleft" left="0" help_topic="group_money_planning_tab" name="group_money_planning_tab" - top="5" - width="300"> + top="0" + width="313"> <text_editor type="string" follows="all" - height="140" + height="200" layout="topleft" left="0" max_length="4096" name="group_money_planning_text" top="2" - width="300" + width="313" word_wrap="true"> Loading... </text_editor> @@ -275,92 +279,88 @@ <panel border="false" follows="all" - height="180" label="DETAILS" layout="topleft" left="0" help_topic="group_money_details_tab" name="group_money_details_tab" top="0" - width="300"> + width="313"> <text_editor type="string" follows="all" - height="140" + height="185" layout="topleft" left="0" max_length="4096" name="group_money_details_text" top="2" - width="300" + width="313" word_wrap="true"> Loading... </text_editor> - - <button - height="20" - image_overlay="Arrow_Left_Off" - layout="topleft" - left="5" - name="earlier_details_button" - tool_tip="Go back in time" - top_pad="10" - width="25" /> <button - height="20" - image_overlay="Arrow_Right_Off" - layout="topleft" - left_pad="5" - name="later_details_button" - tool_tip="Go forward in time" - top_delta="0" - width="25" /> - - - </panel> + follows="left|top" + height="18" + image_overlay="Arrow_Left_Off" + layout="topleft" + name="earlier_details_button" + tool_tip="Back" + left="200" + top_pad="0" + width="25" /> + <button + follows="left|top" + height="18" + image_overlay="Arrow_Right_Off" + layout="topleft" + name="later_details_button" + tool_tip="Next" + left_pad="15" + width="25" /> + </panel> <panel border="false" follows="all" - height="180" label="SALES" layout="topleft" - left_delta="0" + left="0" help_topic="group_money_sales_tab" - mouse_opaque="false" name="group_money_sales_tab" top="0" - width="300"> + width="313"> <text_editor type="string" follows="all" - height="130" + height="185" layout="topleft" left="0" max_length="4096" name="group_money_sales_text" top="2" - width="300" + width="313" word_wrap="true"> Loading... </text_editor> - <button - height="20" - image_overlay="Arrow_Left_Off" - layout="topleft" - left="5" - name="earlier_sales_button" - tool_tip="Go back in time" - top_pad="10" - width="25" /> - <button - height="20" - image_overlay="Arrow_Right_Off" - layout="topleft" - left_pad="5" - name="later_sales_button" - tool_tip="Go forward in time" - top_delta="0" - width="25" /> + <button + follows="left|top" + height="18" + image_overlay="Arrow_Left_Off" + layout="topleft" + name="earlier_sales_button" + tool_tip="Back" + left="200" + top_pad="0" + width="25" /> + <button + follows="left|top" + height="18" + image_overlay="Arrow_Right_Off" + layout="topleft" + left_pad="15" + name="later_sales_button" + tool_tip="Next" + width="25" /> </panel> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml index 0d9c2c2162..5f46ad7860 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="all" - height="463" + height="530" label="Notices" layout="topleft" left="0" name="notices_tab" top="0" - width="310"> + width="313"> <panel.string name="help_text"> Notices let you send a message and an optionally attached item. @@ -23,26 +23,28 @@ You can turn off Notices on the General tab. type="string" word_wrap="true" height="24" - halign="right" + halign="left" layout="topleft" + text_color="White_50" left="5" name="lbl2" + right="-1" top="5" width="300"> Notices are kept for 14 days. Maximum 200 per group daily </text> <scroll_list - follows="left|top" + follows="left|top|right" column_padding="0" draw_heading="true" - heading_height="16" - height="125" + height="175" layout="topleft" - left="2" + left="0" + right="-1" name="notice_list" top_pad="0" - width="300"> + width="313"> <scroll_list.columns label="" name="icon" @@ -71,8 +73,8 @@ Maximum 200 per group daily visible="false"> None found </text> - <button - follows="bottom|left" + <button + follows="top|left" height="18" image_selected="AddItem_Press" image_unselected="AddItem_Off" @@ -85,24 +87,25 @@ Maximum 200 per group daily width="18" /> <button follows="top|left" - height="22" + height="23" image_overlay="Refresh_Off" layout="topleft" name="refresh_notices" - right="-5" + left_pad="230" tool_tip="Refresh list of notices" top_delta="0" width="23" /> <panel - follows="left|top" + follows="left|top|right" height="280" label="Create New Notice" layout="topleft" left="0" + right="-1" top_pad="0" visible="true" name="panel_create_new_notice" - width="300"> + width="313"> <text follows="left|top" type="string" @@ -204,13 +207,16 @@ Maximum 200 per group daily width="72" /> <button follows="left|top" - height="23" - label="Remove" layout="topleft" - left="70" + left="140" name="remove_attachment" - top_delta="45" - width="90" /> + top_delta="50" + height="18" + image_selected="TrashItem_Press" + image_unselected="TrashItem_Off" + image_disabled="TrashItem_Disabled" + tool_tip="Remove attachment from your notification" + width="18" /> <button follows="left|top" height="23" @@ -231,18 +237,19 @@ Maximum 200 per group daily width="280" /> </panel> <panel - follows="left|top" + follows="left|top|right" height="280" label="View Past Notice" layout="topleft" left="0" + right="-1" visible="false" name="panel_view_past_notice" - top="180" - width="300"> + top="230" + width="313"> <text type="string" - font="SansSerifBig" + font="SansSerifMedium" height="16" layout="topleft" left="10" @@ -280,7 +287,7 @@ Maximum 200 per group daily border_style="line" border_thickness="1" enabled="false" - height="16" + height="20" layout="topleft" left_pad="3" max_length="63" @@ -301,40 +308,35 @@ Maximum 200 per group daily Message: </text> <text_editor + follows="top|left|right" enabled="false" height="160" layout="topleft" - left="10" + left="0" + right="-1" max_length="511" name="view_message" - top_delta="-35" - width="285" + top_delta="-40" + width="313" word_wrap="true" /> <line_editor enabled="false" - height="16" + height="20" layout="topleft" - left_delta="0" + left="5" max_length="63" mouse_opaque="false" name="view_inventory_name" top_pad="8" - width="285" /> - <icon - height="16" - layout="topleft" - left_delta="0" - name="view_inv_icon" - top_delta="0" - width="16" /> + width="250"/> <button follows="left|top" height="23" - label="Open attachment" + label="Open Attachment" layout="topleft" - right="-10" + left="5" name="open_attachment" top_pad="5" - width="135" /> + width="180" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml index 5f6b670cd2..f19057cae3 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="all" - height="552" + height="680" label="Members & Roles" layout="topleft" left="0" top="0" name="roles_tab" - width="310"> + width="313"> <panel.string name="default_needs_apply_text"> - There are unsaved changes to the current tab + There are unsaved changes </panel.string> <panel.string name="want_apply_text"> @@ -20,17 +20,18 @@ name="help_text" /> <tab_container border="false" - follows="left|top" + follows="left|top|right" height="552" halign="center" layout="topleft" left="0" + right="-1" name="roles_tab_container" tab_position="top" - tab_height="20" - tab_min_width="75" + tab_height="22" + tab_min_width="90" top="0" - width="310"> + width="313"> <panel border="false" follows="all" @@ -38,11 +39,11 @@ label="MEMBERS" layout="topleft" left="0" + right="-1" help_topic="roles_members_tab" name="members_sub_tab" tool_tip="Members" - class="panel_group_members_subtab" - width="310"> + class="panel_group_members_subtab"> <panel.string name="help_text"> You can add or remove Roles assigned to Members. @@ -65,24 +66,23 @@ clicking on their names. layout="topleft" top="5" left="5" - width="280" - height="20" - follows="top" - max_length="250" + right="-5" + height="22" + search_button_visible="false" + follows="left|top|right" label="Filter Members" name="filter_input" /> <name_list - column_padding="0" + column_padding="2" draw_heading="true" - heading_height="20" height="240" - follows="left|top" + follows="left|top|right" layout="topleft" left="0" + right="-1" multi_select="true" name="member_list" - top_pad="2" - width="300"> + top_pad="5"> <name_list.columns label="Member" name="name" @@ -94,33 +94,33 @@ clicking on their names. <name_list.columns label="Status" name="online" - relative_width="0.15" /> + relative_width="0.14" /> </name_list> <button - height="20" - follows="bottom|left" + height="23" + follows="top|left" label="Invite" - left="5" + left="0" name="member_invite" width="100" /> <button - height="20" + height="23" label="Eject" - left_pad="5" - right="-5" + follows="top|left" + left_pad="10" name="member_eject" width="100" /> </panel> <panel border="false" - height="230" + height="303" label="ROLES" layout="topleft" left="0" + right="-1" help_topic="roles_roles_tab" name="roles_sub_tab" - class="panel_group_roles_subtab" - width="310"> + class="panel_group_roles_subtab"> <!-- <button enabled="false" height="20" @@ -157,22 +157,23 @@ including the Everyone and Owner Roles. layout="topleft" top="5" left="5" - width="280" - height="20" + right="-5" + height="22" + search_button_visible="false" follows="left|top|right" - max_length="250" label="Filter Roles" name="filter_input" /> <scroll_list column_padding="0" draw_heading="true" draw_stripes="false" - follows="left|top" - heading_height="20" - height="170" + heading_height="23" + height="130" layout="topleft" search_column="1" left="0" + follows="left|top|right" + right="-1" name="role_list" top_pad="2" width="310"> @@ -190,28 +191,29 @@ including the Everyone and Owner Roles. relative_width="0.15" /> </scroll_list> <button - follows="bottom|left" - height="20" + follows="top|left" + height="23" label="New Role" layout="topleft" - left="5" + left="0" name="role_create" - width="100" /> + width="120" /> <button - height="20" + height="23" + follows="top|left" label="Delete Role" layout="topleft" - left_pad="5" - right="-5" + left_pad="10" name="role_delete" - width="100" /> + width="120" /> </panel> <panel border="false" - height="220" + height="303" label="ABILITIES" layout="topleft" left="0" + right="-1" help_topic="roles_actions_tab" name="actions_sub_tab" class="panel_group_actions_subtab" @@ -238,13 +240,12 @@ things in this group. There's a broad variety of Abilities. layout="topleft" top="5" left="5" - width="280" - height="20" + right="-5" + height="22" + search_button_visible="false" follows="left|top|right" - max_length="250" label="Filter Abilities" name="filter_input" /> - <scroll_list column_padding="0" draw_stripes="true" @@ -252,6 +253,7 @@ things in this group. There's a broad variety of Abilities. follows="left|top" layout="topleft" left="0" + right="-1" name="action_list" search_column="2" tool_tip="Select an Ability to view more details" @@ -273,35 +275,39 @@ things in this group. There's a broad variety of Abilities. </panel> </tab_container> <panel - height="252" + height="350" + background_visible="true" + bg_alpha_color="FloaterUnfocusBorderColor" layout="topleft" - follows="left|top" + follows="top|left|right" left="0" - mouse_opaque="false" + right="-1" + width="313" + mouse_opaque="false" name="members_footer" - top="300" - visible="false" - width="310"> + top="325" + visible="false"> <text type="string" - height="14" + height="16" layout="topleft" follows="left|top" - left="0" + left="5" + top="8" + text_color="EmphasisColor" name="static" - top_pad="5" width="300"> Assigned Roles </text> <scroll_list draw_stripes="true" - follows="left|top" - height="90" + follows="left|top|right" + height="150" layout="topleft" left="0" + right="-1" name="member_assigned_roles" - top_pad="0" - width="300"> + top_pad="0"> <scroll_list.columns label="" name="checkbox" @@ -311,27 +317,29 @@ things in this group. There's a broad variety of Abilities. name="role" width="270" /> </scroll_list> - <text + <text type="string" - height="14" + height="16" layout="topleft" follows="left|top" - left="0" - name="static2" + left="5" top_pad="5" + text_color="EmphasisColor" + name="static2" width="285"> Allowed Abilities </text> <scroll_list draw_stripes="true" - height="90" + follows="left|top|right" + height="150" layout="topleft" left="0" + right="-1" name="member_allowed_actions" search_column="2" tool_tip="For details of each allowed ability see the abilities tab" - top_pad="0" - width="300"> + top_pad="0"> <scroll_list.columns label="" name="icon" @@ -347,30 +355,37 @@ things in this group. There's a broad variety of Abilities. </scroll_list> </panel> <panel - height="297" + height="550" + background_visible="true" + bg_alpha_color="FloaterUnfocusBorderColor" layout="topleft" + follows="top|left|right" left="0" + right="-1" + width="313" + mouse_opaque="false" name="roles_footer" top_delta="0" - top="220" - visible="false" - width="310"> + top="209" + visible="false"> <text type="string" - height="14" + height="16" layout="topleft" - left="0" + follows="left|top" + left="5" + top="5" name="static" - top="0" width="300"> Role Name </text> <line_editor type="string" - follows="left|top" height="20" layout="topleft" left="0" + follows="left|top|right" + right="-1" max_length="295" name="role_name" top_pad="0" @@ -378,8 +393,10 @@ things in this group. There's a broad variety of Abilities. </line_editor> <text type="string" - height="14" + height="16" layout="topleft" + follows="left|top" + left="5" name="static3" top_pad="5" width="300"> @@ -387,19 +404,22 @@ things in this group. There's a broad variety of Abilities. </text> <line_editor type="string" - follows="left|top" height="20" layout="topleft" + left="0" + follows="left|top|right" + right="-1" max_length="295" name="role_title" top_pad="0" width="300"> </line_editor> - <text + <text type="string" - height="14" + height="16" layout="topleft" - left="0" + follows="left|top" + left="5" name="static2" top_pad="5" width="200"> @@ -407,11 +427,12 @@ things in this group. There's a broad variety of Abilities. </text> <text_editor type="string" - halign="left" - height="35" layout="topleft" left="0" + follows="left|top|right" + right="-1" max_length="295" + height="35" name="role_description" top_pad="0" width="300" @@ -419,10 +440,11 @@ things in this group. There's a broad variety of Abilities. </text_editor> <text type="string" - height="14" + height="16" layout="topleft" follows="left|top" - left="0" + left="5" + text_color="EmphasisColor" name="static4" top_pad="5" width="300"> @@ -430,15 +452,18 @@ things in this group. There's a broad variety of Abilities. </text> <name_list draw_stripes="true" - height="60" + height="128" layout="topleft" left="0" + follows="left|top|right" + right="-1" name="role_assigned_members" top_pad="0" width="300" /> <check_box height="15" label="Reveal members" + left="5" layout="topleft" name="role_visible_in_list" tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group." @@ -446,20 +471,23 @@ things in this group. There's a broad variety of Abilities. width="300" /> <text type="string" - height="13" + height="16" layout="topleft" follows="left|top" - left="0" + left="5" + text_color="EmphasisColor" name="static5" - top_pad="5" + top_pad="2" width="300"> Allowed Abilities </text> <scroll_list draw_stripes="true" - height="60" + height="140" layout="topleft" left="0" + follows="left|top|right" + right="-1" name="role_allowed_actions" search_column="2" tool_tip="For details of each allowed ability see the abilities tab" @@ -467,10 +495,6 @@ things in this group. There's a broad variety of Abilities. width="300"> <scroll_list.columns label="" - name="icon" - width="2" /> - <scroll_list.columns - label="" name="checkbox" width="20" /> <scroll_list.columns @@ -480,14 +504,19 @@ things in this group. There's a broad variety of Abilities. </scroll_list> </panel> <panel - height="303" + height="424" + background_visible="true" + bg_alpha_color="FloaterUnfocusBorderColor" layout="topleft" + follows="top|left|right" left="0" + right="-1" + width="313" + mouse_opaque="false" name="actions_footer" top_delta="0" top="255" - visible="false" - width="310"> + visible="false"> <text_editor bg_readonly_color="Transparent" text_readonly_color="EmphasisColor" @@ -495,44 +524,54 @@ things in this group. There's a broad variety of Abilities. type="string" enabled="false" halign="left" - height="90" layout="topleft" + follows="left|top|right" + left="0" + right="-1" + height="90" max_length="512" name="action_description" - top_pad="0" - width="295" + top="0" word_wrap="true"> This Ability is 'Eject Members from this Group'. Only an Owner can eject another Owner. </text_editor> <text type="string" - height="14" + height="16" layout="topleft" + follows="left|top" left="5" name="static2" - top_pad="5" + top_pad="1" width="300"> Roles with this ability </text> <scroll_list - height="65" + height="172" layout="topleft" + follows="left|top|right" left="5" + right="-1" name="action_roles" top_pad="0" width="300" /> <text type="string" - height="14" + height="16" layout="topleft" + follows="left|top" + left="5" name="static3" top_pad="5" width="300"> Members with this ability </text> <name_list - height="100" + height="122" + follows="left|top|right" layout="topleft" + left="5" + right="-1" name="action_members" top_pad="0" width="300" /> diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index 2e3d5a7320..9279d1e686 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -30,7 +30,7 @@ left="5" name="button_stack" orientation="vertical" - top_pad="0" + top_pad="-5" width="105"> <layout_panel mouse_opaque="false" @@ -55,7 +55,7 @@ user_resize="false"> <button follows="left|top|right" - height="20" + height="23" label="Profile" name="view_profile_btn" top="0" @@ -72,7 +72,7 @@ user_resize="false"> <button follows="left|top|right" - height="20" + height="23" label="Add Friend" name="add_friend_btn" top="5" @@ -90,7 +90,7 @@ <button auto_resize="false" follows="left|top|right" - height="20" + height="23" label="Teleport" name="teleport_btn" width="100" /> @@ -107,7 +107,7 @@ <button auto_resize="true" follows="left|top|right" - height="20" + height="23" label="Share" name="share_btn" width="100" /> @@ -123,7 +123,7 @@ user_resize="false"> <button follows="left|top|right" - height="20" + height="23" label="Call" name="call_btn" width="100" /> @@ -140,7 +140,7 @@ visible="false"> <button follows="left|top|right" - height="20" + height="23" label="Leave Call" name="end_call_btn" width="100" /> @@ -157,7 +157,7 @@ visible="false"> <button follows="left|top|right" - height="20" + height="23" label="Voice Controls" name="voice_ctrls_btn" width="100" /> diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index 039e1ae086..91d4cd6e83 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -38,7 +38,7 @@ <accordion_tab layout="topleft" name="tab_landmarks" - title="Landmarks"> + title="My Landmarks"> <places_inventory_panel allow_multi_select="true" border="false" diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 4657d39a0f..c04414abbb 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -122,11 +122,23 @@ label="Remember" top_pad="3" name="remember_check" width="135" /> +<button + follows="left|bottom" + height="23" + image_unselected="PushButton_On" + image_selected="PushButton_On_Selected" + label="Log In" + label_color="White" + layout="topleft" + left_pad="10" + name="connect_btn" + top="35" + width="90" /> <text follows="left|bottom" font="SansSerifSmall" height="15" - left_pad="8" + left_pad="18" name="start_location_text" top="20" width="130"> @@ -163,18 +175,6 @@ top_pad="2" name="server_combo" width="135" visible="false" /> -<button - follows="left|bottom" - height="23" - image_unselected="PushButton_On" - image_selected="PushButton_On_Selected" - label="Log In" - label_color="White" - layout="topleft" - left_pad="15" - name="connect_btn" - top="35" - width="90" /> </layout_panel> <layout_panel follows="right|bottom" diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml index e779e37419..a30d80f101 100644 --- a/indra/newview/skins/default/xui/en/panel_me.xml +++ b/indra/newview/skins/default/xui/en/panel_me.xml @@ -4,7 +4,7 @@ border="false" follows="all" height="570" - label="My Profile" + label="My Profile!!!!!" layout="topleft" left="0" name="panel_me" @@ -29,23 +29,23 @@ height="570" halign="center" layout="topleft" - left="10" + left="6" name="tabs" tab_min_width="95" tab_height="30" tab_position="top" top_pad="10" - width="313"> + width="315"> <panel class="panel_my_profile" filename="panel_my_profile.xml" - label="PROFILE" + label="MY PROFILE" help_topic="panel_my_profile_tab" name="panel_profile" /> <panel class="panel_picks" filename="panel_picks.xml" - label="PICKS" + label="MY PICKS" help_topic="panel_my_picks_tab" name="panel_picks" /> </tab_container> diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml index 4164ce73dd..a0734d3dca 100644 --- a/indra/newview/skins/default/xui/en/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="all" - height="500" + height="535" label="Profile" layout="topleft" left="0" name="panel_profile" top="0" - width="313"> + width="315"> <string name="CaptionTextAcctInfo"> [ACCTTYPE] @@ -41,8 +41,8 @@ layout="topleft" left="0" top="0" - height="480" - width="313" + height="522" + width="315" border_size="0"> <layout_panel name="profile_stack" @@ -50,9 +50,9 @@ layout="topleft" top="0" left="0" - height="480" + height="492" user_resize="false" - width="313"> + width="315"> <scroll_container color="DkGray2" follows="all" @@ -60,13 +60,13 @@ left="0" name="profile_scroll" opaque="true" - height="480" - width="313" + height="492" + width="315" top="0"> <panel layout="topleft" follows="left|top|right" - height="505" + height="492" name="scroll_content_panel" top="0" left="0" @@ -84,9 +84,9 @@ default_image_name="None" enabled="false" follows="top|left" - height="117" + height="124" layout="topleft" - left="0" + left="3" name="2nd_life_pic" top="10" width="102" /> @@ -96,7 +96,7 @@ layout="topleft" name="2nd_life_edit_icon" label="" - left="0" + left="3" tool_tip="Click the Edit Profile button below to change image" top="10" width="102" /> @@ -130,7 +130,7 @@ follows="left|top|right" height="117" layout="topleft" - top_pad="10" + top_pad="0" left="10" name="first_life_image_panel" width="297"> @@ -139,9 +139,9 @@ default_image_name="None" enabled="false" follows="top|left" - height="117" + height="124" layout="topleft" - left="0" + left="3" name="real_world_pic" width="102" /> <icon @@ -150,7 +150,7 @@ layout="topleft" name="real_world_edit_icon" label="" - left="0" + left="3" tool_tip="Click the Edit Profile button below to change image" top="4" width="102" /> @@ -299,7 +299,7 @@ layout="topleft" left="7" name="sl_groups" - top_pad="0" + top_pad="0" translate="false" width="298" expanded_bg_visible="true" @@ -379,23 +379,20 @@ <button follows="bottom|right" height="23" - left="20" + left="4" top="5" label="Edit Profile" - layout="topleft" name="edit_profile_btn" tool_tip="Edit your personal information" - width="130" /> + width="152" /> <button follows="bottom|right" height="23" label="Edit Appearance" - left_pad="10" - layout="topleft" + left_pad="4" name="edit_appearance_btn" - top="5" tool_tip="Create/edit your appearance: physical data, clothes and etc." - width="130" /> + width="152" /> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index baa6c2e51f..5fe5db892a 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -139,11 +139,12 @@ font="SansSerifSmall" height="15" layout="topleft" - left="0" + left="102" name="favorite" image_drag_indication="Accordion_ArrowOpened_Off" bottom="55" - width="590"> + tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!" + width="590"> <chevron_button name=">>" image_unselected="TabIcon_Close_Off" image_selected="TabIcon_Close_Off" @@ -154,4 +155,15 @@ top="15" height="15"/> </favorites_bar> + <text + follows="left|top" + font.style="BOLD" + height="15" + layout="topleft" + left="10" + top_pad="-12" + name="favorites_bar_label" + text_color="LtGray" + tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!" + width="102">Favorites Bar</text> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index da3a2274c9..ac98bb9bd9 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -47,7 +47,7 @@ background_visible="true" follows="all" height="500" layout="topleft" - left="10" + left="6" name="tabs" tab_min_width="70" tab_height="30" @@ -116,7 +116,7 @@ background_visible="true" <panel follows="all" height="500" - label="FRIENDS" + label="MY FRIENDS" layout="topleft" left="0" help_topic="people_friends_tab" @@ -213,7 +213,7 @@ background_visible="true" <panel follows="all" height="500" - label="GROUPS" + label="MY GROUPS" layout="topleft" left="0" help_topic="people_groups_tab" 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 6e0b94ac2b..433dfc17fe 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -23,7 +23,7 @@ layout="topleft" left="0" name="radio" - value="0" + value="0" top="10" width="125" /> <radio_item @@ -32,7 +32,7 @@ layout="topleft" left_delta="145" name="radio2" - value="1" + value="1" top_delta="0" width="125" /> <radio_item @@ -41,7 +41,7 @@ layout="topleft" left_delta="170" name="radio3" - value="2" + value="2" top_delta="0" width="125" /> </radio_group> @@ -105,7 +105,7 @@ </text> <color_swatch can_apply_immediately="true" - color="0.6 0.6 1 1" + color="LtGray" follows="left|top" height="47" label_width="60" @@ -136,7 +136,7 @@ </text> <color_swatch can_apply_immediately="true" - color="0.8 1 1 1" + color="LtGray" follows="left|top" height="47" label_width="44" @@ -167,7 +167,7 @@ </text> <color_swatch can_apply_immediately="true" - color="0.82 0.82 0.99 1" + color="Red" follows="left|top" height="47" layout="topleft" @@ -197,7 +197,7 @@ </text> <color_swatch can_apply_immediately="true" - color="0.7 0.9 0.7 1" + color="EmphasisColor_35" follows="left|top" height="47" layout="topleft" @@ -227,7 +227,7 @@ </text> <color_swatch can_apply_immediately="true" - color="0.7 0.9 0.7 1" + color="LtYellow" follows="left|top" height="47" layout="topleft" @@ -257,7 +257,7 @@ </text> <color_swatch can_apply_immediately="true" - color="0.6 0.6 1 1" + color="EmphasisColor" follows="left|top" height="47" layout="topleft" @@ -316,22 +316,30 @@ <text left="30" height="20" - width="300" + width="120" top_pad="20"> - Show IMs in: (Requires restart) + Show IMs in: </text> + <text + left_pad="6" + height="20" + width="100" + text_color="White_25" + > + (requires restart) + </text> <radio_group height="30" layout="topleft" - left_delta="30" + left="30" control_name="ChatWindow" name="chat_window" top_pad="0" - tool_tip="Show your Instant Messages in separate windows, or in one window with many tabs (Requires restart)" + tool_tip="Show your Instant Messages in separate floaters, or in one floater with many tabs (Requires restart)" width="331"> <radio_item height="16" - label="Multiple windows" + label="Separate windows" layout="topleft" left="0" name="radio" @@ -340,7 +348,7 @@ width="150" /> <radio_item height="16" - label="One window" + label="Tabs" layout="topleft" left_delta="0" name="radio2" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index 22c75a595e..b496f95422 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -323,7 +323,6 @@ follows="left|top" height="13" layout="topleft" - text_color="white" left="30" mouse_opaque="false" name="text_box3" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml index d8e3f4ccfb..39a8e53c7f 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -34,8 +34,8 @@ control_name="MuteAudio" follows="top|right" height="18" - image_selected="Parcel_VoiceNo_Dark" - image_unselected="Parcel_Voice_Dark" + image_selected="AudioMute_Off" + image_unselected="Audio_Off" is_toggle="true" layout="topleft" left_pad="16" @@ -79,8 +79,8 @@ disabled_control="MuteAudio" follows="top|right" height="18" - image_selected="Parcel_VoiceNo_Dark" - image_unselected="Parcel_Voice_Dark" + image_selected="AudioMute_Off" + image_unselected="Audio_Off" is_toggle="true" layout="topleft" left_pad="16" @@ -114,8 +114,8 @@ disabled_control="MuteAudio" follows="top|right" height="18" - image_selected="Parcel_VoiceNo_Dark" - image_unselected="Parcel_Voice_Dark" + image_selected="AudioMute_Off" + image_unselected="Audio_Off" is_toggle="true" layout="topleft" left_pad="16" @@ -149,8 +149,8 @@ disabled_control="MuteAudio" follows="top|right" height="18" - image_selected="Parcel_VoiceNo_Dark" - image_unselected="Parcel_Voice_Dark" + image_selected="AudioMute_Off" + image_unselected="Audio_Off" is_toggle="true" layout="topleft" left_pad="16" @@ -184,8 +184,8 @@ disabled_control="MuteAudio" follows="top|right" height="18" - image_selected="Parcel_VoiceNo_Dark" - image_unselected="Parcel_Voice_Dark" + image_selected="AudioMute_Off" + image_unselected="Audio_Off" is_toggle="true" layout="topleft" left_pad="16" @@ -219,8 +219,8 @@ disabled_control="MuteAudio" follows="top|right" height="18" - image_selected="Parcel_VoiceNo_Dark" - image_unselected="Parcel_Voice_Dark" + image_selected="AudioMute_Off" + image_unselected="Audio_Off" is_toggle="true" layout="topleft" left_pad="16" @@ -236,9 +236,10 @@ disabled_control="CmdLineDisableVoice" label="Enable voice" layout="topleft" - left="28" + font.style="BOLD" + left="101" name="enable_voice_check" - top_pad="5" + top_pad="13" width="110" > </check_box> @@ -270,8 +271,8 @@ disabled_control="MuteAudio" follows="top|right" height="18" - image_selected="Parcel_VoiceNo_Dark" - image_unselected="Parcel_Voice_Dark" + image_selected="AudioMute_Off" + image_unselected="Audio_Off" is_toggle="true" layout="topleft" left_pad="16" @@ -365,7 +366,7 @@ name="device_settings_panel" class="panel_voice_device_settings" width="501" - top="285"> + top="280"> <panel.string name="default_text"> Default diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 1f0ace5843..27461571da 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -7,7 +7,7 @@ left="0" name="panel_profile" top="0" - width="313"> + width="317"> <string name="CaptionTextAcctInfo"> [ACCTTYPE] @@ -41,8 +41,8 @@ layout="topleft" left="0" top="0" - height="517" - width="313" + height="524" + width="317" border_size="0"> <layout_panel name="profile_stack" @@ -50,8 +50,8 @@ layout="topleft" top="0" left="0" - height="505" - width="313"> + height="524" + width="317"> <scroll_container color="DkGray2" follows="all" @@ -59,8 +59,8 @@ left="0" name="profile_scroll" opaque="true" - height="505" - width="313" + height="524" + width="317" top="0"> <panel layout="topleft" @@ -73,9 +73,9 @@ width="297"> <panel follows="left|top|right" - height="117" + height="124" layout="topleft" - left="10" + left="13" name="second_life_image_panel" top="0" width="297"> @@ -84,7 +84,7 @@ default_image_name="None" enabled="false" follows="top|left" - height="117" + height="124" layout="topleft" left="0" name="2nd_life_pic" @@ -103,7 +103,7 @@ width="180" /> <expandable_text follows="left|top|right" - height="95" + height="97" layout="topleft" left="107" textbox.max_length="512" @@ -118,10 +118,10 @@ </panel> <panel follows="left|top|right" - height="117" + height="124" layout="topleft" - top_pad="10" - left="10" + top_pad="0" + left="13" name="first_life_image_panel" width="297"> <texture_picker @@ -129,7 +129,7 @@ default_image_name="None" enabled="false" follows="top|left" - height="117" + height="124" layout="topleft" left="0" name="real_world_pic" @@ -147,7 +147,7 @@ width="180" /> <expandable_text follows="left|top|right" - height="95" + height="97" layout="topleft" left="107" textbox.max_length="512" @@ -295,18 +295,18 @@ layout="topleft" name="profile_buttons_panel" auto_resize="false" - width="313"> + width="317"> <button follows="bottom|left" height="23" label="Add Friend" layout="topleft" - left="0" + left="2" mouse_opaque="false" name="add_friend" tool_tip="Offer friendship to the Resident" top="5" - width="80" /> + width="81" /> <button follows="bottom|left" height="23" @@ -326,7 +326,7 @@ tool_tip="Call this Resident" left_pad="3" top="5" - width="45" /> + width="46" /> <button enabled="false" follows="bottom|left" @@ -337,7 +337,7 @@ tool_tip="Show the Resident on the map" top="5" left_pad="3" - width="45" /> + width="46" /> <button follows="bottom|left" height="23" @@ -347,7 +347,7 @@ tool_tip="Offer teleport" left_pad="3" top="5" - width="85" /> + width="78" /> <!-- <button follows="bottom|right" height="23" diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index d46e1f9852..f5396951ca 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -54,14 +54,14 @@ height="535" halign="center" layout="topleft" - left="10" + left="5" min_width="333" name="tabs" tab_min_width="80" tab_height="30" tab_position="top" top_pad="5" - width="313"> + width="317"> <panel class="panel_profile" filename="panel_profile.xml" diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 765e2ae623..d14355b9f4 100644 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -2,13 +2,12 @@ <panel bevel_style="none" border_style="line" - bottom="550" follows="left|top|right|bottom" - height="508" + height="522" layout="topleft" left="0" name="script panel" - width="500"> + width="497"> <panel.string name="loading"> Loading... @@ -29,71 +28,17 @@ name="Title"> Script: [NAME] </panel.string> - <text_editor - type="string" - length="1" - bottom="393" - follows="left|top|right|bottom" - font="Monospace" - height="376" - ignore_tab="false" - layout="topleft" - left="4" - max_length="65536" - name="Script Editor" - width="492" - show_line_numbers="true" - handle_edit_keys_directly="true" - word_wrap="true"> - Loading... - </text_editor> - <button - bottom="499" - follows="right|bottom" - height="20" - label="Save" - label_selected="Save" - layout="topleft" - left="360" - name="Save_btn" - width="128" /> - <scroll_list - bottom="457" - follows="left|right|bottom" - height="60" - layout="topleft" - left="4" - name="lsl errors" - width="492" /> - <combo_box - bottom="499" - follows="left|bottom" - height="20" - label="Insert..." - layout="topleft" - left="12" - name="Insert..." - width="128" /> - <text - bottom="473" - follows="left|bottom" - height="12" - layout="topleft" - left="12" - name="line_col" - width="128" /> <menu_bar bg_visible="false" - bottom="18" - follows="left|top|right" + follows="left|top" height="18" layout="topleft" - left="8" + left="0" mouse_opaque="false" name="script_menu" width="476"> <menu - bottom="18" + top="0" height="62" label="File" layout="topleft" @@ -113,11 +58,10 @@ name="Revert All Changes" /> </menu> <menu - bottom="-647" + top="0" height="198" label="Edit" layout="topleft" - left="222" mouse_opaque="false" name="Edit" width="139"> @@ -169,11 +113,10 @@ name="Search / Replace..." /> </menu> <menu - bottom="18" + top="0" height="34" label="Help" layout="topleft" - left="0" mouse_opaque="false" name="Help" width="112"> @@ -187,4 +130,53 @@ name="Keyword Help..." /> </menu> </menu_bar> + <text_editor + left="0" + type="string" + length="1" + follows="left|top|right|bottom" + font="Monospace" + height="376" + ignore_tab="false" + layout="topleft" + max_length="65536" + name="Script Editor" + width="487" + show_line_numbers="true" + handle_edit_keys_directly="true" + word_wrap="true"> + Loading... + </text_editor> + <scroll_list + top_pad="10" + left="0" + follows="left|right|bottom" + height="60" + layout="topleft" + name="lsl errors" + width="487" /> + <text + follows="left|bottom" + height="12" + layout="topleft" + left="0" + name="line_col" + width="128" /> + <combo_box + follows="left|bottom" + height="23" + label="Insert..." + layout="topleft" + name="Insert..." + width="128" /> + <button + follows="right|bottom" + height="23" + label="Save" + label_selected="Save" + layout="topleft" + top_pad="-35" + right="487" + name="Save_btn" + width="61" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml index 3f836a661d..eb95de3a7c 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml @@ -91,7 +91,7 @@ class="panel_group_info_sidetray" name="panel_group_info_sidetray" filename="panel_group_info_sidetray.xml" - label="Group Info" + label="Group Profile" font="SansSerifBold" /> <panel diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 7a6089c74e..5754f67045 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -49,7 +49,7 @@ image_unselected="spacer35.tga" image_pressed="spacer35.tga" height="16" - right="-228" + right="-204" label_shadow="false" name="buycurrency" tool_tip="My Balance" @@ -69,15 +69,16 @@ left_pad="0" label_shadow="false" name="buyL" - pad_right="20px" + pad_right="20" + pad_bottom="2" tool_tip="Click to buy more L$" top="2" - width="100" /> + width="71" /> <text type="string" font="SansSerifSmall" text_readonly_color="TimeTextColor" - follows="right|bottom" + follows="right|top" halign="right" height="16" top="5" @@ -85,11 +86,11 @@ left_pad="0" name="TimeText" tool_tip="Current time (Pacific)" - width="85"> - 12:00 AM + width="89"> + 24:00 AM PST </text> <button - follows="right|bottom" + follows="right|top" height="15" image_selected="AudioMute_Off" image_pressed="Audio_Press" @@ -101,7 +102,7 @@ tool_tip="Global Volume Control" width="16" /> <text - follows="right|bottom" + follows="right|top" halign="center" height="12" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml index 74f97dca4e..d2c9e56bc3 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -85,7 +85,7 @@ left="45" name="where" text_color="LtGray_50" - value="(In World)" + value="(inworld)" width="150" /> <panel follows="all" diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml new file mode 100644 index 0000000000..ed8df69bf4 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<avatar_list_item + height="0" + layout="topleft" + left="0" + name="avatar_list_item" + top="0" + width="0"> + <!-- DEFAULT styles for avatar item --> + <default_style + font="SansSerifSmall" + font.style="NORMAL" + color="DkGray"/> + + <!-- styles for avatar item INVITED to voice call --> + <voice_call_invited_style + font="SansSerifSmall" + font.style="NORMAL" + color="0.5 0.5 0.5 0.5"/> + + <!-- styles for avatar item JOINED to voice call --> + <voice_call_joined_style + font="SansSerifSmall" + font.style="NORMAL" + color="white"/> + + <!-- styles for avatar item which HAS LEFT voice call --> + <voice_call_left_style + font="SansSerifSmall" + font.style="ITALIC" + color="LtGray_50"/> + + <!-- styles for ONLINE avatar item --> + <online_style + font="SansSerifSmall" + font.style="NORMAL" + color="white"/> + + <!-- styles for OFFLINE avatar item --> + <offline_style + font="SansSerifSmall" + font.style="NORMAL" + color="0.5 0.5 0.5 1.0"/> +</avatar_list_item> diff --git a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml index 48baa2812d..1228f6be3d 100644 --- a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <filter_editor clear_button_visible="true" - search_button_visible="true" + search_button_visible="false" text_pad_left="7" select_on_focus="true" text_tentative_color="TextFgTentativeColor" diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml index c65244ae22..563f3dc5c2 100644 --- a/indra/newview/skins/default/xui/en/widgets/menu_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml @@ -1,3 +1,3 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <!-- Use this for the top-level menu styling --> -<menu_item font="SansSerif" /> +<menu_item font="SansSerifSmall" /> diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml index 3f5a4b8379..597c4e83b6 100644 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml @@ -14,8 +14,8 @@ label_pad_left - padding to the left of tab button labels tab_top_image_selected="TabTop_Left_Selected" tab_bottom_image_unselected="Toolbar_Left_Off" tab_bottom_image_selected="Toolbar_Left_Selected" - tab_left_image_unselected="TabTop_Middle_Off" - tab_left_image_selected="TabTop_Middle_Selected"/> + tab_left_image_unselected="SegmentedBtn_Left_Disabled" + tab_left_image_selected="SegmentedBtn_Left_Off"/> <middle_tab tab_top_image_unselected="TabTop_Middle_Off" tab_top_image_selected="TabTop_Middle_Selected" tab_bottom_image_unselected="Toolbar_Middle_Off" |