Reverted changeset 2bb10eae42bf
parent
4339600d43
commit
5d85dad85f
|
|
@ -517,7 +517,6 @@ Ringo Tuxing
|
|||
Robin Cornelius
|
||||
SNOW-108
|
||||
SNOW-204
|
||||
SNOW-484
|
||||
VWR-2488
|
||||
VWR-9557
|
||||
VWR-11128
|
||||
|
|
|
|||
|
|
@ -1248,12 +1248,6 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if(mJointMotionList->mEmoteName==mID.asString())
|
||||
{
|
||||
llwarns << "Malformed animation mEmoteName==mID" << llendl;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// get loop
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -428,11 +428,9 @@ S32 LLQueuedThread::processNextRequest()
|
|||
llassert_always(req->getStatus() == STATUS_QUEUED);
|
||||
break;
|
||||
}
|
||||
U32 start_priority = 0 ;
|
||||
if (req)
|
||||
{
|
||||
req->setStatus(STATUS_INPROGRESS);
|
||||
start_priority = req->getPriority();
|
||||
}
|
||||
unlockData();
|
||||
|
||||
|
|
@ -441,7 +439,8 @@ S32 LLQueuedThread::processNextRequest()
|
|||
// safe to access req.
|
||||
if (req)
|
||||
{
|
||||
// process request
|
||||
// process request
|
||||
U32 start_priority = req->getPriority();
|
||||
bool complete = req->processRequest();
|
||||
|
||||
if (complete)
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@
|
|||
#include "llfocusmgr.h"
|
||||
#include "lllocalcliprect.h"
|
||||
|
||||
#include "lltrans.h"
|
||||
|
||||
#include "boost/bind.hpp"
|
||||
|
||||
static const S32 DRAGGER_BAR_MARGIN = 4;
|
||||
|
|
@ -72,6 +74,7 @@ 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)
|
||||
{
|
||||
|
|
@ -386,7 +389,7 @@ void LLAccordionCtrl::initNoTabsWidget(const LLTextBox::Params& tb_params)
|
|||
{
|
||||
LLTextBox::Params tp = tb_params;
|
||||
tp.rect(getLocalRect());
|
||||
mNoMatchedTabsOrigString = tp.initial_value().asString();
|
||||
mNoMatchedTabsOrigString = LLTrans::getString(tp.initial_value().asString());
|
||||
mNoVisibleTabsHelpText = LLUICtrlFactory::create<LLTextBox>(tp, this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
/**
|
||||
* @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 rearrange)
|
||||
bool LLFlatListView::removeItem(LLPanel* item)
|
||||
{
|
||||
if (!item) return false;
|
||||
if (item->getParent() != mItemsPanel) return false;
|
||||
|
|
@ -165,22 +165,22 @@ bool LLFlatListView::removeItem(LLPanel* item, bool rearrange)
|
|||
item_pair_t* item_pair = getItemPair(item);
|
||||
if (!item_pair) return false;
|
||||
|
||||
return removeItemPair(item_pair, rearrange);
|
||||
return removeItemPair(item_pair);
|
||||
}
|
||||
|
||||
bool LLFlatListView::removeItemByValue(const LLSD& value, bool rearrange)
|
||||
bool LLFlatListView::removeItemByValue(const LLSD& value)
|
||||
{
|
||||
if (value.isUndefined()) return false;
|
||||
|
||||
item_pair_t* item_pair = getItemPair(value);
|
||||
if (!item_pair) return false;
|
||||
|
||||
return removeItemPair(item_pair, rearrange);
|
||||
return removeItemPair(item_pair);
|
||||
}
|
||||
|
||||
bool LLFlatListView::removeItemByUUID(const LLUUID& uuid, bool rearrange)
|
||||
bool LLFlatListView::removeItemByUUID(const LLUUID& uuid)
|
||||
{
|
||||
return removeItemByValue(LLSD(uuid), rearrange);
|
||||
return removeItemByValue(LLSD(uuid));
|
||||
}
|
||||
|
||||
LLPanel* LLFlatListView::getItemByValue(const LLSD& value) const
|
||||
|
|
@ -327,9 +327,6 @@ 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)
|
||||
{
|
||||
|
|
@ -338,6 +335,7 @@ 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();
|
||||
|
|
@ -972,12 +970,11 @@ 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 rearrange)
|
||||
bool LLFlatListView::removeItemPair(item_pair_t* item_pair)
|
||||
{
|
||||
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;
|
||||
|
|
@ -997,7 +994,6 @@ bool LLFlatListView::removeItemPair(item_pair_t* item_pair, bool rearrange)
|
|||
if (selected_item_pair == item_pair)
|
||||
{
|
||||
it = mSelectedItemPairs.erase(it);
|
||||
selection_changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1006,16 +1002,8 @@ bool LLFlatListView::removeItemPair(item_pair_t* item_pair, bool rearrange)
|
|||
item_pair->first->die();
|
||||
delete item_pair;
|
||||
|
||||
if (rearrange)
|
||||
{
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
}
|
||||
|
||||
if (selection_changed && mCommitOnSelectionChange)
|
||||
{
|
||||
onCommit();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1111,7 +1099,7 @@ void LLFlatListView::onFocusReceived()
|
|||
{
|
||||
if (size())
|
||||
{
|
||||
mSelectedItemsBorder->setVisible(TRUE);
|
||||
mSelectedItemsBorder->setVisible(TRUE);
|
||||
}
|
||||
gEditMenuHandler = this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,9 +117,6 @@ 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.
|
||||
*/
|
||||
|
|
@ -152,19 +149,19 @@ public:
|
|||
* Remove specified item
|
||||
* @return true if the item was removed, false otherwise
|
||||
*/
|
||||
virtual bool removeItem(LLPanel* item, bool rearrange = true);
|
||||
virtual bool removeItem(LLPanel* item);
|
||||
|
||||
/**
|
||||
* Remove an item specified by value
|
||||
* @return true if the item was removed, false otherwise
|
||||
*/
|
||||
virtual bool removeItemByValue(const LLSD& value, bool rearrange = true);
|
||||
virtual bool removeItemByValue(const LLSD& value);
|
||||
|
||||
/**
|
||||
* Remove an item specified by uuid
|
||||
* @return true if the item was removed, false otherwise
|
||||
*/
|
||||
virtual bool removeItemByUUID(const LLUUID& uuid, bool rearrange = true);
|
||||
virtual bool removeItemByUUID(const LLUUID& uuid);
|
||||
|
||||
/**
|
||||
* Get an item by value
|
||||
|
|
@ -265,7 +262,6 @@ 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 */
|
||||
|
|
@ -353,7 +349,7 @@ protected:
|
|||
|
||||
virtual bool isSelected(item_pair_t* item_pair) const;
|
||||
|
||||
virtual bool removeItemPair(item_pair_t* item_pair, bool rearrange);
|
||||
virtual bool removeItemPair(item_pair_t* item_pair);
|
||||
|
||||
/**
|
||||
* Notify parent about changed size of internal controls with "size_changes" action
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@
|
|||
|
||||
#include "llnotifications.h"
|
||||
|
||||
#include "llinstantmessage.h"
|
||||
#include "llxmlnode.h"
|
||||
#include "lluictrl.h"
|
||||
#include "lluictrlfactory.h"
|
||||
|
|
@ -42,7 +41,6 @@
|
|||
#include "llsdserialize.h"
|
||||
#include "lltrans.h"
|
||||
#include "llnotificationslistener.h"
|
||||
#include "llstring.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <boost/regex.hpp>
|
||||
|
|
@ -1489,14 +1487,7 @@ std::ostream& operator<<(std::ostream& s, const LLNotification& notification)
|
|||
void LLPostponedNotification::onCachedNameReceived(const LLUUID& id, const std::string& first,
|
||||
const std::string& last, bool is_group)
|
||||
{
|
||||
mName = first + " " + last;
|
||||
|
||||
LLStringUtil::trim(mName);
|
||||
if (mName.empty())
|
||||
{
|
||||
llwarns << "Empty name received for Id: " << id << llendl;
|
||||
mName = SYSTEM_FROM;
|
||||
}
|
||||
gCacheName->getFullName(id, mName);
|
||||
modifyNotificationParams();
|
||||
LLNotifications::instance().add(mParams);
|
||||
cleanup();
|
||||
|
|
|
|||
|
|
@ -66,10 +66,7 @@ bool LLTextBase::compare_segment_end::operator()(const LLTextSegmentPtr& a, cons
|
|||
{
|
||||
return a->getStart() < b->getStart();
|
||||
}
|
||||
else
|
||||
{
|
||||
return a->getEnd() < b->getEnd();
|
||||
}
|
||||
return a->getEnd() < b->getEnd();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -177,7 +174,7 @@ LLTextBase::Params::Params()
|
|||
|
||||
LLTextBase::LLTextBase(const LLTextBase::Params &p)
|
||||
: LLUICtrl(p, LLTextViewModelPtr(new LLTextViewModel)),
|
||||
mURLClickSignal(NULL),
|
||||
mURLClickSignal(),
|
||||
mMaxTextByteLength( p.max_text_length ),
|
||||
mDefaultFont(p.font),
|
||||
mFontShadow(p.font_shadow),
|
||||
|
|
@ -212,8 +209,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
|
|||
mParseHTML(p.allow_html),
|
||||
mParseHighlights(p.parse_highlights),
|
||||
mBGVisible(p.bg_visible),
|
||||
mScroller(NULL),
|
||||
mStyleDirty(true)
|
||||
mScroller(NULL)
|
||||
{
|
||||
if(p.allow_scroll)
|
||||
{
|
||||
|
|
@ -252,8 +248,9 @@ 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)
|
||||
|
|
@ -299,18 +296,13 @@ bool LLTextBase::truncate()
|
|||
return did_truncate;
|
||||
}
|
||||
|
||||
const LLStyle::Params& LLTextBase::getDefaultStyleParams()
|
||||
LLStyle::Params LLTextBase::getDefaultStyleParams()
|
||||
{
|
||||
if (mStyleDirty)
|
||||
{
|
||||
mDefaultStyle
|
||||
.color(LLUIColor(&mFgColor))
|
||||
.readonly_color(LLUIColor(&mReadOnlyFgColor))
|
||||
.font(mDefaultFont)
|
||||
.drop_shadow(mFontShadow);
|
||||
mStyleDirty = false;
|
||||
}
|
||||
return mDefaultStyle;
|
||||
return LLStyle::Params()
|
||||
.color(LLUIColor(&mFgColor))
|
||||
.readonly_color(LLUIColor(&mReadOnlyFgColor))
|
||||
.font(mDefaultFont)
|
||||
.drop_shadow(mFontShadow);
|
||||
}
|
||||
|
||||
void LLTextBase::onValueChange(S32 start, S32 end)
|
||||
|
|
@ -869,12 +861,11 @@ 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 (mURLClickSignal
|
||||
&& cur_segment->getStyle()
|
||||
if (cur_segment->getStyle()
|
||||
&& cur_segment->getStyle()->isLink())
|
||||
{
|
||||
// *TODO: send URL here?
|
||||
(*mURLClickSignal)(this, LLSD() );
|
||||
mURLClickSignal(this, LLSD() );
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -1048,14 +1039,12 @@ 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
|
||||
|
|
@ -1499,22 +1488,12 @@ 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;
|
||||
}
|
||||
|
|
@ -2345,15 +2324,6 @@ 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,7 +361,10 @@ 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);
|
||||
boost::signals2::connection setURLClickedCallback(const commit_signal_t::slot_type& cb);
|
||||
|
||||
public:
|
||||
// Fired when a URL link is clicked
|
||||
commit_signal_t mURLClickSignal;
|
||||
|
||||
protected:
|
||||
// helper structs
|
||||
|
|
@ -454,7 +457,7 @@ protected:
|
|||
void createDefaultSegment();
|
||||
virtual void updateSegments();
|
||||
void insertSegment(LLTextSegmentPtr segment_to_insert);
|
||||
const LLStyle::Params& getDefaultStyleParams();
|
||||
LLStyle::Params getDefaultStyleParams();
|
||||
|
||||
// manage lines
|
||||
S32 getLineStart( S32 line ) const;
|
||||
|
|
@ -494,12 +497,6 @@ 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;
|
||||
|
|
@ -526,6 +523,8 @@ 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
|
||||
|
|
@ -548,9 +547,6 @@ 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,6 +264,8 @@ 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(const LLView::child_tab_order_t& order, S32 default_tab_group):
|
||||
CompareByDefaultTabGroup(LLView::child_tab_order_t order, S32 default_tab_group):
|
||||
LLCompareByTabOrder(order),
|
||||
mDefaultTabGroup(default_tab_group) {}
|
||||
private:
|
||||
|
|
@ -699,16 +699,13 @@ 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(const typename T::Params& params, LLView* parent = NULL)
|
||||
static T* createWidget(typename T::Params& params, LLView* parent = NULL)
|
||||
{
|
||||
T* widget = NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -135,16 +135,9 @@ void LLUIString::updateResult() const
|
|||
mResult = mOrig;
|
||||
|
||||
// get the defailt args + local 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);
|
||||
}
|
||||
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; }
|
||||
|
||||
const child_tab_order_t& getCtrlOrder() const { return mCtrlOrder; }
|
||||
child_tab_order_t getCtrlOrder() const { return mCtrlOrder; }
|
||||
ctrl_list_t getCtrlList() const;
|
||||
ctrl_list_t getCtrlListSorted() const;
|
||||
|
||||
|
|
@ -620,13 +620,12 @@ public:
|
|||
class LLCompareByTabOrder
|
||||
{
|
||||
public:
|
||||
LLCompareByTabOrder(const LLView::child_tab_order_t& order) : mTabOrder(order) {}
|
||||
LLCompareByTabOrder(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; }
|
||||
// ok to store a reference, as this should only be allocated on stack during view query operations
|
||||
const LLView::child_tab_order_t& mTabOrder;
|
||||
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.splice(filtered_children.end(), indiv_children);
|
||||
}
|
||||
iter != views.end();
|
||||
iter++)
|
||||
{
|
||||
viewList_t indiv_children = this->run(*iter);
|
||||
filtered_children.insert(filtered_children.end(), indiv_children.begin(), indiv_children.end());
|
||||
}
|
||||
}
|
||||
|
||||
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:
|
||||
|
||||
|
|
|
|||
|
|
@ -4666,7 +4666,7 @@
|
|||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://marketplace.secondlife.com/</string>
|
||||
<string>https://www.xstreetsl.com/modules.php?name=Marketplace</string>
|
||||
</map>
|
||||
<key>MarketplaceURL_objectFemale</key>
|
||||
<map>
|
||||
|
|
@ -4721,7 +4721,7 @@
|
|||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://marketplace.secondlife.com</string>
|
||||
<string>https://www.xstreetsl.com/modules.php?name=Marketplace</string>
|
||||
</map>
|
||||
<key>MarketplaceURL_bodypartMale</key>
|
||||
<map>
|
||||
|
|
@ -4732,7 +4732,7 @@
|
|||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>http://marketplace.secondlife.com/</string>
|
||||
<string>https://www.xstreetsl.com/modules.php?name=Marketplace</string>
|
||||
</map>
|
||||
<key>MarketplaceURL_glovesMale</key>
|
||||
<map>
|
||||
|
|
@ -11857,16 +11857,5 @@
|
|||
<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>
|
||||
|
|
|
|||
|
|
@ -3406,9 +3406,6 @@ void LLAgent::setTeleportState(ETeleportState state)
|
|||
}
|
||||
else if(mTeleportState == TELEPORT_ARRIVING)
|
||||
{
|
||||
// First two position updates after a teleport tend to be weird
|
||||
LLViewerStats::getInstance()->mAgentPositionSnaps.mCountOfNextUpdatesToIgnore = 2;
|
||||
|
||||
// Let the interested parties know we've teleported.
|
||||
LLViewerParcelMgr::getInstance()->onTeleportFinished(false, getPositionGlobal());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public:
|
|||
|
||||
virtual ~LLOrderMyOutfitsOnDestroy()
|
||||
{
|
||||
if (!LLApp::isRunning())
|
||||
if (LLApp::isExiting())
|
||||
{
|
||||
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, cb);
|
||||
addCOFItemLink(item_to_wear, do_update);
|
||||
}
|
||||
break;
|
||||
case LLAssetType::AT_BODYPART:
|
||||
|
|
@ -2179,19 +2179,17 @@ void LLAppearanceMgr::updateIsDirty()
|
|||
}
|
||||
else
|
||||
{
|
||||
LLIsOfAssetType collector = LLIsOfAssetType(LLAssetType::AT_LINK);
|
||||
|
||||
LLInventoryModel::cat_array_t cof_cats;
|
||||
LLInventoryModel::item_array_t cof_items;
|
||||
gInventory.collectDescendentsIf(cof, cof_cats, cof_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH, collector);
|
||||
gInventory.collectDescendents(cof, cof_cats, cof_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH);
|
||||
|
||||
LLInventoryModel::cat_array_t outfit_cats;
|
||||
LLInventoryModel::item_array_t outfit_items;
|
||||
gInventory.collectDescendentsIf(base_outfit, outfit_cats, outfit_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH, collector);
|
||||
gInventory.collectDescendents(base_outfit, outfit_cats, outfit_items,
|
||||
LLInventoryModel::EXCLUDE_TRASH);
|
||||
|
||||
if(outfit_items.count() != cof_items.count())
|
||||
if(outfit_items.count() != cof_items.count() -1)
|
||||
{
|
||||
// Current outfit folder should have one more item than the outfit folder.
|
||||
// this one item is the link back to the outfit folder itself.
|
||||
|
|
@ -2199,6 +2197,16 @@ 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(/*hide_number=*/false);
|
||||
LLAvalineListItem* item = new LLAvalineListItem;
|
||||
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().removeNotification(getSessionId());
|
||||
LLScriptFloaterManager::instance().onRemoveNotification(getSessionId());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1969,7 +1969,7 @@ void LLInvOfferChiclet::onMenuItemClicked(const LLSD& user_data)
|
|||
|
||||
if("end" == action)
|
||||
{
|
||||
LLScriptFloaterManager::instance().removeNotification(getSessionId());
|
||||
LLScriptFloaterManager::instance().onRemoveNotification(getSessionId());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -283,8 +283,7 @@ LLCOFWearables::LLCOFWearables() : LLPanel(),
|
|||
mClothingTab(NULL),
|
||||
mAttachmentsTab(NULL),
|
||||
mBodyPartsTab(NULL),
|
||||
mLastSelectedTab(NULL),
|
||||
mCOFVersion(-1)
|
||||
mLastSelectedTab(NULL)
|
||||
{
|
||||
mClothingMenu = new CofClothingContextMenu(this);
|
||||
mAttachmentMenu = new CofAttachmentContextMenu(this);
|
||||
|
|
@ -379,23 +378,6 @@ 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;
|
||||
|
||||
|
|
@ -411,7 +393,7 @@ void LLCOFWearables::refresh()
|
|||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t cof_items;
|
||||
|
||||
gInventory.collectDescendents(cof_id, cats, cof_items, LLInventoryModel::EXCLUDE_TRASH);
|
||||
gInventory.collectDescendents(LLAppearanceMgr::getInstance()->getCOF(), cats, cof_items, LLInventoryModel::EXCLUDE_TRASH);
|
||||
|
||||
populateAttachmentsAndBodypartsLists(cof_items);
|
||||
|
||||
|
|
@ -519,7 +501,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->setSeparatorVisible(last);
|
||||
item_panel->childSetVisible("wearable_type_separator_icon", last);
|
||||
|
||||
return item_panel;
|
||||
}
|
||||
|
|
@ -655,10 +637,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,7 +81,6 @@ 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();
|
||||
|
||||
|
|
@ -124,9 +123,6 @@ protected:
|
|||
LLListContextMenu* mClothingMenu;
|
||||
LLListContextMenu* mAttachmentMenu;
|
||||
LLListContextMenu* mBodyPartMenu;
|
||||
|
||||
/* COF category version since last refresh */
|
||||
S32 mCOFVersion;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ LLDragAndDropButton::Params::Params()
|
|||
|
||||
}
|
||||
|
||||
LLDragAndDropButton::LLDragAndDropButton(const Params& params)
|
||||
LLDragAndDropButton::LLDragAndDropButton(Params& params)
|
||||
: LLButton(params)
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public:
|
|||
Params();
|
||||
};
|
||||
|
||||
LLDragAndDropButton(const Params& params);
|
||||
LLDragAndDropButton(Params& params);
|
||||
|
||||
typedef boost::function<bool (
|
||||
S32 /*x*/, S32 /*y*/, MASK /*mask*/, BOOL /*drop*/,
|
||||
|
|
|
|||
|
|
@ -140,13 +140,7 @@ 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;
|
||||
|
||||
// Workaround for EXT-8259: trim text before rendering it.
|
||||
{
|
||||
std::string trimmed_text(text);
|
||||
LLStringUtil::trim(trimmed_text);
|
||||
LLTextEditor::setText(trimmed_text, input_params);
|
||||
}
|
||||
LLTextEditor::setText(text, input_params);
|
||||
|
||||
// text contents have changed, segments are cleared out
|
||||
// so hide the expander and determine if we need it
|
||||
|
|
|
|||
|
|
@ -262,7 +262,6 @@ 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,14 +1022,6 @@ 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,7 +161,8 @@ BOOL LLInspectObject::postBuild(void)
|
|||
|
||||
// Hide floater when name links clicked
|
||||
LLTextBox* textbox = getChild<LLTextBox>("object_creator");
|
||||
textbox->setURLClickedCallback(boost::bind(&LLInspectObject::closeFloater, this, false) );
|
||||
textbox->mURLClickSignal.connect(
|
||||
boost::bind(&LLInspectObject::closeFloater, this, false) );
|
||||
|
||||
// Hook up functionality
|
||||
getChild<LLUICtrl>("buy_btn")->setCommitCallback(
|
||||
|
|
|
|||
|
|
@ -507,19 +507,6 @@ 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,25 +174,6 @@ 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:
|
||||
|
|
@ -290,7 +271,9 @@ public:
|
|||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLFindByMask
|
||||
// Class LLFindNonLinksByMask
|
||||
//
|
||||
//
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
class LLFindByMask : public LLInventoryCollectFunctor
|
||||
{
|
||||
|
|
@ -399,19 +382,6 @@ 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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -107,12 +107,9 @@ void LLInventoryItemsList::idle(void* user_data)
|
|||
}
|
||||
}
|
||||
|
||||
LLFastTimer::DeclareTimer FTM_INVENTORY_ITEMS_REFRESH("Inventory List Refresh");
|
||||
|
||||
void LLInventoryItemsList::refresh()
|
||||
{
|
||||
LLFastTimer _(FTM_INVENTORY_ITEMS_REFRESH);
|
||||
static const unsigned ADD_LIMIT = 20;
|
||||
static const unsigned ADD_LIMIT = 50;
|
||||
|
||||
uuid_vec_t added_items;
|
||||
uuid_vec_t removed_items;
|
||||
|
|
@ -143,8 +140,7 @@ void LLInventoryItemsList::refresh()
|
|||
it = removed_items.begin();
|
||||
for( ; removed_items.end() != it; ++it)
|
||||
{
|
||||
// don't filter items right away
|
||||
removeItemByUUID(*it, false);
|
||||
removeItemByUUID(*it);
|
||||
}
|
||||
|
||||
// Filter, rearrange and notify parent about shape changes
|
||||
|
|
|
|||
|
|
@ -51,12 +51,7 @@ static const S32 WIDGET_SPACING = 3;
|
|||
|
||||
LLPanelInventoryListItemBase::Params::Params()
|
||||
: default_style("default_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")
|
||||
worn_style("worn_style")
|
||||
{};
|
||||
|
||||
LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInventoryItem* item)
|
||||
|
|
@ -64,10 +59,8 @@ LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInven
|
|||
LLPanelInventoryListItemBase* list_item = NULL;
|
||||
if (item)
|
||||
{
|
||||
const LLPanelInventoryListItemBase::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelInventoryListItemBase>();
|
||||
list_item = new LLPanelInventoryListItemBase(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
list_item = new LLPanelInventoryListItemBase(item);
|
||||
list_item->init();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
|
@ -83,25 +76,6 @@ 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();
|
||||
}
|
||||
|
||||
|
|
@ -160,6 +134,9 @@ 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)
|
||||
{
|
||||
|
|
@ -179,18 +156,18 @@ void LLPanelInventoryListItemBase::setValue(const LLSD& value)
|
|||
{
|
||||
if (!value.isMap()) return;
|
||||
if (!value.has("selected")) return;
|
||||
mSelected = value["selected"];
|
||||
childSetVisible("selected_icon", value["selected"]);
|
||||
}
|
||||
|
||||
void LLPanelInventoryListItemBase::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHovered = true;
|
||||
childSetVisible("hovered_icon", true);
|
||||
LLPanel::onMouseEnter(x, y, mask);
|
||||
}
|
||||
|
||||
void LLPanelInventoryListItemBase::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHovered = false;
|
||||
childSetVisible("hovered_icon", false);
|
||||
LLPanel::onMouseLeave(x, y, mask);
|
||||
}
|
||||
|
||||
|
|
@ -267,47 +244,21 @@ S32 LLPanelInventoryListItemBase::notify(const LLSD& info)
|
|||
return rv;
|
||||
}
|
||||
|
||||
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)
|
||||
LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem* item)
|
||||
: LLPanel()
|
||||
, mInventoryItemUUID(item ? item->getUUID() : LLUUID::null)
|
||||
, mIconCtrl(NULL)
|
||||
, mTitleCtrl(NULL)
|
||||
, mWidgetSpacing(WIDGET_SPACING)
|
||||
, mLeftWidgetsWidth(0)
|
||||
, mRightWidgetsWidth(0)
|
||||
, mNeedsRefresh(false)
|
||||
{
|
||||
LLIconCtrl::Params icon_params(params.item_icon);
|
||||
applyXUILayout(icon_params, this);
|
||||
}
|
||||
|
||||
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"));
|
||||
}
|
||||
void LLPanelInventoryListItemBase::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory_item.xml");
|
||||
}
|
||||
|
||||
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,11 +70,6 @@ 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();
|
||||
};
|
||||
|
||||
|
|
@ -154,22 +149,30 @@ public:
|
|||
/** Get the associated inventory item */
|
||||
LLViewerInventoryItem* getItem() const;
|
||||
|
||||
void setSeparatorVisible(bool visible) { mSeparatorVisible = visible; }
|
||||
|
||||
virtual ~LLPanelInventoryListItemBase(){}
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelInventoryListItemBase(LLViewerInventoryItem* item, const Params& params);
|
||||
LLPanelInventoryListItemBase(LLViewerInventoryItem* item);
|
||||
|
||||
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; }
|
||||
|
||||
|
|
@ -218,14 +221,6 @@ 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(LLURI::unescape(slurl.getSLURLString()));
|
||||
mTextEntry->setText(slurl.getSLURLString());
|
||||
mTextEntry->selectAll();
|
||||
|
||||
mMaturityButton->setVisible(FALSE);
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@
|
|||
|
||||
#include "llpanelgenerictip.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llviewercontrol.h" // for gSavedSettings
|
||||
|
||||
|
||||
LLPanelGenericTip::LLPanelGenericTip(
|
||||
|
|
@ -46,8 +45,7 @@ LLPanelGenericTip::LLPanelGenericTip(
|
|||
|
||||
childSetValue("message", notification->getMessage());
|
||||
|
||||
|
||||
S32 max_line_count = gSavedSettings.getS32("TipToastMessageLineCount");
|
||||
snapToMessageHeight(getChild<LLTextBox> ("message"), max_line_count);
|
||||
// set line max count to 3 in case of a very long name
|
||||
snapToMessageHeight(getChild<LLTextBox> ("message"), 3);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -197,15 +197,14 @@ 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");
|
||||
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);
|
||||
childSetLabelArg("Upload Image", "[COST]", upload_cost);
|
||||
childSetLabelArg("Upload Sound", "[COST]", upload_cost);
|
||||
childSetLabelArg("Upload Animation", "[COST]", upload_cost);
|
||||
childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
|
||||
|
||||
initListCommandsHandlers();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@
|
|||
|
||||
#include "llnotifications.h"
|
||||
#include "llpanelonlinestatus.h"
|
||||
#include "llviewercontrol.h" // for gSavedSettings
|
||||
|
||||
LLPanelOnlineStatus::LLPanelOnlineStatus(
|
||||
const LLNotificationPtr& notification) :
|
||||
|
|
@ -55,7 +54,7 @@ LLPanelOnlineStatus::LLPanelOnlineStatus(
|
|||
notification, notification->getResponseTemplate()));
|
||||
}
|
||||
|
||||
S32 max_line_count = gSavedSettings.getS32("TipToastMessageLineCount");
|
||||
snapToMessageHeight(getChild<LLTextBox> ("message"), max_line_count);
|
||||
// set line max count to 3 in case of a very long name
|
||||
snapToMessageHeight(getChild<LLTextBox> ("message"), 3);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@
|
|||
#include "llsdutil.h"
|
||||
#include "llsidepanelappearance.h"
|
||||
#include "lltoggleablemenu.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llwearablelist.h"
|
||||
#include "llwearableitemslist.h"
|
||||
#include "llwearabletype.h"
|
||||
|
|
@ -264,7 +263,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::onCOFChanged, this));
|
||||
observer.addCOFChangedCallback(boost::bind(&LLPanelOutfitEdit::update, this));
|
||||
|
||||
gAgentWearables.addLoadingStartedCallback(boost::bind(&LLPanelOutfitEdit::onOutfitChanging, this, true));
|
||||
gAgentWearables.addLoadedCallback(boost::bind(&LLPanelOutfitEdit::onOutfitChanging, this, false));
|
||||
|
|
@ -298,9 +297,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 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.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.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)));
|
||||
|
|
@ -332,7 +331,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, _2));
|
||||
setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this));
|
||||
|
||||
mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
|
||||
mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
|
||||
|
|
@ -348,8 +347,8 @@ BOOL LLPanelOutfitEdit::postBuild()
|
|||
mInventoryItemsPanel = getChild<LLInventoryPanel>("folder_view");
|
||||
mInventoryItemsPanel->setFilterTypes(ALL_ITEMS_MASK);
|
||||
mInventoryItemsPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
|
||||
mInventoryItemsPanel->setSelectCallback(boost::bind(&LLPanelOutfitEdit::updatePlusButton, this));
|
||||
mInventoryItemsPanel->getRootFolder()->setReshapeCallback(boost::bind(&LLPanelOutfitEdit::updatePlusButton, this));
|
||||
mInventoryItemsPanel->setSelectCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this));
|
||||
mInventoryItemsPanel->getRootFolder()->setReshapeCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this));
|
||||
|
||||
mCOFDragAndDropObserver = new LLCOFDragAndDropObserver(mInventoryItemsPanel->getModel());
|
||||
|
||||
|
|
@ -389,7 +388,7 @@ BOOL LLPanelOutfitEdit::postBuild()
|
|||
mWearablesListViewPanel = getChild<LLPanel>("filtered_wearables_panel");
|
||||
mWearableItemsList = getChild<LLInventoryItemsList>("list_view");
|
||||
mWearableItemsList->setCommitOnSelectionChange(true);
|
||||
mWearableItemsList->setCommitCallback(boost::bind(&LLPanelOutfitEdit::updatePlusButton, this));
|
||||
mWearableItemsList->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this));
|
||||
mWearableItemsList->setDoubleClickCallback(boost::bind(&LLPanelOutfitEdit::onPlusBtnClicked, this));
|
||||
|
||||
mSaveComboBtn.reset(new LLSaveOutfitComboBtn(this));
|
||||
|
|
@ -443,9 +442,6 @@ void LLPanelOutfitEdit::showAddWearablesPanel(bool show_add_wearables)
|
|||
mListViewFilterCmbBox->setVisible(false);
|
||||
|
||||
showWearablesFilter();
|
||||
|
||||
// Reset mWearableItemsList position to top. See EXT-8180.
|
||||
mWearableItemsList->goToTop();
|
||||
}
|
||||
|
||||
//switching button bars
|
||||
|
|
@ -587,16 +583,11 @@ void LLPanelOutfitEdit::onPlusBtnClicked(void)
|
|||
}
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::onVisibilityChange(const LLSD &in_visible_chain)
|
||||
void LLPanelOutfitEdit::onVisibilityChange()
|
||||
{
|
||||
showAddWearablesPanel(false);
|
||||
mWearableItemsList->resetSelection();
|
||||
mInventoryItemsPanel->clearSelection();
|
||||
|
||||
if (in_visible_chain.asBoolean())
|
||||
{
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::onAddWearableClicked(void)
|
||||
|
|
@ -623,52 +614,15 @@ void LLPanelOutfitEdit::onShopButtonClicked()
|
|||
{
|
||||
static LLShopURLDispatcher url_resolver;
|
||||
|
||||
// will contain the resultant URL
|
||||
std::string url;
|
||||
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
// try to get wearable type from 'Add More' panel first (EXT-7639)
|
||||
LLWearableType::EType type = getAddMorePanelSelectionType();
|
||||
|
||||
if (type == LLWearableType::WT_NONE)
|
||||
{
|
||||
type = getCOFWearablesSelectionType();
|
||||
}
|
||||
|
||||
ESex sex = gAgentAvatarp->getSex();
|
||||
|
||||
// WT_INVALID comes for attachments
|
||||
if (type != LLWearableType::WT_INVALID && type != LLWearableType::WT_NONE)
|
||||
{
|
||||
url = url_resolver.resolveURL(type, sex);
|
||||
}
|
||||
|
||||
if (url.empty())
|
||||
{
|
||||
url = url_resolver.resolveURL(mCOFWearables->getExpandedAccordionAssetType(), sex);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "Agent avatar is invalid" << llendl;
|
||||
|
||||
// the second argument is not important in this case: generic market place will be opened
|
||||
url = url_resolver.resolveURL(LLWearableType::WT_NONE, SEX_FEMALE);
|
||||
}
|
||||
|
||||
LLWeb::loadURLExternal(url);
|
||||
}
|
||||
|
||||
LLWearableType::EType LLPanelOutfitEdit::getCOFWearablesSelectionType() const
|
||||
{
|
||||
std::vector<LLPanel*> selected_items;
|
||||
LLWearableType::EType type = LLWearableType::WT_NONE;
|
||||
|
||||
mCOFWearables->getSelectedItems(selected_items);
|
||||
|
||||
ESex sex = gSavedSettings.getU32("AvatarSex") ? SEX_MALE : SEX_FEMALE;
|
||||
|
||||
if (selected_items.size() == 1)
|
||||
{
|
||||
LLWearableType::EType type = LLWearableType::WT_NONE;
|
||||
LLPanel* item = selected_items.front();
|
||||
|
||||
// LLPanelDummyClothingListItem is lower then LLPanelInventoryListItemBase in hierarchy tree
|
||||
|
|
@ -680,45 +634,20 @@ LLWearableType::EType LLPanelOutfitEdit::getCOFWearablesSelectionType() const
|
|||
{
|
||||
type = real_item->getWearableType();
|
||||
}
|
||||
|
||||
// WT_INVALID comes for attachments
|
||||
if (type != LLWearableType::WT_INVALID)
|
||||
{
|
||||
url = url_resolver.resolveURL(type, sex);
|
||||
}
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
LLWearableType::EType LLPanelOutfitEdit::getAddMorePanelSelectionType() const
|
||||
{
|
||||
LLWearableType::EType type = LLWearableType::WT_NONE;
|
||||
|
||||
if (mAddWearablesPanel != NULL && mAddWearablesPanel->getVisible())
|
||||
if (url.empty())
|
||||
{
|
||||
if (mInventoryItemsPanel != NULL && mInventoryItemsPanel->getVisible())
|
||||
{
|
||||
std::set<LLUUID> selected_uuids = mInventoryItemsPanel->getRootFolder()->getSelectionList();
|
||||
|
||||
if (selected_uuids.size() == 1)
|
||||
{
|
||||
type = getWearableTypeByItemUUID(*(selected_uuids.begin()));
|
||||
}
|
||||
}
|
||||
else if (mWearableItemsList != NULL && mWearableItemsList->getVisible())
|
||||
{
|
||||
std::vector<LLUUID> selected_uuids;
|
||||
mWearableItemsList->getSelectedUUIDs(selected_uuids);
|
||||
|
||||
if (selected_uuids.size() == 1)
|
||||
{
|
||||
type = getWearableTypeByItemUUID(selected_uuids.front());
|
||||
}
|
||||
}
|
||||
url = url_resolver.resolveURL(mCOFWearables->getExpandedAccordionAssetType(), sex);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
LLWearableType::EType LLPanelOutfitEdit::getWearableTypeByItemUUID(const LLUUID& item_uuid) const
|
||||
{
|
||||
LLViewerInventoryItem* item = gInventory.getLinkedItem(item_uuid);
|
||||
return (item != NULL) ? item->getWearableType() : LLWearableType::WT_NONE;
|
||||
LLWeb::loadURLExternal(url);
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::onRemoveFromOutfitClicked(void)
|
||||
|
|
@ -738,7 +667,7 @@ void LLPanelOutfitEdit::onEditWearableClicked(void)
|
|||
}
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::updatePlusButton()
|
||||
void LLPanelOutfitEdit::onInventorySelectionChange()
|
||||
{
|
||||
uuid_vec_t selected_items;
|
||||
getSelectedItemsUUID(selected_items);
|
||||
|
|
@ -981,9 +910,6 @@ void LLPanelOutfitEdit::updateVerbs()
|
|||
mStatus->setText(outfit_is_dirty ? getString("unsaved_changes") : getString("now_editing"));
|
||||
|
||||
updateCurrentOutfitName();
|
||||
|
||||
//updating state of "Wear Item" button previously known as "Plus" button
|
||||
updatePlusButton();
|
||||
}
|
||||
|
||||
bool LLPanelOutfitEdit::switchPanels(LLPanel* switch_from_panel, LLPanel* switch_to_panel)
|
||||
|
|
@ -1019,6 +945,9 @@ void LLPanelOutfitEdit::showFilteredWearablesListView(LLWearableType::EType type
|
|||
showAddWearablesPanel(true);
|
||||
showWearablesListView();
|
||||
|
||||
// Reset mWearableItemsList position to top. See EXT-8180.
|
||||
mWearableItemsList->goToTop();
|
||||
|
||||
//e_list_view_item_type implicitly contains LLWearableType::EType starting from LVIT_SHAPE
|
||||
applyListViewFilter((EListViewItemType) (LVIT_SHAPE + type));
|
||||
}
|
||||
|
|
@ -1085,13 +1014,5 @@ void LLPanelOutfitEdit::getSelectedItemsUUID(uuid_vec_t& uuid_list)
|
|||
// return selected_id;
|
||||
}
|
||||
|
||||
void LLPanelOutfitEdit::onCOFChanged()
|
||||
{
|
||||
//the panel is only updated when is visible to a user
|
||||
if (!isInVisibleChain()) return;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -145,10 +145,10 @@ public:
|
|||
void onFolderViewFilterCommitted(LLUICtrl* ctrl);
|
||||
void onListViewFilterCommitted(LLUICtrl* ctrl);
|
||||
void onSearchEdit(const std::string& string);
|
||||
void updatePlusButton();
|
||||
void onInventorySelectionChange();
|
||||
void onPlusBtnClicked(void);
|
||||
|
||||
void onVisibilityChange(const LLSD &in_visible_chain);
|
||||
void onVisibilityChange();
|
||||
|
||||
void applyFolderViewFilter(EFolderViewItemType type);
|
||||
void applyListViewFilter(EListViewItemType type);
|
||||
|
|
@ -196,11 +196,6 @@ private:
|
|||
void onOutfitChanging(bool started);
|
||||
void getSelectedItemsUUID(uuid_vec_t& uuid_list);
|
||||
void getCurrentItemUUID(LLUUID& selected_id);
|
||||
void onCOFChanged();
|
||||
|
||||
LLWearableType::EType getCOFWearablesSelectionType() const;
|
||||
LLWearableType::EType getAddMorePanelSelectionType() const;
|
||||
LLWearableType::EType getWearableTypeByItemUUID(const LLUUID& item_uuid) const;
|
||||
|
||||
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() ? LLTrans::getString("AvatarNameWaiting") : display_name);
|
||||
mAvatarList->addAvalineItem(avatar_id, mSpeakerMgr->getSessionID(), display_name.empty() ? display_name : LLTrans::getString("AvatarNameWaiting"));
|
||||
mAvalineUpdater->watchAvalineCaller(avatar_id);
|
||||
}
|
||||
adjustParticipant(avatar_id);
|
||||
|
|
|
|||
|
|
@ -75,8 +75,7 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
|
|||
mLastWidth(0),
|
||||
mAspectRatio(0.f),
|
||||
mPreviewToSave(FALSE),
|
||||
mImage(NULL),
|
||||
mImageOldBoostLevel(LLViewerTexture::BOOST_NONE)
|
||||
mImage(NULL)
|
||||
{
|
||||
updateImageID();
|
||||
if (key.has("save_as"))
|
||||
|
|
@ -94,7 +93,7 @@ LLPreviewTexture::~LLPreviewTexture()
|
|||
{
|
||||
getWindow()->decBusyCount();
|
||||
}
|
||||
mImage->setBoostLevel(mImageOldBoostLevel);
|
||||
|
||||
mImage = NULL;
|
||||
}
|
||||
|
||||
|
|
@ -544,7 +543,6 @@ void LLPreviewTexture::onAspectRatioCommit(LLUICtrl* ctrl, void* userdata)
|
|||
void LLPreviewTexture::loadAsset()
|
||||
{
|
||||
mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
mImageOldBoostLevel = mImage->getBoostLevel();
|
||||
mImage->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
|
||||
mImage->forceToSaveRawImage(0) ;
|
||||
mAssetStatus = PREVIEW_ASSET_LOADING;
|
||||
|
|
|
|||
|
|
@ -82,10 +82,9 @@ private:
|
|||
void updateDimensions();
|
||||
LLUUID mImageID;
|
||||
LLPointer<LLViewerFetchedTexture> mImage;
|
||||
S32 mImageOldBoostLevel;
|
||||
BOOL mLoadingFullImage;
|
||||
std::string mSaveFileName;
|
||||
LLFrameTimer mSavedFileTimer;
|
||||
BOOL mLoadingFullImage;
|
||||
BOOL mShowKeepDiscard;
|
||||
BOOL mCopyToInv;
|
||||
|
||||
|
|
@ -95,10 +94,11 @@ private:
|
|||
// This is stored off in a member variable, because the save-as
|
||||
// button and drag and drop functionality need to know.
|
||||
BOOL mIsCopyable;
|
||||
BOOL mUpdateDimensions;
|
||||
|
||||
S32 mLastHeight;
|
||||
S32 mLastWidth;
|
||||
F32 mAspectRatio;
|
||||
F32 mAspectRatio;
|
||||
BOOL mUpdateDimensions;
|
||||
|
||||
LLLoadedCallbackEntry::source_callback_list_t mCallbackTextureList ;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -176,15 +176,7 @@ void LLScriptFloater::onClose(bool app_quitting)
|
|||
|
||||
if(getNotificationId().notNull())
|
||||
{
|
||||
// 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());
|
||||
}
|
||||
LLScriptFloaterManager::getInstance()->onRemoveNotification(getNotificationId());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -360,7 +352,7 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
|
|||
set_new_message |= !floater->hasFocus();
|
||||
}
|
||||
|
||||
removeNotification(it->first);
|
||||
onRemoveNotification(it->first);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -387,17 +379,6 @@ 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())
|
||||
|
|
@ -411,8 +392,6 @@ 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)
|
||||
|
|
@ -421,6 +400,8 @@ 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,11 +64,6 @@ 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",LLUI::getUIImage("sidebar_tab_left.tga")),
|
||||
tab_btn_image_selected("tab_btn_image_selected",LLUI::getUIImage("button_enabled_selected_32x128.tga")),
|
||||
tab_btn_image_normal("tab_btn_image","sidebar_tab_left.tga"),
|
||||
tab_btn_image_selected("tab_btn_image_selected","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(const Params& params)
|
||||
LLSideTray::LLSideTray(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(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);
|
||||
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);
|
||||
|
||||
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<LLUIImage*> tab_btn_image_normal,
|
||||
tab_btn_image_selected;
|
||||
Optional<bool> collapsed;
|
||||
Optional<std::string> tab_btn_image_normal;
|
||||
Optional<std::string> tab_btn_image_selected;
|
||||
|
||||
Optional<S32> default_button_width,
|
||||
default_button_height,
|
||||
default_button_margin;
|
||||
Optional<S32> default_button_width;
|
||||
Optional<S32> default_button_height;
|
||||
Optional<S32> default_button_margin;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
|
@ -68,7 +68,7 @@ public:
|
|||
static LLSideTray* getInstance ();
|
||||
static bool instanceCreated ();
|
||||
protected:
|
||||
LLSideTray(const Params& params);
|
||||
LLSideTray(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()->removeNotification(mChiclet->getSessionId());
|
||||
LLScriptFloaterManager::getInstance()->onRemoveNotification(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().removeNotification(*iter);
|
||||
LLScriptFloaterManager::instance().onRemoveNotification(*iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -423,10 +423,6 @@ 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,10 +89,9 @@ void LLURLLineEditor::copyEscapedURLToClipboard()
|
|||
|
||||
const std::string unescaped_text = wstring_to_utf8str(mText.getWString().substr(left_pos, length));
|
||||
LLWString text_to_copy;
|
||||
// *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
|
||||
if (LLSLURL(unescaped_text).isValid())
|
||||
text_to_copy = utf8str_to_wstring(LLWeb::escapeURL(unescaped_text));
|
||||
else // human-readable location
|
||||
else
|
||||
text_to_copy = utf8str_to_wstring(unescaped_text);
|
||||
|
||||
gClipboard.copyFromString( text_to_copy );
|
||||
|
|
|
|||
|
|
@ -847,21 +847,6 @@ 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,7 +36,6 @@
|
|||
#include "llinventory.h"
|
||||
#include "llframetimer.h"
|
||||
#include "llwearable.h"
|
||||
#include "llui.h" //for LLDestroyClass
|
||||
|
||||
#include <boost/signals2.hpp> // boost::signals2::trackable
|
||||
|
||||
|
|
@ -300,9 +299,8 @@ private:
|
|||
// misc functions
|
||||
//void inventory_reliable_callback(void**, S32 status);
|
||||
|
||||
class LLInventoryCallbackManager : public LLDestroyClass<LLInventoryCallbackManager>
|
||||
class LLInventoryCallbackManager
|
||||
{
|
||||
friend class LLDestroyClass<LLInventoryCallbackManager>;
|
||||
public:
|
||||
LLInventoryCallbackManager();
|
||||
~LLInventoryCallbackManager();
|
||||
|
|
@ -310,12 +308,9 @@ public:
|
|||
void fire(U32 callback_id, const LLUUID& item_id);
|
||||
U32 registerCB(LLPointer<LLInventoryCallback> cb);
|
||||
private:
|
||||
typedef std::map<U32, LLPointer<LLInventoryCallback> > callback_map_t;
|
||||
callback_map_t mMap;
|
||||
std::map<U32, LLPointer<LLInventoryCallback> > mMap;
|
||||
U32 mLastCallback;
|
||||
static LLInventoryCallbackManager *sInstance;
|
||||
static void destroyClass();
|
||||
|
||||
public:
|
||||
static bool is_instantiated() { return sInstance != NULL; }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2585,7 +2585,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
params.substitutions = substitutions;
|
||||
params.payload = payload;
|
||||
|
||||
LLPostponedNotification::add<LLPostponedServerObjectNotification>(params, from_id, from_group);
|
||||
LLPostponedNotification::add<LLPostponedServerObjectNotification>(params, from_id, false);
|
||||
}
|
||||
break;
|
||||
case IM_FROM_TASK_AS_ALERT:
|
||||
|
|
|
|||
|
|
@ -79,7 +79,6 @@
|
|||
#include "llviewerparceloverlay.h"
|
||||
#include "llviewerpartsource.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llviewerstats.h"
|
||||
#include "llviewertextureanim.h"
|
||||
#include "llviewerwindow.h" // For getSpinAxis
|
||||
#include "llvoavatar.h"
|
||||
|
|
@ -1917,12 +1916,6 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
|
||||
avatar->clampAttachmentPositions();
|
||||
}
|
||||
|
||||
// If we're snapping the position by more than 0.5m, update LLViewerStats::mAgentPositionSnaps
|
||||
if ( asAvatar() && asAvatar()->isSelf() && (mag_sqr > 0.25f) )
|
||||
{
|
||||
LLViewerStats::getInstance()->mAgentPositionSnaps.push( diff.length() );
|
||||
}
|
||||
}
|
||||
|
||||
if (new_rot != mLastRot
|
||||
|
|
|
|||
|
|
@ -280,8 +280,6 @@ LLViewerStats::LLViewerStats() :
|
|||
{
|
||||
mStats[ST_HAS_BAD_TIMER] = 1.0;
|
||||
}
|
||||
|
||||
mAgentPositionSnaps.reset();
|
||||
}
|
||||
|
||||
LLViewerStats::~LLViewerStats()
|
||||
|
|
@ -301,8 +299,6 @@ void LLViewerStats::resetStats()
|
|||
LLViewerStats::getInstance()->mPacketsOutStat.reset();
|
||||
LLViewerStats::getInstance()->mFPSStat.reset();
|
||||
LLViewerStats::getInstance()->mTexturePacketsStat.reset();
|
||||
|
||||
LLViewerStats::getInstance()->mAgentPositionSnaps.reset();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -397,10 +393,6 @@ void LLViewerStats::addToMessage(LLSD &body) const
|
|||
<< llendl;
|
||||
}
|
||||
}
|
||||
|
||||
body["AgentPositionSnaps"] = mAgentPositionSnaps.getData();
|
||||
llinfos << "STAT: AgentPositionSnaps: Mean = " << mAgentPositionSnaps.getMean() << "; StdDev = " << mAgentPositionSnaps.getStdDev()
|
||||
<< "; Count = " << mAgentPositionSnaps.getCount() << llendl;
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
|||
|
|
@ -197,61 +197,6 @@ public:
|
|||
|
||||
void addToMessage(LLSD &body) const;
|
||||
|
||||
struct StatsAccumulator
|
||||
{
|
||||
S32 mCount;
|
||||
F32 mSum;
|
||||
F32 mSumOfSquares;
|
||||
U32 mCountOfNextUpdatesToIgnore;
|
||||
|
||||
inline void push( F32 val )
|
||||
{
|
||||
if ( mCountOfNextUpdatesToIgnore > 0 )
|
||||
{
|
||||
mCountOfNextUpdatesToIgnore--;
|
||||
return;
|
||||
}
|
||||
|
||||
mCount++;
|
||||
mSum += val;
|
||||
mSumOfSquares += val * val;
|
||||
}
|
||||
|
||||
inline F32 getMean() const
|
||||
{
|
||||
return (mCount == 0) ? 0.f : ((F32)mSum)/mCount;
|
||||
}
|
||||
|
||||
inline F32 getStdDev() const
|
||||
{
|
||||
const F32 mean = getMean();
|
||||
return (mCount == 0) ? 0.f : sqrt( mSumOfSquares/mCount - (mean * mean) );
|
||||
}
|
||||
|
||||
inline U32 getCount() const
|
||||
{
|
||||
return mCount;
|
||||
}
|
||||
|
||||
inline void reset()
|
||||
{
|
||||
mCount = 0;
|
||||
mSum = mSumOfSquares = 0.f;
|
||||
mCountOfNextUpdatesToIgnore = 0;
|
||||
}
|
||||
|
||||
inline LLSD getData() const
|
||||
{
|
||||
LLSD data;
|
||||
data["mean"] = getMean();
|
||||
data["std_dev"] = getStdDev();
|
||||
data["count"] = (S32)mCount;
|
||||
return data;
|
||||
}
|
||||
};
|
||||
|
||||
StatsAccumulator mAgentPositionSnaps;
|
||||
|
||||
private:
|
||||
F64 mStats[ST_COUNT];
|
||||
|
||||
|
|
|
|||
|
|
@ -495,7 +495,6 @@ LLViewerTexture::LLViewerTexture(const U32 width, const U32 height, const U8 com
|
|||
mFullHeight = height ;
|
||||
mUseMipMaps = usemipmaps ;
|
||||
mComponents = components ;
|
||||
setTexelsPerImage();
|
||||
|
||||
mID.generate();
|
||||
sImageCount++;
|
||||
|
|
@ -523,7 +522,6 @@ void LLViewerTexture::init(bool firstinit)
|
|||
|
||||
mFullWidth = 0;
|
||||
mFullHeight = 0;
|
||||
mTexelsPerImage = 0 ;
|
||||
mUseMipMaps = FALSE ;
|
||||
mComponents = 0 ;
|
||||
|
||||
|
|
@ -532,7 +530,7 @@ void LLViewerTexture::init(bool firstinit)
|
|||
mMaxVirtualSize = 0.f;
|
||||
mNeedsGLTexture = FALSE ;
|
||||
mMaxVirtualSizeResetInterval = 1;
|
||||
mMaxVirtualSizeResetCounter = mMaxVirtualSizeResetInterval ;
|
||||
mMaxVirtualSizeResetCounter = 1 ;
|
||||
mAdditionalDecodePriority = 0.f ;
|
||||
mParcelMedia = NULL ;
|
||||
mNumFaces = 0 ;
|
||||
|
|
@ -840,8 +838,7 @@ BOOL LLViewerTexture::createGLTexture(S32 discard_level, const LLImageRaw* image
|
|||
{
|
||||
mFullWidth = mGLTexturep->getCurrentWidth() ;
|
||||
mFullHeight = mGLTexturep->getCurrentHeight() ;
|
||||
mComponents = mGLTexturep->getComponents() ;
|
||||
setTexelsPerImage();
|
||||
mComponents = mGLTexturep->getComponents() ;
|
||||
}
|
||||
|
||||
return ret ;
|
||||
|
|
@ -1059,16 +1056,9 @@ void LLViewerTexture::destroyGLTexture()
|
|||
}
|
||||
}
|
||||
|
||||
void LLViewerTexture::setTexelsPerImage()
|
||||
{
|
||||
S32 fullwidth = llmin(mFullWidth,(S32)MAX_IMAGE_SIZE_DEFAULT);
|
||||
S32 fullheight = llmin(mFullHeight,(S32)MAX_IMAGE_SIZE_DEFAULT);
|
||||
mTexelsPerImage = (F32)fullwidth * fullheight;
|
||||
}
|
||||
|
||||
BOOL LLViewerTexture::isLargeImage()
|
||||
{
|
||||
return (S32)mTexelsPerImage > LLViewerTexture::sMinLargeImageSize ;
|
||||
return mFullWidth * mFullHeight > LLViewerTexture::sMinLargeImageSize ;
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
@ -1425,7 +1415,6 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
|
|||
|
||||
mFullWidth = mRawImage->getWidth();
|
||||
mFullHeight = mRawImage->getHeight();
|
||||
setTexelsPerImage();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1630,7 +1619,11 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
|
|||
{
|
||||
// priority range = 100,000 - 500,000
|
||||
S32 desired_discard = mDesiredDiscardLevel;
|
||||
if (!isJustBound() && mCachedRawImageReady)
|
||||
if (getDontDiscard())
|
||||
{
|
||||
desired_discard -= 2;
|
||||
}
|
||||
else if (!isJustBound() && mCachedRawImageReady)
|
||||
{
|
||||
if(mBoostLevel < BOOST_HIGH)
|
||||
{
|
||||
|
|
@ -1646,7 +1639,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
|
|||
|
||||
S32 ddiscard = cur_discard - desired_discard;
|
||||
ddiscard = llclamp(ddiscard, -1, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY);
|
||||
priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR;
|
||||
priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR;
|
||||
}
|
||||
|
||||
// Priority Formula:
|
||||
|
|
@ -1654,51 +1647,19 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
|
|||
// [10,000,000] + [1,000,000-9,000,000] + [100,000-500,000] + [1-20,000] + [0-999]
|
||||
if (priority > 0.0f)
|
||||
{
|
||||
bool large_enough = mCachedRawImageReady && ((S32)mTexelsPerImage > sMinLargeImageSize) ;
|
||||
if(large_enough)
|
||||
{
|
||||
//Note:
|
||||
//to give small, low-priority textures some chance to be fetched,
|
||||
//cut the priority in half if the texture size is larger than 256 * 256 and has a 64*64 ready.
|
||||
priority *= 0.5f ;
|
||||
}
|
||||
|
||||
pixel_priority = llclamp(pixel_priority, 0.0f, MAX_PRIORITY_PIXEL);
|
||||
|
||||
priority += pixel_priority + PRIORITY_BOOST_LEVEL_FACTOR * mBoostLevel;
|
||||
|
||||
if ( mBoostLevel > BOOST_HIGH)
|
||||
{
|
||||
if(mBoostLevel > BOOST_SUPER_HIGH)
|
||||
{
|
||||
//for very important textures, always grant the highest priority.
|
||||
priority += PRIORITY_BOOST_HIGH_FACTOR;
|
||||
}
|
||||
else if(mCachedRawImageReady)
|
||||
{
|
||||
//Note:
|
||||
//to give small, low-priority textures some chance to be fetched,
|
||||
//if high priority texture has a 64*64 ready, lower its fetching priority.
|
||||
setAdditionalDecodePriority(0.5f) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
priority += PRIORITY_BOOST_HIGH_FACTOR;
|
||||
}
|
||||
priority += PRIORITY_BOOST_HIGH_FACTOR;
|
||||
}
|
||||
|
||||
if(mAdditionalDecodePriority > 0.0f)
|
||||
{
|
||||
// priority range += 1,000,000.f-9,000,000.f
|
||||
F32 additional = PRIORITY_ADDITIONAL_FACTOR * (1.0 + mAdditionalDecodePriority * MAX_ADDITIONAL_LEVEL_FOR_PRIORITY);
|
||||
if(large_enough)
|
||||
{
|
||||
//Note:
|
||||
//to give small, low-priority textures some chance to be fetched,
|
||||
//cut the additional priority to a quarter if the texture size is larger than 256 * 256 and has a 64*64 ready.
|
||||
additional *= 0.25f ;
|
||||
}
|
||||
priority += additional;
|
||||
priority += PRIORITY_ADDITIONAL_FACTOR * (1.0 + mAdditionalDecodePriority * MAX_ADDITIONAL_LEVEL_FOR_PRIORITY);
|
||||
}
|
||||
}
|
||||
return priority;
|
||||
|
|
@ -1741,6 +1702,11 @@ void LLViewerFetchedTexture::updateVirtualSize()
|
|||
addTextureStats(0.f, FALSE) ;//reset
|
||||
}
|
||||
|
||||
if(mForceToSaveRawImage)
|
||||
{
|
||||
setAdditionalDecodePriority(0.75f) ; //boost the fetching priority
|
||||
}
|
||||
|
||||
for(U32 i = 0 ; i < mNumFaces ; i++)
|
||||
{
|
||||
LLFace* facep = mFaceList[i] ;
|
||||
|
|
@ -1853,7 +1819,6 @@ bool LLViewerFetchedTexture::updateFetch()
|
|||
{
|
||||
mFullWidth = mRawImage->getWidth() << mRawDiscardLevel;
|
||||
mFullHeight = mRawImage->getHeight() << mRawDiscardLevel;
|
||||
setTexelsPerImage();
|
||||
|
||||
if(mFullWidth > MAX_IMAGE_SIZE || mFullHeight > MAX_IMAGE_SIZE)
|
||||
{
|
||||
|
|
@ -2922,6 +2887,10 @@ void LLViewerLODTexture::processTextureStats()
|
|||
//static const F64 log_2 = log(2.0);
|
||||
static const F64 log_4 = log(4.0);
|
||||
|
||||
S32 fullwidth = llmin(mFullWidth,(S32)MAX_IMAGE_SIZE_DEFAULT);
|
||||
S32 fullheight = llmin(mFullHeight,(S32)MAX_IMAGE_SIZE_DEFAULT);
|
||||
mTexelsPerImage = (F32)fullwidth * fullheight;
|
||||
|
||||
F32 discard_level = 0.f;
|
||||
|
||||
// If we know the output width and height, we can force the discard
|
||||
|
|
|
|||
|
|
@ -126,16 +126,15 @@ public:
|
|||
BOOST_HIGH = 10,
|
||||
BOOST_BUMP ,
|
||||
BOOST_TERRAIN , // has to be high priority for minimap / low detail
|
||||
BOOST_SELECTED ,
|
||||
BOOST_AVATAR_BAKED_SELF ,
|
||||
BOOST_AVATAR_SELF , // needed for baking avatar
|
||||
BOOST_SUPER_HIGH , //textures higher than this need to be downloaded at the required resolution without delay.
|
||||
BOOST_SELECTED ,
|
||||
BOOST_HUD ,
|
||||
BOOST_AVATAR_BAKED_SELF ,
|
||||
BOOST_ICON ,
|
||||
BOOST_UI ,
|
||||
BOOST_PREVIEW ,
|
||||
BOOST_MAP ,
|
||||
BOOST_MAP_VISIBLE ,
|
||||
BOOST_MAP_VISIBLE ,
|
||||
BOOST_AVATAR_SELF , // needed for baking avatar
|
||||
BOOST_MAX_LEVEL,
|
||||
|
||||
//other texture Categories
|
||||
|
|
@ -269,7 +268,6 @@ protected:
|
|||
void init(bool firstinit) ;
|
||||
void reorganizeFaceList() ;
|
||||
void reorganizeVolumeList() ;
|
||||
void setTexelsPerImage();
|
||||
private:
|
||||
//note: do not make this function public.
|
||||
/*virtual*/ LLImageGL* getGLTexture() const ;
|
||||
|
|
@ -282,7 +280,6 @@ protected:
|
|||
S32 mFullHeight;
|
||||
BOOL mUseMipMaps ;
|
||||
S8 mComponents;
|
||||
F32 mTexelsPerImage; // Texels per image.
|
||||
mutable S8 mNeedsGLTexture;
|
||||
mutable F32 mMaxVirtualSize; // The largest virtual size of the image, in pixels - how much data to we need?
|
||||
mutable S32 mMaxVirtualSizeResetCounter ;
|
||||
|
|
@ -601,6 +598,8 @@ private:
|
|||
void scaleDown() ;
|
||||
|
||||
private:
|
||||
|
||||
F32 mTexelsPerImage; // Texels per image.
|
||||
F32 mDiscardVirtualSize; // Virtual size used to calculate desired discard
|
||||
F32 mCalculatedDiscardLevel; // Last calculated discard level
|
||||
};
|
||||
|
|
|
|||
|
|
@ -3189,26 +3189,29 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
|
|||
{ // muted avatars update at 16 hz
|
||||
mUpdatePeriod = 16;
|
||||
}
|
||||
else if (mVisibilityRank <= LLVOAvatar::sMaxVisible)
|
||||
else if (visible && mVisibilityRank <= LLVOAvatar::sMaxVisible)
|
||||
{ //first 25% of max visible avatars are not impostored
|
||||
mUpdatePeriod = 1;
|
||||
}
|
||||
else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 4)
|
||||
else if (visible && mVisibilityRank > LLVOAvatar::sMaxVisible * 4)
|
||||
{ //background avatars are REALLY slow updating impostors
|
||||
mUpdatePeriod = 16;
|
||||
}
|
||||
else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 3)
|
||||
else if (visible && mVisibilityRank > LLVOAvatar::sMaxVisible * 3)
|
||||
{ //back 25% of max visible avatars are slow updating impostors
|
||||
mUpdatePeriod = 8;
|
||||
}
|
||||
else if (mImpostorPixelArea <= impostor_area)
|
||||
else if (visible && mImpostorPixelArea <= impostor_area)
|
||||
{ // stuff in between gets an update period based on pixel area
|
||||
mUpdatePeriod = llclamp((S32) sqrtf(impostor_area*4.f/mImpostorPixelArea), 2, 8);
|
||||
}
|
||||
else if (visible && mVisibilityRank > LLVOAvatar::sMaxVisible)
|
||||
{ // force nearby impostors in ultra crowded areas
|
||||
mUpdatePeriod = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
//nearby avatars, update the impostors more frequently.
|
||||
mUpdatePeriod = 4;
|
||||
{ // not impostored
|
||||
mUpdatePeriod = 1;
|
||||
}
|
||||
|
||||
visible = (LLDrawable::getCurrentFrame()+mID.mData[0])%mUpdatePeriod == 0 ? TRUE : FALSE;
|
||||
|
|
@ -4271,12 +4274,10 @@ void LLVOAvatar::checkTextureLoading()
|
|||
return ;
|
||||
}
|
||||
|
||||
const F32 SELF_ADDITIONAL_PRI = 0.75f ;
|
||||
const F32 ADDITIONAL_PRI = 0.5f;
|
||||
void LLVOAvatar::addBakedTextureStats( LLViewerFetchedTexture* imagep, F32 pixel_area, F32 texel_area_ratio, S32 boost_level)
|
||||
{
|
||||
//if this function is not called for the last 512 frames, the texture pipeline will stop fetching this texture.
|
||||
static const S32 MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL = 512 ; //frames
|
||||
static const S32 MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL = 512 ; //frames
|
||||
|
||||
imagep->resetTextureStats();
|
||||
imagep->setCanUseHTTP(false) ; //turn off http fetching for baked textures.
|
||||
|
|
@ -4286,14 +4287,9 @@ void LLVOAvatar::addBakedTextureStats( LLViewerFetchedTexture* imagep, F32 pixel
|
|||
mMinPixelArea = llmin(pixel_area, mMinPixelArea);
|
||||
imagep->addTextureStats(pixel_area / texel_area_ratio);
|
||||
imagep->setBoostLevel(boost_level);
|
||||
|
||||
if(boost_level != LLViewerTexture::BOOST_AVATAR_BAKED_SELF)
|
||||
if(boost_level == LLViewerTexture::BOOST_AVATAR_BAKED_SELF)
|
||||
{
|
||||
imagep->setAdditionalDecodePriority(ADDITIONAL_PRI) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
imagep->setAdditionalDecodePriority(SELF_ADDITIONAL_PRI) ;
|
||||
imagep->setAdditionalDecodePriority(1.0f) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -7304,7 +7300,7 @@ void LLVOAvatar::cullAvatarsByPixelArea()
|
|||
std::sort(LLCharacter::sInstances.begin(), LLCharacter::sInstances.end(), CompareScreenAreaGreater());
|
||||
|
||||
// Update the avatars that have changed status
|
||||
U32 rank = 2; //1 is reserved for self.
|
||||
U32 rank = 0;
|
||||
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||
iter != LLCharacter::sInstances.end(); ++iter)
|
||||
{
|
||||
|
|
@ -7328,7 +7324,7 @@ void LLVOAvatar::cullAvatarsByPixelArea()
|
|||
|
||||
if (inst->isSelf())
|
||||
{
|
||||
inst->setVisibilityRank(1);
|
||||
inst->setVisibilityRank(0);
|
||||
}
|
||||
else if (inst->mDrawable.notNull() && inst->mDrawable->isVisible())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
LLPointer<LLVoiceVisualizer> mVoiceVisualizer;
|
||||
LLVoiceVisualizer* mVoiceVisualizer;
|
||||
int mCurrentGesticulationLevel;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
|
@ -1048,6 +1048,5 @@ protected: // Shared with LLVOAvatarSelf
|
|||
*******************************************************************************/
|
||||
|
||||
}; // LLVOAvatar
|
||||
extern const F32 SELF_ADDITIONAL_PRI;
|
||||
|
||||
#endif // LL_VO_AVATAR_H
|
||||
|
|
|
|||
|
|
@ -2034,7 +2034,7 @@ void LLVOAvatarSelf::addLocalTextureStats( ETextureIndex type, LLViewerFetchedTe
|
|||
imagep->resetTextureStats();
|
||||
imagep->setMaxVirtualSizeResetInterval(16);
|
||||
imagep->addTextureStats( desired_pixels / texel_area_ratio );
|
||||
imagep->setAdditionalDecodePriority(SELF_ADDITIONAL_PRI) ;
|
||||
imagep->setAdditionalDecodePriority(1.0f) ;
|
||||
imagep->forceUpdateBindStats() ;
|
||||
if (imagep->getDiscardLevel() < 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@ void LLPanelWearableListItem::onMouseLeave(S32 x, S32 y, MASK mask)
|
|||
reshapeWidgets();
|
||||
}
|
||||
|
||||
LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item, const LLPanelWearableListItem::Params& params)
|
||||
: LLPanelInventoryListItemBase(item, params)
|
||||
LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelInventoryListItemBase(item)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -101,19 +101,15 @@ LLPanelWearableOutfitItem* LLPanelWearableOutfitItem::create(LLViewerInventoryIt
|
|||
LLPanelWearableOutfitItem* list_item = NULL;
|
||||
if (item)
|
||||
{
|
||||
const LLPanelInventoryListItemBase::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelInventoryListItemBase>();
|
||||
|
||||
list_item = new LLPanelWearableOutfitItem(item, worn_indication_enabled, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
list_item = new LLPanelWearableOutfitItem(item, worn_indication_enabled);
|
||||
list_item->init();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
|
||||
bool worn_indication_enabled,
|
||||
const LLPanelWearableOutfitItem::Params& params)
|
||||
: LLPanelInventoryListItemBase(item, params)
|
||||
bool worn_indication_enabled)
|
||||
: LLPanelInventoryListItemBase(item)
|
||||
, mWornIndicationEnabled(worn_indication_enabled)
|
||||
{
|
||||
}
|
||||
|
|
@ -136,17 +132,6 @@ 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)
|
||||
|
|
@ -154,56 +139,26 @@ LLPanelClothingListItem* LLPanelClothingListItem::create(LLViewerInventoryItem*
|
|||
LLPanelClothingListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
const LLPanelClothingListItem::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelClothingListItem>();
|
||||
list_item = new LLPanelClothingListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
list_item = new LLPanelClothingListItem(item);
|
||||
list_item->init();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelClothingListItem::LLPanelClothingListItem(LLViewerInventoryItem* item, const LLPanelClothingListItem::Params& params)
|
||||
: LLPanelDeletableWearableListItem(item, params)
|
||||
LLPanelClothingListItem::LLPanelClothingListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelDeletableWearableListItem(item)
|
||||
{
|
||||
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();
|
||||
|
|
@ -223,64 +178,32 @@ 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)
|
||||
{
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelBodyPartsListItem>();
|
||||
list_item = new LLPanelBodyPartsListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
list_item = new LLPanelBodyPartsListItem(item);
|
||||
list_item->init();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelBodyPartsListItem::LLPanelBodyPartsListItem(LLViewerInventoryItem* item, const LLPanelBodyPartsListItem::Params& params)
|
||||
: LLPanelWearableListItem(item, params)
|
||||
LLPanelBodyPartsListItem::LLPanelBodyPartsListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelWearableListItem(item)
|
||||
{
|
||||
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();
|
||||
|
|
@ -291,11 +214,6 @@ 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)
|
||||
|
|
@ -303,22 +221,20 @@ LLPanelDeletableWearableListItem* LLPanelDeletableWearableListItem::create(LLVie
|
|||
LLPanelDeletableWearableListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelDeletableWearableListItem>();
|
||||
list_item = new LLPanelDeletableWearableListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
list_item = new LLPanelDeletableWearableListItem(item);
|
||||
list_item->init();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelDeletableWearableListItem::LLPanelDeletableWearableListItem(LLViewerInventoryItem* item, const LLPanelDeletableWearableListItem::Params& params)
|
||||
: LLPanelWearableListItem(item, params)
|
||||
LLPanelDeletableWearableListItem::LLPanelDeletableWearableListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelWearableListItem(item)
|
||||
{
|
||||
LLButton::Params button_params = params.delete_btn;
|
||||
applyXUILayout(button_params, this);
|
||||
addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
}
|
||||
|
||||
setSeparatorVisible(true);
|
||||
void LLPanelDeletableWearableListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_deletable_wearable_list_item.xml");
|
||||
}
|
||||
|
||||
BOOL LLPanelDeletableWearableListItem::postBuild()
|
||||
|
|
@ -344,11 +260,8 @@ LLPanelAttachmentListItem* LLPanelAttachmentListItem::create(LLViewerInventoryIt
|
|||
LLPanelAttachmentListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelDeletableWearableListItem>();
|
||||
|
||||
list_item = new LLPanelAttachmentListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
list_item = new LLPanelAttachmentListItem(item);
|
||||
list_item->init();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
|
@ -371,32 +284,27 @@ 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)
|
||||
{
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelDummyClothingListItem>();
|
||||
|
||||
LLPanelDummyClothingListItem* list_item = new LLPanelDummyClothingListItem(w_type, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
LLPanelDummyClothingListItem* list_item = new LLPanelDummyClothingListItem(w_type);
|
||||
list_item->init();
|
||||
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(getChildView("item_icon")->getRect().mLeft);
|
||||
setLeftWidgetsWidth(icon->getRect().mLeft);
|
||||
|
||||
setWidgetsVisible(false);
|
||||
reshapeWidgets();
|
||||
|
|
@ -409,23 +317,15 @@ LLWearableType::EType LLPanelDummyClothingListItem::getWearableType() const
|
|||
return mWearableType;
|
||||
}
|
||||
|
||||
LLPanelDummyClothingListItem::LLPanelDummyClothingListItem(LLWearableType::EType w_type, const LLPanelDummyClothingListItem::Params& params)
|
||||
: LLPanelWearableListItem(NULL, params),
|
||||
mWearableType(w_type)
|
||||
LLPanelDummyClothingListItem::LLPanelDummyClothingListItem(LLWearableType::EType w_type)
|
||||
: LLPanelWearableListItem(NULL)
|
||||
, 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));
|
||||
}
|
||||
|
||||
setSeparatorVisible(true);
|
||||
void LLPanelDummyClothingListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_dummy_clothing_list_item.xml");
|
||||
}
|
||||
|
||||
typedef std::map<LLWearableType::EType, std::string> clothing_to_string_map_t;
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ public:
|
|||
|
||||
protected:
|
||||
|
||||
LLPanelWearableListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
LLPanelWearableListItem(LLViewerInventoryItem* item);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -93,7 +93,7 @@ public:
|
|||
|
||||
protected:
|
||||
LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
|
||||
bool worn_indication_enabled, const Params& params);
|
||||
bool worn_indication_enabled);
|
||||
|
||||
private:
|
||||
bool mWornIndicationEnabled;
|
||||
|
|
@ -103,13 +103,6 @@ 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);
|
||||
|
||||
|
|
@ -123,7 +116,9 @@ public:
|
|||
inline void setShowDeleteButton(bool show) { setShowWidget("btn_delete", show); }
|
||||
|
||||
protected:
|
||||
LLPanelDeletableWearableListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
LLPanelDeletableWearableListItem(LLViewerInventoryItem* item);
|
||||
|
||||
/*virtual*/ void init();
|
||||
};
|
||||
|
||||
/** Outfit list item for an attachment */
|
||||
|
|
@ -139,7 +134,7 @@ public:
|
|||
EItemState item_state = IS_DEFAULT);
|
||||
|
||||
protected:
|
||||
LLPanelAttachmentListItem(LLViewerInventoryItem* item, const Params& params) : LLPanelDeletableWearableListItem(item, params) {};
|
||||
LLPanelAttachmentListItem(LLViewerInventoryItem* item) : LLPanelDeletableWearableListItem(item) {};
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -152,18 +147,6 @@ 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();
|
||||
|
|
@ -179,25 +162,18 @@ public:
|
|||
inline void setShowLockButton(bool show) { setShowWidget("btn_lock", show); }
|
||||
inline void setShowEditButton(bool show) { setShowWidget("btn_edit_panel", show); }
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelClothingListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
|
||||
LLPanelClothingListItem(LLViewerInventoryItem* item);
|
||||
|
||||
/*virtual*/ void init();
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
|
|
@ -212,7 +188,9 @@ public:
|
|||
inline void setShowEditButton(bool show) { setShowWidget("btn_edit_panel", show); }
|
||||
|
||||
protected:
|
||||
LLPanelBodyPartsListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
LLPanelBodyPartsListItem(LLViewerInventoryItem* item);
|
||||
|
||||
/*virtual*/ void init();
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -224,19 +202,15 @@ 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, const Params& params);
|
||||
LLPanelDummyClothingListItem(LLWearableType::EType w_type);
|
||||
|
||||
/*virtual*/ void init();
|
||||
|
||||
static std::string wearableTypeToString(LLWearableType::EType w_type);
|
||||
|
||||
|
|
|
|||
|
|
@ -97,9 +97,6 @@ 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.
|
||||
|
|
@ -138,42 +135,36 @@ void LLWinDebug::init()
|
|||
|
||||
void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const std::string& filename)
|
||||
{
|
||||
// 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 )
|
||||
if(f_mdwp == NULL || gDirUtilp == NULL)
|
||||
{
|
||||
if(f_mdwp == NULL || gDirUtilp == NULL)
|
||||
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)
|
||||
{
|
||||
return;
|
||||
// Write the dump, ignoring the return value
|
||||
f_mdwp(GetCurrentProcess(),
|
||||
GetCurrentProcessId(),
|
||||
hFile,
|
||||
type,
|
||||
ExInfop,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
CloseHandle(hFile);
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7111,7 +7111,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
|
|||
if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate)
|
||||
{
|
||||
BOOL skip_avatar_update = FALSE;
|
||||
if (!isAgentAvatarValid() || gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK)
|
||||
if (gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK)
|
||||
{
|
||||
skip_avatar_update = TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
Husk, annonceomkostninger kan ikke refunderes.
|
||||
</text>
|
||||
<spinner label="Pris: L$" name="price_for_listing" tool_tip="Pris for optagelse af annonce." value="50"/>
|
||||
<spinner label="Pris for annonce:" 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,6 +1,7 @@
|
|||
<?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,10 +73,11 @@
|
|||
<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="Wearable And Object Wear"/>
|
||||
<menu_item_call label="Tag på" name="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,10 +6,9 @@
|
|||
<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,7 +1,6 @@
|
|||
<?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,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Outfit Wearable Context Menu">
|
||||
<menu_item_call label="Erstat" name="wear_replace"/>
|
||||
<menu_item_call label="Tag på" name="wear_wear"/>
|
||||
<menu_item_call label="Erstat" name="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,10 +230,6 @@ 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>
|
||||
|
|
@ -939,6 +935,11 @@ 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>
|
||||
|
|
@ -1350,6 +1351,9 @@ 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,16 +34,8 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="add_wearables_panel">
|
||||
<button label="Tag genstand på" name="plus_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="add_wearables_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,16 +1,12 @@
|
|||
<?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"/>
|
||||
<panel label="HAR PÅ" name="cof_tab"/>
|
||||
<inventory_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>
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
<?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>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?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,12 +15,6 @@
|
|||
<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="">
|
||||
|
|
@ -41,7 +35,9 @@
|
|||
<text name="LabelAcquiredTitle">
|
||||
Erhvervet:
|
||||
</text>
|
||||
<text name="LabelAcquiredDate"/>
|
||||
<text name="LabelAcquiredDate">
|
||||
Ons Maj 24 12:50:46 2006
|
||||
</text>
|
||||
<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="(I Second Life)"/>
|
||||
<text name="where" value="(verden)"/>
|
||||
<panel label="" name="properties_panel">
|
||||
<text name="Name:">
|
||||
Navn:
|
||||
|
|
|
|||
|
|
@ -1585,30 +1585,21 @@
|
|||
<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="PanelContentsTooltip">
|
||||
Indhold i objekt
|
||||
</string>
|
||||
<string name="PanelContentsNewScript">
|
||||
Nyt script
|
||||
</string>
|
||||
<string name="PanelContentsTooltip">
|
||||
Indhold i objekt
|
||||
</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">
|
||||
Kaufabbruch
|
||||
Kauf nicht möglich
|
||||
</text>
|
||||
<button label="Weiter zur Kontoseite" name="error_web"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
Anzeigengebühren werden nicht zurückerstattet.
|
||||
</text>
|
||||
<spinner label="Preis: L$" name="price_for_listing" tool_tip="Preis für Anzeige." value="50"/>
|
||||
<spinner label="Anzeigenpreis:" 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">
|
||||
Stimme aufnehmen und auf einen Effekt klicken, um diesen auf Ihre Stimme anzuwenden.
|
||||
Nehmen Sie Ihre Stimme auf, klicken Sie dann auf einen Effekt, um den Effekt 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,10 +76,11 @@
|
|||
<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="Wearable And Object Wear"/>
|
||||
<menu_item_call label="Anziehen" name="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,10 +6,9 @@
|
|||
<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,7 +1,6 @@
|
|||
<?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,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Outfit Wearable Context Menu">
|
||||
<menu_item_call label="Ersetzen" name="wear_replace"/>
|
||||
<menu_item_call label="Anziehen" name="wear_wear"/>
|
||||
<menu_item_call label="Ersetzen" name="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,10 +365,6 @@ 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">
|
||||
|
|
@ -2055,6 +2051,11 @@ 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>
|
||||
|
|
@ -2477,6 +2478,9 @@ 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 teleportieren"/>
|
||||
<pull_button name="forward_btn" tool_tip="Um einen Standort weiter teleportieren"/>
|
||||
<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"/>
|
||||
<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,16 +34,8 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel name="add_wearables_panel">
|
||||
<button label="Objekt anziehen" name="plus_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="add_wearables_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,16 +1,12 @@
|
|||
<?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"/>
|
||||
<panel label="AKTUELLES OUTFIT" name="cof_tab"/>
|
||||
<inventory_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>
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
<?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>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?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="Dieses Outfit bearbeiten"/>
|
||||
<button label="" name="edit_outfit_btn" tool_tip="Diese Outfit bearbeiten"/>
|
||||
</panel>
|
||||
<filter_editor label="Outfits filtern" name="Filter"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -15,12 +15,6 @@
|
|||
<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="">
|
||||
|
|
@ -33,17 +27,23 @@
|
|||
<text name="LabelCreatorTitle">
|
||||
Ersteller:
|
||||
</text>
|
||||
<text name="LabelCreatorName"/>
|
||||
<text name="LabelCreatorName">
|
||||
Nicole Linden
|
||||
</text>
|
||||
<button label="Profil" name="BtnCreator"/>
|
||||
<text name="LabelOwnerTitle">
|
||||
Eigentümer:
|
||||
</text>
|
||||
<text name="LabelOwnerName"/>
|
||||
<text name="LabelOwnerName">
|
||||
Thrax Linden
|
||||
</text>
|
||||
<button label="Profil" name="BtnOwner"/>
|
||||
<text name="LabelAcquiredTitle">
|
||||
Erworben:
|
||||
</text>
|
||||
<text name="LabelAcquiredDate"/>
|
||||
<text name="LabelAcquiredDate">
|
||||
Mittwoch, 24. Mai 2006, 12:50:46
|
||||
</text>
|
||||
<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,9 +1615,6 @@
|
|||
<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>
|
||||
|
|
@ -1630,21 +1627,15 @@
|
|||
<string name="PanelDirEventsDateText">
|
||||
[mthnum,datetime,slt]/[day,datetime,slt]
|
||||
</string>
|
||||
<string name="PanelContentsTooltip">
|
||||
Objektinhalt
|
||||
</string>
|
||||
<string name="PanelContentsNewScript">
|
||||
Neues Skript
|
||||
</string>
|
||||
<string name="PanelContentsTooltip">
|
||||
Objektinhalt
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -71,8 +71,7 @@
|
|||
image_name="Cam_Preset_Front_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="Cam_Preset_Front_On" />
|
||||
<panel_camera_item.text
|
||||
name="front_view_text">
|
||||
<panel_camera_item.text>
|
||||
Front View
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
|
|
@ -86,8 +85,7 @@
|
|||
image_name="Cam_Preset_Side_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="Cam_Preset_Side_On" />
|
||||
<panel_camera_item.text
|
||||
name="side_view_text">
|
||||
<panel_camera_item.text>
|
||||
Side View
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
|
|
@ -102,8 +100,7 @@
|
|||
image_name="Cam_Preset_Back_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="Cam_Preset_Back_On" />
|
||||
<panel_camera_item.text
|
||||
name="rear_view_text">
|
||||
<panel_camera_item.text>
|
||||
Rear View
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
|
|
@ -125,8 +122,7 @@
|
|||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="object_view" />
|
||||
<panel_camera_item.text
|
||||
name="object_view_text">
|
||||
<panel_camera_item.text>
|
||||
Object View
|
||||
</panel_camera_item.text>
|
||||
<panel_camera_item.picture
|
||||
|
|
@ -140,8 +136,7 @@
|
|||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="mouselook_view" />
|
||||
<panel_camera_item.text
|
||||
name="mouselook_view_text">
|
||||
<panel_camera_item.text>
|
||||
Mouselook View
|
||||
</panel_camera_item.text>
|
||||
<panel_camera_item.picture
|
||||
|
|
|
|||
|
|
@ -50,13 +50,8 @@
|
|||
function="File.UploadBulk"
|
||||
parameter="" />
|
||||
</menu_item_call>
|
||||
<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_separator
|
||||
layout="topleft" />
|
||||
</menu>
|
||||
|
||||
<menu_item_call
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue