diff options
author | Loren Shih <seraph@lindenlab.com> | 2010-03-03 11:07:52 -0500 |
---|---|---|
committer | Loren Shih <seraph@lindenlab.com> | 2010-03-03 11:07:52 -0500 |
commit | 8e37dd516ab68bf11aaa9ab76945de36053df057 (patch) | |
tree | fa790d4832fc46c1b9349314f1b7d1fef8987acd /indra | |
parent | 0ac63ffbb1acb32278645f6a9ab97cdc271c8d30 (diff) | |
parent | f53f121eb069dbf50334c424390151074d4fcad7 (diff) |
automated merge viewer2.0->viewer2.0
Diffstat (limited to 'indra')
49 files changed, 720 insertions, 248 deletions
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp index aa69dfe0cc..2ed1082f56 100644 --- a/indra/llui/llaccordionctrl.cpp +++ b/indra/llui/llaccordionctrl.cpp @@ -103,13 +103,6 @@ void LLAccordionCtrl::draw() LLLocalClipRect clip(local_rect); LLPanel::draw(); - /* - S32 width = getRect().getWidth(); - S32 height = getRect().getHeight(); - - gl_rect_2d(0, 0 , width - 1 ,height - 1,LLColor4::green,true); - gl_line_2d(0, 0 , width - 1 ,height - 1,LLColor4::black); - */ } @@ -125,7 +118,6 @@ BOOL LLAccordionCtrl::postBuild() scrollbar_size, getRect().getHeight() - 1); - LLScrollbar::Params sbparams; sbparams.name("scrollable vertical"); sbparams.rect(scroll_rect); diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp index daa9e08f14..1067c3f1d5 100644 --- a/indra/llui/llaccordionctrltab.cpp +++ b/indra/llui/llaccordionctrltab.cpp @@ -33,8 +33,9 @@ #include "linden_common.h" #include "lluictrl.h" - +#include "llscrollbar.h" #include "llaccordionctrltab.h" +#include "lllocalcliprect.h" #include "lltextbox.h" @@ -46,6 +47,8 @@ static const S32 HEADER_HEIGHT = 20; static const S32 HEADER_IMAGE_LEFT_OFFSET = 5; static const S32 HEADER_TEXT_LEFT_OFFSET = 30; static const F32 AUTO_OPEN_TIME = 1.f; +static const S32 VERTICAL_MULTIPLE = 16; +static const S32 PARENT_BORDER_MARGIN = 5; static LLDefaultChildRegistry::Register<LLAccordionCtrlTab> t1("accordion_tab"); @@ -277,6 +280,7 @@ LLAccordionCtrlTab::Params::Params() ,header_image_pressed("header_image_pressed") ,header_image_focused("header_image_focused") ,header_text_color("header_text_color") + ,fit_panel("fit_panel",true) { mouse_opaque(false); } @@ -293,6 +297,9 @@ LLAccordionCtrlTab::LLAccordionCtrlTab(const LLAccordionCtrlTab::Params&p) ,mPaddingTop(p.padding_top) ,mPaddingBottom(p.padding_bottom) ,mCanOpenClose(true) + ,mFitPanel(p.fit_panel) + ,mContainerPanel(NULL) + ,mScrollbar(NULL) { mStoredOpenCloseState = false; mWasStateStored = false; @@ -321,54 +328,42 @@ void LLAccordionCtrlTab::setDisplayChildren(bool display) mExpandedHeight : HEADER_HEIGHT); setRect(rect); - for(child_list_const_iter_t it = getChildList()->begin(); - getChildList()->end() != it; ++it) - { - LLView* child = *it; - if(DD_HEADER_NAME == child->getName()) - continue; + if(mContainerPanel) + mContainerPanel->setVisible(getDisplayChildren()); - child->setVisible(getDisplayChildren()); + if(mDisplayChildren) + { + adjustContainerPanel(); } + else + { + if(mScrollbar) + mScrollbar->setVisible(false); + } + } void LLAccordionCtrlTab::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */) { LLRect headerRect; - LLUICtrl::reshape(width, height, TRUE); - headerRect.setLeftTopAndSize( 0,height,width,HEADER_HEIGHT); mHeader->setRect(headerRect); mHeader->reshape(headerRect.getWidth(), headerRect.getHeight()); - for(child_list_const_iter_t it = getChildList()->begin(); - getChildList()->end() != it; ++it) - { - LLView* child = *it; - if(DD_HEADER_NAME == child->getName()) - continue; - if(!child->getVisible()) - continue; - - LLRect childRect = child->getRect(); - S32 childWidth = width - getPaddingLeft() - getPaddingRight(); - S32 childHeight = height - getHeaderHeight() - getPaddingTop() - getPaddingBottom(); + if(!mDisplayChildren) + return; - child->reshape(childWidth,childHeight); - - childRect.setLeftTopAndSize( - getPaddingLeft(), - childHeight + getPaddingBottom(), - childWidth, - childHeight); + LLRect childRect; - child->setRect(childRect); - - break;//suppose that there is only one panel - } + childRect.setLeftTopAndSize( + getPaddingLeft(), + height - getHeaderHeight() - getPaddingTop(), + width - getPaddingLeft() - getPaddingRight(), + height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() ); + adjustContainerPanel(childRect); } void LLAccordionCtrlTab::changeOpenClose(bool is_open) @@ -439,7 +434,7 @@ void LLAccordionCtrlTab::setAccordionView(LLView* panel) } -LLView* LLAccordionCtrlTab::getAccordionView() +LLView* LLAccordionCtrlTab::findContainerView() { for(child_list_const_iter_t it = getChildList()->begin(); getChildList()->end() != it; ++it) @@ -474,6 +469,43 @@ void LLAccordionCtrlTab::setHeaderVisible(bool value) BOOL LLAccordionCtrlTab::postBuild() { mHeader->setVisible(mHeaderVisible); + + static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0); + + LLRect scroll_rect; + scroll_rect.setOriginAndSize( + getRect().getWidth() - scrollbar_size, + 1, + scrollbar_size, + getRect().getHeight() - 1); + + mContainerPanel = findContainerView(); + + if(!mFitPanel) + { + LLScrollbar::Params sbparams; + sbparams.name("scrollable vertical"); + sbparams.rect(scroll_rect); + sbparams.orientation(LLScrollbar::VERTICAL); + sbparams.doc_size(getRect().getHeight()); + sbparams.doc_pos(0); + sbparams.page_size(getRect().getHeight()); + sbparams.step_size(VERTICAL_MULTIPLE); + sbparams.follows.flags(FOLLOWS_RIGHT | FOLLOWS_TOP | FOLLOWS_BOTTOM); + sbparams.change_callback(boost::bind(&LLAccordionCtrlTab::onScrollPosChangeCallback, this, _1, _2)); + + + mScrollbar = LLUICtrlFactory::create<LLScrollbar> (sbparams); + LLView::addChild( mScrollbar ); + mScrollbar->setFollowsRight(); + mScrollbar->setFollowsTop(); + mScrollbar->setFollowsBottom(); + + mScrollbar->setVisible(false); + } + + mContainerPanel->setVisible(mDisplayChildren); + return LLUICtrl::postBuild(); } bool LLAccordionCtrlTab::notifyChildren (const LLSD& info) @@ -562,6 +594,12 @@ BOOL LLAccordionCtrlTab::handleKey(KEY key, MASK mask, BOOL called_from_parent) if( !header->hasFocus() ) return LLUICtrl::handleKey(key, mask, called_from_parent); + if ( (key == KEY_RETURN )&& mask == MASK_NONE) + { + changeOpenClose(getDisplayChildren()); + return TRUE; + } + if ( (key == KEY_ADD || key == KEY_RIGHT)&& mask == MASK_NONE) { if(getDisplayChildren() == false) @@ -622,6 +660,7 @@ void LLAccordionCtrlTab::storeOpenCloseState() mStoredOpenCloseState = getDisplayChildren(); mWasStateStored = true; } + void LLAccordionCtrlTab::restoreOpenCloseState() { if(!mWasStateStored) @@ -632,3 +671,195 @@ void LLAccordionCtrlTab::restoreOpenCloseState() } mWasStateStored = false; } + +void LLAccordionCtrlTab::adjustContainerPanel () +{ + S32 width = getRect().getWidth(); + S32 height = getRect().getHeight(); + + LLRect child_rect; + child_rect.setLeftTopAndSize( + getPaddingLeft(), + height - getHeaderHeight() - getPaddingTop(), + width - getPaddingLeft() - getPaddingRight(), + height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() ); + + adjustContainerPanel(child_rect); +} + +void LLAccordionCtrlTab::adjustContainerPanel(const LLRect& child_rect) +{ + if(!mContainerPanel) + return; + + if(!mFitPanel) + { + show_hide_scrollbar(child_rect); + updateLayout(child_rect); + } + else + { + mContainerPanel->reshape(child_rect.getWidth(),child_rect.getHeight()); + mContainerPanel->setRect(child_rect); + } +} + +S32 LLAccordionCtrlTab::getChildViewHeight() +{ + if(!mContainerPanel) + return 0; + return mContainerPanel->getRect().getHeight(); +} + +void LLAccordionCtrlTab::show_hide_scrollbar(const LLRect& child_rect) +{ + if(getChildViewHeight() > child_rect.getHeight() ) + showScrollbar(child_rect); + else + hideScrollbar(child_rect); +} +void LLAccordionCtrlTab::showScrollbar(const LLRect& child_rect) +{ + if(!mContainerPanel || !mScrollbar) + return; + bool was_visible = mScrollbar->getVisible(); + mScrollbar->setVisible(true); + + static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0); + + { + ctrlSetLeftTopAndSize(mScrollbar,child_rect.getWidth()-scrollbar_size, + child_rect.getHeight()-PARENT_BORDER_MARGIN, + scrollbar_size, + child_rect.getHeight()-2*PARENT_BORDER_MARGIN); + } + + LLRect orig_rect = mContainerPanel->getRect(); + + mScrollbar->setPageSize(child_rect.getHeight()); + mScrollbar->setDocParams(orig_rect.getHeight(),mScrollbar->getDocPos()); + + if(was_visible) + { + S32 scroll_pos = llmin(mScrollbar->getDocPos(), orig_rect.getHeight() - child_rect.getHeight() - 1); + mScrollbar->setDocPos(scroll_pos); + } + else//shrink child panel + { + updateLayout(child_rect); + } + +} + +void LLAccordionCtrlTab::hideScrollbar( const LLRect& child_rect ) +{ + if(!mContainerPanel || !mScrollbar) + return; + + if(mScrollbar->getVisible() == false) + return; + mScrollbar->setVisible(false); + mScrollbar->setDocPos(0); + + //shrink child panel + updateLayout(child_rect); +} + +void LLAccordionCtrlTab::onScrollPosChangeCallback(S32, LLScrollbar*) +{ + LLRect child_rect; + + S32 width = getRect().getWidth(); + S32 height = getRect().getHeight(); + + child_rect.setLeftTopAndSize( + getPaddingLeft(), + height - getHeaderHeight() - getPaddingTop(), + width - getPaddingLeft() - getPaddingRight(), + height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() ); + + updateLayout(child_rect); +} + +void LLAccordionCtrlTab::drawChild(const LLRect& root_rect,LLView* child) +{ + if (child && child->getVisible() && child->getRect().isValid()) + { + LLRect screen_rect; + localRectToScreen(child->getRect(),&screen_rect); + + if ( root_rect.overlaps(screen_rect) && LLUI::sDirtyRect.overlaps(screen_rect)) + { + glMatrixMode(GL_MODELVIEW); + LLUI::pushMatrix(); + { + LLUI::translate((F32)child->getRect().mLeft, (F32)child->getRect().mBottom, 0.f); + child->draw(); + + } + LLUI::popMatrix(); + } + } +} + +void LLAccordionCtrlTab::draw() +{ + if(mFitPanel) + LLUICtrl::draw(); + else + { + LLRect root_rect = getRootView()->getRect(); + drawChild(root_rect,mHeader); + drawChild(root_rect,mScrollbar ); + { + LLRect child_rect; + + S32 width = getRect().getWidth(); + S32 height = getRect().getHeight(); + + child_rect.setLeftTopAndSize( + getPaddingLeft(), + height - getHeaderHeight() - getPaddingTop(), + width - getPaddingLeft() - getPaddingRight(), + height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() ); + + LLLocalClipRect clip(child_rect); + drawChild(root_rect,mContainerPanel); + } + + + gGL.getTexUnit(0)->disable(); + } +} + +void LLAccordionCtrlTab::updateLayout ( const LLRect& child_rect ) +{ + LLView* child = getAccordionView(); + if(!mContainerPanel) + return; + + S32 panel_top = child_rect.getHeight(); + S32 panel_width = child_rect.getWidth(); + + static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0); + if(mScrollbar->getVisible() != false) + { + panel_top+=mScrollbar->getDocPos(); + panel_width-=scrollbar_size; + } + + //set sizes for first panels and dragbars + LLRect panel_rect = child->getRect(); + ctrlSetLeftTopAndSize(mContainerPanel,child_rect.mLeft,panel_top,panel_width,panel_rect.getHeight()); +} +void LLAccordionCtrlTab::ctrlSetLeftTopAndSize(LLView* panel, S32 left, S32 top, S32 width, S32 height) +{ + if(!panel) + return; + LLRect panel_rect = panel->getRect(); + panel_rect.setLeftTopAndSize( left, top, width, height); + panel->reshape( width, height, 1); + panel->setRect(panel_rect); +} + + diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h index 2e0260ab16..462ccc6d53 100644 --- a/indra/llui/llaccordionctrltab.h +++ b/indra/llui/llaccordionctrltab.h @@ -41,6 +41,7 @@ class LLUICtrlFactory; class LLUIImage; class LLButton; class LLTextBox; +class LLScrollbar; @@ -84,6 +85,8 @@ public: Optional<bool> header_visible; + Optional<bool> fit_panel; + Optional<S32> padding_left; Optional<S32> padding_right; Optional<S32> padding_top; @@ -107,7 +110,7 @@ public: //set LLAccordionCtrlTab panel void setAccordionView(LLView* panel); - LLView* getAccordionView(); + LLView* getAccordionView() { return mContainerPanel; }; bool getCollapsible() {return mCollapsible;}; @@ -123,6 +126,8 @@ public: S32 notify(const LLSD& info); bool notifyChildren(const LLSD& info); + void draw(); + void storeOpenCloseState (); void restoreOpenCloseState (); @@ -164,9 +169,26 @@ public: void showAndFocusHeader(); -private: + void setFitPanel( bool fit ) { mFitPanel = true; } - +protected: + void adjustContainerPanel (const LLRect& child_rect); + void adjustContainerPanel (); + S32 getChildViewHeight (); + + void onScrollPosChangeCallback(S32, LLScrollbar*); + + void show_hide_scrollbar (const LLRect& child_rect); + void showScrollbar (const LLRect& child_rect); + void hideScrollbar (const LLRect& child_rect); + + void updateLayout ( const LLRect& child_rect ); + void ctrlSetLeftTopAndSize (LLView* panel, S32 left, S32 top, S32 width, S32 height); + + void drawChild(const LLRect& root_rect,LLView* child); + + LLView* findContainerView (); +private: class LLAccordionCtrlTabHeader; LLAccordionCtrlTabHeader* mHeader; //Header @@ -176,6 +198,7 @@ private: bool mHeaderVisible; bool mCanOpenClose; + bool mFitPanel; S32 mPaddingLeft; S32 mPaddingRight; @@ -185,6 +208,8 @@ private: bool mStoredOpenCloseState; bool mWasStateStored; + LLScrollbar* mScrollbar; + LLView* mContainerPanel; LLUIColor mDropdownBGColor; }; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index b6d73cda3c..e91d753a39 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1554,7 +1554,12 @@ void LLFloater::onClickClose( LLFloater* self ) { if (!self) return; - self->closeFloater(false); + self->onClickCloseBtn(); +} + +void LLFloater::onClickCloseBtn() +{ + closeFloater(false); } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 19e8288807..c1e8813f87 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -307,6 +307,8 @@ protected: void destroy() { die(); } // Don't call this directly. You probably want to call closeFloater() + virtual void onClickCloseBtn(); + private: void setForeground(BOOL b); // called only by floaterview void cleanupHandles(); // remove handles to dead floaters @@ -346,6 +348,7 @@ protected: LLResizeBar* mResizeBar[4]; LLResizeHandle* mResizeHandle[4]; + LLButton* mButtons[BUTTON_COUNT]; private: LLRect mExpandedRect; @@ -379,7 +382,6 @@ private: handle_set_t mDependents; bool mButtonsEnabled[BUTTON_COUNT]; - LLButton* mButtons[BUTTON_COUNT]; F32 mButtonScale; BOOL mAutoFocus; LLHandle<LLFloater> mSnappedTo; diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp index 3cc92baa8d..d17be8b94a 100644 --- a/indra/llui/llscrolllistcell.cpp +++ b/indra/llui/llscrolllistcell.cpp @@ -185,6 +185,8 @@ LLScrollListText::LLScrollListText(const LLScrollListCell::Params& p) { sCount++; + mTextWidth = getWidth(); + // initialize rounded rect image if (!mRoundedRectImage) { @@ -340,7 +342,7 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col 0, LLFontGL::NO_SHADOW, string_chars, - getWidth(), + getTextWidth(), &right_x, TRUE); } diff --git a/indra/llui/llscrolllistcell.h b/indra/llui/llscrolllistcell.h index 5fecf5aade..b1c8901fc4 100644 --- a/indra/llui/llscrolllistcell.h +++ b/indra/llui/llscrolllistcell.h @@ -151,11 +151,16 @@ public: /*virtual*/ const std::string & getToolTip() const; /*virtual*/ BOOL needsToolTip() const; + S32 getTextWidth() const { return mTextWidth;} + void setTextWidth(S32 value) { mTextWidth = value;} + virtual void setWidth(S32 width) { LLScrollListCell::setWidth(width); mTextWidth = width; } + void setText(const LLStringExplicit& text); void setFontStyle(const U8 font_style); private: LLUIString mText; + S32 mTextWidth; const LLFontGL* mFont; LLColor4 mColor; U8 mUseColor; diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index e819c5fdea..ebdc82115f 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -219,7 +219,10 @@ public: void deselectAllItems(BOOL no_commit_on_change = FALSE); // by default, go ahead and commit on selection change void clearHighlightedItems(); - void mouseOverHighlightNthItem( S32 index ); + + virtual void mouseOverHighlightNthItem( S32 index ); + + S32 getHighlightedItemInx() const { return mHighlightedItem; } void setDoubleClickCallback( callback_t cb ) { mOnDoubleClickCallback = cb; } void setMaximumSelectCallback( callback_t cb) { mOnMaximumSelectCallback = cb; } diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 30fc7babae..1dcfb4e296 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -2061,5 +2061,12 @@ void LLTabContainer::commitHoveredButton(S32 x, S32 y) tuple->mButton->onCommit(); } } + /** + * EXT - 4572 (Click and hold the left mouse button doesn't let you browse tabbed IM floater) + * + * During hovering mouse(with left mouse button hold) over tabs, a newly just activated corresponding + * to the tab(that is hovered in the given instant of time) panel may caught mouse capture. + */ + gFocusMgr.setMouseCapture(this); } } diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 50d8672083..45c540b3a3 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -183,6 +183,15 @@ void LLAvatarList::sortByName() sort(); } +void LLAvatarList::setDirty(bool val /*= true*/, bool force_refresh /*= false*/) +{ + mDirty = val; + if(mDirty && force_refresh) + { + refresh(); + } +} + ////////////////////////////////////////////////////////////////////////// // PROTECTED SECTION ////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 0e4215e91a..00c72f1f9d 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -73,7 +73,7 @@ public: virtual void clear(); void setNameFilter(const std::string& filter); - void setDirty(bool val = true) { mDirty = val; } + void setDirty(bool val = true, bool force_refresh = false); uuid_vector_t& getIDs() { return mIDs; } bool contains(const LLUUID& id); diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp index 169a963d0d..f113cc49d4 100644 --- a/indra/newview/lldebugview.cpp +++ b/indra/newview/lldebugview.cpp @@ -81,11 +81,13 @@ void LLDebugView::init() r.setLeftTopAndSize(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f), (S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f)); + mFastTimerView = new LLFastTimerView(r); mFastTimerView->setFollowsTop(); mFastTimerView->setFollowsLeft(); mFastTimerView->setVisible(FALSE); // start invisible addChild(mFastTimerView); + mFastTimerView->setRect(rect); r.setLeftTopAndSize(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f), (S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f)); diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 4fa97e789b..8bc3b5a75f 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -44,6 +44,7 @@ #include "llfontgl.h" #include "llsdserialize.h" #include "lltooltip.h" +#include "llbutton.h" #include "llappviewer.h" #include "llviewertexturelist.h" @@ -99,6 +100,8 @@ LLFastTimerView::LLFastTimerView(const LLRect& rect) FTV_NUM_TIMERS = LLFastTimer::NamedTimer::instanceCount(); mPrintStats = -1; mAverageCyclesPerTimer = 0; + setCanMinimize(false); + setCanClose(true); } @@ -139,6 +142,18 @@ LLFastTimer::NamedTimer* LLFastTimerView::getLegendID(S32 y) BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask) { + + { + S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft; + S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom; + if(mButtons[BUTTON_CLOSE]->getVisible() + && mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y) ) + { + return LLFloater::handleMouseDown(x, y, mask);; + } + } + + if (x < mBarRect.mLeft) { LLFastTimer::NamedTimer* idp = getLegendID(y); @@ -188,6 +203,15 @@ BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask) BOOL LLFastTimerView::handleMouseUp(S32 x, S32 y, MASK mask) { + { + S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft; + S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom; + if(mButtons[BUTTON_CLOSE]->getVisible() + && mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y) ) + { + return LLFloater::handleMouseUp(x, y, mask);; + } + } return FALSE; } @@ -1191,5 +1215,8 @@ void LLFastTimerView::doAnalysis(std::string baseline, std::string target, std:: return ; } } - +void LLFastTimerView::onClickCloseBtn() +{ + setVisible(false); +} diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h index f5c8f23818..ac06990913 100644 --- a/indra/newview/llfasttimerview.h +++ b/indra/newview/llfasttimerview.h @@ -63,7 +63,9 @@ public: LLFastTimer::NamedTimer* getLegendID(S32 y); F64 getTime(const std::string& name); - + +protected: + virtual void onClickCloseBtn(); private: typedef std::vector<std::vector<S32> > bar_positions_t; bar_positions_t mBarStart; diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 23f19a38a6..f7fd7bb472 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -179,6 +179,7 @@ LLFolderView::LLFolderView(const Params& p) mSourceID(p.task_id), mRenameItem( NULL ), mNeedsScroll( FALSE ), + mEnableScroll( true ), mPinningSelectedItem(FALSE), mNeedsAutoSelect( FALSE ), mAutoSelectOverride(FALSE), @@ -1913,7 +1914,7 @@ void LLFolderView::deleteAllChildren() void LLFolderView::scrollToShowSelection() { - if (mSelectedItems.size()) + if (mEnableScroll && mSelectedItems.size()) { mNeedsScroll = TRUE; } diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index faf6a9cf23..38255b3cea 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -269,6 +269,7 @@ public: void dumpSelectionInformation(); virtual S32 notify(const LLSD& info) ; + void setEnableScroll(bool enable_scroll) { mEnableScroll = enable_scroll; } private: void updateRenamerPosition(); @@ -300,6 +301,7 @@ protected: LLLineEditor* mRenamer; BOOL mNeedsScroll; + bool mEnableScroll; BOOL mPinningSelectedItem; LLRect mScrollConstraintRect; BOOL mNeedsAutoSelect; diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp index ac060cef15..18f81fe506 100644 --- a/indra/newview/llfriendcard.cpp +++ b/indra/newview/llfriendcard.cpp @@ -44,24 +44,28 @@ // Constants; -static const std::string INVENTORY_STRING_FRIENDS_SUBFOLDER = "InvFolder Friends"; -static const std::string INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER = "InvFolder All"; +static const std::string INVENTORY_STRING_FRIENDS_SUBFOLDER = "Friends"; +static const std::string INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER = "All"; // helper functions -// NOTE: Usage of LLTrans::getString(); in next two functions to set localized -// folders' names is caused by a hack in the LLFolderViewItem::refreshFromListener() -// method for protected asset types. -// So, localized names will be got from the strings with "InvFolder LABEL_NAME" -// in the strings.xml +// NOTE: For now Friends & All folders are created as protected folders of the LLFolderType::FT_CALLINGCARD type. +// So, their names will be processed in the LLFolderViewItem::refreshFromListener() to be localized +// using "InvFolder LABEL_NAME" as LLTrans::findString argument. + +// We must use in this file their hard-coded names to ensure found them on different locales. EXT-5829. +// These hard-coded names will be stored in InventoryItems but shown localized in FolderViewItems + +// If hack in the LLFolderViewItem::refreshFromListener() to localize protected folder is removed +// or these folders are not protected these names should be localized in another place/way. inline const std::string get_friend_folder_name() { - return LLTrans::getString(INVENTORY_STRING_FRIENDS_SUBFOLDER); + return INVENTORY_STRING_FRIENDS_SUBFOLDER; } inline const std::string get_friend_all_subfolder_name() { - return LLTrans::getString(INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER); + return INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER; } void move_from_to_arrays(LLInventoryModel::cat_array_t& from, LLInventoryModel::cat_array_t& to) @@ -350,9 +354,9 @@ const LLUUID& LLFriendCardsManager::findFriendAllSubfolderUUIDImpl() const return findChildFolderUUID(friendFolderUUID, friendAllSubfolderName); } -const LLUUID& LLFriendCardsManager::findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& localizedName) const +const LLUUID& LLFriendCardsManager::findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& nonLocalizedName) const { - LLNameCategoryCollector matchFolderFunctor(localizedName); + LLNameCategoryCollector matchFolderFunctor(nonLocalizedName); return get_folder_uuid(parentFolderUUID, matchFolderFunctor); } diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h index b94d5ec2c0..1cda52c1d7 100644 --- a/indra/newview/llfriendcard.h +++ b/indra/newview/llfriendcard.h @@ -120,7 +120,7 @@ private: return (mBuddyIDSet.end() != mBuddyIDSet.find(avatarID)); } - const LLUUID& findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& localizedName) const; + const LLUUID& findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& nonLocalizedName) const; const LLUUID& findFriendFolderUUIDImpl() const; const LLUUID& findFriendAllSubfolderUUIDImpl() const; const LLUUID& findFriendCardInventoryUUIDImpl(const LLUUID& avatarID); diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index d518318b0e..9eb11a6ac4 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -96,8 +96,29 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp, LLUUID session_id = floaterp->getKey(); - floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); - mSessions[session_id] = floaterp; + LLIconCtrl* icon = 0; + + if(gAgent.isInGroup(session_id, TRUE)) + { + LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>(); + icon_params.group_id = session_id; + icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params); + + mSessions[session_id] = floaterp; + floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); + } + else + { + LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id); + + LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>(); + icon_params.avatar_id = avatar_id; + icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params); + + mSessions[session_id] = floaterp; + floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); + } + mTabContainer->setTabImage(floaterp, icon); } void LLIMFloaterContainer::onCloseFloater(LLUUID& id) @@ -134,6 +155,8 @@ void LLIMFloaterContainer::setMinimized(BOOL b) if (isMinimized() == b) return; LLMultiFloater::setMinimized(b); + // Hide minimized floater (see EXT-5315) + setVisible(!b); if (isMinimized()) return; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 048ed10886..8097985ade 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -681,6 +681,21 @@ BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, return handled; } +// virtual +void LLInventoryPanel::onMouseEnter(S32 x, S32 y, MASK mask) +{ + LLPanel::onMouseEnter(x, y, mask); + // don't auto-scroll a list when cursor is over Inventory. See EXT-3981. + mFolders->setEnableScroll(false); +} + +// virtual +void LLInventoryPanel::onMouseLeave(S32 x, S32 y, MASK mask) +{ + LLPanel::onMouseLeave(x, y, mask); + mFolders->setEnableScroll(true); +} + void LLInventoryPanel::onFocusLost() { // inventory no longer handles cut/copy/paste/delete diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index f312b588b9..37b03dbd7d 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -122,6 +122,10 @@ public: void* cargo_data, EAcceptance* accept, std::string& tooltip_msg); + + void onMouseEnter(S32 x, S32 y, MASK mask); + void onMouseLeave(S32 x, S32 y, MASK mask); + // LLUICtrl methods /*virtual*/ void onFocusLost(); /*virtual*/ void onFocusReceived(); diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 114fef8712..883d4cdf4b 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -47,6 +47,8 @@ static LLDefaultChildRegistry::Register<LLNameListCtrl> r("name_list"); +static const S32 info_icon_size = 16; + void LLNameListCtrl::NameTypeNames::declareValues() { declare("INDIVIDUAL", LLNameListCtrl::INDIVIDUAL); @@ -138,6 +140,29 @@ void LLNameListCtrl::showInspector(const LLUUID& avatar_id, bool is_group) LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id)); } +void LLNameListCtrl::mouseOverHighlightNthItem( S32 target_index ) +{ + if (getHighlightedItemInx()!= target_index) + { + if(getHighlightedItemInx()!=-1) + { + LLScrollListItem* item = getItemList()[getHighlightedItemInx()]; + LLScrollListText* cell = dynamic_cast<LLScrollListText*>(item->getColumn(mNameColumnIndex)); + if(cell) + cell->setTextWidth(cell->getTextWidth() + info_icon_size); + } + if(target_index != -1) + { + LLScrollListItem* item = getItemList()[target_index]; + LLScrollListText* cell = dynamic_cast<LLScrollListText*>(item->getColumn(mNameColumnIndex)); + if(cell) + cell->setTextWidth(cell->getTextWidth() - info_icon_size); + } + } + + LLScrollListCtrl::mouseOverHighlightNthItem(target_index); +} + //virtual BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask) { @@ -164,7 +189,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask) // Spawn at right side of cell LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small"); - LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop - (sticky_rect.getHeight() - icon->getHeight())/2 ); + LLCoordGL pos( sticky_rect.mRight - info_icon_size, sticky_rect.mTop - (sticky_rect.getHeight() - icon->getHeight())/2 ); // Should we show a group or an avatar inspector? bool is_group = hit_item->getValue()["is_group"].asBoolean(); diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h index 23b1cb6897..1c26ee5db4 100644 --- a/indra/newview/llnamelistctrl.h +++ b/indra/newview/llnamelistctrl.h @@ -120,6 +120,8 @@ public: void setAllowCallingCardDrop(BOOL b) { mAllowCallingCardDrop = b; } /*virtual*/ void updateColumns(); + + /*virtual*/ void mouseOverHighlightNthItem( S32 index ); private: void showInspector(const LLUUID& avatar_id, bool is_group); diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 836331b44b..7cf27d9141 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -1290,18 +1290,11 @@ void LLPanelClassifiedInfo::resetData() void LLPanelClassifiedInfo::resetControls() { - if(getAvatarId() == gAgent.getID()) - { - childSetEnabled("edit_btn", TRUE); - childSetVisible("edit_btn", TRUE); - childSetVisible("auto_renew", TRUE); - } - else - { - childSetEnabled("edit_btn", FALSE); - childSetVisible("edit_btn", FALSE); - childSetVisible("auto_renew", FALSE); - } + bool is_self = getAvatarId() == gAgent.getID(); + + childSetEnabled("edit_btn", is_self); + childSetVisible("edit_btn", is_self); + childSetVisible("price_layout_panel", is_self); } void LLPanelClassifiedInfo::setClassifiedName(const std::string& name) diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp index c02f154dc8..a73c25a979 100644 --- a/indra/newview/llpanelnearbymedia.cpp +++ b/indra/newview/llpanelnearbymedia.cpp @@ -549,11 +549,10 @@ void LLPanelNearByMedia::refreshParcelItems() MediaClass choice = (MediaClass)choice_llsd.asInteger(); // Only show "special parcel items" if "All" or "Within" filter // (and if media is "enabled") - bool should_include = gSavedSettings.getBOOL("AudioStreamingMedia") && - (choice == MEDIA_CLASS_ALL || choice == MEDIA_CLASS_WITHIN_PARCEL); + bool should_include = (choice == MEDIA_CLASS_ALL || choice == MEDIA_CLASS_WITHIN_PARCEL); // First Parcel Media: add or remove it as necessary - if (should_include && LLViewerMedia::hasParcelMedia()) + if (gSavedSettings.getBOOL("AudioStreamingMedia") &&should_include && LLViewerMedia::hasParcelMedia()) { // Yes, there is parcel media. if (NULL == mParcelMediaItem) @@ -716,11 +715,14 @@ void LLPanelNearByMedia::refreshList() } } } - mDisableAllCtrl->setEnabled(gSavedSettings.getBOOL("AudioStreamingMedia") && + mDisableAllCtrl->setEnabled((gSavedSettings.getBOOL("AudioStreamingMusic") || + gSavedSettings.getBOOL("AudioStreamingMedia")) && (LLViewerMedia::isAnyMediaShowing() || LLViewerMedia::isParcelMediaPlaying() || LLViewerMedia::isParcelAudioPlaying())); - mEnableAllCtrl->setEnabled(gSavedSettings.getBOOL("AudioStreamingMedia") && + + mEnableAllCtrl->setEnabled( (gSavedSettings.getBOOL("AudioStreamingMusic") || + gSavedSettings.getBOOL("AudioStreamingMedia")) && (disabled_count > 0 || // parcel media (if we have it, and it isn't playing, enable "start") (LLViewerMedia::hasParcelMedia() && ! LLViewerMedia::isParcelMediaPlaying()) || @@ -979,20 +981,13 @@ void LLPanelNearByMedia::onMoreLess() void LLPanelNearByMedia::updateControls() { - if (! gSavedSettings.getBOOL("AudioStreamingMedia")) - { - // Just show disabled controls - showDisabledControls(); - return; - } - LLUUID selected_media_id = mMediaList->getValue().asUUID(); if (selected_media_id == PARCEL_AUDIO_LIST_ITEM_UUID) { if (!LLViewerMedia::hasParcelAudio() || !gSavedSettings.getBOOL("AudioStreamingMusic")) { - // Shouldn't happen, but do this anyway + // disable controls if audio streaming music is disabled from preference showDisabledControls(); } else { @@ -1005,9 +1000,9 @@ void LLPanelNearByMedia::updateControls() } else if (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID) { - if (!LLViewerMedia::hasParcelMedia()) + if (!LLViewerMedia::hasParcelMedia() || !gSavedSettings.getBOOL("AudioStreamingMedia")) { - // Shouldn't happen, but do this anyway + // disable controls if audio streaming media is disabled from preference showDisabledControls(); } else { @@ -1034,7 +1029,7 @@ void LLPanelNearByMedia::updateControls() else { LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(selected_media_id); - if (NULL == impl) + if (NULL == impl || !gSavedSettings.getBOOL("AudioStreamingMedia")) { showDisabledControls(); } diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index d2a518a06a..93a6a7803a 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -683,9 +683,15 @@ void LLPanelPeople::updateFriendList() online_friendsp.push_back(buddy_id); } - mOnlineFriendList->setDirty(); - mAllFriendList->setDirty(); - + /* + * Avatarlists will be hidden by showFriendsAccordionsIfNeeded(), if they do not have items. + * But avatarlist can be updated only if it is visible @see LLAvatarList::draw(); + * So we need to do force update of lists to avoid inconsistency of data and view of avatarlist. + */ + mOnlineFriendList->setDirty(true, !mOnlineFriendList->filterHasMatches());// do force update if list do NOT have items + mAllFriendList->setDirty(true, !mAllFriendList->filterHasMatches()); + //update trash and other buttons according to a selected item + updateButtons(); showFriendsAccordionsIfNeeded(); } @@ -1434,9 +1440,8 @@ void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param { showAccordion("tab_all", param.asInteger()); } + updateButtons(); - LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion"); - accordion->arrange(); } void LLPanelPeople::setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed) diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 732c23982b..9fb496c214 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -360,12 +360,14 @@ void LLStatusBar::refresh() // Disable media toggle if there's no media, parcel media, and no parcel audio // (or if media is disabled) - mMediaToggle->setEnabled(gSavedSettings.getBOOL("AudioStreamingMedia") && - (LLViewerMedia::hasInWorldMedia() || LLViewerMedia::hasParcelMedia() || LLViewerMedia::hasParcelAudio())); + bool button_enabled = (gSavedSettings.getBOOL("AudioStreamingMusic")||gSavedSettings.getBOOL("AudioStreamingMedia")) && + (LLViewerMedia::hasInWorldMedia() || LLViewerMedia::hasParcelMedia() || LLViewerMedia::hasParcelAudio()); + mMediaToggle->setEnabled(button_enabled); // Note the "sense" of the toggle is opposite whether media is playing or not - mMediaToggle->setValue(! (LLViewerMedia::isAnyMediaShowing() || + bool any_media_playing = (LLViewerMedia::isAnyMediaShowing() || LLViewerMedia::isParcelMediaPlaying() || - LLViewerMedia::isParcelAudioPlaying())); + LLViewerMedia::isParcelAudioPlaying()); + mMediaToggle->setValue(!any_media_playing); } void LLStatusBar::setVisibleForMouselook(bool visible) diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 662e6dcabe..6ed95f2cbf 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -1130,7 +1130,8 @@ LLTexLayerInterface::LLTexLayerInterface(LLTexLayerSet* const layer_set): } LLTexLayerInterface::LLTexLayerInterface(const LLTexLayerInterface &layer, LLWearable *wearable): - mTexLayerSet( layer.mTexLayerSet ) + mTexLayerSet( layer.mTexLayerSet ), + mInfo(NULL) { // don't add visual params for cloned layers setInfo(layer.getInfo(), wearable); @@ -1140,11 +1141,12 @@ LLTexLayerInterface::LLTexLayerInterface(const LLTexLayerInterface &layer, LLWea BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearable ) // This sets mInfo and calls initialization functions { - //llassert(mInfo == NULL); // nyx says this is probably bogus but needs investigating - if (mInfo != NULL) // above llassert(), but softened into a warning - { - llwarns << "BAD STUFF! mInfo != NULL" << llendl; - } + // setInfo should only be called once. Code is not robust enough to handle redefinition of a texlayer. + // Not a critical warning, but could be useful for debugging later issues. -Nyx + if (mInfo != NULL) + { + llwarns << "mInfo != NULL" << llendl; + } mInfo = info; //mID = info->mID; // No ID diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 86336e353c..344c4c469b 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -851,7 +851,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg) } } // update the audio stream here as well - if(!inworld_media_enabled || !inworld_audio_enabled) + if( !inworld_audio_enabled) { if(LLViewerMedia::isParcelAudioPlaying() && gAudiop && LLViewerMedia::hasParcelAudio()) { diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index ae31c9732c..361f4e2326 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3115,8 +3115,12 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) { // Chat the "back" SLURL. (DEV-4907) + LLSD substitution = LLSD().with("[T_SLURL]", gAgent.getTeleportSourceSLURL()); + std::string completed_from = LLAgent::sTeleportProgressMessages["completed_from"]; + LLStringUtil::format(completed_from, substitution); + LLSD args; - args["MESSAGE"] = "Teleport completed from " + gAgent.getTeleportSourceSLURL(); + args["MESSAGE"] = completed_from; LLNotificationsUtil::add("SystemMessageTip", args); // Set the new position diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index f1ec489a20..30f2d2c41b 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -695,22 +695,15 @@ BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK { S32 local_x, local_y; top_ctrl->screenPointToLocal( x, y, &local_x, &local_y ); - if (down) + if (top_ctrl->pointInView(local_x, local_y)) { - if (top_ctrl->pointInView(local_x, local_y)) - { - return top_ctrl->handleAnyMouseClick(local_x, local_y, mask, clicktype, down) ; - } - else - { - gFocusMgr.setTopCtrl(NULL); - } + return top_ctrl->handleAnyMouseClick(local_x, local_y, mask, clicktype, down) ; } else { - if (top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleMouseUp(local_x, local_y, mask)) + if (down) { - return TRUE; + gFocusMgr.setTopCtrl(NULL); } } } diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 131c6ac1a1..acd12099cd 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1723,7 +1723,7 @@ BOOL LLVOAvatarSelf::canGrabLocalTexture(ETextureIndex type, U32 index) const return FALSE; } - if (gAgent.isGodlike()) + if (gAgent.isGodlikeWithoutAdminMenuFakery()) return TRUE; // Check permissions of textures that show up in the diff --git a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml index cf1b809aa1..92c0c4a27a 100644 --- a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml @@ -16,7 +16,7 @@ <texture_picker label="Haare" name="hair_grain"/> <texture_picker label="Alpha: Haare" name="hair_alpha"/> <texture_picker label="Kopf" name="head-baked"/> - <texture_picker label="Make-Uup" name="head_bodypaint"/> + <texture_picker label="Make-Up" name="head_bodypaint"/> <texture_picker label="Kopf: Alpha" name="head_alpha"/> <texture_picker label="Kopftattoo" name="head_tattoo"/> <texture_picker label="Augen" name="eyes-baked"/> diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml index b1e9ef6f19..cf7b208c1a 100644 --- a/indra/newview/skins/default/xui/de/floater_customize.xml +++ b/indra/newview/skins/default/xui/de/floater_customize.xml @@ -40,17 +40,17 @@ <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> - <text name="Item Action Label" right="100"> + <text name="Item Action Label"> Form: </text> <button label="Neue Form/Gestalt" label_selected="Neue Form/Gestalt" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." left="194" name="Save As" width="105"/> + <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" name="Save"/> + <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> </panel> <panel label="Haut" name="Skin"> <button label="Hautfarbe" label_selected="Hautfarbe" left="2" name="Skin Color" width="92"/> <button label="Gesichtsdetails" label_selected="Gesichtsdetails" left="2" name="Face Detail" width="92"/> - <button label="Make-Uup" label_selected="Make-Uup" left="2" name="Makeup" width="92"/> + <button label="Make-Up" label_selected="Make-Up" left="2" name="Makeup" width="92"/> <button label="Körperdetails" label_selected="Körperdetails" left="2" name="Body Detail" width="92"/> <text name="title"> [DESC] diff --git a/indra/newview/skins/default/xui/de/panel_edit_skin.xml b/indra/newview/skins/default/xui/de/panel_edit_skin.xml index 46bd1d9f4d..90b06a29bc 100644 --- a/indra/newview/skins/default/xui/de/panel_edit_skin.xml +++ b/indra/newview/skins/default/xui/de/panel_edit_skin.xml @@ -8,7 +8,7 @@ <accordion name="wearable_accordion"> <accordion_tab name="skin_color_tab" title="Hautfarbe"/> <accordion_tab name="skin_face_tab" title="Gesichtsdetails"/> - <accordion_tab name="skin_makeup_tab" title="Make-Uup"/> + <accordion_tab name="skin_makeup_tab" title="Make-Up"/> <accordion_tab name="skin_body_tab" title="Körperdetails"/> </accordion> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml index b0c6dce8cf..59a4c148a8 100644 --- a/indra/newview/skins/default/xui/de/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Grundstück" name="Estate"> <text name="estate_help_text"> - Änderungen auf dieser Registerkarte wirken sich auf alle Regionen auf dem Grundstück aus. + Änderungen wirken sich auf alle Regionen des Grundstücks aus. </text> <text name="estate_text"> Grundstück: @@ -16,7 +16,7 @@ (unbekannt) </text> <text name="Only Allow"> - Zugang auf Einwohner beschränken, die überprüft wurden von: + Zugang nur dann, wenn überprüft mit: </text> <check_box label="Zahlungsinformation gespeichert" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen"/> <check_box label="Altersüberprüfung" name="limit_age_verified" tool_tip="Einwohner ohne Altersüberprüfung verbannen. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/> @@ -69,6 +69,6 @@ <button label="?" name="ban_resident_help"/> <button label="Hinzufügen..." name="add_banned_avatar_btn"/> <button label="Entfernen..." name="remove_banned_avatar_btn"/> - <button label="Nachricht an Grundstück senden..." name="message_estate_btn"/> - <button label="Benutzer von Grundstück werfen..." name="kick_user_from_estate_btn"/> + <button label="Nachricht an Grundstück" name="message_estate_btn"/> + <button label="Einwohner hinauswerfen" name="kick_user_from_estate_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index c9307a5d7d..e6b841671f 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -979,7 +979,7 @@ Gummi </string> <string name="Light"> - Licht + Hell </string> <string name="KBShift"> Umschalt-Taste @@ -2056,7 +2056,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ Kinn-Hals </string> <string name="Clear"> - Löschen + Transparent </string> <string name="Cleft"> Spalte @@ -2359,16 +2359,16 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ Farbe Innenseite </string> <string name="In Shdw Opacity"> - Deckkraft: innerer Lidschatten + Deckkraft: innen </string> <string name="Inner Eye Corner"> Ecke: Nasenseite </string> <string name="Inner Eye Shadow"> - Innerer Lidschatten + Innenlid </string> <string name="Inner Shadow"> - Innerer Lidschatten + Innenlid </string> <string name="Jacket Length"> Jackenlänge @@ -2761,10 +2761,10 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ Aus </string> <string name="Out Shdw Color"> - Farbe: Oberer Lidschatten + Farbe: Oben </string> <string name="Out Shdw Opacity"> - Deckkraft: Oberer Lidschatten + Deckkraft: Oben </string> <string name="Outer Eye Corner"> Äußerer Augenwinkel @@ -2935,7 +2935,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ Schuhart </string> <string name="Short"> - Sandale + Klein </string> <string name="Short Arms"> Kurze Arme @@ -3064,7 +3064,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ Nach vorne </string> <string name="Tall"> - Stiefel + Groß </string> <string name="Taper Back"> Ansatzbreite hinten diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml index b048eeceb6..fd10938539 100644 --- a/indra/newview/skins/default/xui/en/floater_customize.xml +++ b/indra/newview/skins/default/xui/en/floater_customize.xml @@ -286,7 +286,7 @@ height="23" layout="topleft" name="Item Action Label" - right="132" + right="90" width="100"> Shape: </text> @@ -307,7 +307,7 @@ label_selected="Save" layout="topleft" name="Save" - right="218" + right="190" top="477" width="82" /> <button @@ -319,7 +319,7 @@ name="Save As" top="477" right="304" - width="82" /> + width="110" /> </panel> <panel border="false" diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml index 0f098bbb52..65a05f3ec5 100644 --- a/indra/newview/skins/default/xui/en/floater_im_container.xml +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -22,7 +22,9 @@ tab_width="64" tab_max_width = "134" tab_height="16" - halign="center" + use_custom_icon_ctrl="true" + tab_icon_ctrl_pad="2" + halign="left" use_ellipses="true" top="0" width="390" /> diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 1ab3dda52c..01548dd820 100644 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -105,9 +105,11 @@ width="100"> <flyout_button.item label="Save" + name="save_item" value="save" /> <flyout_button.item label="Save As..." + name="saveas_item" value="save as" /> </flyout_button> <button diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index 903a9689f1..a8c72e03bd 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -51,11 +51,11 @@ follows="all" height="502" layout="topleft" - left="9" + left="10" top_pad="10" name="profile_scroll" reserve_scroll_corner="false" - width="310"> + width="312"> <panel name="scroll_content_panel" follows="left|top" @@ -63,18 +63,18 @@ layout="topleft" top="0" background_visible="false" - height="500" + height="610" left="0" width="285"> <texture_picker enabled="false" follows="left|top|right" height="197" + width="272" layout="topleft" left="11" name="classified_snapshot" - top="10" - width="286" /> + top="10" /> <text_editor allow_scroll="false" bg_visible="false" @@ -93,6 +93,17 @@ v_pad="0" value="[name]" use_ellipses="true" /> + <text + follows="left|top" + font.style="BOLD" + height="10" + layout="topleft" + left="10" + name="classified_location_label" + text_color="white" + top_pad="10" + value="Location:" + width="250" /> <text_editor allow_scroll="false" bg_visible="false" @@ -103,10 +114,22 @@ left="10" name="classified_location" read_only="true" + top_pad="5" width="290" word_wrap="true" v_pad="0" value="[loading...]" /> + <text + follows="left|top" + font.style="BOLD" + height="10" + layout="topleft" + left="10" + name="content_type_label" + text_color="white" + top_pad="10" + value="Content Type:" + width="250" /> <text_editor allow_scroll="false" bg_visible="false" @@ -118,9 +141,20 @@ name="content_type" read_only="true" width="290" - top_pad="5" + top_pad="15" v_pad="0" value="[content type]" /> + <text + follows="left|top" + font.style="BOLD" + height="10" + layout="topleft" + left="10" + name="category_label" + text_color="white" + top_pad="10" + value="Category:" + width="250" /> <text_editor allow_html="true" allow_scroll="false" @@ -136,6 +170,17 @@ top_pad="5" v_pad="0" value="[category]" /> + <text + follows="left|top" + font.style="BOLD" + height="10" + layout="topleft" + left="10" + name="price_for_listing_label" + text_color="white" + top_pad="10" + value="Price for listing:" + width="250" /> <text_editor allow_scroll="false" bg_visible="false" @@ -150,33 +195,80 @@ top_pad="5" tool_tip="Price for listing." v_pad="0" + value="[price]" width="105" /> + <layout_stack + animate="false" + name="descr_stack" + layout="topleft" + follows="top|left" + orientation="vertical" + left="10" + top_pad="5" + width="290" + height="250"> + <layout_panel + auto_resize="false" + name="price_layout_panel" + layout="topleft" + follows="top|left" + left="0" + top="0" + width="290" + height="26" + user_resize="false"> <check_box enabled="false" height="16" label="Auto renew each week" layout="topleft" - left="10" + follows="top|left" + left="0" name="auto_renew" - top_pad="5" + top="0" v_pad="0" width="290" /> + </layout_panel> + <layout_panel + name="descr_layout_panel" + layout="topleft" + follows="top|left" + left="0" + top="0" + width="290" + height="215" + user_resize="false"> + <text + auto_resize="false" + follows="left|top" + font.style="BOLD" + height="10" + layout="topleft" + left="0" + name="classified_desc_label" + text_color="white" + top="0" + value="Description:" + width="250" /> <text_editor allow_html="true" - allow_scroll="false" + allow_scroll="true" bg_visible="false" follows="left|top|right" h_pad="0" height="200" layout="topleft" - left="10" + left="0" max_length="1023" name="classified_desc" read_only="true" + top_pad="5" width="290" v_pad="0" value="[description]" word_wrap="true" /> + </layout_panel> + </layout_stack> </panel> </scroll_container> <panel diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml index 66d5389d9b..6cc6c51fe0 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -42,16 +42,16 @@ Edit Classified </text> <scroll_container - color="DkGray2" - follows="all" - height="502" - layout="topleft" - left="8" - top_pad="10" - name="profile_scroll" - reserve_scroll_corner="false" - opaque="true" - width="312"> + color="DkGray2" + follows="all" + height="502" + layout="topleft" + left="8" + top_pad="10" + name="profile_scroll" + reserve_scroll_corner="false" + opaque="true" + width="312"> <panel name="scroll_content_panel" follows="left|top" @@ -59,17 +59,17 @@ layout="topleft" top="0" background_visible="false" - height="610" + height="690" left="0" width="285"> - <texture_picker - follows="left|top|right" - height="197" - width="272" - layout="topleft" - top="10" - left="11" - name="classified_snapshot" /> + <texture_picker + follows="left|top|right" + height="197" + width="272" + layout="topleft" + top="10" + left="11" + name="classified_snapshot" /> <icon height="197" image_name="spacer24.tga" @@ -153,7 +153,7 @@ type="string" length="1" follows="left|top" - height="50" + height="30" layout="topleft" left="10" name="classified_location" @@ -172,6 +172,17 @@ top_pad="5" name="set_to_curr_location_btn" width="156" /> + <text + follows="left|top" + font.style="BOLD" + height="10" + layout="topleft" + left="10" + name="category_label" + text_color="white" + top_pad="15" + value="Category:" + width="250" /> <combo_box follows="left|top" height="23" @@ -180,6 +191,17 @@ name="category" top_pad="5" width="156" /> + <text + follows="left|top" + font.style="BOLD" + height="10" + layout="topleft" + left="10" + name="content_type_label" + text_color="white" + top_pad="15" + value="Content type:" + width="250" /> <combo_box allow_text_entry="false" follows="left|top" @@ -199,6 +221,17 @@ General Content </combo_item> </combo_box> + <text + follows="left|top" + font.style="BOLD" + height="10" + layout="topleft" + left="10" + name="price_for_listing_label" + text_color="white" + top_pad="15" + value="Price for listing:" + width="250" /> <spinner decimal_digits="0" follows="left|top" @@ -223,9 +256,9 @@ layout="topleft" left="10" name="auto_renew" - top_pad="5" + top_pad="15" width="250" /> - </panel> + </panel> </scroll_container> <panel follows="left|right|bottom" 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 4e57b428bd..5147bb72d0 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 @@ -100,17 +100,8 @@ background_visible="true" expanded="true" layout="topleft" name="group_general_tab" - title="General"> - <scroll_container - color="DkGray2" - follows="all" - layout="topleft" - left="0" - name="profile_scroll" - opaque="true" - height="604" - width="304" - top="0"> + title="General" + fit_panel="false"> <panel border="false" class="panel_group_general" @@ -121,24 +112,13 @@ background_visible="true" help_topic="group_general_tab" name="group_general_tab_panel" top="0" /> - </scroll_container> </accordion_tab> <accordion_tab expanded="false" layout="topleft" name="group_roles_tab" - title="Roles"> - <scroll_container - color="DkGray2" - follows="all" - layout="topleft" - left="0" - name="profile_scroll" - opaque="true" - height="680" - width="304" - top="0"> - + title="Roles" + fit_panel="false"> <panel border="false" class="panel_group_roles" @@ -148,24 +128,13 @@ background_visible="true" left="0" name="group_roles_tab_panel" top="0" /> - </scroll_container> </accordion_tab> <accordion_tab expanded="false" layout="topleft" name="group_notices_tab" - title="Notices"> - <scroll_container - color="DkGray2" - follows="all" - layout="topleft" - left="0" - name="profile_scroll" - opaque="true" - height="530" - width="304" - top="0"> - + title="Notices" + fit_panel="false"> <panel border="false" class="panel_group_notices" @@ -176,24 +145,13 @@ background_visible="true" help_topic="group_notices_tab" name="group_notices_tab_panel" top="0" /> - </scroll_container> </accordion_tab> <accordion_tab expanded="false" layout="topleft" name="group_land_tab" - title="Land/Assets"> - <scroll_container - color="DkGray2" - follows="all" - layout="topleft" - left="0" - name="profile_scroll" - opaque="true" - height="500" - width="304" - top="0"> - + title="Land/Assets" + fit_panel="false"> <panel border="false" class="panel_group_land_money" @@ -203,7 +161,6 @@ background_visible="true" left="0" name="group_land_tab_panel" top="0" /> - </scroll_container> </accordion_tab> </accordion> </layout_panel> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index 05a3771edf..4be4d6b432 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -171,6 +171,7 @@ Automatic position for: height="50" layout="topleft" left_pad="10" + top="190" name="background" tool_tip="Choose color for bubble chat" width="38"> diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml index 3980eb86d3..d336e18011 100644 --- a/indra/newview/skins/default/xui/en/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml @@ -59,7 +59,7 @@ left_delta="0" name="owner_text" top_pad="2" - width="80"> + width="180"> Estate owner: </text> <text diff --git a/indra/newview/skins/default/xui/en/teleport_strings.xml b/indra/newview/skins/default/xui/en/teleport_strings.xml index e8f6b1319a..bae821d3b5 100644 --- a/indra/newview/skins/default/xui/en/teleport_strings.xml +++ b/indra/newview/skins/default/xui/en/teleport_strings.xml @@ -61,6 +61,9 @@ Try again in a moment. <message name="completing"> Completing teleport. </message> + <message name="completed_from"> + Teleport completed from [T_SLURL] + </message> <message name="resolving"> Resolving destination. </message> diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml index 63f08a4250..413ca1d1ef 100644 --- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml +++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml @@ -24,7 +24,7 @@ follows="left|top|bottom" height="20" left="2" - mouse_opaque="true" + mouse_opaque="false" name="adhoc_icon" width="21" /> <chiclet_im_adhoc.unread_notifications diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml index 3c789574a4..ecea368c54 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml @@ -17,8 +17,8 @@ <text name="text_box2"> kbps </text> - <check_box label="Port de connexion personnalisé" name="connection_port_enabled"/> - <spinner label="Numéro de port :" name="connection_port"/> + <check_box label="Port de connexion" name="connection_port_enabled"/> + <spinner label="Numéro :" name="connection_port"/> <text name="cache_size_label_l"> Taille de la mémoire </text> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 3e9be493ff..76b702e581 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -1900,7 +1900,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 後ろ髪の毛先 </string> <string name="Baggy"> - たるんでいる + たるんだ下まぶた </string> <string name="Bangs"> 前髪 @@ -1990,7 +1990,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 広 </string> <string name="Brow Size"> - 眉毛の大きさ + 眉毛上の隆起 </string> <string name="Bug Eyes"> Bug Eyes @@ -2023,7 +2023,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 膨らみ大 </string> <string name="Chaplin"> - Chaplin + チャップリン </string> <string name="Cheek Bones"> ほお骨 @@ -2044,7 +2044,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ あごの長さ </string> <string name="Chin Heavy"> - あごに重点 + あごを強調 </string> <string name="Chin In"> ひいたあご @@ -2236,7 +2236,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ ひたいの角度 </string> <string name="Forehead Heavy"> - ひたいに重点 + ひたいを強調 </string> <string name="Freckles"> しみ・そばかす @@ -2386,7 +2386,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ あごの形 </string> <string name="Join"> - 寄せた + 寄せた胸 </string> <string name="Jowls"> えら @@ -2491,7 +2491,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 口紅の色 </string> <string name="Long"> - 長 + ロング </string> <string name="Long Head"> 前後幅が広い頭 @@ -2887,7 +2887,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 骨張った脚 </string> <string name="Separate"> - 離れた + 離れた胸 </string> <string name="Shallow"> なだらか @@ -2935,7 +2935,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 靴の長さ </string> <string name="Short"> - 短 + ショート </string> <string name="Short Arms"> 短 @@ -3049,7 +3049,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 縦長 </string> <string name="Sunken"> - こけた + こけたほお </string> <string name="Sunken Chest"> 小 @@ -3064,7 +3064,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 前へ </string> <string name="Tall"> - 高 + トール </string> <string name="Taper Back"> 後ろに先細 @@ -3160,7 +3160,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ ウエストの高さ </string> <string name="Well-Fed"> - つまった + つまったほお </string> <string name="White Hair"> 白髪 @@ -3181,7 +3181,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ ワイルド </string> <string name="Wrinkles"> - しわあり + しわ </string> <string name="LocationCtrlAddLandmarkTooltip"> マイ ランドマークに追加 |