Manual merge from default branch
Resolved conflicts in llpaneloutfitedit.cpp --HG-- branch : product-enginemaster
commit
ba1123e3e4
|
|
@ -517,6 +517,7 @@ Ringo Tuxing
|
|||
Robin Cornelius
|
||||
SNOW-108
|
||||
SNOW-204
|
||||
SNOW-484
|
||||
VWR-2488
|
||||
VWR-9557
|
||||
VWR-11128
|
||||
|
|
|
|||
|
|
@ -1248,6 +1248,12 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if(mJointMotionList->mEmoteName==mID.asString())
|
||||
{
|
||||
llwarns << "Malformed animation mEmoteName==mID" << llendl;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// get loop
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -40,8 +40,6 @@
|
|||
#include "llfocusmgr.h"
|
||||
#include "lllocalcliprect.h"
|
||||
|
||||
#include "lltrans.h"
|
||||
|
||||
#include "boost/bind.hpp"
|
||||
|
||||
static const S32 DRAGGER_BAR_MARGIN = 4;
|
||||
|
|
@ -74,7 +72,6 @@ LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)
|
|||
{
|
||||
initNoTabsWidget(params.no_matched_tabs_text);
|
||||
|
||||
mNoVisibleTabsOrigString = LLTrans::getString(params.no_visible_tabs_text.initial_value().asString());
|
||||
mSingleExpansion = params.single_expansion;
|
||||
if(mFitParent && !mSingleExpansion)
|
||||
{
|
||||
|
|
@ -389,7 +386,7 @@ void LLAccordionCtrl::initNoTabsWidget(const LLTextBox::Params& tb_params)
|
|||
{
|
||||
LLTextBox::Params tp = tb_params;
|
||||
tp.rect(getLocalRect());
|
||||
mNoMatchedTabsOrigString = LLTrans::getString(tp.initial_value().asString());
|
||||
mNoMatchedTabsOrigString = tp.initial_value().asString();
|
||||
mNoVisibleTabsHelpText = LLUICtrlFactory::create<LLTextBox>(tp, this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
/**
|
||||
* @file llbutton.cpp
|
||||
* @brief LLButton base class
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ bool LLFlatListView::insertItemAfter(LLPanel* after_item, LLPanel* item_to_add,
|
|||
}
|
||||
|
||||
|
||||
bool LLFlatListView::removeItem(LLPanel* item)
|
||||
bool LLFlatListView::removeItem(LLPanel* item, bool rearrange)
|
||||
{
|
||||
if (!item) return false;
|
||||
if (item->getParent() != mItemsPanel) return false;
|
||||
|
|
@ -165,22 +165,22 @@ bool LLFlatListView::removeItem(LLPanel* item)
|
|||
item_pair_t* item_pair = getItemPair(item);
|
||||
if (!item_pair) return false;
|
||||
|
||||
return removeItemPair(item_pair);
|
||||
return removeItemPair(item_pair, rearrange);
|
||||
}
|
||||
|
||||
bool LLFlatListView::removeItemByValue(const LLSD& value)
|
||||
bool LLFlatListView::removeItemByValue(const LLSD& value, bool rearrange)
|
||||
{
|
||||
if (value.isUndefined()) return false;
|
||||
|
||||
item_pair_t* item_pair = getItemPair(value);
|
||||
if (!item_pair) return false;
|
||||
|
||||
return removeItemPair(item_pair);
|
||||
return removeItemPair(item_pair, rearrange);
|
||||
}
|
||||
|
||||
bool LLFlatListView::removeItemByUUID(const LLUUID& uuid)
|
||||
bool LLFlatListView::removeItemByUUID(const LLUUID& uuid, bool rearrange)
|
||||
{
|
||||
return removeItemByValue(LLSD(uuid));
|
||||
return removeItemByValue(LLSD(uuid), rearrange);
|
||||
}
|
||||
|
||||
LLPanel* LLFlatListView::getItemByValue(const LLSD& value) const
|
||||
|
|
@ -327,6 +327,9 @@ U32 LLFlatListView::size(const bool only_visible_items) const
|
|||
|
||||
void LLFlatListView::clear()
|
||||
{
|
||||
// This will clear mSelectedItemPairs, calling all appropriate callbacks.
|
||||
resetSelection();
|
||||
|
||||
// do not use LLView::deleteAllChildren to avoid removing nonvisible items. drag-n-drop for ex.
|
||||
for (pairs_iterator_t it = mItemPairs.begin(); it != mItemPairs.end(); ++it)
|
||||
{
|
||||
|
|
@ -335,7 +338,6 @@ void LLFlatListView::clear()
|
|||
delete *it;
|
||||
}
|
||||
mItemPairs.clear();
|
||||
mSelectedItemPairs.clear();
|
||||
|
||||
// also set items panel height to zero. Reshape it to allow reshaping of non-item children
|
||||
LLRect rc = mItemsPanel->getRect();
|
||||
|
|
@ -982,11 +984,12 @@ bool LLFlatListView::isSelected(item_pair_t* item_pair) const
|
|||
return std::find(mSelectedItemPairs.begin(), it_end, item_pair) != it_end;
|
||||
}
|
||||
|
||||
bool LLFlatListView::removeItemPair(item_pair_t* item_pair)
|
||||
bool LLFlatListView::removeItemPair(item_pair_t* item_pair, bool rearrange)
|
||||
{
|
||||
llassert(item_pair);
|
||||
|
||||
bool deleted = false;
|
||||
bool selection_changed = false;
|
||||
for (pairs_iterator_t it = mItemPairs.begin(); it != mItemPairs.end(); ++it)
|
||||
{
|
||||
item_pair_t* _item_pair = *it;
|
||||
|
|
@ -1006,6 +1009,7 @@ bool LLFlatListView::removeItemPair(item_pair_t* item_pair)
|
|||
if (selected_item_pair == item_pair)
|
||||
{
|
||||
it = mSelectedItemPairs.erase(it);
|
||||
selection_changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1014,8 +1018,16 @@ bool LLFlatListView::removeItemPair(item_pair_t* item_pair)
|
|||
item_pair->first->die();
|
||||
delete item_pair;
|
||||
|
||||
if (rearrange)
|
||||
{
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
}
|
||||
|
||||
if (selection_changed && mCommitOnSelectionChange)
|
||||
{
|
||||
onCommit();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1111,7 +1123,7 @@ void LLFlatListView::onFocusReceived()
|
|||
{
|
||||
if (size())
|
||||
{
|
||||
mSelectedItemsBorder->setVisible(TRUE);
|
||||
mSelectedItemsBorder->setVisible(TRUE);
|
||||
}
|
||||
gEditMenuHandler = this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,6 +117,9 @@ public:
|
|||
Params();
|
||||
};
|
||||
|
||||
// disable traversal when finding widget to hand focus off to
|
||||
/*virtual*/ BOOL canFocusChildren() const { return FALSE; }
|
||||
|
||||
/**
|
||||
* Connects callback to signal called when Return key is pressed.
|
||||
*/
|
||||
|
|
@ -149,19 +152,19 @@ public:
|
|||
* Remove specified item
|
||||
* @return true if the item was removed, false otherwise
|
||||
*/
|
||||
virtual bool removeItem(LLPanel* item);
|
||||
virtual bool removeItem(LLPanel* item, bool rearrange = true);
|
||||
|
||||
/**
|
||||
* Remove an item specified by value
|
||||
* @return true if the item was removed, false otherwise
|
||||
*/
|
||||
virtual bool removeItemByValue(const LLSD& value);
|
||||
virtual bool removeItemByValue(const LLSD& value, bool rearrange = true);
|
||||
|
||||
/**
|
||||
* Remove an item specified by uuid
|
||||
* @return true if the item was removed, false otherwise
|
||||
*/
|
||||
virtual bool removeItemByUUID(const LLUUID& uuid);
|
||||
virtual bool removeItemByUUID(const LLUUID& uuid, bool rearrange = true);
|
||||
|
||||
/**
|
||||
* Get an item by value
|
||||
|
|
@ -262,6 +265,7 @@ public:
|
|||
void setAllowSelection(bool can_select) { mAllowSelection = can_select; }
|
||||
|
||||
/** Sets flag whether onCommit should be fired if selection was changed */
|
||||
// FIXME: this should really be a separate signal, since "Commit" implies explicit user action, and selection changes can happen more indirectly.
|
||||
void setCommitOnSelectionChange(bool b) { mCommitOnSelectionChange = b; }
|
||||
|
||||
/** Get number of selected items in the list */
|
||||
|
|
@ -350,7 +354,7 @@ protected:
|
|||
|
||||
virtual bool isSelected(item_pair_t* item_pair) const;
|
||||
|
||||
virtual bool removeItemPair(item_pair_t* item_pair);
|
||||
virtual bool removeItemPair(item_pair_t* item_pair, bool rearrange);
|
||||
|
||||
/**
|
||||
* Notify parent about changed size of internal controls with "size_changes" action
|
||||
|
|
|
|||
|
|
@ -66,7 +66,10 @@ bool LLTextBase::compare_segment_end::operator()(const LLTextSegmentPtr& a, cons
|
|||
{
|
||||
return a->getStart() < b->getStart();
|
||||
}
|
||||
return a->getEnd() < b->getEnd();
|
||||
else
|
||||
{
|
||||
return a->getEnd() < b->getEnd();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -174,7 +177,7 @@ LLTextBase::Params::Params()
|
|||
|
||||
LLTextBase::LLTextBase(const LLTextBase::Params &p)
|
||||
: LLUICtrl(p, LLTextViewModelPtr(new LLTextViewModel)),
|
||||
mURLClickSignal(),
|
||||
mURLClickSignal(NULL),
|
||||
mMaxTextByteLength( p.max_text_length ),
|
||||
mDefaultFont(p.font),
|
||||
mFontShadow(p.font_shadow),
|
||||
|
|
@ -209,7 +212,8 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
|
|||
mParseHTML(p.allow_html),
|
||||
mParseHighlights(p.parse_highlights),
|
||||
mBGVisible(p.bg_visible),
|
||||
mScroller(NULL)
|
||||
mScroller(NULL),
|
||||
mStyleDirty(true)
|
||||
{
|
||||
if(p.allow_scroll)
|
||||
{
|
||||
|
|
@ -248,9 +252,8 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
|
|||
|
||||
LLTextBase::~LLTextBase()
|
||||
{
|
||||
// Menu, like any other LLUICtrl, is deleted by its parent - gMenuHolder
|
||||
|
||||
mSegments.clear();
|
||||
delete mURLClickSignal;
|
||||
}
|
||||
|
||||
void LLTextBase::initFromParams(const LLTextBase::Params& p)
|
||||
|
|
@ -296,13 +299,18 @@ bool LLTextBase::truncate()
|
|||
return did_truncate;
|
||||
}
|
||||
|
||||
LLStyle::Params LLTextBase::getDefaultStyleParams()
|
||||
const LLStyle::Params& LLTextBase::getDefaultStyleParams()
|
||||
{
|
||||
return LLStyle::Params()
|
||||
.color(LLUIColor(&mFgColor))
|
||||
.readonly_color(LLUIColor(&mReadOnlyFgColor))
|
||||
.font(mDefaultFont)
|
||||
.drop_shadow(mFontShadow);
|
||||
if (mStyleDirty)
|
||||
{
|
||||
mDefaultStyle
|
||||
.color(LLUIColor(&mFgColor))
|
||||
.readonly_color(LLUIColor(&mReadOnlyFgColor))
|
||||
.font(mDefaultFont)
|
||||
.drop_shadow(mFontShadow);
|
||||
mStyleDirty = false;
|
||||
}
|
||||
return mDefaultStyle;
|
||||
}
|
||||
|
||||
void LLTextBase::onValueChange(S32 start, S32 end)
|
||||
|
|
@ -861,11 +869,12 @@ BOOL LLTextBase::handleMouseUp(S32 x, S32 y, MASK mask)
|
|||
if (cur_segment && cur_segment->handleMouseUp(x, y, mask))
|
||||
{
|
||||
// Did we just click on a link?
|
||||
if (cur_segment->getStyle()
|
||||
if (mURLClickSignal
|
||||
&& cur_segment->getStyle()
|
||||
&& cur_segment->getStyle()->isLink())
|
||||
{
|
||||
// *TODO: send URL here?
|
||||
mURLClickSignal(this, LLSD() );
|
||||
(*mURLClickSignal)(this, LLSD() );
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -1039,12 +1048,14 @@ void LLTextBase::draw()
|
|||
void LLTextBase::setColor( const LLColor4& c )
|
||||
{
|
||||
mFgColor = c;
|
||||
mStyleDirty = true;
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLTextBase::setReadOnlyColor(const LLColor4 &c)
|
||||
{
|
||||
mReadOnlyFgColor = c;
|
||||
mStyleDirty = true;
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
@ -1488,12 +1499,22 @@ void LLTextBase::getSegmentAndOffset( S32 startpos, segment_set_t::iterator* seg
|
|||
|
||||
LLTextBase::segment_set_t::iterator LLTextBase::getSegIterContaining(S32 index)
|
||||
{
|
||||
if (index > getLength()) { return mSegments.end(); }
|
||||
|
||||
// when there are no segments, we return the end iterator, which must be checked by caller
|
||||
if (mSegments.size() <= 1) { return mSegments.begin(); }
|
||||
|
||||
segment_set_t::iterator it = mSegments.upper_bound(new LLIndexSegment(index));
|
||||
return it;
|
||||
}
|
||||
|
||||
LLTextBase::segment_set_t::const_iterator LLTextBase::getSegIterContaining(S32 index) const
|
||||
{
|
||||
if (index > getLength()) { return mSegments.end(); }
|
||||
|
||||
// when there are no segments, we return the end iterator, which must be checked by caller
|
||||
if (mSegments.size() <= 1) { return mSegments.begin(); }
|
||||
|
||||
LLTextBase::segment_set_t::const_iterator it = mSegments.upper_bound(new LLIndexSegment(index));
|
||||
return it;
|
||||
}
|
||||
|
|
@ -2324,6 +2345,15 @@ LLRect LLTextBase::getVisibleDocumentRect() const
|
|||
}
|
||||
}
|
||||
|
||||
boost::signals2::connection LLTextBase::setURLClickedCallback(const commit_signal_t::slot_type& cb)
|
||||
{
|
||||
if (!mURLClickSignal)
|
||||
{
|
||||
mURLClickSignal = new commit_signal_t();
|
||||
}
|
||||
return mURLClickSignal->connect(cb);
|
||||
}
|
||||
|
||||
//
|
||||
// LLTextSegment
|
||||
//
|
||||
|
|
|
|||
|
|
@ -361,10 +361,7 @@ public:
|
|||
virtual void appendLineBreakSegment(const LLStyle::Params& style_params);
|
||||
virtual void appendImageSegment(const LLStyle::Params& style_params);
|
||||
virtual void appendWidget(const LLInlineViewSegment::Params& params, const std::string& text, bool allow_undo);
|
||||
|
||||
public:
|
||||
// Fired when a URL link is clicked
|
||||
commit_signal_t mURLClickSignal;
|
||||
boost::signals2::connection setURLClickedCallback(const commit_signal_t::slot_type& cb);
|
||||
|
||||
protected:
|
||||
// helper structs
|
||||
|
|
@ -457,7 +454,7 @@ protected:
|
|||
void createDefaultSegment();
|
||||
virtual void updateSegments();
|
||||
void insertSegment(LLTextSegmentPtr segment_to_insert);
|
||||
LLStyle::Params getDefaultStyleParams();
|
||||
const LLStyle::Params& getDefaultStyleParams();
|
||||
|
||||
// manage lines
|
||||
S32 getLineStart( S32 line ) const;
|
||||
|
|
@ -497,6 +494,12 @@ protected:
|
|||
LLRect mVisibleTextRect; // The rect in which text is drawn. Excludes borders.
|
||||
LLRect mTextBoundingRect;
|
||||
|
||||
// default text style
|
||||
LLStyle::Params mDefaultStyle;
|
||||
bool mStyleDirty;
|
||||
const LLFontGL* const mDefaultFont; // font that is used when none specified, can only be set by constructor
|
||||
const LLFontGL::ShadowType mFontShadow; // shadow style, can only be set by constructor
|
||||
|
||||
// colors
|
||||
LLUIColor mCursorColor;
|
||||
LLUIColor mFgColor;
|
||||
|
|
@ -523,8 +526,6 @@ protected:
|
|||
LLFontGL::VAlign mVAlign;
|
||||
F32 mLineSpacingMult; // multiple of line height used as space for a single line of text (e.g. 1.5 to get 50% padding)
|
||||
S32 mLineSpacingPixels; // padding between lines
|
||||
const LLFontGL* mDefaultFont; // font that is used when none specified
|
||||
LLFontGL::ShadowType mFontShadow;
|
||||
bool mBorderVisible;
|
||||
bool mParseHTML; // make URLs interactive
|
||||
bool mParseHighlights; // highlight user-defined keywords
|
||||
|
|
@ -547,6 +548,9 @@ protected:
|
|||
bool mScrollNeeded; // need to change scroll region because of change to cursor position
|
||||
S32 mScrollIndex; // index of first character to keep visible in scroll region
|
||||
|
||||
// Fired when a URL link is clicked
|
||||
commit_signal_t* mURLClickSignal;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -264,8 +264,6 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
|
|||
mContextMenu(NULL),
|
||||
mShowContextMenu(p.show_context_menu)
|
||||
{
|
||||
mDefaultFont = p.font;
|
||||
|
||||
mSourceID.generate();
|
||||
|
||||
//FIXME: use image?
|
||||
|
|
|
|||
|
|
@ -675,7 +675,7 @@ BOOL LLUICtrl::getIsChrome() const
|
|||
class CompareByDefaultTabGroup: public LLCompareByTabOrder
|
||||
{
|
||||
public:
|
||||
CompareByDefaultTabGroup(LLView::child_tab_order_t order, S32 default_tab_group):
|
||||
CompareByDefaultTabGroup(const LLView::child_tab_order_t& order, S32 default_tab_group):
|
||||
LLCompareByTabOrder(order),
|
||||
mDefaultTabGroup(default_tab_group) {}
|
||||
private:
|
||||
|
|
@ -699,13 +699,16 @@ class LLUICtrl::DefaultTabGroupFirstSorter : public LLQuerySorter, public LLSing
|
|||
{
|
||||
public:
|
||||
/*virtual*/ void operator() (LLView * parent, viewList_t &children) const
|
||||
{
|
||||
{
|
||||
children.sort(CompareByDefaultTabGroup(parent->getCtrlOrder(), parent->getDefaultTabGroup()));
|
||||
}
|
||||
};
|
||||
|
||||
LLFastTimer::DeclareTimer FTM_FOCUS_FIRST_ITEM("Focus First Item");
|
||||
|
||||
BOOL LLUICtrl::focusFirstItem(BOOL prefer_text_fields, BOOL focus_flash)
|
||||
{
|
||||
LLFastTimer _(FTM_FOCUS_FIRST_ITEM);
|
||||
// try to select default tab group child
|
||||
LLCtrlQuery query = getTabOrderQuery();
|
||||
// sort things such that the default tab group is at the front
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ public:
|
|||
void popFactoryFunctions();
|
||||
|
||||
template<typename T>
|
||||
static T* createWidget(typename T::Params& params, LLView* parent = NULL)
|
||||
static T* createWidget(const typename T::Params& params, LLView* parent = NULL)
|
||||
{
|
||||
T* widget = NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -135,9 +135,16 @@ void LLUIString::updateResult() const
|
|||
mResult = mOrig;
|
||||
|
||||
// get the defailt args + local args
|
||||
LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
|
||||
combined_args.insert(mArgs.begin(), mArgs.end());
|
||||
LLStringUtil::format(mResult, combined_args);
|
||||
if (mArgs.empty())
|
||||
{
|
||||
LLStringUtil::format(mResult, LLTrans::getDefaultArgs());
|
||||
}
|
||||
else
|
||||
{
|
||||
LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
|
||||
combined_args.insert(mArgs.begin(), mArgs.end());
|
||||
LLStringUtil::format(mResult, combined_args);
|
||||
}
|
||||
}
|
||||
|
||||
void LLUIString::updateWResult() const
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ public:
|
|||
|
||||
virtual BOOL postBuild() { return TRUE; }
|
||||
|
||||
child_tab_order_t getCtrlOrder() const { return mCtrlOrder; }
|
||||
const child_tab_order_t& getCtrlOrder() const { return mCtrlOrder; }
|
||||
ctrl_list_t getCtrlList() const;
|
||||
ctrl_list_t getCtrlListSorted() const;
|
||||
|
||||
|
|
@ -620,12 +620,13 @@ public:
|
|||
class LLCompareByTabOrder
|
||||
{
|
||||
public:
|
||||
LLCompareByTabOrder(LLView::child_tab_order_t order) : mTabOrder(order) {}
|
||||
LLCompareByTabOrder(const LLView::child_tab_order_t& order) : mTabOrder(order) {}
|
||||
virtual ~LLCompareByTabOrder() {}
|
||||
bool operator() (const LLView* const a, const LLView* const b) const;
|
||||
private:
|
||||
virtual bool compareTabOrders(const LLView::tab_order_t & a, const LLView::tab_order_t & b) const { return a < b; }
|
||||
LLView::child_tab_order_t mTabOrder;
|
||||
// ok to store a reference, as this should only be allocated on stack during view query operations
|
||||
const LLView::child_tab_order_t& mTabOrder;
|
||||
};
|
||||
|
||||
template <class T> T* LLView::getChild(const std::string& name, BOOL recurse) const
|
||||
|
|
|
|||
|
|
@ -95,8 +95,8 @@ viewList_t LLViewQuery::run(LLView* view) const
|
|||
if (pre.first)
|
||||
{
|
||||
post = runFilters(view, filtered_children, mPostFilters);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(pre.first && post.first)
|
||||
{
|
||||
|
|
@ -119,12 +119,12 @@ void LLViewQuery::filterChildren(LLView * view, viewList_t & filtered_children)
|
|||
(*mSorterp)(view, views); // sort the children per the sorter
|
||||
}
|
||||
for(LLView::child_list_iter_t iter = views.begin();
|
||||
iter != views.end();
|
||||
iter++)
|
||||
{
|
||||
viewList_t indiv_children = this->run(*iter);
|
||||
filtered_children.insert(filtered_children.end(), indiv_children.begin(), indiv_children.end());
|
||||
}
|
||||
iter != views.end();
|
||||
iter++)
|
||||
{
|
||||
viewList_t indiv_children = this->run(*iter);
|
||||
filtered_children.splice(filtered_children.end(), indiv_children);
|
||||
}
|
||||
}
|
||||
|
||||
filterResult_t LLViewQuery::runFilters(LLView * view, const viewList_t children, const filterList_t filters) const
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ public:
|
|||
viewList_t operator () (LLView * view) const { return run(view); }
|
||||
|
||||
// override this method to provide iteration over other types of children
|
||||
virtual void filterChildren(LLView * view, viewList_t & filtered_children) const;
|
||||
virtual void filterChildren(LLView * view, viewList_t& filtered_children) const;
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
|||
|
|
@ -11935,5 +11935,16 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>TipToastMessageLineCount</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Max line count of text message on tip toast.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>10</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public:
|
|||
|
||||
virtual ~LLOrderMyOutfitsOnDestroy()
|
||||
{
|
||||
if (LLApp::isExiting())
|
||||
if (!LLApp::isRunning())
|
||||
{
|
||||
llwarns << "called during shutdown, skipping" << llendl;
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -995,7 +995,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up
|
|||
{
|
||||
removeCOFItemLinks(gAgentWearables.getWearableItemID(item_to_wear->getWearableType(), wearable_count-1), false);
|
||||
}
|
||||
addCOFItemLink(item_to_wear, do_update);
|
||||
addCOFItemLink(item_to_wear, do_update, cb);
|
||||
}
|
||||
break;
|
||||
case LLAssetType::AT_BODYPART:
|
||||
|
|
@ -2179,17 +2179,19 @@ void LLAppearanceMgr::updateIsDirty()
|
|||
}
|
||||
else
|
||||
{
|
||||
LLIsOfAssetType collector = LLIsOfAssetType(LLAssetType::AT_LINK);
|
||||
|
||||
LLInventoryModel::cat_array_t cof_cats;
|
||||
LLInventoryModel::item_array_t cof_items;
|
||||
gInventory.collectDescendents(cof, cof_cats, cof_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH);
|
||||
gInventory.collectDescendentsIf(cof, cof_cats, cof_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH, collector);
|
||||
|
||||
LLInventoryModel::cat_array_t outfit_cats;
|
||||
LLInventoryModel::item_array_t outfit_items;
|
||||
gInventory.collectDescendents(base_outfit, outfit_cats, outfit_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH);
|
||||
gInventory.collectDescendentsIf(base_outfit, outfit_cats, outfit_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH, collector);
|
||||
|
||||
if(outfit_items.count() != cof_items.count() -1)
|
||||
if(outfit_items.count() != cof_items.count())
|
||||
{
|
||||
// Current outfit folder should have one more item than the outfit folder.
|
||||
// this one item is the link back to the outfit folder itself.
|
||||
|
|
@ -2197,16 +2199,6 @@ void LLAppearanceMgr::updateIsDirty()
|
|||
return;
|
||||
}
|
||||
|
||||
//getting rid of base outfit folder link to simplify comparison
|
||||
for (LLInventoryModel::item_array_t::iterator it = cof_items.begin(); it != cof_items.end(); ++it)
|
||||
{
|
||||
if (*it == base_outfit_item)
|
||||
{
|
||||
cof_items.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//"dirty" - also means a difference in linked UUIDs and/or a difference in wearables order (links' descriptions)
|
||||
std::sort(cof_items.begin(), cof_items.end(), sort_by_linked_uuid);
|
||||
std::sort(outfit_items.begin(), outfit_items.end(), sort_by_linked_uuid);
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ void LLAvatarList::setDirty(bool val /*= true*/, bool force_refresh /*= false*/)
|
|||
void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name)
|
||||
{
|
||||
LL_DEBUGS("Avaline") << "Adding avaline item into the list: " << item_name << "|" << item_id << ", session: " << session_id << LL_ENDL;
|
||||
LLAvalineListItem* item = new LLAvalineListItem;
|
||||
LLAvalineListItem* item = new LLAvalineListItem(/*hide_number=*/false);
|
||||
item->setAvatarId(item_id, session_id, true, false);
|
||||
item->setName(item_name);
|
||||
|
||||
|
|
|
|||
|
|
@ -1886,7 +1886,7 @@ void LLScriptChiclet::onMenuItemClicked(const LLSD& user_data)
|
|||
|
||||
if("end" == action)
|
||||
{
|
||||
LLScriptFloaterManager::instance().onRemoveNotification(getSessionId());
|
||||
LLScriptFloaterManager::instance().removeNotification(getSessionId());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1969,7 +1969,7 @@ void LLInvOfferChiclet::onMenuItemClicked(const LLSD& user_data)
|
|||
|
||||
if("end" == action)
|
||||
{
|
||||
LLScriptFloaterManager::instance().onRemoveNotification(getSessionId());
|
||||
LLScriptFloaterManager::instance().removeNotification(getSessionId());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -283,7 +283,8 @@ LLCOFWearables::LLCOFWearables() : LLPanel(),
|
|||
mClothingTab(NULL),
|
||||
mAttachmentsTab(NULL),
|
||||
mBodyPartsTab(NULL),
|
||||
mLastSelectedTab(NULL)
|
||||
mLastSelectedTab(NULL),
|
||||
mCOFVersion(-1)
|
||||
{
|
||||
mClothingMenu = new CofClothingContextMenu(this);
|
||||
mAttachmentMenu = new CofAttachmentContextMenu(this);
|
||||
|
|
@ -378,6 +379,23 @@ void LLCOFWearables::onAccordionTabStateChanged(LLUICtrl* ctrl, const LLSD& expa
|
|||
|
||||
void LLCOFWearables::refresh()
|
||||
{
|
||||
const LLUUID cof_id = LLAppearanceMgr::instance().getCOF();
|
||||
if (cof_id.isNull())
|
||||
{
|
||||
llwarns << "COF ID cannot be NULL" << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
LLViewerInventoryCategory* catp = gInventory.getCategory(cof_id);
|
||||
if (!catp)
|
||||
{
|
||||
llwarns << "COF category cannot be NULL" << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
if (mCOFVersion == catp->getVersion()) return;
|
||||
mCOFVersion = catp->getVersion();
|
||||
|
||||
typedef std::vector<LLSD> values_vector_t;
|
||||
typedef std::map<LLFlatListView*, values_vector_t> selection_map_t;
|
||||
|
||||
|
|
@ -393,7 +411,7 @@ void LLCOFWearables::refresh()
|
|||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t cof_items;
|
||||
|
||||
gInventory.collectDescendents(LLAppearanceMgr::getInstance()->getCOF(), cats, cof_items, LLInventoryModel::EXCLUDE_TRASH);
|
||||
gInventory.collectDescendents(cof_id, cats, cof_items, LLInventoryModel::EXCLUDE_TRASH);
|
||||
|
||||
populateAttachmentsAndBodypartsLists(cof_items);
|
||||
|
||||
|
|
@ -501,7 +519,7 @@ LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventory
|
|||
item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable);
|
||||
|
||||
//turning on gray separator line for the last item in the items group of the same wearable type
|
||||
item_panel->childSetVisible("wearable_type_separator_icon", last);
|
||||
item_panel->setSeparatorVisible(last);
|
||||
|
||||
return item_panel;
|
||||
}
|
||||
|
|
@ -637,10 +655,10 @@ LLAssetType::EType LLCOFWearables::getExpandedAccordionAssetType()
|
|||
const LLAccordionCtrlTab* expanded_tab = accordion_ctrl->getExpandedTab();
|
||||
|
||||
return get_if_there(mTab2AssetType, expanded_tab, LLAssetType::AT_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
LLAssetType::EType LLCOFWearables::getSelectedAccordionAssetType()
|
||||
{
|
||||
{
|
||||
static LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("cof_wearables_accordion");
|
||||
const LLAccordionCtrlTab* selected_tab = accordion_ctrl->getSelectedTab();
|
||||
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ public:
|
|||
LLPanel* getSelectedItem();
|
||||
void getSelectedItems(std::vector<LLPanel*>& selected_items) const;
|
||||
|
||||
/* Repopulate the COF wearables list if the COF category has been changed since the last refresh */
|
||||
void refresh();
|
||||
void clear();
|
||||
|
||||
|
|
@ -123,6 +124,9 @@ protected:
|
|||
LLListContextMenu* mClothingMenu;
|
||||
LLListContextMenu* mAttachmentMenu;
|
||||
LLListContextMenu* mBodyPartMenu;
|
||||
|
||||
/* COF category version since last refresh */
|
||||
S32 mCOFVersion;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ LLDragAndDropButton::Params::Params()
|
|||
|
||||
}
|
||||
|
||||
LLDragAndDropButton::LLDragAndDropButton(Params& params)
|
||||
LLDragAndDropButton::LLDragAndDropButton(const Params& params)
|
||||
: LLButton(params)
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public:
|
|||
Params();
|
||||
};
|
||||
|
||||
LLDragAndDropButton(Params& params);
|
||||
LLDragAndDropButton(const Params& params);
|
||||
|
||||
typedef boost::function<bool (
|
||||
S32 /*x*/, S32 /*y*/, MASK /*mask*/, BOOL /*drop*/,
|
||||
|
|
|
|||
|
|
@ -140,7 +140,13 @@ void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,cons
|
|||
// LLTextBox::setText will obliterate the expander segment, so make sure
|
||||
// we generate it again by clearing mExpanderVisible
|
||||
mExpanderVisible = false;
|
||||
LLTextEditor::setText(text, input_params);
|
||||
|
||||
// Workaround for EXT-8259: trim text before rendering it.
|
||||
{
|
||||
std::string trimmed_text(text);
|
||||
LLStringUtil::trim(trimmed_text);
|
||||
LLTextEditor::setText(trimmed_text, input_params);
|
||||
}
|
||||
|
||||
// text contents have changed, segments are cleared out
|
||||
// so hide the expander and determine if we need it
|
||||
|
|
|
|||
|
|
@ -262,6 +262,7 @@ public:
|
|||
BOOL needsAutoSelect() { return mNeedsAutoSelect && !mAutoSelectOverride; }
|
||||
BOOL needsAutoRename() { return mNeedsAutoRename; }
|
||||
void setNeedsAutoRename(BOOL val) { mNeedsAutoRename = val; }
|
||||
void setAutoSelectOverride(BOOL val) { mAutoSelectOverride = val; }
|
||||
|
||||
void setCallbackRegistrar(LLUICtrl::CommitCallbackRegistry::ScopedRegistrar* registrar) { mCallbackRegistrar = registrar; }
|
||||
|
||||
|
|
|
|||
|
|
@ -1022,6 +1022,14 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
|
|||
}
|
||||
else
|
||||
{
|
||||
// IM_SESSION_INVITE means that this is an Ad-hoc incoming chat
|
||||
// (it can be also Group chat but it is checked above)
|
||||
// In this case mInitialTargetIDs contains Ad-hoc session ID and it should not be added
|
||||
// to Recent People to prevent showing of an item with (???)(???). See EXT-8246.
|
||||
// Concrete participants will be added into this list once they sent message in chat.
|
||||
if (IM_SESSION_INVITE == dialog) return;
|
||||
|
||||
// implemented adding of all participants of an outgoing to Recent People List. See EXT-5694.
|
||||
for(uuid_vec_t::iterator it = session->mInitialTargetIDs.begin();
|
||||
it!=session->mInitialTargetIDs.end();++it)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -161,8 +161,7 @@ BOOL LLInspectObject::postBuild(void)
|
|||
|
||||
// Hide floater when name links clicked
|
||||
LLTextBox* textbox = getChild<LLTextBox>("object_creator");
|
||||
textbox->mURLClickSignal.connect(
|
||||
boost::bind(&LLInspectObject::closeFloater, this, false) );
|
||||
textbox->setURLClickedCallback(boost::bind(&LLInspectObject::closeFloater, this, false) );
|
||||
|
||||
// Hook up functionality
|
||||
getChild<LLUICtrl>("buy_btn")->setCommitCallback(
|
||||
|
|
|
|||
|
|
@ -507,6 +507,19 @@ bool LLIsNotType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
bool LLIsOfAssetType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
|
||||
{
|
||||
if(mType == LLAssetType::AT_CATEGORY)
|
||||
{
|
||||
if(cat) return TRUE;
|
||||
}
|
||||
if(item)
|
||||
{
|
||||
if(item->getActualType() == mType) return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool LLIsTypeWithPermissions::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
|
||||
{
|
||||
if(mType == LLAssetType::AT_CATEGORY)
|
||||
|
|
|
|||
|
|
@ -174,6 +174,25 @@ protected:
|
|||
LLAssetType::EType mType;
|
||||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLIsOfAssetType
|
||||
//
|
||||
// Implementation of a LLInventoryCollectFunctor which returns TRUE if
|
||||
// the item or category is of asset type passed in during construction.
|
||||
// Link types are treated as links, not as the types they point to.
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
class LLIsOfAssetType : public LLInventoryCollectFunctor
|
||||
{
|
||||
public:
|
||||
LLIsOfAssetType(LLAssetType::EType type) : mType(type) {}
|
||||
virtual ~LLIsOfAssetType() {}
|
||||
virtual bool operator()(LLInventoryCategory* cat,
|
||||
LLInventoryItem* item);
|
||||
protected:
|
||||
LLAssetType::EType mType;
|
||||
};
|
||||
|
||||
class LLIsTypeWithPermissions : public LLInventoryCollectFunctor
|
||||
{
|
||||
public:
|
||||
|
|
@ -271,9 +290,7 @@ public:
|
|||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLFindNonLinksByMask
|
||||
//
|
||||
//
|
||||
// Class LLFindByMask
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
class LLFindByMask : public LLInventoryCollectFunctor
|
||||
{
|
||||
|
|
@ -382,6 +399,19 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
/* Filters out items of a particular asset type */
|
||||
class LLIsTypeActual : public LLIsType
|
||||
{
|
||||
public:
|
||||
LLIsTypeActual(LLAssetType::EType type) : LLIsType(type) {}
|
||||
virtual ~LLIsTypeActual() {}
|
||||
virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
|
||||
{
|
||||
if (item && item->getIsLinkType()) return false;
|
||||
return LLIsType::operator()(cat, item);
|
||||
}
|
||||
};
|
||||
|
||||
// Collect non-removable folders and items.
|
||||
class LLFindNonRemovableObjects : public LLInventoryCollectFunctor
|
||||
{
|
||||
|
|
|
|||
|
|
@ -138,9 +138,12 @@ void LLInventoryItemsList::idle(void* user_data)
|
|||
}
|
||||
}
|
||||
|
||||
LLFastTimer::DeclareTimer FTM_INVENTORY_ITEMS_REFRESH("Inventory List Refresh");
|
||||
|
||||
void LLInventoryItemsList::refresh()
|
||||
{
|
||||
static const unsigned ADD_LIMIT = 50;
|
||||
LLFastTimer _(FTM_INVENTORY_ITEMS_REFRESH);
|
||||
static const unsigned ADD_LIMIT = 20;
|
||||
|
||||
uuid_vec_t added_items;
|
||||
uuid_vec_t removed_items;
|
||||
|
|
@ -171,7 +174,8 @@ void LLInventoryItemsList::refresh()
|
|||
it = removed_items.begin();
|
||||
for( ; removed_items.end() != it; ++it)
|
||||
{
|
||||
removeItemByUUID(*it);
|
||||
// don't filter items right away
|
||||
removeItemByUUID(*it, false);
|
||||
}
|
||||
|
||||
// Filter, rearrange and notify parent about shape changes
|
||||
|
|
|
|||
|
|
@ -51,7 +51,12 @@ static const S32 WIDGET_SPACING = 3;
|
|||
|
||||
LLPanelInventoryListItemBase::Params::Params()
|
||||
: default_style("default_style"),
|
||||
worn_style("worn_style")
|
||||
worn_style("worn_style"),
|
||||
hover_image("hover_image"),
|
||||
selected_image("selected_image"),
|
||||
separator_image("separator_image"),
|
||||
item_icon("item_icon"),
|
||||
item_name("item_name")
|
||||
{};
|
||||
|
||||
LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInventoryItem* item)
|
||||
|
|
@ -59,8 +64,10 @@ LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInven
|
|||
LLPanelInventoryListItemBase* list_item = NULL;
|
||||
if (item)
|
||||
{
|
||||
list_item = new LLPanelInventoryListItemBase(item);
|
||||
list_item->init();
|
||||
const LLPanelInventoryListItemBase::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelInventoryListItemBase>();
|
||||
list_item = new LLPanelInventoryListItemBase(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
|
@ -76,6 +83,25 @@ void LLPanelInventoryListItemBase::draw()
|
|||
}
|
||||
setNeedsRefresh(false);
|
||||
}
|
||||
|
||||
if (mHovered && mHoverImage)
|
||||
{
|
||||
mHoverImage->draw(getLocalRect());
|
||||
}
|
||||
|
||||
if (mSelected && mSelectedImage)
|
||||
{
|
||||
mSelectedImage->draw(getLocalRect());
|
||||
}
|
||||
|
||||
if (mSeparatorVisible && mSeparatorImage)
|
||||
{
|
||||
// stretch along bottom of listitem, using image height
|
||||
LLRect separator_rect = getLocalRect();
|
||||
separator_rect.mTop = mSeparatorImage->getHeight();
|
||||
mSeparatorImage->draw(separator_rect);
|
||||
}
|
||||
|
||||
LLPanel::draw();
|
||||
}
|
||||
|
||||
|
|
@ -134,9 +160,6 @@ void LLPanelInventoryListItemBase::setShowWidget(LLUICtrl* ctrl, bool show)
|
|||
|
||||
BOOL LLPanelInventoryListItemBase::postBuild()
|
||||
{
|
||||
setIconCtrl(getChild<LLIconCtrl>("item_icon"));
|
||||
setTitleCtrl(getChild<LLTextBox>("item_name"));
|
||||
|
||||
LLViewerInventoryItem* inv_item = getItem();
|
||||
if (inv_item)
|
||||
{
|
||||
|
|
@ -156,18 +179,18 @@ void LLPanelInventoryListItemBase::setValue(const LLSD& value)
|
|||
{
|
||||
if (!value.isMap()) return;
|
||||
if (!value.has("selected")) return;
|
||||
childSetVisible("selected_icon", value["selected"]);
|
||||
mSelected = value["selected"];
|
||||
}
|
||||
|
||||
void LLPanelInventoryListItemBase::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
childSetVisible("hovered_icon", true);
|
||||
mHovered = true;
|
||||
LLPanel::onMouseEnter(x, y, mask);
|
||||
}
|
||||
|
||||
void LLPanelInventoryListItemBase::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
childSetVisible("hovered_icon", false);
|
||||
mHovered = false;
|
||||
LLPanel::onMouseLeave(x, y, mask);
|
||||
}
|
||||
|
||||
|
|
@ -255,21 +278,47 @@ S32 LLPanelInventoryListItemBase::notify(const LLSD& info)
|
|||
return rv;
|
||||
}
|
||||
|
||||
LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem* item)
|
||||
: LLPanel()
|
||||
, mInventoryItemUUID(item ? item->getUUID() : LLUUID::null)
|
||||
, mIconCtrl(NULL)
|
||||
, mTitleCtrl(NULL)
|
||||
, mWidgetSpacing(WIDGET_SPACING)
|
||||
, mLeftWidgetsWidth(0)
|
||||
, mRightWidgetsWidth(0)
|
||||
, mNeedsRefresh(false)
|
||||
LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem* item, const LLPanelInventoryListItemBase::Params& params)
|
||||
: LLPanel(params),
|
||||
mInventoryItemUUID(item ? item->getUUID() : LLUUID::null),
|
||||
mIconCtrl(NULL),
|
||||
mTitleCtrl(NULL),
|
||||
mWidgetSpacing(WIDGET_SPACING),
|
||||
mLeftWidgetsWidth(0),
|
||||
mRightWidgetsWidth(0),
|
||||
mNeedsRefresh(false),
|
||||
mHovered(false),
|
||||
mSelected(false),
|
||||
mSeparatorVisible(false),
|
||||
mHoverImage(params.hover_image),
|
||||
mSelectedImage(params.selected_image),
|
||||
mSeparatorImage(params.separator_image)
|
||||
{
|
||||
}
|
||||
LLIconCtrl::Params icon_params(params.item_icon);
|
||||
applyXUILayout(icon_params, this);
|
||||
|
||||
void LLPanelInventoryListItemBase::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory_item.xml");
|
||||
mIconCtrl = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
|
||||
if (mIconCtrl)
|
||||
{
|
||||
addChild(mIconCtrl);
|
||||
}
|
||||
else
|
||||
{
|
||||
mIconCtrl = dynamic_cast<LLIconCtrl*>(LLUICtrlFactory::createDefaultWidget<LLIconCtrl>("item_icon"));
|
||||
}
|
||||
|
||||
LLTextBox::Params text_params(params.item_name);
|
||||
applyXUILayout(text_params, this);
|
||||
|
||||
mTitleCtrl = LLUICtrlFactory::create<LLTextBox>(text_params);
|
||||
if (mTitleCtrl)
|
||||
{
|
||||
addChild(mTitleCtrl);
|
||||
}
|
||||
else
|
||||
{
|
||||
mTitleCtrl = dynamic_cast<LLTextBox*>(LLUICtrlFactory::createDefaultWidget<LLTextBox>("item_title"));
|
||||
}
|
||||
}
|
||||
|
||||
class WidgetVisibilityChanger
|
||||
|
|
|
|||
|
|
@ -41,12 +41,12 @@
|
|||
// llui
|
||||
#include "llpanel.h"
|
||||
#include "llstyle.h"
|
||||
#include "lliconctrl.h"
|
||||
#include "lltextbox.h"
|
||||
|
||||
// newview
|
||||
#include "llwearabletype.h"
|
||||
|
||||
class LLIconCtrl;
|
||||
class LLTextBox;
|
||||
class LLViewerInventoryItem;
|
||||
|
||||
/**
|
||||
|
|
@ -70,6 +70,11 @@ public:
|
|||
{
|
||||
Optional<LLStyle::Params> default_style,
|
||||
worn_style;
|
||||
Optional<LLUIImage*> hover_image,
|
||||
selected_image,
|
||||
separator_image;
|
||||
Optional<LLIconCtrl::Params> item_icon;
|
||||
Optional<LLTextBox::Params> item_name;
|
||||
Params();
|
||||
};
|
||||
|
||||
|
|
@ -152,30 +157,22 @@ public:
|
|||
/** Get the associated inventory item */
|
||||
LLViewerInventoryItem* getItem() const;
|
||||
|
||||
void setSeparatorVisible(bool visible) { mSeparatorVisible = visible; }
|
||||
|
||||
virtual ~LLPanelInventoryListItemBase(){}
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelInventoryListItemBase(LLViewerInventoryItem* item);
|
||||
LLPanelInventoryListItemBase(LLViewerInventoryItem* item, const Params& params);
|
||||
|
||||
typedef std::vector<LLUICtrl*> widget_array_t;
|
||||
|
||||
/**
|
||||
* Use it from a factory function to build panel, do not build panel in constructor
|
||||
*/
|
||||
virtual void init();
|
||||
|
||||
/**
|
||||
* Called after inventory item was updated, update panel widgets to reflect inventory changes.
|
||||
*/
|
||||
virtual void updateItem(const std::string& name,
|
||||
EItemState item_state = IS_DEFAULT);
|
||||
|
||||
/** setter for mIconCtrl */
|
||||
void setIconCtrl(LLIconCtrl* icon) { mIconCtrl = icon; }
|
||||
/** setter for MTitleCtrl */
|
||||
void setTitleCtrl(LLTextBox* tb) { mTitleCtrl = tb; }
|
||||
|
||||
void setLeftWidgetsWidth(S32 width) { mLeftWidgetsWidth = width; }
|
||||
void setRightWidgetsWidth(S32 width) { mRightWidgetsWidth = width; }
|
||||
|
||||
|
|
@ -224,6 +221,14 @@ private:
|
|||
LLTextBox* mTitleCtrl;
|
||||
|
||||
LLUIImagePtr mIconImage;
|
||||
LLUIImagePtr mHoverImage;
|
||||
LLUIImagePtr mSelectedImage;
|
||||
LLUIImagePtr mSeparatorImage;
|
||||
|
||||
bool mHovered;
|
||||
bool mSelected;
|
||||
bool mSeparatorVisible;
|
||||
|
||||
std::string mHighlightedText;
|
||||
|
||||
widget_array_t mLeftSideWidgets;
|
||||
|
|
|
|||
|
|
@ -1052,7 +1052,7 @@ void LLLocationInputCtrl::changeLocationPresentation()
|
|||
//needs unescaped one
|
||||
LLSLURL slurl;
|
||||
LLAgentUI::buildSLURL(slurl, false);
|
||||
mTextEntry->setText(slurl.getSLURLString());
|
||||
mTextEntry->setText(LLURI::unescape(slurl.getSLURLString()));
|
||||
mTextEntry->selectAll();
|
||||
|
||||
mMaturityButton->setVisible(FALSE);
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
#include "llpanelgenerictip.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llviewercontrol.h" // for gSavedSettings
|
||||
|
||||
|
||||
LLPanelGenericTip::LLPanelGenericTip(
|
||||
|
|
@ -45,7 +46,8 @@ LLPanelGenericTip::LLPanelGenericTip(
|
|||
|
||||
childSetValue("message", notification->getMessage());
|
||||
|
||||
// set line max count to 3 in case of a very long name
|
||||
snapToMessageHeight(getChild<LLTextBox> ("message"), 3);
|
||||
|
||||
S32 max_line_count = gSavedSettings.getS32("TipToastMessageLineCount");
|
||||
snapToMessageHeight(getChild<LLTextBox> ("message"), max_line_count);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -197,14 +197,15 @@ BOOL LLPanelMainInventory::postBuild()
|
|||
mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
|
||||
}
|
||||
|
||||
initListCommandsHandlers();
|
||||
|
||||
// *TODO:Get the cost info from the server
|
||||
const std::string upload_cost("10");
|
||||
childSetLabelArg("Upload Image", "[COST]", upload_cost);
|
||||
childSetLabelArg("Upload Sound", "[COST]", upload_cost);
|
||||
childSetLabelArg("Upload Animation", "[COST]", upload_cost);
|
||||
childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
|
||||
mMenuAdd->getChild<LLMenuItemGL>("Upload Image")->setLabelArg("[COST]", upload_cost);
|
||||
mMenuAdd->getChild<LLMenuItemGL>("Upload Sound")->setLabelArg("[COST]", upload_cost);
|
||||
mMenuAdd->getChild<LLMenuItemGL>("Upload Animation")->setLabelArg("[COST]", upload_cost);
|
||||
mMenuAdd->getChild<LLMenuItemGL>("Bulk Upload")->setLabelArg("[COST]", upload_cost);
|
||||
|
||||
initListCommandsHandlers();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
#include "llnotifications.h"
|
||||
#include "llpanelonlinestatus.h"
|
||||
#include "llviewercontrol.h" // for gSavedSettings
|
||||
|
||||
LLPanelOnlineStatus::LLPanelOnlineStatus(
|
||||
const LLNotificationPtr& notification) :
|
||||
|
|
@ -54,7 +55,7 @@ LLPanelOnlineStatus::LLPanelOnlineStatus(
|
|||
notification, notification->getResponseTemplate()));
|
||||
}
|
||||
|
||||
// set line max count to 3 in case of a very long name
|
||||
snapToMessageHeight(getChild<LLTextBox> ("message"), 3);
|
||||
S32 max_line_count = gSavedSettings.getS32("TipToastMessageLineCount");
|
||||
snapToMessageHeight(getChild<LLTextBox> ("message"), max_line_count);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -401,7 +401,7 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
|
|||
observer.addBOFReplacedCallback(boost::bind(&LLPanelOutfitEdit::updateCurrentOutfitName, this));
|
||||
observer.addBOFChangedCallback(boost::bind(&LLPanelOutfitEdit::updateVerbs, this));
|
||||
observer.addOutfitLockChangedCallback(boost::bind(&LLPanelOutfitEdit::updateVerbs, this));
|
||||
observer.addCOFChangedCallback(boost::bind(&LLPanelOutfitEdit::update, this));
|
||||
observer.addCOFChangedCallback(boost::bind(&LLPanelOutfitEdit::onCOFChanged, this));
|
||||
|
||||
gAgentWearables.addLoadingStartedCallback(boost::bind(&LLPanelOutfitEdit::onOutfitChanging, this, true));
|
||||
gAgentWearables.addLoadedCallback(boost::bind(&LLPanelOutfitEdit::onOutfitChanging, this, false));
|
||||
|
|
@ -435,9 +435,9 @@ BOOL LLPanelOutfitEdit::postBuild()
|
|||
mFolderViewItemTypes[FVIT_ATTACHMENT] = LLLookItemType(getString("Filter.Objects"), ATTACHMENT_MASK);
|
||||
|
||||
//order is important, see EListViewItemType for order information
|
||||
mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.All"), new LLFindByMask(ALL_ITEMS_MASK)));
|
||||
mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Clothing"), new LLIsType(LLAssetType::AT_CLOTHING)));
|
||||
mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Bodyparts"), new LLIsType(LLAssetType::AT_BODYPART)));
|
||||
mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.All"), new LLFindNonLinksByMask(ALL_ITEMS_MASK)));
|
||||
mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Clothing"), new LLIsTypeActual(LLAssetType::AT_CLOTHING)));
|
||||
mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Bodyparts"), new LLIsTypeActual(LLAssetType::AT_BODYPART)));
|
||||
mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Objects"), new LLFindByMask(ATTACHMENT_MASK)));;
|
||||
mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("shape"), new LLFindActualWearablesOfType(LLWearableType::WT_SHAPE)));
|
||||
mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("skin"), new LLFindActualWearablesOfType(LLWearableType::WT_SKIN)));
|
||||
|
|
@ -471,7 +471,7 @@ BOOL LLPanelOutfitEdit::postBuild()
|
|||
childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
|
||||
childSetCommitCallback("shop_btn_2", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
|
||||
|
||||
setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this));
|
||||
setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2));
|
||||
|
||||
mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
|
||||
mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
|
||||
|
|
@ -720,11 +720,16 @@ void LLPanelOutfitEdit::onPlusBtnClicked(void)
|
|||
}
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::onVisibilityChange()
|
||||
void LLPanelOutfitEdit::onVisibilityChange(const LLSD &in_visible_chain)
|
||||
{
|
||||
showAddWearablesPanel(false);
|
||||
mWearableItemsList->resetSelection();
|
||||
mInventoryItemsPanel->clearSelection();
|
||||
|
||||
if (in_visible_chain.asBoolean())
|
||||
{
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::onAddWearableClicked(void)
|
||||
|
|
@ -1232,5 +1237,12 @@ void LLPanelOutfitEdit::saveListSelection()
|
|||
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::onCOFChanged()
|
||||
{
|
||||
//the panel is only updated when is visible to a user
|
||||
if (!isInVisibleChain()) return;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ public:
|
|||
void onInventorySelectionChange();
|
||||
void onPlusBtnClicked(void);
|
||||
|
||||
void onVisibilityChange();
|
||||
void onVisibilityChange(const LLSD &in_visible_chain);
|
||||
|
||||
void applyFolderViewFilter(EFolderViewItemType type);
|
||||
void applyListViewFilter(EListViewItemType type);
|
||||
|
|
@ -202,6 +202,7 @@ private:
|
|||
void onOutfitChanging(bool started);
|
||||
void getSelectedItemsUUID(uuid_vec_t& uuid_list);
|
||||
void getCurrentItemUUID(LLUUID& selected_id);
|
||||
void onCOFChanged();
|
||||
|
||||
LLTextBox* mCurrentOutfitName;
|
||||
LLTextBox* mStatus;
|
||||
|
|
|
|||
|
|
@ -582,7 +582,7 @@ void LLParticipantList::addAvatarIDExceptAgent(const LLUUID& avatar_id)
|
|||
else
|
||||
{
|
||||
std::string display_name = LLVoiceClient::getInstance()->getDisplayName(avatar_id);
|
||||
mAvatarList->addAvalineItem(avatar_id, mSpeakerMgr->getSessionID(), display_name.empty() ? display_name : LLTrans::getString("AvatarNameWaiting"));
|
||||
mAvatarList->addAvalineItem(avatar_id, mSpeakerMgr->getSessionID(), display_name.empty() ? LLTrans::getString("AvatarNameWaiting") : display_name);
|
||||
mAvalineUpdater->watchAvalineCaller(avatar_id);
|
||||
}
|
||||
adjustParticipant(avatar_id);
|
||||
|
|
|
|||
|
|
@ -176,7 +176,15 @@ void LLScriptFloater::onClose(bool app_quitting)
|
|||
|
||||
if(getNotificationId().notNull())
|
||||
{
|
||||
LLScriptFloaterManager::getInstance()->onRemoveNotification(getNotificationId());
|
||||
// we shouldn't kill notification on exit since it may be used as persistent.
|
||||
if (app_quitting)
|
||||
{
|
||||
LLScriptFloaterManager::getInstance()->onRemoveNotification(getNotificationId());
|
||||
}
|
||||
else
|
||||
{
|
||||
LLScriptFloaterManager::getInstance()->removeNotification(getNotificationId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -352,7 +360,7 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
|
|||
set_new_message |= !floater->hasFocus();
|
||||
}
|
||||
|
||||
onRemoveNotification(it->first);
|
||||
removeNotification(it->first);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -379,6 +387,17 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
|
|||
toggleScriptFloater(notification_id, set_new_message);
|
||||
}
|
||||
|
||||
void LLScriptFloaterManager::removeNotification(const LLUUID& notification_id)
|
||||
{
|
||||
LLNotificationPtr notification = LLNotifications::instance().find(notification_id);
|
||||
if (notification != NULL && !notification->isCancelled())
|
||||
{
|
||||
LLNotificationsUtil::cancel(notification);
|
||||
}
|
||||
|
||||
onRemoveNotification(notification_id);
|
||||
}
|
||||
|
||||
void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
|
||||
{
|
||||
if(notification_id.isNull())
|
||||
|
|
@ -392,6 +411,8 @@ void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
|
|||
|
||||
LLIMWellWindow::getInstance()->removeObjectRow(notification_id);
|
||||
|
||||
mNotifications.erase(notification_id);
|
||||
|
||||
// close floater
|
||||
LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
|
||||
if(floater)
|
||||
|
|
@ -400,8 +421,6 @@ void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
|
|||
floater->setNotificationId(LLUUID::null);
|
||||
floater->closeFloater();
|
||||
}
|
||||
|
||||
mNotifications.erase(notification_id);
|
||||
}
|
||||
|
||||
void LLScriptFloaterManager::toggleScriptFloater(const LLUUID& notification_id, bool set_new_message)
|
||||
|
|
|
|||
|
|
@ -64,6 +64,11 @@ public:
|
|||
*/
|
||||
void onAddNotification(const LLUUID& notification_id);
|
||||
|
||||
/**
|
||||
* Removes notification.
|
||||
*/
|
||||
void removeNotification(const LLUUID& notification_id);
|
||||
|
||||
/**
|
||||
* Handles notification removal.
|
||||
* Removes script notification toast, removes script chiclet, closes script floater
|
||||
|
|
|
|||
|
|
@ -230,15 +230,15 @@ LLSideTrayTab* LLSideTrayTab::createInstance ()
|
|||
|
||||
LLSideTray::Params::Params()
|
||||
: collapsed("collapsed",false),
|
||||
tab_btn_image_normal("tab_btn_image","sidebar_tab_left.tga"),
|
||||
tab_btn_image_selected("tab_btn_image_selected","button_enabled_selected_32x128.tga"),
|
||||
tab_btn_image_normal("tab_btn_image",LLUI::getUIImage("sidebar_tab_left.tga")),
|
||||
tab_btn_image_selected("tab_btn_image_selected",LLUI::getUIImage("button_enabled_selected_32x128.tga")),
|
||||
default_button_width("tab_btn_width",32),
|
||||
default_button_height("tab_btn_height",32),
|
||||
default_button_margin("tab_btn_margin",0)
|
||||
{}
|
||||
|
||||
//virtual
|
||||
LLSideTray::LLSideTray(Params& params)
|
||||
LLSideTray::LLSideTray(const Params& params)
|
||||
: LLPanel(params)
|
||||
,mActiveTab(0)
|
||||
,mCollapsed(false)
|
||||
|
|
@ -373,10 +373,10 @@ LLButton* LLSideTray::createButton (const std::string& name,const std::string& i
|
|||
bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
|
||||
bparams.rect (rect);
|
||||
bparams.tab_stop(false);
|
||||
bparams.image_unselected.name(sidetray_params.tab_btn_image_normal);
|
||||
bparams.image_selected.name(sidetray_params.tab_btn_image_selected);
|
||||
bparams.image_disabled.name(sidetray_params.tab_btn_image_normal);
|
||||
bparams.image_disabled_selected.name(sidetray_params.tab_btn_image_selected);
|
||||
bparams.image_unselected(sidetray_params.tab_btn_image_normal);
|
||||
bparams.image_selected(sidetray_params.tab_btn_image_selected);
|
||||
bparams.image_disabled(sidetray_params.tab_btn_image_normal);
|
||||
bparams.image_disabled_selected(sidetray_params.tab_btn_image_selected);
|
||||
|
||||
LLButton* button = LLUICtrlFactory::create<LLButton> (bparams);
|
||||
button->setLabel(name);
|
||||
|
|
|
|||
|
|
@ -54,13 +54,13 @@ public:
|
|||
: public LLInitParam::Block<Params, LLPanel::Params>
|
||||
{
|
||||
// initial state
|
||||
Optional<bool> collapsed;
|
||||
Optional<std::string> tab_btn_image_normal;
|
||||
Optional<std::string> tab_btn_image_selected;
|
||||
Optional<bool> collapsed;
|
||||
Optional<LLUIImage*> tab_btn_image_normal,
|
||||
tab_btn_image_selected;
|
||||
|
||||
Optional<S32> default_button_width;
|
||||
Optional<S32> default_button_height;
|
||||
Optional<S32> default_button_margin;
|
||||
Optional<S32> default_button_width,
|
||||
default_button_height,
|
||||
default_button_margin;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
|
@ -68,7 +68,7 @@ public:
|
|||
static LLSideTray* getInstance ();
|
||||
static bool instanceCreated ();
|
||||
protected:
|
||||
LLSideTray(Params& params);
|
||||
LLSideTray(const Params& params);
|
||||
typedef std::vector<LLSideTrayTab*> child_vector_t;
|
||||
typedef child_vector_t::iterator child_vector_iter_t;
|
||||
typedef child_vector_t::const_iterator child_vector_const_iter_t;
|
||||
|
|
|
|||
|
|
@ -371,7 +371,7 @@ LLIMWellWindow::ObjectRowPanel::~ObjectRowPanel()
|
|||
//---------------------------------------------------------------------------------
|
||||
void LLIMWellWindow::ObjectRowPanel::onClosePanel()
|
||||
{
|
||||
LLScriptFloaterManager::getInstance()->onRemoveNotification(mChiclet->getSessionId());
|
||||
LLScriptFloaterManager::getInstance()->removeNotification(mChiclet->getSessionId());
|
||||
}
|
||||
|
||||
void LLIMWellWindow::ObjectRowPanel::initChiclet(const LLUUID& notification_id, bool new_message/* = false*/)
|
||||
|
|
@ -832,7 +832,7 @@ void LLIMWellWindow::closeAllImpl()
|
|||
ObjectRowPanel* obj_panel = dynamic_cast <ObjectRowPanel*> (panel);
|
||||
if (obj_panel)
|
||||
{
|
||||
LLScriptFloaterManager::instance().onRemoveNotification(*iter);
|
||||
LLScriptFloaterManager::instance().removeNotification(*iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -423,6 +423,10 @@ BOOL LLFloaterTexturePicker::postBuild()
|
|||
mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
|
||||
mInventoryPanel->setAllowMultiSelect(FALSE);
|
||||
|
||||
// Disable auto selecting first filtered item because it takes away
|
||||
// selection from the item set by LLTextureCtrl owning this floater.
|
||||
mInventoryPanel->getRootFolder()->setAutoSelectOverride(TRUE);
|
||||
|
||||
// Commented out to scroll to currently selected texture. See EXT-5403.
|
||||
// // store this filter as the default one
|
||||
// mInventoryPanel->getRootFolder()->getFilter()->markDefault();
|
||||
|
|
|
|||
|
|
@ -89,9 +89,10 @@ void LLURLLineEditor::copyEscapedURLToClipboard()
|
|||
|
||||
const std::string unescaped_text = wstring_to_utf8str(mText.getWString().substr(left_pos, length));
|
||||
LLWString text_to_copy;
|
||||
if (LLSLURL(unescaped_text).isValid())
|
||||
// *HACK: Because LLSLURL is currently broken we cannot use it to check if unescaped_text is a valid SLURL (see EXT-8335).
|
||||
if (LLStringUtil::startsWith(unescaped_text, "http://")) // SLURL
|
||||
text_to_copy = utf8str_to_wstring(LLWeb::escapeURL(unescaped_text));
|
||||
else
|
||||
else // human-readable location
|
||||
text_to_copy = utf8str_to_wstring(unescaped_text);
|
||||
|
||||
gClipboard.copyFromString( text_to_copy );
|
||||
|
|
|
|||
|
|
@ -847,6 +847,21 @@ LLInventoryCallbackManager::~LLInventoryCallbackManager()
|
|||
sInstance = NULL;
|
||||
}
|
||||
|
||||
//static
|
||||
void LLInventoryCallbackManager::destroyClass()
|
||||
{
|
||||
if (sInstance)
|
||||
{
|
||||
for (callback_map_t::iterator it = sInstance->mMap.begin(), end_it = sInstance->mMap.end(); it != end_it; ++it)
|
||||
{
|
||||
// drop LLPointer reference to callback
|
||||
it->second = NULL;
|
||||
}
|
||||
sInstance->mMap.clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
U32 LLInventoryCallbackManager::registerCB(LLPointer<LLInventoryCallback> cb)
|
||||
{
|
||||
if (cb.isNull())
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#include "llinventory.h"
|
||||
#include "llframetimer.h"
|
||||
#include "llwearable.h"
|
||||
#include "llui.h" //for LLDestroyClass
|
||||
|
||||
#include <boost/signals2.hpp> // boost::signals2::trackable
|
||||
|
||||
|
|
@ -299,8 +300,9 @@ private:
|
|||
// misc functions
|
||||
//void inventory_reliable_callback(void**, S32 status);
|
||||
|
||||
class LLInventoryCallbackManager
|
||||
class LLInventoryCallbackManager : public LLDestroyClass<LLInventoryCallbackManager>
|
||||
{
|
||||
friend class LLDestroyClass<LLInventoryCallbackManager>;
|
||||
public:
|
||||
LLInventoryCallbackManager();
|
||||
~LLInventoryCallbackManager();
|
||||
|
|
@ -308,9 +310,12 @@ public:
|
|||
void fire(U32 callback_id, const LLUUID& item_id);
|
||||
U32 registerCB(LLPointer<LLInventoryCallback> cb);
|
||||
private:
|
||||
std::map<U32, LLPointer<LLInventoryCallback> > mMap;
|
||||
typedef std::map<U32, LLPointer<LLInventoryCallback> > callback_map_t;
|
||||
callback_map_t mMap;
|
||||
U32 mLastCallback;
|
||||
static LLInventoryCallbackManager *sInstance;
|
||||
static void destroyClass();
|
||||
|
||||
public:
|
||||
static bool is_instantiated() { return sInstance != NULL; }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -868,7 +868,7 @@ private:
|
|||
public:
|
||||
// Responsible for detecting the user's voice signal (and when the
|
||||
// user speaks, it puts a voice symbol over the avatar's head) and gesticulations
|
||||
LLVoiceVisualizer* mVoiceVisualizer;
|
||||
LLPointer<LLVoiceVisualizer> mVoiceVisualizer;
|
||||
int mCurrentGesticulationLevel;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@ void LLPanelWearableListItem::onMouseLeave(S32 x, S32 y, MASK mask)
|
|||
reshapeWidgets();
|
||||
}
|
||||
|
||||
LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelInventoryListItemBase(item)
|
||||
LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item, const LLPanelWearableListItem::Params& params)
|
||||
: LLPanelInventoryListItemBase(item, params)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -101,15 +101,19 @@ LLPanelWearableOutfitItem* LLPanelWearableOutfitItem::create(LLViewerInventoryIt
|
|||
LLPanelWearableOutfitItem* list_item = NULL;
|
||||
if (item)
|
||||
{
|
||||
list_item = new LLPanelWearableOutfitItem(item, worn_indication_enabled);
|
||||
list_item->init();
|
||||
const LLPanelInventoryListItemBase::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelInventoryListItemBase>();
|
||||
|
||||
list_item = new LLPanelWearableOutfitItem(item, worn_indication_enabled, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
|
||||
bool worn_indication_enabled)
|
||||
: LLPanelInventoryListItemBase(item)
|
||||
bool worn_indication_enabled,
|
||||
const LLPanelWearableOutfitItem::Params& params)
|
||||
: LLPanelInventoryListItemBase(item, params)
|
||||
, mWornIndicationEnabled(worn_indication_enabled)
|
||||
{
|
||||
}
|
||||
|
|
@ -132,6 +136,17 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name,
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelClothingListItem(&typeid(LLPanelClothingListItem::Params), "clothing_list_item");
|
||||
|
||||
|
||||
LLPanelClothingListItem::Params::Params()
|
||||
: up_btn("up_btn"),
|
||||
down_btn("down_btn"),
|
||||
edit_btn("edit_btn"),
|
||||
lock_panel("lock_panel"),
|
||||
edit_panel("edit_panel"),
|
||||
lock_icon("lock_icon")
|
||||
{}
|
||||
|
||||
// static
|
||||
LLPanelClothingListItem* LLPanelClothingListItem::create(LLViewerInventoryItem* item)
|
||||
|
|
@ -139,26 +154,56 @@ LLPanelClothingListItem* LLPanelClothingListItem::create(LLViewerInventoryItem*
|
|||
LLPanelClothingListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
list_item = new LLPanelClothingListItem(item);
|
||||
list_item->init();
|
||||
const LLPanelClothingListItem::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelClothingListItem>();
|
||||
list_item = new LLPanelClothingListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelClothingListItem::LLPanelClothingListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelDeletableWearableListItem(item)
|
||||
LLPanelClothingListItem::LLPanelClothingListItem(LLViewerInventoryItem* item, const LLPanelClothingListItem::Params& params)
|
||||
: LLPanelDeletableWearableListItem(item, params)
|
||||
{
|
||||
LLButton::Params button_params = params.up_btn;
|
||||
applyXUILayout(button_params, this);
|
||||
addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
|
||||
button_params = params.down_btn;
|
||||
applyXUILayout(button_params, this);
|
||||
addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
|
||||
LLPanel::Params panel_params = params.lock_panel;
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* lock_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(lock_panelp);
|
||||
|
||||
panel_params = params.edit_panel;
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* edit_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(edit_panelp);
|
||||
|
||||
if (lock_panelp)
|
||||
{
|
||||
LLIconCtrl::Params icon_params = params.lock_icon;
|
||||
applyXUILayout(icon_params, this);
|
||||
lock_panelp->addChild(LLUICtrlFactory::create<LLIconCtrl>(icon_params));
|
||||
}
|
||||
|
||||
if (edit_panelp)
|
||||
{
|
||||
button_params = params.edit_btn;
|
||||
applyXUILayout(button_params, this);
|
||||
edit_panelp->addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
}
|
||||
|
||||
setSeparatorVisible(false);
|
||||
}
|
||||
|
||||
LLPanelClothingListItem::~LLPanelClothingListItem()
|
||||
{
|
||||
}
|
||||
|
||||
void LLPanelClothingListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_clothing_list_item.xml");
|
||||
}
|
||||
|
||||
BOOL LLPanelClothingListItem::postBuild()
|
||||
{
|
||||
LLPanelDeletableWearableListItem::postBuild();
|
||||
|
|
@ -178,32 +223,64 @@ BOOL LLPanelClothingListItem::postBuild()
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelBodyPartsListItem(&typeid(LLPanelBodyPartsListItem::Params), "bodyparts_list_item");
|
||||
|
||||
|
||||
LLPanelBodyPartsListItem::Params::Params()
|
||||
: edit_btn("edit_btn"),
|
||||
edit_panel("edit_panel"),
|
||||
lock_panel("lock_panel"),
|
||||
lock_icon("lock_icon")
|
||||
{}
|
||||
|
||||
// static
|
||||
LLPanelBodyPartsListItem* LLPanelBodyPartsListItem::create(LLViewerInventoryItem* item)
|
||||
{
|
||||
LLPanelBodyPartsListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
list_item = new LLPanelBodyPartsListItem(item);
|
||||
list_item->init();
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelBodyPartsListItem>();
|
||||
list_item = new LLPanelBodyPartsListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelBodyPartsListItem::LLPanelBodyPartsListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelWearableListItem(item)
|
||||
LLPanelBodyPartsListItem::LLPanelBodyPartsListItem(LLViewerInventoryItem* item, const LLPanelBodyPartsListItem::Params& params)
|
||||
: LLPanelWearableListItem(item, params)
|
||||
{
|
||||
LLPanel::Params panel_params = params.edit_panel;
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* edit_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(edit_panelp);
|
||||
|
||||
panel_params = params.lock_panel;
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* lock_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(lock_panelp);
|
||||
|
||||
if (edit_panelp)
|
||||
{
|
||||
LLButton::Params btn_params = params.edit_btn;
|
||||
applyXUILayout(btn_params, this);
|
||||
edit_panelp->addChild(LLUICtrlFactory::create<LLButton>(btn_params));
|
||||
}
|
||||
|
||||
if (lock_panelp)
|
||||
{
|
||||
LLIconCtrl::Params icon_params = params.lock_icon;
|
||||
applyXUILayout(icon_params, this);
|
||||
lock_panelp->addChild(LLUICtrlFactory::create<LLIconCtrl>(icon_params));
|
||||
}
|
||||
|
||||
setSeparatorVisible(true);
|
||||
}
|
||||
|
||||
LLPanelBodyPartsListItem::~LLPanelBodyPartsListItem()
|
||||
{
|
||||
}
|
||||
|
||||
void LLPanelBodyPartsListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_body_parts_list_item.xml");
|
||||
}
|
||||
|
||||
BOOL LLPanelBodyPartsListItem::postBuild()
|
||||
{
|
||||
LLPanelInventoryListItemBase::postBuild();
|
||||
|
|
@ -214,6 +291,11 @@ BOOL LLPanelBodyPartsListItem::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelDeletableWearableListItem(&typeid(LLPanelDeletableWearableListItem::Params), "deletable_wearable_list_item");
|
||||
|
||||
LLPanelDeletableWearableListItem::Params::Params()
|
||||
: delete_btn("delete_btn")
|
||||
{}
|
||||
|
||||
// static
|
||||
LLPanelDeletableWearableListItem* LLPanelDeletableWearableListItem::create(LLViewerInventoryItem* item)
|
||||
|
|
@ -221,20 +303,22 @@ LLPanelDeletableWearableListItem* LLPanelDeletableWearableListItem::create(LLVie
|
|||
LLPanelDeletableWearableListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
list_item = new LLPanelDeletableWearableListItem(item);
|
||||
list_item->init();
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelDeletableWearableListItem>();
|
||||
list_item = new LLPanelDeletableWearableListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelDeletableWearableListItem::LLPanelDeletableWearableListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelWearableListItem(item)
|
||||
LLPanelDeletableWearableListItem::LLPanelDeletableWearableListItem(LLViewerInventoryItem* item, const LLPanelDeletableWearableListItem::Params& params)
|
||||
: LLPanelWearableListItem(item, params)
|
||||
{
|
||||
}
|
||||
LLButton::Params button_params = params.delete_btn;
|
||||
applyXUILayout(button_params, this);
|
||||
addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
|
||||
void LLPanelDeletableWearableListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_deletable_wearable_list_item.xml");
|
||||
setSeparatorVisible(true);
|
||||
}
|
||||
|
||||
BOOL LLPanelDeletableWearableListItem::postBuild()
|
||||
|
|
@ -260,8 +344,11 @@ LLPanelAttachmentListItem* LLPanelAttachmentListItem::create(LLViewerInventoryIt
|
|||
LLPanelAttachmentListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
list_item = new LLPanelAttachmentListItem(item);
|
||||
list_item->init();
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelDeletableWearableListItem>();
|
||||
|
||||
list_item = new LLPanelAttachmentListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
|
@ -284,27 +371,32 @@ void LLPanelAttachmentListItem::updateItem(const std::string& name,
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelDummyClothingListItem(&typeid(LLPanelDummyClothingListItem::Params), "dummy_clothing_list_item");
|
||||
|
||||
LLPanelDummyClothingListItem::Params::Params()
|
||||
: add_panel("add_panel"),
|
||||
add_btn("add_btn")
|
||||
{}
|
||||
|
||||
LLPanelDummyClothingListItem* LLPanelDummyClothingListItem::create(LLWearableType::EType w_type)
|
||||
{
|
||||
LLPanelDummyClothingListItem* list_item = new LLPanelDummyClothingListItem(w_type);
|
||||
list_item->init();
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelDummyClothingListItem>();
|
||||
|
||||
LLPanelDummyClothingListItem* list_item = new LLPanelDummyClothingListItem(w_type, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
return list_item;
|
||||
}
|
||||
|
||||
BOOL LLPanelDummyClothingListItem::postBuild()
|
||||
{
|
||||
LLIconCtrl* icon = getChild<LLIconCtrl>("item_icon");
|
||||
setIconCtrl(icon);
|
||||
setTitleCtrl(getChild<LLTextBox>("item_name"));
|
||||
|
||||
addWidgetToRightSide("btn_add_panel");
|
||||
|
||||
setIconImage(LLInventoryIcon::getIcon(LLAssetType::AT_CLOTHING, LLInventoryType::IT_NONE, mWearableType, FALSE));
|
||||
updateItem(wearableTypeToString(mWearableType));
|
||||
|
||||
// Make it look loke clothing item - reserve space for 'delete' button
|
||||
setLeftWidgetsWidth(icon->getRect().mLeft);
|
||||
setLeftWidgetsWidth(getChildView("item_icon")->getRect().mLeft);
|
||||
|
||||
setWidgetsVisible(false);
|
||||
reshapeWidgets();
|
||||
|
|
@ -317,15 +409,23 @@ LLWearableType::EType LLPanelDummyClothingListItem::getWearableType() const
|
|||
return mWearableType;
|
||||
}
|
||||
|
||||
LLPanelDummyClothingListItem::LLPanelDummyClothingListItem(LLWearableType::EType w_type)
|
||||
: LLPanelWearableListItem(NULL)
|
||||
, mWearableType(w_type)
|
||||
LLPanelDummyClothingListItem::LLPanelDummyClothingListItem(LLWearableType::EType w_type, const LLPanelDummyClothingListItem::Params& params)
|
||||
: LLPanelWearableListItem(NULL, params),
|
||||
mWearableType(w_type)
|
||||
{
|
||||
LLPanel::Params panel_params(params.add_panel);
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* add_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(add_panelp);
|
||||
|
||||
if (add_panelp)
|
||||
{
|
||||
LLButton::Params button_params(params.add_btn);
|
||||
applyXUILayout(button_params, this);
|
||||
add_panelp->addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
}
|
||||
|
||||
void LLPanelDummyClothingListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_dummy_clothing_list_item.xml");
|
||||
setSeparatorVisible(true);
|
||||
}
|
||||
|
||||
typedef std::map<LLWearableType::EType, std::string> clothing_to_string_map_t;
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ public:
|
|||
|
||||
protected:
|
||||
|
||||
LLPanelWearableListItem(LLViewerInventoryItem* item);
|
||||
LLPanelWearableListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -93,7 +93,7 @@ public:
|
|||
|
||||
protected:
|
||||
LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
|
||||
bool worn_indication_enabled);
|
||||
bool worn_indication_enabled, const Params& params);
|
||||
|
||||
private:
|
||||
bool mWornIndicationEnabled;
|
||||
|
|
@ -103,6 +103,13 @@ class LLPanelDeletableWearableListItem : public LLPanelWearableListItem
|
|||
{
|
||||
LOG_CLASS(LLPanelDeletableWearableListItem);
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLPanelWearableListItem::Params>
|
||||
{
|
||||
Optional<LLButton::Params> delete_btn;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
|
||||
static LLPanelDeletableWearableListItem* create(LLViewerInventoryItem* item);
|
||||
|
||||
|
|
@ -116,9 +123,7 @@ public:
|
|||
inline void setShowDeleteButton(bool show) { setShowWidget("btn_delete", show); }
|
||||
|
||||
protected:
|
||||
LLPanelDeletableWearableListItem(LLViewerInventoryItem* item);
|
||||
|
||||
/*virtual*/ void init();
|
||||
LLPanelDeletableWearableListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
};
|
||||
|
||||
/** Outfit list item for an attachment */
|
||||
|
|
@ -134,7 +139,7 @@ public:
|
|||
EItemState item_state = IS_DEFAULT);
|
||||
|
||||
protected:
|
||||
LLPanelAttachmentListItem(LLViewerInventoryItem* item) : LLPanelDeletableWearableListItem(item) {};
|
||||
LLPanelAttachmentListItem(LLViewerInventoryItem* item, const Params& params) : LLPanelDeletableWearableListItem(item, params) {};
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -147,6 +152,18 @@ class LLPanelClothingListItem : public LLPanelDeletableWearableListItem
|
|||
LOG_CLASS(LLPanelClothingListItem);
|
||||
public:
|
||||
|
||||
struct Params : public LLInitParam::Block<Params, LLPanelDeletableWearableListItem::Params>
|
||||
{
|
||||
Optional<LLButton::Params> up_btn,
|
||||
down_btn,
|
||||
edit_btn;
|
||||
Optional<LLPanel::Params> lock_panel,
|
||||
edit_panel;
|
||||
Optional<LLIconCtrl::Params> lock_icon;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
static LLPanelClothingListItem* create(LLViewerInventoryItem* item);
|
||||
|
||||
virtual ~LLPanelClothingListItem();
|
||||
|
|
@ -162,18 +179,25 @@ public:
|
|||
inline void setShowLockButton(bool show) { setShowWidget("btn_lock", show); }
|
||||
inline void setShowEditButton(bool show) { setShowWidget("btn_edit_panel", show); }
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelClothingListItem(LLViewerInventoryItem* item);
|
||||
|
||||
/*virtual*/ void init();
|
||||
LLPanelClothingListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
|
||||
};
|
||||
|
||||
class LLPanelBodyPartsListItem : public LLPanelWearableListItem
|
||||
{
|
||||
LOG_CLASS(LLPanelBodyPartsListItem);
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLPanelWearableListItem::Params>
|
||||
{
|
||||
Optional<LLButton::Params> edit_btn;
|
||||
Optional<LLPanel::Params> lock_panel,
|
||||
edit_panel;
|
||||
Optional<LLIconCtrl::Params> lock_icon;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
static LLPanelBodyPartsListItem* create(LLViewerInventoryItem* item);
|
||||
|
||||
|
|
@ -188,9 +212,7 @@ public:
|
|||
inline void setShowEditButton(bool show) { setShowWidget("btn_edit_panel", show); }
|
||||
|
||||
protected:
|
||||
LLPanelBodyPartsListItem(LLViewerInventoryItem* item);
|
||||
|
||||
/*virtual*/ void init();
|
||||
LLPanelBodyPartsListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -202,15 +224,19 @@ protected:
|
|||
class LLPanelDummyClothingListItem : public LLPanelWearableListItem
|
||||
{
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLPanelWearableListItem::Params>
|
||||
{
|
||||
Optional<LLPanel::Params> add_panel;
|
||||
Optional<LLButton::Params> add_btn;
|
||||
Params();
|
||||
};
|
||||
static LLPanelDummyClothingListItem* create(LLWearableType::EType w_type);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
LLWearableType::EType getWearableType() const;
|
||||
|
||||
protected:
|
||||
LLPanelDummyClothingListItem(LLWearableType::EType w_type);
|
||||
|
||||
/*virtual*/ void init();
|
||||
LLPanelDummyClothingListItem(LLWearableType::EType w_type, const Params& params);
|
||||
|
||||
static std::string wearableTypeToString(LLWearableType::EType w_type);
|
||||
|
||||
|
|
|
|||
|
|
@ -97,6 +97,9 @@ void LLWinDebug::init()
|
|||
// Load the dbghelp dll now, instead of waiting for the crash.
|
||||
// Less potential for stack mangling
|
||||
|
||||
// Don't install vectored exception handler if being debugged.
|
||||
if(IsDebuggerPresent()) return;
|
||||
|
||||
if (s_first_run)
|
||||
{
|
||||
// First, try loading from the directory that the app resides in.
|
||||
|
|
@ -135,36 +138,42 @@ void LLWinDebug::init()
|
|||
|
||||
void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const std::string& filename)
|
||||
{
|
||||
if(f_mdwp == NULL || gDirUtilp == NULL)
|
||||
// Temporary fix to switch out the code that writes the DMP file.
|
||||
// Fix coming that doesn't write a mini dump file for regular C++ exceptions.
|
||||
const bool enable_write_dump_file = false;
|
||||
if ( enable_write_dump_file )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, filename);
|
||||
|
||||
HANDLE hFile = CreateFileA(dump_path.c_str(),
|
||||
GENERIC_WRITE,
|
||||
FILE_SHARE_WRITE,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
|
||||
if (hFile != INVALID_HANDLE_VALUE)
|
||||
if(f_mdwp == NULL || gDirUtilp == NULL)
|
||||
{
|
||||
// Write the dump, ignoring the return value
|
||||
f_mdwp(GetCurrentProcess(),
|
||||
GetCurrentProcessId(),
|
||||
hFile,
|
||||
type,
|
||||
ExInfop,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
CloseHandle(hFile);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, filename);
|
||||
|
||||
HANDLE hFile = CreateFileA(dump_path.c_str(),
|
||||
GENERIC_WRITE,
|
||||
FILE_SHARE_WRITE,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
|
||||
if (hFile != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
// Write the dump, ignoring the return value
|
||||
f_mdwp(GetCurrentProcess(),
|
||||
GetCurrentProcessId(),
|
||||
hFile,
|
||||
type,
|
||||
ExInfop,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
CloseHandle(hFile);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7207,7 +7207,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
|
|||
if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate)
|
||||
{
|
||||
BOOL skip_avatar_update = FALSE;
|
||||
if (gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK)
|
||||
if (!isAgentAvatarValid() || gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK)
|
||||
{
|
||||
skip_avatar_update = TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
Husk, annonceomkostninger kan ikke refunderes.
|
||||
</text>
|
||||
<spinner label="Pris for annonce:" name="price_for_listing" tool_tip="Pris for optagelse af annonce." value="50"/>
|
||||
<spinner label="Pris: L$" name="price_for_listing" tool_tip="Pris for optagelse af annonce." value="50"/>
|
||||
<text name="l$_text" value="L$"/>
|
||||
<text name="more_info_text">
|
||||
Mere info (link til hjælp om annoncer)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="COF Clothing">
|
||||
<menu_item_call label="Tag af" name="take_off"/>
|
||||
<menu_item_call label="Flyt et lag op" name="move_up"/>
|
||||
<menu_item_call label="Flyt et lag ned" name="move_down"/>
|
||||
<menu_item_call label="Redigér" name="edit"/>
|
||||
<menu_item_call label="Erstat" name="replace"/>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -73,11 +73,10 @@
|
|||
<menu_item_call label="Deaktivér" name="Deactivate"/>
|
||||
<menu_item_call label="Gem som" name="Save As"/>
|
||||
<menu_item_call label="Tag af dig selv" name="Detach From Yourself"/>
|
||||
<menu_item_call label="Tag på" name="Object Wear"/>
|
||||
<menu_item_call label="Tag på" name="Wearable And Object Wear"/>
|
||||
<menu label="Vedhæft" name="Attach To"/>
|
||||
<menu label="Vedhæft til HUD" name="Attach To HUD"/>
|
||||
<menu_item_call label="Redigér" name="Wearable Edit"/>
|
||||
<menu_item_call label="Tag på" name="Wearable Wear"/>
|
||||
<menu_item_call label="Tilføj" name="Wearable Add"/>
|
||||
<menu_item_call label="Tag af" name="Take Off"/>
|
||||
<menu_item_call label="--ingen valg--" name="--no options--"/>
|
||||
|
|
|
|||
|
|
@ -6,9 +6,10 @@
|
|||
<menu_item_call label="Vis filtre" name="show_filters"/>
|
||||
<menu_item_call label="Nulstil filtre" name="reset_filters"/>
|
||||
<menu_item_call label="Luk alle mapper" name="close_folders"/>
|
||||
<menu_item_call label="Tøm papirkurv" name="empty_trash"/>
|
||||
<menu_item_call label="Tøm "fundne genstande"" name="empty_lostnfound"/>
|
||||
<menu_item_call label="Gem tekstur som" name="Save Texture As"/>
|
||||
<menu_item_call label="Del" name="Share"/>
|
||||
<menu_item_call label="Find original" name="Find Original"/>
|
||||
<menu_item_call label="Find alle links" name="Find All Links"/>
|
||||
<menu_item_call label="Tøm papirkurv" name="empty_trash"/>
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<menu name="Gear Outfit">
|
||||
<menu_item_call label="Tag på - Erstat nuværende sæt" name="wear"/>
|
||||
<menu_item_call label="Tag på - Tilføj til nuværende sæt" name="wear_add"/>
|
||||
<menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/>
|
||||
<menu label="Nyt tøj" name="New Clothes">
|
||||
<menu_item_call label="Ny trøje" name="New Shirt"/>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Outfit Wearable Context Menu">
|
||||
<menu_item_call label="Erstat" name="wear"/>
|
||||
<menu_item_call label="Erstat" name="wear_replace"/>
|
||||
<menu_item_call label="Tag på" name="wear_wear"/>
|
||||
<menu_item_call label="Tilføj" name="wear_add"/>
|
||||
<menu_item_call label="Tag af" name="take_off_or_detach"/>
|
||||
<menu_item_call label="Tag af" name="detach"/>
|
||||
|
|
|
|||
|
|
@ -230,6 +230,10 @@ Er du sikker på at du vil fortsætte?
|
|||
<notification name="DeleteAvatarPick">
|
||||
Slet favorit <nolink>[PICK]</nolink>?
|
||||
</notification>
|
||||
<notification name="DeleteOutfits">
|
||||
Slet valgte sæt?
|
||||
<usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="CacheWillClear">
|
||||
Cache vil blive tømt ved næste genstart af [APP_NAME].
|
||||
</notification>
|
||||
|
|
@ -935,11 +939,6 @@ Henvis til dette fra en hjemmeside for at give andre nem adgang til denne lokati
|
|||
Uploader billeder fra verdenen og www...
|
||||
(Tager omkring 5 minutter.)
|
||||
</notification>
|
||||
<notification name="UploadConfirmation">
|
||||
Omkostninger ved at sende: L$[AMOUNT].
|
||||
Ønsker du at fortsætte?
|
||||
<usetemplate name="okcancelbuttons" notext="Annullér" yestext="Send"/>
|
||||
</notification>
|
||||
<notification name="UploadPayment">
|
||||
Du betalte L$[AMOUNT] for at uploade.
|
||||
</notification>
|
||||
|
|
@ -1351,9 +1350,6 @@ Fra genstand: [OBJECTNAME], ejer: [NAME]?
|
|||
<notification name="FailedToFindWearable">
|
||||
Det lykkedes ikke at finde [TYPE] med navnet [DESC] i databasen.
|
||||
</notification>
|
||||
<notification name="ShareToWebFailed">
|
||||
Fejl ved afsendelse af billede til web.
|
||||
</notification>
|
||||
<notification name="InvalidWearable">
|
||||
Den genstand du prøver at tage på benytter en funktion din klient ikke kan forstå. Upgradér venligst din version af [APP_NAME] for at kunne tage denne genstand på.
|
||||
</notification>
|
||||
|
|
|
|||
|
|
@ -34,8 +34,16 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="add_wearables_panel"/>
|
||||
<layout_panel name="add_wearables_panel">
|
||||
<button label="Tag genstand på" name="plus_btn"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<panel name="no_add_wearables_button_bar">
|
||||
<button name="shop_btn_1" tool_tip="Besøg SL markedspladsen. Du kan også vælge noget du har på, og så klikke her for at se andre ting som dette"/>
|
||||
</panel>
|
||||
<panel name="add_wearables_button_bar">
|
||||
<button name="shop_btn_2" tool_tip="Besøg SL markedspladsen. Du kan også vælge noget du har på, og så klikke her for at se andre ting som dette"/>
|
||||
</panel>
|
||||
<panel name="save_revert_button_bar">
|
||||
<button label="Gem" name="save_btn"/>
|
||||
<button label="Annullér ændringer" name="revert_btn" tool_tip="Vend tilbage til sidst gemte version"/>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Ting" name="Outfits">
|
||||
<panel.string name="wear_outfit_tooltip">
|
||||
Tag valgte sæt på
|
||||
</panel.string>
|
||||
<panel.string name="wear_items_tooltip">
|
||||
Bær valgte genstande
|
||||
</panel.string>
|
||||
<tab_container name="appearance_tabs">
|
||||
<panel label="MINE SÆT" name="outfitslist_tab"/>
|
||||
<inventory_panel label="HAR PÅ" name="cof_tab"/>
|
||||
<panel label="HAR PÅ" name="cof_tab"/>
|
||||
</tab_container>
|
||||
<panel name="bottom_panel">
|
||||
<button name="options_gear_btn" tool_tip="Vis flere muligheder"/>
|
||||
<dnd_button name="trash_btn" tool_tip="Slet valgte sæt"/>
|
||||
<button label="Gem som" name="save_btn"/>
|
||||
<button label="Tag på" name="wear_btn" tool_tip="Tag valgte sæt på"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="Outfits">
|
||||
<panel name="bottom_panel">
|
||||
<button name="options_gear_btn" tool_tip="Vis yderligere valgmuligheder"/>
|
||||
<button name="trash_btn" tool_tip="Slet valgte sæt"/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="Wearing">
|
||||
<panel name="bottom_panel">
|
||||
<button name="options_gear_btn" tool_tip="Vis yderligere valgmuligheder"/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
@ -15,6 +15,12 @@
|
|||
<panel.string name="acquiredDate">
|
||||
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
|
||||
</panel.string>
|
||||
<panel.string name="origin_inventory">
|
||||
(Beholdning)
|
||||
</panel.string>
|
||||
<panel.string name="origin_inworld">
|
||||
(I Second Life)
|
||||
</panel.string>
|
||||
<text name="title" value="Profil for genstand"/>
|
||||
<text name="origin" value="(Beholdning)"/>
|
||||
<panel label="">
|
||||
|
|
@ -35,9 +41,7 @@
|
|||
<text name="LabelAcquiredTitle">
|
||||
Erhvervet:
|
||||
</text>
|
||||
<text name="LabelAcquiredDate">
|
||||
Ons Maj 24 12:50:46 2006
|
||||
</text>
|
||||
<text name="LabelAcquiredDate"/>
|
||||
<panel name="perms_inv">
|
||||
<text name="perm_modify">
|
||||
Du kan:
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
Blandet salg
|
||||
</panel.string>
|
||||
<text name="title" value="Objekt profil"/>
|
||||
<text name="where" value="(verden)"/>
|
||||
<text name="where" value="(I Second Life)"/>
|
||||
<panel label="" name="properties_panel">
|
||||
<text name="Name:">
|
||||
Navn:
|
||||
|
|
|
|||
|
|
@ -1585,21 +1585,30 @@
|
|||
<string name="ATTACH_HUD_BOTTOM_RIGHT">
|
||||
HUD Nederst til højre
|
||||
</string>
|
||||
<string name="Bad attachment point">
|
||||
Ugyldig fæste-punkt
|
||||
</string>
|
||||
<string name="CursorPos">
|
||||
Linie [LINE], Kolonne [COLUMN]
|
||||
</string>
|
||||
<string name="PanelDirCountFound">
|
||||
[COUNT] fundet
|
||||
</string>
|
||||
<string name="PanelContentsNewScript">
|
||||
Nyt script
|
||||
</string>
|
||||
<string name="PanelContentsTooltip">
|
||||
Indhold i objekt
|
||||
</string>
|
||||
<string name="PanelContentsNewScript">
|
||||
Nyt script
|
||||
</string>
|
||||
<string name="BusyModeResponseDefault">
|
||||
Beboeren du sendte en besked er 'optaget', hvilket betyder at han/hun ikke vil forstyrres. Din besked vil blive vis i hans/hendes IM panel til senere visning.
|
||||
</string>
|
||||
<string name="NoOutfits">
|
||||
Du har ikke nogen sæt endnu. Prøv [secondlife:///app/search/all/ Search]
|
||||
</string>
|
||||
<string name="NoOutfitsTabsMatched">
|
||||
Fandt du ikke hvad du søgte? Prøv [secondlife:///app/search/all/[SEARCH_TERM] Search].
|
||||
</string>
|
||||
<string name="MuteByName">
|
||||
(Efter navn)
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@
|
|||
<button label="Jetzt kaufen" name="buy_btn"/>
|
||||
<button label="Abbrechen" name="cancel_btn"/>
|
||||
<text name="info_cannot_buy">
|
||||
Kauf nicht möglich
|
||||
Kaufabbruch
|
||||
</text>
|
||||
<button label="Weiter zur Kontoseite" name="error_web"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
Anzeigengebühren werden nicht zurückerstattet.
|
||||
</text>
|
||||
<spinner label="Anzeigenpreis:" name="price_for_listing" tool_tip="Preis für Anzeige." value="50"/>
|
||||
<spinner label="Preis: L$" name="price_for_listing" tool_tip="Preis für Anzeige." value="50"/>
|
||||
<text name="l$_text" value="L$"/>
|
||||
<text name="more_info_text">
|
||||
Weitere Infos (Link zur Hilfe)
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
Zur Vorschau
|
||||
</text>
|
||||
<text name="status_text">
|
||||
Nehmen Sie Ihre Stimme auf, klicken Sie dann auf einen Effekt, um den Effekt auf Ihre Stimme anzuwenden.
|
||||
Stimme aufnehmen und auf einen Effekt klicken, um diesen auf Ihre Stimme anzuwenden.
|
||||
</text>
|
||||
<button label="Aufnehmen" name="record_btn" tool_tip="Nehmen Sie Ihre Stimme auf."/>
|
||||
<button label="Stopp" name="record_stop_btn"/>
|
||||
|
|
|
|||
|
|
@ -76,11 +76,10 @@
|
|||
<menu_item_call label="Deaktivieren" name="Deactivate"/>
|
||||
<menu_item_call label="Speichern unter" name="Save As"/>
|
||||
<menu_item_call label="Von Körper abnehmen" name="Detach From Yourself"/>
|
||||
<menu_item_call label="Anziehen" name="Object Wear"/>
|
||||
<menu_item_call label="Anziehen" name="Wearable And Object Wear"/>
|
||||
<menu label="Anhängen an" name="Attach To"/>
|
||||
<menu label="An HUD hängen" name="Attach To HUD"/>
|
||||
<menu_item_call label="Bearbeiten" name="Wearable Edit"/>
|
||||
<menu_item_call label="Anziehen" name="Wearable Wear"/>
|
||||
<menu_item_call label="Hinzufügen" name="Wearable Add"/>
|
||||
<menu_item_call label="Ausziehen" name="Take Off"/>
|
||||
<menu_item_call label="--keine Optionen--" name="--no options--"/>
|
||||
|
|
|
|||
|
|
@ -6,9 +6,10 @@
|
|||
<menu_item_call label="Filter anzeigen" name="show_filters"/>
|
||||
<menu_item_call label="Filter zurücksetzen" name="reset_filters"/>
|
||||
<menu_item_call label="Alle Ordner schließen" name="close_folders"/>
|
||||
<menu_item_call label="Papierkorb ausleeren" name="empty_trash"/>
|
||||
<menu_item_call label="Fundbüro ausleeren" name="empty_lostnfound"/>
|
||||
<menu_item_call label="Textur speichern als" name="Save Texture As"/>
|
||||
<menu_item_call label="Teilen" name="Share"/>
|
||||
<menu_item_call label="Original suchen" name="Find Original"/>
|
||||
<menu_item_call label="Alle Links suchen" name="Find All Links"/>
|
||||
<menu_item_call label="Papierkorb ausleeren" name="empty_trash"/>
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<menu name="Gear Outfit">
|
||||
<menu_item_call label="Anziehen - Aktuelles Outfit ersetzen" name="wear"/>
|
||||
<menu_item_call label="Anziehen - Aktuelles Outfit hinzufügen" name="wear_add"/>
|
||||
<menu_item_call label="Ausziehen - Aus aktuellem Outfit entfernen" name="take_off"/>
|
||||
<menu label="Neue Kleider" name="New Clothes">
|
||||
<menu_item_call label="Neues Hemd" name="New Shirt"/>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Outfit Wearable Context Menu">
|
||||
<menu_item_call label="Ersetzen" name="wear"/>
|
||||
<menu_item_call label="Ersetzen" name="wear_replace"/>
|
||||
<menu_item_call label="Anziehen" name="wear_wear"/>
|
||||
<menu_item_call label="Hinzufügen" name="wear_add"/>
|
||||
<menu_item_call label="Ausziehen / Abnehmen" name="take_off_or_detach"/>
|
||||
<menu_item_call label="Abnehmen" name="detach"/>
|
||||
|
|
|
|||
|
|
@ -365,6 +365,10 @@ Sind Sie sicher, dass Sie fortfahren wollen?
|
|||
Auswahl <nolink>[PICK]</nolink> löschen?
|
||||
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="DeleteOutfits">
|
||||
Das/Die ausgewählte(n) Outfit(s) löschen?
|
||||
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="PromptGoToEventsPage">
|
||||
Zur [SECOND_LIFE] Events-Webseite?
|
||||
<url name="url">
|
||||
|
|
@ -2051,11 +2055,6 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies
|
|||
In-Welt- und Website-Fotos werden hochgeladen...
|
||||
(Dauert ca. 5 Minuten.)
|
||||
</notification>
|
||||
<notification name="UploadConfirmation">
|
||||
Kosten für Hochladen: [AMOUNT] L$.
|
||||
Möchten Sie fortfahren?
|
||||
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Hochladen"/>
|
||||
</notification>
|
||||
<notification name="UploadPayment">
|
||||
Sie haben für das Hochladen [AMOUNT] L$ bezahlt.
|
||||
</notification>
|
||||
|
|
@ -2478,9 +2477,6 @@ Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
|
|||
<notification name="FailedToFindWearable">
|
||||
[TYPE] namens [DESC] nicht in Datenbank.
|
||||
</notification>
|
||||
<notification name="ShareToWebFailed">
|
||||
Bild aus Internet konnte nicht hochgeladen werden.
|
||||
</notification>
|
||||
<notification name="InvalidWearable">
|
||||
Dieser Artikel verwendet eine Funktion, die Ihr Viewer nicht unterstützt. Bitte aktualisieren Sie Ihre Version von [APP_NAME], um dieses Objekt anziehen zu können.
|
||||
</notification>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="navigation_bar">
|
||||
<panel name="navigation_panel">
|
||||
<pull_button name="back_btn" tool_tip="Zurück zum vorherigen Standort gehen"/>
|
||||
<pull_button name="forward_btn" tool_tip="Um einen Standort weiter gehen"/>
|
||||
<pull_button name="back_btn" tool_tip="Zurück zum vorherigen Standort teleportieren"/>
|
||||
<pull_button name="forward_btn" tool_tip="Um einen Standort weiter teleportieren"/>
|
||||
<button name="home_btn" tool_tip="Zu meinem Zuhause teleportieren"/>
|
||||
<location_input label="Standort" name="location_combo"/>
|
||||
<search_combo_box label="Suche" name="search_combo_box" tool_tip="Suche">
|
||||
|
|
|
|||
|
|
@ -34,8 +34,16 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="add_wearables_panel"/>
|
||||
<layout_panel name="add_wearables_panel">
|
||||
<button label="Objekt anziehen" name="plus_btn"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<panel name="no_add_wearables_button_bar">
|
||||
<button name="shop_btn_1" tool_tip="Besuchen Sie den Marktplatz. Sie können auch einen Teil Ihres Outfits auswählen, und dann hier klicken, um ähnliche Artikel anzuzeigen."/>
|
||||
</panel>
|
||||
<panel name="add_wearables_button_bar">
|
||||
<button name="shop_btn_2" tool_tip="Besuchen Sie den Marktplatz. Sie können auch einen Teil Ihres Outfits auswählen, und dann hier klicken, um ähnliche Artikel anzuzeigen."/>
|
||||
</panel>
|
||||
<panel name="save_revert_button_bar">
|
||||
<button label="Speichern" name="save_btn"/>
|
||||
<button label="Änderungen rückgängig machen" name="revert_btn" tool_tip="Zur zuletzt gespeicherten Version zurücksetzen"/>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Sonstiges" name="Outfits">
|
||||
<panel.string name="wear_outfit_tooltip">
|
||||
Ausgewähltes Outfit tragen
|
||||
</panel.string>
|
||||
<panel.string name="wear_items_tooltip">
|
||||
Ausgewählte Objekte tragen
|
||||
</panel.string>
|
||||
<tab_container name="appearance_tabs">
|
||||
<panel label="MEINE OUTFITS" name="outfitslist_tab"/>
|
||||
<inventory_panel label="AKTUELLES OUTFIT" name="cof_tab"/>
|
||||
<panel label="AKTUELLES OUTFIT" name="cof_tab"/>
|
||||
</tab_container>
|
||||
<panel name="bottom_panel">
|
||||
<button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
|
||||
<dnd_button name="trash_btn" tool_tip="Ausgewähltes Outfit löschen"/>
|
||||
<button label="Speichern unter" name="save_btn"/>
|
||||
<button label="Anziehen" name="wear_btn" tool_tip="Ausgewähltes Outfit tragen"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="Outfits">
|
||||
<panel name="bottom_panel">
|
||||
<button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
|
||||
<button name="trash_btn" tool_tip="Ausgewähltes Outfit löschen"/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="Wearing">
|
||||
<panel name="bottom_panel">
|
||||
<button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
<text name="currentlook_name">
|
||||
MyOutfit With a really Long Name like MOOSE
|
||||
</text>
|
||||
<button label="" name="edit_outfit_btn" tool_tip="Diese Outfit bearbeiten"/>
|
||||
<button label="" name="edit_outfit_btn" tool_tip="Dieses Outfit bearbeiten"/>
|
||||
</panel>
|
||||
<filter_editor label="Outfits filtern" name="Filter"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,12 @@
|
|||
<panel.string name="acquiredDate">
|
||||
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
|
||||
</panel.string>
|
||||
<panel.string name="origin_inventory">
|
||||
(Inventar)
|
||||
</panel.string>
|
||||
<panel.string name="origin_inworld">
|
||||
(Inworld)
|
||||
</panel.string>
|
||||
<text name="title" value="Objektprofil"/>
|
||||
<text name="origin" value="(Inventar)"/>
|
||||
<panel label="">
|
||||
|
|
@ -27,23 +33,17 @@
|
|||
<text name="LabelCreatorTitle">
|
||||
Ersteller:
|
||||
</text>
|
||||
<text name="LabelCreatorName">
|
||||
Nicole Linden
|
||||
</text>
|
||||
<text name="LabelCreatorName"/>
|
||||
<button label="Profil" name="BtnCreator"/>
|
||||
<text name="LabelOwnerTitle">
|
||||
Eigentümer:
|
||||
</text>
|
||||
<text name="LabelOwnerName">
|
||||
Thrax Linden
|
||||
</text>
|
||||
<text name="LabelOwnerName"/>
|
||||
<button label="Profil" name="BtnOwner"/>
|
||||
<text name="LabelAcquiredTitle">
|
||||
Erworben:
|
||||
</text>
|
||||
<text name="LabelAcquiredDate">
|
||||
Mittwoch, 24. Mai 2006, 12:50:46
|
||||
</text>
|
||||
<text name="LabelAcquiredDate"/>
|
||||
<panel name="perms_inv">
|
||||
<text name="perm_modify">
|
||||
Sie können:
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
Mischverkauf
|
||||
</panel.string>
|
||||
<text name="title" value="Objektprofil"/>
|
||||
<text name="where" value="(inworld)"/>
|
||||
<text name="where" value="(Inworld)"/>
|
||||
<panel label="" name="properties_panel">
|
||||
<text name="Name:">
|
||||
Name:
|
||||
|
|
|
|||
|
|
@ -1615,6 +1615,9 @@
|
|||
<string name="ATTACH_HUD_BOTTOM_RIGHT">
|
||||
HUD unten rechts
|
||||
</string>
|
||||
<string name="Bad attachment point">
|
||||
Ungültige Stelle für Anhang
|
||||
</string>
|
||||
<string name="CursorPos">
|
||||
Zeile [LINE], Spalte [COLUMN]
|
||||
</string>
|
||||
|
|
@ -1627,15 +1630,21 @@
|
|||
<string name="PanelDirEventsDateText">
|
||||
[mthnum,datetime,slt]/[day,datetime,slt]
|
||||
</string>
|
||||
<string name="PanelContentsNewScript">
|
||||
Neues Skript
|
||||
</string>
|
||||
<string name="PanelContentsTooltip">
|
||||
Objektinhalt
|
||||
</string>
|
||||
<string name="PanelContentsNewScript">
|
||||
Neues Skript
|
||||
</string>
|
||||
<string name="BusyModeResponseDefault">
|
||||
Der Einwohner/Die Einwohnerin ist „beschäftigt”, d.h. er/sie möchte im Moment nicht gestört werden. Ihre Nachricht wird dem Einwohner/der Einwohnerin als IM angezeigt, und kann später beantwortet werden.
|
||||
</string>
|
||||
<string name="NoOutfits">
|
||||
Sie haben noch Outfits. Versuchen Sie es mit der [secondlife:///app/search/all Suche].
|
||||
</string>
|
||||
<string name="NoOutfitsTabsMatched">
|
||||
Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/all/[SEARCH_TERM] Suche].
|
||||
</string>
|
||||
<string name="MuteByName">
|
||||
(Nach Namen)
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -50,8 +50,13 @@
|
|||
function="File.UploadBulk"
|
||||
parameter="" />
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Set Default Upload Permissions"
|
||||
name="perm prefs">
|
||||
<menu_item_call.on_click
|
||||
function="Floater.Toggle"
|
||||
parameter="perm_prefs" />
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
|
||||
<menu_item_call
|
||||
|
|
|
|||
|
|
@ -726,13 +726,6 @@
|
|||
label="Options"
|
||||
name="Options"
|
||||
tear_off="true">
|
||||
<menu_item_call
|
||||
label="Set Default Upload Permissions"
|
||||
name="perm prefs">
|
||||
<menu_item_call.on_click
|
||||
function="Floater.Toggle"
|
||||
parameter="perm_prefs" />
|
||||
</menu_item_call>
|
||||
<menu_item_check
|
||||
label="Show Advanced Permissions"
|
||||
name="DebugPermissions">
|
||||
|
|
@ -898,8 +891,13 @@
|
|||
function="File.UploadBulk"
|
||||
parameter="" />
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Set Default Upload Permissions"
|
||||
name="perm prefs">
|
||||
<menu_item_call.on_click
|
||||
function="Floater.Toggle"
|
||||
parameter="perm_prefs" />
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
</menu>
|
||||
<menu
|
||||
|
|
|
|||
|
|
@ -5493,7 +5493,6 @@ If you stay in this region you will be logged out.
|
|||
<notification
|
||||
icon="notify.tga"
|
||||
name="LoadWebPage"
|
||||
persist="true"
|
||||
type="notify">
|
||||
Load web page [URL]?
|
||||
|
||||
|
|
@ -5593,7 +5592,6 @@ Grant this request?
|
|||
<notification
|
||||
icon="notify.tga"
|
||||
name="ScriptDialog"
|
||||
persist="true"
|
||||
type="notify">
|
||||
[FIRST] [LAST]'s '[TITLE]'
|
||||
[MESSAGE]
|
||||
|
|
@ -5608,7 +5606,6 @@ Grant this request?
|
|||
<notification
|
||||
icon="notify.tga"
|
||||
name="ScriptDialogGroup"
|
||||
persist="true"
|
||||
type="notify">
|
||||
[GROUPNAME]'s '[TITLE]'
|
||||
[MESSAGE]
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@
|
|||
follows="top|left"
|
||||
font="SansSerif"
|
||||
left="10"
|
||||
name="nearby_media_title"
|
||||
width="100">
|
||||
Nearby Media
|
||||
</text>
|
||||
|
|
@ -114,6 +115,7 @@
|
|||
font="SansSerif"
|
||||
top_pad="15"
|
||||
left="10"
|
||||
name="show_text"
|
||||
width="40">
|
||||
Show:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@
|
|||
background_visible="true"
|
||||
bg_alpha_color="DkGray2"
|
||||
bg_opaque_color="DkGray2"
|
||||
no_matched_tabs_text.value="NoOutfitsTabsMatched"
|
||||
no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]."
|
||||
no_matched_tabs_text.v_pad="10"
|
||||
no_visible_tabs_text.value="NoOutfits"
|
||||
no_visible_tabs_text.value="You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]"
|
||||
follows="all"
|
||||
height="400"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -1956,6 +1956,9 @@ Clears (deletes) the media and all params from the given face.
|
|||
<string name="InvFolder Animations">Animations</string>
|
||||
<string name="InvFolder Gestures">Gestures</string>
|
||||
<string name="InvFolder Favorite">Favorites</string>
|
||||
<!-- historically default name of the Favorites folder can start from either "f" or "F" letter.
|
||||
We should localize both of them with the same value -->
|
||||
<string name="InvFolder favorite">Favorites</string>
|
||||
<string name="InvFolder Current Outfit">Current Outfit</string>
|
||||
<string name="InvFolder My Outfits">My Outfits</string>
|
||||
<string name="InvFolder Accessories">Accessories</string>
|
||||
|
|
@ -2189,16 +2192,11 @@ Clears (deletes) the media and all params from the given face.
|
|||
|
||||
<!-- panel contents -->
|
||||
<string name="PanelContentsTooltip">Content of object</string>
|
||||
<string name="PanelContentsNewScript">New Script</string>
|
||||
<string name="PanelContentsTooltip">Content of object</string>
|
||||
<string name="PanelContentsNewScript">New Script</string>
|
||||
|
||||
<!-- panel preferences general -->
|
||||
<string name="BusyModeResponseDefault">The Resident you messaged is in 'busy mode' which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.</string>
|
||||
|
||||
<!-- Outfits Panel -->
|
||||
<string name="NoOutfits">You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]</string>
|
||||
<string name="NoOutfitsTabsMatched">Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search].</string>
|
||||
|
||||
<!-- Mute -->
|
||||
<string name="MuteByName">(By name)</string>
|
||||
<string name="MuteAgent">(Resident)</string>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,73 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<bodyparts_list_item
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="wearable_item"
|
||||
bottom="0"
|
||||
width="380">
|
||||
<item_icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="21"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="5"
|
||||
value="..."
|
||||
width="359" />
|
||||
<lock_panel
|
||||
background_visible="false"
|
||||
name="btn_lock"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="You don't have permission to edit"/>
|
||||
<lock_icon
|
||||
name="btn_lock1"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_name="Locked_Icon"
|
||||
top="2"
|
||||
left="5"
|
||||
height="13"
|
||||
width="9"
|
||||
tab_stop="false" />
|
||||
<edit_panel
|
||||
background_visible="false"
|
||||
name="btn_edit_panel"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="1"
|
||||
left="17"
|
||||
height="23"
|
||||
width="26"
|
||||
tab_stop="false"/>
|
||||
<edit_btn
|
||||
name="btn_edit"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="Edit_Wrench"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="Edit this shape"/>
|
||||
</bodyparts_list_item>
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<clothing_list_item
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="wearable_item"
|
||||
bottom="0"
|
||||
width="380">
|
||||
<lock_icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="21"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="42"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="5"
|
||||
value="..."
|
||||
width="359" />
|
||||
<up_btn
|
||||
name="btn_move_up"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="UpArrow_Off"
|
||||
top="1"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false" />
|
||||
<down_btn
|
||||
name="btn_move_down"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="DownArrow_Off"
|
||||
top="1"
|
||||
left="26"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false" />
|
||||
<lock_panel
|
||||
background_visible="false"
|
||||
name="btn_lock"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="You don't have permission to edit"/>
|
||||
<lock_icon
|
||||
name="btn_lock1"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_name="Locked_Icon"
|
||||
top="2"
|
||||
left="5"
|
||||
height="13"
|
||||
width="9"
|
||||
tab_stop="false" />
|
||||
<edit_panel
|
||||
background_visible="false"
|
||||
name="btn_edit_panel"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="26"
|
||||
height="23"
|
||||
width="26"
|
||||
tab_stop="false"/>
|
||||
<edit_btn
|
||||
name="btn_edit"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="Edit_Wrench"
|
||||
top="1"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="Edit this wearable"/>
|
||||
</clothing_list_item>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<deletable_wearable_list_item
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="deletable_wearable_item"
|
||||
bottom="0"
|
||||
width="380">
|
||||
<delete_btn
|
||||
name="btn_delete"
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
image_unselected="Toast_CloseBtn"
|
||||
image_selected="Toast_CloseBtn"
|
||||
top="3"
|
||||
left="0"
|
||||
height="18"
|
||||
width="18"
|
||||
tab_stop="false"
|
||||
tool_tip="Remove from outfit"/>
|
||||
<item_icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="24"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="45"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="5"
|
||||
value="..."
|
||||
width="359" />
|
||||
</deletable_wearable_list_item>
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<dummy_clothing_list_item
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="dummy_clothing_item"
|
||||
bottom="0"
|
||||
width="380">
|
||||
<item_icon
|
||||
height="16"
|
||||
color="0.75 0.75 0.75 1"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="41"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="LtGray_50"
|
||||
top="4"
|
||||
value="..."
|
||||
width="359" />
|
||||
<add_panel
|
||||
name="btn_add_panel"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="26"
|
||||
tab_stop="false"/>
|
||||
<add_btn
|
||||
name="btn_add"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="AddItem_Off"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="Add more items of this type" />
|
||||
</dummy_clothing_list_item>
|
||||
|
|
@ -1,11 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<inventory_list_item
|
||||
height="0"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="inventory_list_item"
|
||||
top="0"
|
||||
width="0">
|
||||
follows="top|right|left"
|
||||
height="20"
|
||||
name="inventory_item"
|
||||
tab_stop="false"
|
||||
hover_image="ListItem_Over"
|
||||
selected_image="ListItem_Select"
|
||||
separator_image="Wearables_Divider"
|
||||
width="380">
|
||||
<!-- DEFAULT style for inventory list item -->
|
||||
<default_style
|
||||
font="SansSerifSmall"
|
||||
|
|
@ -16,4 +18,25 @@
|
|||
font="SansSerifSmall"
|
||||
font.style="BOLD"
|
||||
color="EmphasisColor" />
|
||||
<item_icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="item_icon"
|
||||
top="0"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left="21"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="4"
|
||||
value="..."
|
||||
width="359" />
|
||||
</inventory_list_item>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
Recuerda, no se reembolsarán las cantidades abonadas por clasificados.
|
||||
</text>
|
||||
<spinner label="Precio por el anuncio:" name="price_for_listing" tool_tip="Precio por publicarlo." value="50"/>
|
||||
<spinner label="Precio: L$" name="price_for_listing" tool_tip="Precio por publicarlo." value="50"/>
|
||||
<text name="l$_text" value="L$"/>
|
||||
<text name="more_info_text">
|
||||
Más información (enlace a ayuda de clasificados)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="COF Clothing">
|
||||
<menu_item_call label="Quitarme" name="take_off"/>
|
||||
<menu_item_call label="Subir una capa" name="move_up"/>
|
||||
<menu_item_call label="Bajar una capa" name="move_down"/>
|
||||
<menu_item_call label="Editar" name="edit"/>
|
||||
<menu_item_call label="Reemplazar" name="replace"/>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -76,11 +76,10 @@
|
|||
<menu_item_call label="Desactivar" name="Deactivate"/>
|
||||
<menu_item_call label="Guardar como" name="Save As"/>
|
||||
<menu_item_call label="Quitarse" name="Detach From Yourself"/>
|
||||
<menu_item_call label="Ponerse" name="Object Wear"/>
|
||||
<menu_item_call label="Ponerme" name="Wearable And Object Wear"/>
|
||||
<menu label="Anexar a" name="Attach To"/>
|
||||
<menu label="Anexar como HUD" name="Attach To HUD"/>
|
||||
<menu_item_call label="Editar" name="Wearable Edit"/>
|
||||
<menu_item_call label="Ponerse" name="Wearable Wear"/>
|
||||
<menu_item_call label="Añadir" name="Wearable Add"/>
|
||||
<menu_item_call label="Quitarse" name="Take Off"/>
|
||||
<menu_item_call label="--sin opciones--" name="--no options--"/>
|
||||
|
|
|
|||
|
|
@ -6,9 +6,10 @@
|
|||
<menu_item_call label="Ver los filtros" name="show_filters"/>
|
||||
<menu_item_call label="Restablecer los filtros" name="reset_filters"/>
|
||||
<menu_item_call label="Cerrar todas las carpetas" name="close_folders"/>
|
||||
<menu_item_call label="Vaciar la Papelera" name="empty_trash"/>
|
||||
<menu_item_call label="Vaciar Objetos Perdidos" name="empty_lostnfound"/>
|
||||
<menu_item_call label="Guardar la textura como" name="Save Texture As"/>
|
||||
<menu_item_call label="Compartir" name="Share"/>
|
||||
<menu_item_call label="Encontrar el original" name="Find Original"/>
|
||||
<menu_item_call label="Encontrar todos los enlazados" name="Find All Links"/>
|
||||
<menu_item_call label="Vaciar la Papelera" name="empty_trash"/>
|
||||
</menu>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue