Merge from dessie/viewer-release

master
Leyla Farazha 2010-07-27 14:13:07 -07:00
commit 0e06dc8964
145 changed files with 1139 additions and 1402 deletions

View File

@ -517,7 +517,6 @@ Ringo Tuxing
Robin Cornelius
SNOW-108
SNOW-204
SNOW-484
VWR-2488
VWR-9557
VWR-11128

View File

@ -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
//-------------------------------------------------------------------------

View File

@ -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)

View File

@ -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);
}

View File

@ -1,4 +1,3 @@
/**
* @file llbutton.cpp
* @brief LLButton base class

View File

@ -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;
}

View File

@ -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

View File

@ -35,7 +35,6 @@
#include "llnotifications.h"
#include "llavatarnamecache.h"
#include "llinstantmessage.h"
#include "llcachename.h"
#include "llxmlnode.h"
#include "lluictrl.h"
@ -44,7 +43,6 @@
#include "llsdserialize.h"
#include "lltrans.h"
#include "llnotificationslistener.h"
#include "llstring.h"
#include <algorithm>
#include <boost/regex.hpp>
@ -1498,7 +1496,6 @@ void LLPostponedNotification::lookupName(LLPostponedNotification* thiz,
gCacheName->getGroup(id,
boost::bind(&LLPostponedNotification::onGroupNameCache,
thiz, _1, _2, _3));
}
else
{
LLAvatarNameCache::get(id,
@ -1519,13 +1516,6 @@ void LLPostponedNotification::onAvatarNameCache(const LLUUID& agent_id,
{
std::string name = av_name.getCompleteName();
// from PE merge - we should figure out if this is the right thing to do
if (name.empty())
{
llwarns << "Empty name received for Id: " << agent_id << llendl;
name = SYSTEM_FROM;
}
finalizeName(name);
}

View File

@ -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;
}
@ -2373,15 +2352,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
//

View File

@ -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;
@ -498,12 +501,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;
@ -530,6 +527,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
@ -552,9 +551,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

View File

@ -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?

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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>
@ -11901,16 +11901,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>

View File

@ -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());
}

View File

@ -48,7 +48,7 @@ public:
virtual ~LLOrderMyOutfitsOnDestroy()
{
if (!LLApp::isRunning())
if (LLApp::isExiting())
{
llwarns << "called during shutdown, skipping" << llendl;
return;

View File

@ -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);

View File

@ -212,7 +212,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);

View File

@ -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());
}
}

View File

@ -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();

View File

@ -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;
};

View File

@ -42,7 +42,7 @@ LLDragAndDropButton::Params::Params()
}
LLDragAndDropButton::LLDragAndDropButton(const Params& params)
LLDragAndDropButton::LLDragAndDropButton(Params& params)
: LLButton(params)
{

View File

@ -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*/,

View File

@ -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

View File

@ -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; }

View File

@ -1031,14 +1031,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)
{

View File

@ -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(

View File

@ -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)

View File

@ -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
{

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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

View File

@ -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;

View File

@ -597,7 +597,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);

View File

@ -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;

View File

@ -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 ;
};

View File

@ -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)

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -389,7 +389,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*/)
@ -850,7 +850,7 @@ void LLIMWellWindow::closeAllImpl()
ObjectRowPanel* obj_panel = dynamic_cast <ObjectRowPanel*> (panel);
if (obj_panel)
{
LLScriptFloaterManager::instance().removeNotification(*iter);
LLScriptFloaterManager::instance().onRemoveNotification(*iter);
}
}
}

View File

@ -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();

View File

@ -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 );

View File

@ -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())

View File

@ -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; }
};

View File

@ -2706,7 +2706,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:

View File

@ -80,7 +80,6 @@
#include "llviewerparceloverlay.h"
#include "llviewerpartsource.h"
#include "llviewerregion.h"
#include "llviewerstats.h"
#include "llviewertextureanim.h"
#include "llviewerwindow.h" // For getSpinAxis
#include "llvoavatar.h"
@ -1918,12 +1917,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

View File

@ -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

View File

@ -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];

View File

@ -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

View File

@ -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
};

View File

@ -3330,26 +3330,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;
@ -4412,12 +4415,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.
@ -4427,14 +4428,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) ;
}
}
@ -7445,7 +7441,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)
{
@ -7469,7 +7465,7 @@ void LLVOAvatar::cullAvatarsByPixelArea()
if (inst->isSelf())
{
inst->setVisibilityRank(1);
inst->setVisibilityRank(0);
}
else if (inst->mDrawable.notNull() && inst->mDrawable->isVisible())
{

View File

@ -879,7 +879,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;
//--------------------------------------------------------------------
@ -1059,6 +1059,5 @@ protected: // Shared with LLVOAvatarSelf
*******************************************************************************/
}; // LLVOAvatar
extern const F32 SELF_ADDITIONAL_PRI;
#endif // LL_VO_AVATAR_H

View File

@ -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)
{

View File

@ -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;

View File

@ -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);

View File

@ -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);
}
}
}
}

View File

@ -7115,7 +7115,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;
}

View File

@ -22,6 +22,35 @@
Se objekt
</floater.string>
<panel name="controls">
<panel name="preset_views_list">
<panel_camera_item name="front_view">
<panel_camera_item.text name="front_view_text">
Se forfra
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="group_view">
<panel_camera_item.text name="side_view_text">
Se fra siden
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="rear_view">
<panel_camera_item.text name="rear_view_text">
Se bagfra
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="camera_modes_list">
<panel_camera_item name="object_view">
<panel_camera_item.text name="object_view_text">
Se fra objekt
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="mouselook_view">
<panel_camera_item.text name="mouselook_view_text">
Førsteperson
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="zoom" tool_tip="Zoom kamera mod fokus">
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera kredser rundt om fokus"/>
<slider_bar name="zoom_slider" tool_tip="Zoom kamera mod fokus"/>

View File

@ -59,6 +59,7 @@
<menu_item_call label="Kopiér" name="Copy"/>
<menu_item_call label="Indsæt" name="Paste"/>
<menu_item_call label="Sæt ind som link" name="Paste As Link"/>
<menu_item_call label="Slet" name="Remove Link"/>
<menu_item_call label="Slet" name="Delete"/>
<menu_item_call label="Slet systemfolder" name="Delete System Folder"/>
<menu_item_call label="start konference chat" name="Conference Chat Folder"/>

View File

@ -5,6 +5,7 @@
<menu_item_call label="Lyd (L$[COST])..." name="Upload Sound"/>
<menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/>
<menu_item_call label="Hent mange (L$[COST] pr. fil)..." name="Bulk Upload"/>
<menu_item_call label="Sæt standardværdier for upload rettigheder" name="perm prefs"/>
</menu>
<menu_item_call label="Ny mappe" name="New Folder"/>
<menu_item_call label="Nyt script" name="New Script"/>

View File

@ -92,7 +92,6 @@
<menu_item_call label="Sæt scripts til &quot;Not Running&quot;" name="Set Scripts to Not Running"/>
</menu>
<menu label="Valg" name="Options">
<menu_item_call label="Sæt standard rettigheder" name="perm prefs"/>
<menu_item_check label="Vis avancerede rettigheder" name="DebugPermissions"/>
<menu_item_check label="Vælg kun egne objekter" name="Select Only My Objects"/>
<menu_item_check label="Vis kun flytbare objekter" name="Select Only Movable Objects"/>
@ -110,6 +109,7 @@
<menu_item_call label="Lyd (L$[COST])..." name="Upload Sound"/>
<menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/>
<menu_item_call label="Mange (L$[COST] pr. fil)..." name="Bulk Upload"/>
<menu_item_call label="Sæt standardværdier for upload rettigheder" name="perm prefs"/>
</menu>
</menu>
<menu label="Hjælp" name="Help">

View File

@ -231,7 +231,7 @@ Er du sikker på at du vil fortsætte?
Slet favorit &lt;nolink&gt;[PICK]&lt;/nolink&gt;?
</notification>
<notification name="DeleteOutfits">
Slet valgte sæt?
Slet det valgte sæt?
<usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/>
</notification>
<notification name="CacheWillClear">

View File

@ -23,6 +23,12 @@
<button label="Mere &gt;&gt;" label_selected="Mindre &lt;&lt;" name="less_btn" tool_tip="Advancerede kontroller"/>
</panel>
<panel name="nearby_media_panel">
<text name="nearby_media_title">
Media tæt på
</text>
<text name="show_text">
Vis:
</text>
<combo_box name="show_combo">
<combo_box.item label="Overalt" name="All"/>
<combo_box.item label="På dette sted" name="WithinParcel"/>

View File

@ -181,6 +181,7 @@
<string name="TooltipMustSingleDrop">
Kun et enkelt element kan trækkes ind her
</string>
<string name="TooltipPrice" value="L$[BELØB]:"/>
<string name="TooltipHttpUrl">
Klik for at se denne hjemmeside
</string>
@ -233,7 +234,6 @@
Klik for at starte secondlife:// kommando
</string>
<string name="CurrentURL" value=" Nuværende URL: [CurrentURL]"/>
<string name="TooltipPrice" value="L$[AMOUNT]: "/>
<string name="SLurlLabelTeleport">
Teleportér til
</string>
@ -882,12 +882,57 @@
<string name="invalid_not_worn">
ugyldig
</string>
<string name="create_new_shape">
Opret ny figur
</string>
<string name="create_new_skin">
Opret nyt hud
</string>
<string name="create_new_hair">
Opret nyt hår
</string>
<string name="create_new_eyes">
Opret nye øjne
</string>
<string name="create_new_shirt">
Opret ny trøje
</string>
<string name="create_new_pants">
Opret nye bukser
</string>
<string name="create_new_shoes">
Opret nye sko
</string>
<string name="create_new_socks">
Opret nye strømper
</string>
<string name="create_new_jacket">
Opret ny jakke
</string>
<string name="create_new_gloves">
Opret nye handsker
</string>
<string name="create_new_undershirt">
Opret ny undertrøje
</string>
<string name="create_new_underpants">
Opret nye underbukser
</string>
<string name="create_new_skirt">
Opret ny nederdel
</string>
<string name="create_new_alpha">
Opret ny alpha
</string>
<string name="create_new_tattoo">
Opret ny tatovering
</string>
<string name="create_new_invalid">
ugyldig
</string>
<string name="NewWearable">
Ny [WEARABLE_ITEM]
</string>
<string name="CreateNewWearable">
Opret [WEARABLE_TYPE]
</string>
<string name="next">
Næste
</string>
@ -1068,6 +1113,9 @@
<string name="InvFolder Favorite">
Favoritter
</string>
<string name="InvFolder favorite">
Favoritter
</string>
<string name="InvFolder Current Outfit">
Nuværende sæt
</string>
@ -1603,12 +1651,6 @@
<string name="BusyModeResponseDefault">
Beboeren du sendte en besked er &apos;optaget&apos;, 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>

View File

@ -22,6 +22,35 @@
Objekt ansehen
</floater.string>
<panel name="controls">
<panel name="preset_views_list">
<panel_camera_item name="front_view">
<panel_camera_item.text name="front_view_text">
Vorderansicht
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="group_view">
<panel_camera_item.text name="side_view_text">
Seitenansicht
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="rear_view">
<panel_camera_item.text name="rear_view_text">
Hinteransicht
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="camera_modes_list">
<panel_camera_item name="object_view">
<panel_camera_item.text name="object_view_text">
Objektansicht
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="mouselook_view">
<panel_camera_item.text name="mouselook_view_text">
Mouselook
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="zoom" tool_tip="Kamera auf Fokus zoomen">
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>

View File

@ -61,7 +61,7 @@
<menu_item_call label="Kopieren" name="Copy"/>
<menu_item_call label="Einfügen" name="Paste"/>
<menu_item_call label="Als Link einfügen" name="Paste As Link"/>
<menu_item_call label="Link entfernen" name="Remove Link"/>
<menu_item_call label="Löschen" name="Remove Link"/>
<menu_item_call label="Löschen" name="Delete"/>
<menu_item_call label="Systemordner löschen" name="Delete System Folder"/>
<menu_item_call label="Konferenz-Chat starten" name="Conference Chat Folder"/>

View File

@ -5,6 +5,7 @@
<menu_item_call label="Sound ([COST] L$)..." name="Upload Sound"/>
<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/>
<menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/>
</menu>
<menu_item_call label="Neuer Ordner" name="New Folder"/>
<menu_item_call label="Neues Skript" name="New Script"/>

View File

@ -94,7 +94,6 @@
<menu_item_call label="Skripts auf nicht ausführen einstellen" name="Set Scripts to Not Running"/>
</menu>
<menu label="Optionen" name="Options">
<menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/>
<menu_item_check label="Erweiterte Berechtigungen anzeigen" name="DebugPermissions"/>
<menu_item_check label="Nur meine Objekte auswählen" name="Select Only My Objects"/>
<menu_item_check label="Nur bewegliche Objekte auswählen" name="Select Only Movable Objects"/>
@ -112,6 +111,7 @@
<menu_item_call label="Sound ([COST] L$)..." name="Upload Sound"/>
<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/>
<menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/>
</menu>
</menu>
<menu label="Hilfe" name="Help">

View File

@ -366,7 +366,7 @@ Sind Sie sicher, dass Sie fortfahren wollen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="DeleteOutfits">
Das/Die ausgewählte(n) Outfit(s) löschen?
Das ausgewählte Outfit löschen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="PromptGoToEventsPage">

View File

@ -23,6 +23,12 @@
<button label="Mehr &gt;&gt;" label_selected="Weniger &lt;&lt;" name="less_btn" tool_tip="Erweiterte Steuerung"/>
</panel>
<panel name="nearby_media_panel">
<text name="nearby_media_title">
Medien in der Nähe
</text>
<text name="show_text">
Anzeigen:
</text>
<combo_box name="show_combo">
<combo_box.item label="Alle" name="All"/>
<combo_box.item label="Auf dieser Parzelle" name="WithinParcel"/>

View File

@ -56,7 +56,7 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte].
<button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/>
<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>
<button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/>
<button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/>
<button label="Teleport" name="teleport_btn" tool_tip="Teleport anbieten"/>
<button label="Gruppenprofil" name="group_info_btn" tool_tip="Gruppeninformationen anzeigen"/>
<button label="Gruppen-Chat" name="chat_btn" tool_tip="Chat öffnen"/>
<button label="Gruppe anrufen" name="group_call_btn" tool_tip="Diese Gruppe anrufen"/>

View File

@ -196,6 +196,7 @@
<string name="TooltipMustSingleDrop">
Sie können nur ein einzelnes Objekt hierher ziehen
</string>
<string name="TooltipPrice" value="[AMOUNT] L$"/>
<string name="TooltipHttpUrl">
Anklicken, um Webseite anzuzeigen
</string>
@ -248,7 +249,6 @@
Anklicken, um Befehl secondlife:// auszuführen
</string>
<string name="CurrentURL" value=" CurrentURL: [CurrentURL]"/>
<string name="TooltipPrice" value="[AMOUNT]L$: "/>
<string name="SLurlLabelTeleport">
Teleportieren nach
</string>
@ -906,12 +906,57 @@
<string name="invalid_not_worn">
ungültig
</string>
<string name="create_new_shape">
Neue Form/Gestalt erstellen
</string>
<string name="create_new_skin">
Neue Haut erstellen
</string>
<string name="create_new_hair">
Neue Haare erstellen
</string>
<string name="create_new_eyes">
Neue Augen erstellen
</string>
<string name="create_new_shirt">
Neues Hemd erstellen
</string>
<string name="create_new_pants">
Neue Hose erstellen
</string>
<string name="create_new_shoes">
Neue Schuhe erstellen
</string>
<string name="create_new_socks">
Neue Socken erstellen
</string>
<string name="create_new_jacket">
Neue Jacke erstellen
</string>
<string name="create_new_gloves">
Neue Handschuhe erstellen
</string>
<string name="create_new_undershirt">
Neues Unterhemd erstellen
</string>
<string name="create_new_underpants">
Neue Unterhose erstellen
</string>
<string name="create_new_skirt">
Neuer Rock erstellen
</string>
<string name="create_new_alpha">
Neue Alpha erstellen
</string>
<string name="create_new_tattoo">
Neue Tätowierung erstellen
</string>
<string name="create_new_invalid">
ungültig
</string>
<string name="NewWearable">
Neue/r/s [WEARABLE_ITEM]
</string>
<string name="CreateNewWearable">
[WEARABLE_TYPE] erstellen
</string>
<string name="next">
Weiter
</string>
@ -1098,6 +1143,9 @@
<string name="InvFolder Favorite">
Favoriten
</string>
<string name="InvFolder favorite">
Favoriten
</string>
<string name="InvFolder Current Outfit">
Aktuelles Outfit
</string>
@ -1639,12 +1687,6 @@
<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>

View File

@ -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

View File

@ -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

View File

@ -707,6 +707,13 @@
label="Options"
name="Options"
tear_off="true">
<menu_item_call
label="Set Default Upload Permissions"
name="perm prefs">
<menu_item_call.on_click
function="Floater.Toggle"
parameter="perm_prefs" />
</menu_item_call>
<menu_item_check
label="Show Advanced Permissions"
name="DebugPermissions">
@ -866,13 +873,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>
<menu

View File

@ -819,7 +819,7 @@ Delete pick &lt;nolink&gt;[PICK]&lt;/nolink&gt;?
icon="alertmodal.tga"
name="DeleteOutfits"
type="alertmodal">
Delete the selected outfit?
Delete the selected outfit/s?
<usetemplate
name="okcancelbuttons"
notext="Cancel"
@ -5577,6 +5577,7 @@ If you stay in this region you will be logged out.
<notification
icon="notify.tga"
name="LoadWebPage"
persist="true"
type="notify">
Load web page [URL]?
@ -5676,6 +5677,7 @@ Grant this request?
<notification
icon="notify.tga"
name="ScriptDialog"
persist="true"
type="notify">
[NAME]&apos;s &apos;[TITLE]&apos;
[MESSAGE]
@ -5690,6 +5692,7 @@ Grant this request?
<notification
icon="notify.tga"
name="ScriptDialogGroup"
persist="true"
type="notify">
[GROUPNAME]&apos;s &apos;[TITLE]&apos;
[MESSAGE]

View File

@ -104,7 +104,6 @@
follows="top|left"
font="SansSerif"
left="10"
name="nearby_media_title"
width="100">
Nearby Media
</text>
@ -115,7 +114,6 @@
font="SansSerif"
top_pad="15"
left="10"
name="show_text"
width="40">
Show:
</text>

View File

@ -14,9 +14,9 @@
background_visible="true"
bg_alpha_color="DkGray2"
bg_opaque_color="DkGray2"
no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]."
no_matched_tabs_text.value="NoOutfitsTabsMatched"
no_matched_tabs_text.v_pad="10"
no_visible_tabs_text.value="You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]"
no_visible_tabs_text.value="NoOutfits"
follows="all"
height="400"
layout="topleft"

View File

@ -1957,9 +1957,6 @@ Clears (deletes) the media and all params from the given face.
<string name="InvFolder Animations">Animations</string>
<string name="InvFolder Gestures">Gestures</string>
<string name="InvFolder Favorite">Favorites</string>
<!-- historically default name of the Favorites folder can start from either "f" or "F" letter.
We should localize both of them with the same value -->
<string name="InvFolder favorite">Favorites</string>
<string name="InvFolder Current Outfit">Current Outfit</string>
<string name="InvFolder My Outfits">My Outfits</string>
<string name="InvFolder Accessories">Accessories</string>
@ -2198,6 +2195,10 @@ Clears (deletes) the media and all params from the given face.
<!-- panel preferences general -->
<string name="BusyModeResponseDefault">The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.</string>
<!-- Outfits Panel -->
<string name="NoOutfits">You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]</string>
<string name="NoOutfitsTabsMatched">Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search].</string>
<!-- Mute -->
<string name="MuteByName">(By name)</string>
<string name="MuteAgent">(Resident)</string>

View File

@ -1,73 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<bodyparts_list_item
follows="top|right|left"
height="23"
layout="topleft"
left="0"
name="wearable_item"
bottom="0"
width="380">
<item_icon
height="16"
follows="top|left"
image_name="Inv_Object"
layout="topleft"
left="0"
name="item_icon"
top="2"
width="16" />
<item_name
follows="left|right"
height="16"
layout="topleft"
left="21"
allow_html="false"
use_ellipses="true"
name="item_name"
text_color="white"
top="5"
value="..."
width="359" />
<lock_panel
background_visible="false"
name="btn_lock"
layout="topleft"
follows="top|right"
top="0"
left="0"
height="23"
width="23"
tab_stop="false"
tool_tip="You don't have permission to edit"/>
<lock_icon
name="btn_lock1"
layout="topleft"
follows="top|right"
image_name="Locked_Icon"
top="2"
left="5"
height="13"
width="9"
tab_stop="false" />
<edit_panel
background_visible="false"
name="btn_edit_panel"
layout="topleft"
follows="top|right"
top="1"
left="17"
height="23"
width="26"
tab_stop="false"/>
<edit_btn
name="btn_edit"
layout="topleft"
follows="top|right"
image_overlay="Edit_Wrench"
top="0"
left="0"
height="23"
width="23"
tab_stop="false"
tool_tip="Edit this shape"/>
</bodyparts_list_item>

View File

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<clothing_list_item
follows="top|right|left"
height="23"
layout="topleft"
left="0"
name="wearable_item"
bottom="0"
width="380">
<lock_icon
height="16"
follows="top|left"
image_name="Inv_Object"
layout="topleft"
left="21"
name="item_icon"
top="2"
width="16" />
<item_name
follows="left|right"
height="16"
layout="topleft"
left="42"
allow_html="false"
use_ellipses="true"
name="item_name"
text_color="white"
top="5"
value="..."
width="359" />
<up_btn
name="btn_move_up"
layout="topleft"
follows="top|right"
image_overlay="UpArrow_Off"
top="1"
left="0"
height="23"
width="23"
tab_stop="false" />
<down_btn
name="btn_move_down"
layout="topleft"
follows="top|right"
image_overlay="DownArrow_Off"
top="1"
left="26"
height="23"
width="23"
tab_stop="false" />
<lock_panel
background_visible="false"
name="btn_lock"
layout="topleft"
follows="top|right"
top="0"
left="0"
height="23"
width="23"
tab_stop="false"
tool_tip="You don't have permission to edit"/>
<lock_icon
name="btn_lock1"
layout="topleft"
follows="top|right"
image_name="Locked_Icon"
top="2"
left="5"
height="13"
width="9"
tab_stop="false" />
<edit_panel
background_visible="false"
name="btn_edit_panel"
layout="topleft"
follows="top|right"
top="0"
left="26"
height="23"
width="26"
tab_stop="false"/>
<edit_btn
name="btn_edit"
layout="topleft"
follows="top|right"
image_overlay="Edit_Wrench"
top="1"
left="0"
height="23"
width="23"
tab_stop="false"
tool_tip="Edit this wearable"/>
</clothing_list_item>

View File

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<deletable_wearable_list_item
follows="top|right|left"
height="23"
layout="topleft"
left="0"
name="deletable_wearable_item"
bottom="0"
width="380">
<delete_btn
name="btn_delete"
layout="topleft"
follows="top|left"
image_unselected="Toast_CloseBtn"
image_selected="Toast_CloseBtn"
top="3"
left="0"
height="18"
width="18"
tab_stop="false"
tool_tip="Remove from outfit"/>
<item_icon
height="16"
follows="top|left"
image_name="Inv_Object"
layout="topleft"
left="24"
name="item_icon"
top="2"
width="16" />
<item_name
follows="left|right"
height="16"
layout="topleft"
left="45"
allow_html="false"
use_ellipses="true"
name="item_name"
text_color="white"
top="5"
value="..."
width="359" />
</deletable_wearable_list_item>

View File

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<dummy_clothing_list_item
follows="top|right|left"
height="23"
layout="topleft"
left="0"
name="dummy_clothing_item"
bottom="0"
width="380">
<item_icon
height="16"
color="0.75 0.75 0.75 1"
follows="top|left"
image_name="Inv_Object"
layout="topleft"
left="20"
name="item_icon"
top="2"
width="16" />
<item_name
follows="left|right"
height="16"
layout="topleft"
left="41"
allow_html="false"
use_ellipses="true"
name="item_name"
text_color="LtGray_50"
top="4"
value="..."
width="359" />
<add_panel
name="btn_add_panel"
layout="topleft"
follows="top|right"
top="0"
left="0"
height="23"
width="26"
tab_stop="false"/>
<add_btn
name="btn_add"
layout="topleft"
follows="top|right"
image_overlay="AddItem_Off"
top="0"
left="0"
height="23"
width="23"
tab_stop="false"
tool_tip="Add more items of this type" />
</dummy_clothing_list_item>

View File

@ -1,13 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<inventory_list_item
follows="top|right|left"
height="20"
name="inventory_item"
tab_stop="false"
hover_image="ListItem_Over"
selected_image="ListItem_Select"
separator_image="Wearables_Divider"
width="380">
height="0"
layout="topleft"
left="0"
name="inventory_list_item"
top="0"
width="0">
<!-- DEFAULT style for inventory list item -->
<default_style
font="SansSerifSmall"
@ -18,25 +16,4 @@
font="SansSerifSmall"
font.style="BOLD"
color="EmphasisColor" />
<item_icon
height="16"
follows="top|left"
image_name="Inv_Object"
layout="topleft"
left="0"
name="item_icon"
top="0"
width="16" />
<item_name
follows="left|right"
height="20"
layout="topleft"
left="21"
allow_html="false"
use_ellipses="true"
name="item_name"
text_color="white"
top="4"
value="..."
width="359" />
</inventory_list_item>

View File

@ -22,6 +22,35 @@
Centrar el objeto
</floater.string>
<panel name="controls">
<panel name="preset_views_list">
<panel_camera_item name="front_view">
<panel_camera_item.text name="front_view_text">
De frente
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="group_view">
<panel_camera_item.text name="side_view_text">
Vista lateral
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="rear_view">
<panel_camera_item.text name="rear_view_text">
Desde detrás
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="camera_modes_list">
<panel_camera_item name="object_view">
<panel_camera_item.text name="object_view_text">
Vista de objeto
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="mouselook_view">
<panel_camera_item.text name="mouselook_view_text">
Vista subjetiva
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="zoom" tool_tip="Hacer zoom con la cámara en lo enfocado">
<joystick_rotate name="cam_rotate_stick" tool_tip="La cámara gira alrededor del punto de vista"/>
<slider_bar name="zoom_slider" tool_tip="Hacer zoom en lo enfocado"/>

View File

@ -61,7 +61,7 @@
<menu_item_call label="Copiar" name="Copy"/>
<menu_item_call label="Pegar" name="Paste"/>
<menu_item_call label="Pegar como enlace" name="Paste As Link"/>
<menu_item_call label="Quitar el enlace" name="Remove Link"/>
<menu_item_call label="Borrar" name="Remove Link"/>
<menu_item_call label="Borrar" name="Delete"/>
<menu_item_call label="Borrar carpeta del sistema" name="Delete System Folder"/>
<menu_item_call label="Empezar multiconferencia" name="Conference Chat Folder"/>

View File

@ -5,6 +5,7 @@
<menu_item_call label="Sonido ([COST] L$)..." name="Upload Sound"/>
<menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/>
<menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/>
</menu>
<menu_item_call label="Carpeta nueva" name="New Folder"/>
<menu_item_call label="Script nuevo" name="New Script"/>

View File

@ -94,7 +94,6 @@
<menu_item_call label="Configurar scripts como no ejecutándose" name="Set Scripts to Not Running"/>
</menu>
<menu label="Opciones" name="Options">
<menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/>
<menu_item_check label="Mostrar los permisos avanzados" name="DebugPermissions"/>
<menu_item_check label="Seleccionar sólo mis objetos" name="Select Only My Objects"/>
<menu_item_check label="Seleccionar sólo los objetos movibles" name="Select Only Movable Objects"/>
@ -112,6 +111,7 @@
<menu_item_call label="Sonido ([COST] L$)..." name="Upload Sound"/>
<menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/>
<menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/>
</menu>
</menu>
<menu label="Ayuda" name="Help">

View File

@ -23,6 +23,12 @@
<button label="Más &gt;&gt;" label_selected="Menos &lt;&lt;" name="less_btn" tool_tip="Controles avanzados"/>
</panel>
<panel name="nearby_media_panel">
<text name="nearby_media_title">
Media cercanos
</text>
<text name="show_text">
Mostrar:
</text>
<combo_box name="show_combo">
<combo_box.item label="Todo" name="All"/>
<combo_box.item label="En esta parcela" name="WithinParcel"/>

View File

@ -184,6 +184,7 @@
<string name="TooltipMustSingleDrop">
Aquí se puede arrastrar sólo un ítem
</string>
<string name="TooltipPrice" value="[AMOUNT] L$:"/>
<string name="TooltipHttpUrl">
Pulsa para ver esta página web
</string>
@ -236,7 +237,6 @@
Pulsa para ejecutar el comando secondlife://
</string>
<string name="CurrentURL" value="URL actual: [CurrentURL]"/>
<string name="TooltipPrice" value="[AMOUNT]L$: "/>
<string name="SLurlLabelTeleport">
Teleportarse a
</string>
@ -885,12 +885,57 @@
<string name="invalid_not_worn">
no válido/a
</string>
<string name="create_new_shape">
Crear una anatomía nueva
</string>
<string name="create_new_skin">
Crear una piel nueva
</string>
<string name="create_new_hair">
Crear pelo nuevo
</string>
<string name="create_new_eyes">
Crear ojos nuevos
</string>
<string name="create_new_shirt">
Crear una camisa nueva
</string>
<string name="create_new_pants">
Crear unos pantalones nuevos
</string>
<string name="create_new_shoes">
Crear unos zapatos nuevos
</string>
<string name="create_new_socks">
Crear unos calcetines nuevos
</string>
<string name="create_new_jacket">
Crear una chaqueta nueva
</string>
<string name="create_new_gloves">
Crear unos guantes nuevos
</string>
<string name="create_new_undershirt">
Crear una camiseta nueva
</string>
<string name="create_new_underpants">
Crear ropa interior nueva
</string>
<string name="create_new_skirt">
Crear una falda nueva
</string>
<string name="create_new_alpha">
Crear una capa alfa nueva
</string>
<string name="create_new_tattoo">
Crear un tatuaje nuevo
</string>
<string name="create_new_invalid">
no válido/a
</string>
<string name="NewWearable">
Nuevo [WEARABLE_ITEM]
</string>
<string name="CreateNewWearable">
Crear [WEARABLE_TYPE]
</string>
<string name="next">
Siguiente
</string>
@ -1071,6 +1116,9 @@
<string name="InvFolder Favorite">
Favoritos
</string>
<string name="InvFolder favorite">
Favoritos
</string>
<string name="InvFolder Current Outfit">
Vestuario actual
</string>
@ -1606,12 +1654,6 @@
<string name="BusyModeResponseDefault">
El Residente al que has enviado un mensaje ha solicitado que no se le moleste porque está en modo ocupado. Podrá ver tu mensaje más adelante, ya que éste aparecerá en su panel de MI.
</string>
<string name="NoOutfits">
Todavía no tienes vestuario. Intenta con [secondlife:///app/search/all/ Buscar]
</string>
<string name="NoOutfitsTabsMatched">
¿No encuentras lo que buscas? Intenta con [secondlife:///app/search/all/[SEARCH_TERM] Buscar].
</string>
<string name="MuteByName">
(Por el nombre)
</string>

Some files were not shown because too many files have changed in this diff Show More