Merge from default branch

--HG--
branch : product-engine
master
Vadim Savchuk 2010-07-12 14:38:45 +03:00
commit d07a354d0a
38 changed files with 224 additions and 174 deletions

View File

@ -3234,6 +3234,9 @@ bool LLAgent::teleportCore(bool is_local)
// hide land floater too - it'll be out of date
LLFloaterReg::hideInstance("about_land");
// hide the search floater (EXT-8276)
LLFloaterReg::hideInstance("search");
LLViewerParcelMgr::getInstance()->deselectLand();
LLViewerMediaFocus::getInstance()->clearFocus();

View File

@ -951,7 +951,7 @@ const LLUUID LLAppearanceMgr::getBaseOutfitUUID()
return outfit_cat->getUUID();
}
bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_update, bool replace)
bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_update, bool replace, LLPointer<LLInventoryCallback> cb)
{
if (item_id_to_wear.isNull()) return false;
@ -1005,7 +1005,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up
// Remove existing body parts anyway because we must not be able to wear e.g. two skins.
removeCOFLinksOfType(item_to_wear->getWearableType(), false);
addCOFItemLink(item_to_wear, do_update);
addCOFItemLink(item_to_wear, do_update, cb);
break;
case LLAssetType::AT_OBJECT:
rez_attachment(item_to_wear, NULL);
@ -1959,9 +1959,10 @@ bool areMatchingWearables(const LLViewerInventoryItem *a, const LLViewerInventor
class LLDeferredCOFLinkObserver: public LLInventoryObserver
{
public:
LLDeferredCOFLinkObserver(const LLUUID& item_id, bool do_update):
LLDeferredCOFLinkObserver(const LLUUID& item_id, bool do_update, LLPointer<LLInventoryCallback> cb = NULL):
mItemID(item_id),
mDoUpdate(do_update)
mDoUpdate(do_update),
mCallback(cb)
{
}
@ -1975,7 +1976,7 @@ public:
if (item)
{
gInventory.removeObserver(this);
LLAppearanceMgr::instance().addCOFItemLink(item,mDoUpdate);
LLAppearanceMgr::instance().addCOFItemLink(item,mDoUpdate,mCallback);
delete this;
}
}
@ -1983,26 +1984,27 @@ public:
private:
const LLUUID mItemID;
bool mDoUpdate;
LLPointer<LLInventoryCallback> mCallback;
};
// BAP - note that this runs asynchronously if the item is not already loaded from inventory.
// Dangerous if caller assumes link will exist after calling the function.
void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update )
void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update, LLPointer<LLInventoryCallback> cb)
{
const LLInventoryItem *item = gInventory.getItem(item_id);
if (!item)
{
LLDeferredCOFLinkObserver *observer = new LLDeferredCOFLinkObserver(item_id, do_update);
LLDeferredCOFLinkObserver *observer = new LLDeferredCOFLinkObserver(item_id, do_update, cb);
gInventory.addObserver(observer);
}
else
{
addCOFItemLink(item, do_update);
addCOFItemLink(item, do_update, cb);
}
}
void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update )
void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update, LLPointer<LLInventoryCallback> cb)
{
const LLViewerInventoryItem *vitem = dynamic_cast<const LLViewerInventoryItem*>(item);
if (!vitem)
@ -2063,7 +2065,10 @@ void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update
}
else
{
LLPointer<LLInventoryCallback> cb = do_update ? new ModifiedCOFCallback : 0;
if(do_update && cb.isNull())
{
cb = new ModifiedCOFCallback;
}
const std::string description = vitem->getIsLinkType() ? vitem->getDescription() : "";
link_inventory_item( gAgent.getID(),
vitem->getLinkedUUID(),
@ -2502,12 +2507,7 @@ void LLAppearanceMgr::removeItemFromAvatar(const LLUUID& id_to_remove)
// since sever don't sends message _PREHASH_KillObject in that case.
// Also we can't check is link was successfully removed from COF since in case
// deleting attachment link removing performs asynchronously in process_kill_object callback.
LLViewerInventoryItem* item = gInventory.getItem(id_to_remove);
if (item != NULL)
{
gInventory.purgeObject(id_to_remove);
gInventory.notifyObservers();
}
removeCOFItemLinks(id_to_remove,false);
}
bool LLAppearanceMgr::moveWearable(LLViewerInventoryItem* item, bool closer_to_body)

View File

@ -99,7 +99,7 @@ public:
const LLUUID getBaseOutfitUUID();
// Wear/attach an item (from a user's inventory) on the agent
bool wearItemOnAvatar(const LLUUID& item_to_wear, bool do_update = true, bool replace = false);
bool wearItemOnAvatar(const LLUUID& item_to_wear, bool do_update = true, bool replace = false, LLPointer<LLInventoryCallback> cb = NULL);
// Update the displayed outfit name in UI.
void updatePanelOutfitName(const std::string& name);
@ -124,8 +124,8 @@ public:
LLPointer<LLInventoryCallback> cb);
// Add COF link to individual item.
void addCOFItemLink(const LLUUID& item_id, bool do_update = true);
void addCOFItemLink(const LLInventoryItem *item, bool do_update = true);
void addCOFItemLink(const LLUUID& item_id, bool do_update = true, LLPointer<LLInventoryCallback> cb = NULL);
void addCOFItemLink(const LLInventoryItem *item, bool do_update = true, LLPointer<LLInventoryCallback> cb = NULL);
// Remove COF entries
void removeCOFItemLinks(const LLUUID& item_id, bool do_update = true);
@ -175,6 +175,8 @@ public:
bool isOutfitLocked() { return mOutfitLocked; }
bool isInUpdateAppearanceFromCOF() { return mIsInUpdateAppearanceFromCOF; }
protected:
LLAppearanceMgr();
~LLAppearanceMgr();

View File

@ -60,6 +60,7 @@
#include "llimview.h" // for gIMMgr
#include "llmutelist.h"
#include "llnotificationsutil.h" // for LLNotificationsUtil
#include "llpaneloutfitedit.h"
#include "llrecentpeople.h"
#include "llsidetray.h"
#include "lltrans.h"
@ -435,13 +436,29 @@ namespace action_give_inventory
{
typedef std::set<LLUUID> uuid_set_t;
/**
* Returns a pointer to 'Add More' inventory panel of Edit Outfit SP.
*/
static LLInventoryPanel* get_outfit_editor_inventory_panel()
{
LLPanelOutfitEdit* panel_outfit_edit = dynamic_cast<LLPanelOutfitEdit*>(LLSideTray::getInstance()->getPanel("panel_outfit_edit"));
if (NULL == panel_outfit_edit) return NULL;
LLInventoryPanel* inventory_panel = panel_outfit_edit->findChild<LLInventoryPanel>("folder_view");
return inventory_panel;
}
/**
* Checks My Inventory visibility.
*/
static bool is_give_inventory_acceptable()
{
LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
if (NULL == active_panel) return false;
if (!active_panel)
{
active_panel = get_outfit_editor_inventory_panel();
if (!active_panel) return false;
}
// check selection in the panel
const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
@ -621,9 +638,10 @@ namespace action_give_inventory
LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
if (NULL == active_panel)
if (!active_panel)
{
return;
active_panel = get_outfit_editor_inventory_panel();
if (!active_panel) return;
}
const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();

View File

@ -79,9 +79,7 @@ protected:
}
// Set proper label for the "Create new <WEARABLE_TYPE>" menu item.
LLStringUtil::format_map_t args;
args["[WEARABLE_TYPE]"] = LLTrans::getString(LLWearableType::getTypeDefaultNewName(w_type));
std::string new_label = LLTrans::getString("CreateNewWearable", args);
std::string new_label = LLTrans::getString("create_new_" + LLWearableType::getTypeName(w_type));
menu_item->setLabel(new_label);
}
@ -333,6 +331,10 @@ BOOL LLCOFWearables::postBuild()
mBodyPartsTab = getChild<LLAccordionCtrlTab>("tab_body_parts");
mBodyPartsTab->setDropDownStateChangedCallback(boost::bind(&LLCOFWearables::onAccordionTabStateChanged, this, _1, _2));
mTab2AssetType[mClothingTab] = LLAssetType::AT_CLOTHING;
mTab2AssetType[mAttachmentsTab] = LLAssetType::AT_OBJECT;
mTab2AssetType[mBodyPartsTab] = LLAssetType::AT_BODYPART;
return LLPanel::postBuild();
}
@ -632,49 +634,17 @@ LLAssetType::EType LLCOFWearables::getExpandedAccordionAssetType()
static type_map_t type_map;
static LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("cof_wearables_accordion");
const LLAccordionCtrlTab* expanded_tab = accordion_ctrl->getExpandedTab();
if (type_map.empty())
{
type_map["tab_clothing"] = LLAssetType::AT_CLOTHING;
type_map["tab_attachments"] = LLAssetType::AT_OBJECT;
type_map["tab_body_parts"] = LLAssetType::AT_BODYPART;
}
const LLAccordionCtrlTab* tab = accordion_ctrl->getExpandedTab();
LLAssetType::EType result = LLAssetType::AT_NONE;
if (tab)
{
type_map_t::iterator i = type_map.find(tab->getName());
llassert(i != type_map.end());
result = i->second;
}
return result;
return get_if_there(mTab2AssetType, expanded_tab, LLAssetType::AT_NONE);
}
LLAssetType::EType LLCOFWearables::getSelectedAccordionAssetType()
{
//*TODO share the code with ::getExpandedAccordionAssetType(...)
static LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("cof_wearables_accordion");
const LLAccordionCtrlTab* selected_tab = accordion_ctrl->getSelectedTab();
if (selected_tab == mClothingTab)
{
return LLAssetType::AT_CLOTHING;
}
else if (selected_tab == mAttachmentsTab)
{
return LLAssetType::AT_OBJECT;
}
else if (selected_tab == mBodyPartsTab)
{
return LLAssetType::AT_BODYPART;
}
else
{
return LLAssetType::AT_NONE;
}
return get_if_there(mTab2AssetType, selected_tab, LLAssetType::AT_NONE);
}
void LLCOFWearables::onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContextMenu* menu)

View File

@ -116,6 +116,8 @@ protected:
LLAccordionCtrlTab* mLastSelectedTab;
std::map<const LLAccordionCtrlTab*, LLAssetType::EType> mTab2AssetType;
LLCOFCallbacks mCOFCallbacks;
LLListContextMenu* mClothingMenu;

View File

@ -313,8 +313,20 @@ private:
inline LLFace* LLDrawable::getFace(const S32 i) const
{
llassert((U32)i < mFaces.size());
llassert(mFaces[i]);
//switch these asserts to llerrs -- davep
//llassert((U32)i < mFaces.size());
//llassert(mFaces[i]);
if ((U32) i >= mFaces.size())
{
llerrs << "Invalid face index." << llendl;
}
if (!mFaces[i])
{
llerrs << "Null face found." << llendl;
}
return mFaces[i];
}

View File

@ -279,7 +279,7 @@ public:
{
bool operator()(const LLFace* const& lhs, const LLFace* const& rhs)
{
return lhs->mDistance > rhs->mDistance; // farthest = first
return !lhs || (rhs && (lhs->mDistance > rhs->mDistance)); // farthest = first
}
};

View File

@ -58,6 +58,7 @@
#include "llpanellandaudio.h"
#include "llpanellandmedia.h"
#include "llradiogroup.h"
#include "llresmgr.h" // getMonetaryString
#include "llscrolllistctrl.h"
#include "llscrolllistitem.h"
#include "llscrolllistcell.h"
@ -739,7 +740,8 @@ void LLPanelLandGeneral::refresh()
cost_per_sqm = (F32)parcel->getSalePrice() / (F32)area;
}
mSaleInfoForSale1->setTextArg("[PRICE]", llformat("%d", parcel->getSalePrice()));
S32 price = parcel->getSalePrice();
mSaleInfoForSale1->setTextArg("[PRICE]", LLResMgr::getInstance()->getMonetaryString(price));
mSaleInfoForSale1->setTextArg("[PRICE_PER_SQM]", llformat("%.1f", cost_per_sqm));
if (can_be_sold)
{

View File

@ -1174,12 +1174,11 @@ void LLGestureMgr::notifyObservers()
{
lldebugs << "LLGestureMgr::notifyObservers" << llendl;
std::vector<LLGestureManagerObserver*> observers = mObservers;
std::vector<LLGestureManagerObserver*>::iterator it;
for (it = observers.begin(); it != observers.end(); ++it)
for(std::vector<LLGestureManagerObserver*>::iterator iter = mObservers.begin();
iter != mObservers.end();
++iter)
{
LLGestureManagerObserver* observer = *it;
LLGestureManagerObserver* observer = (*iter);
observer->changed();
}
}

View File

@ -444,7 +444,8 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
void hide_context_entries(LLMenuGL& menu,
const menuentry_vec_t &entries_to_show,
const menuentry_vec_t &disabled_entries)
const menuentry_vec_t &disabled_entries,
BOOL append) // If append is TRUE, then new enabled entries
{
const LLView::child_list_t *list = menu.getChildList();
@ -501,6 +502,10 @@ void hide_context_entries(LLMenuGL& menu,
// A bit of a hack so we can remember that some UI element explicitly set this to be visible
// so that some other UI element from multi-select doesn't later set this invisible.
menu_item->pushVisible(TRUE);
if (append)
{
menu_item->setEnabled(TRUE);
}
for (itor2 = disabled_entries.begin(); itor2 != disabled_entries.end(); ++itor2)
{
if (*itor2 == name)
@ -2054,7 +2059,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
mContentsCount)
{
gInventory.removeObserver(this);
LLAppearanceMgr::instance().wearInventoryCategory(category, FALSE, TRUE);
LLAppearanceMgr::instance().wearInventoryCategory(category, FALSE, FALSE);
delete this;
}
}
@ -2397,6 +2402,11 @@ void LLFolderBridge::folderOptionsMenu()
const LLInventoryCategory* category = model->getCategory(mUUID);
if(!category) return;
const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
if (trash_id == mUUID) return;
if (isItemInTrash()) return;
if (!isAgentInventory()) return;
LLFolderType::EType type = category->getPreferredType();
const bool is_system_folder = LLFolderType::lookupIsProtectedType(type);
// BAP change once we're no longer treating regular categories as ensembles.
@ -2456,7 +2466,7 @@ void LLFolderBridge::folderOptionsMenu()
}
mItems.push_back(std::string("Outfit Separator"));
}
hide_context_entries(*mMenu, mItems, disabled_items);
hide_context_entries(*mMenu, mItems, disabled_items, TRUE);
// Reposition the menu, in case we're adding items to an existing menu.
mMenu->needsArrange();
@ -2580,28 +2590,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
mMenu = &menu;
sSelf = this;
uuid_vec_t folders;
LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
if (category)
{
folders.push_back(category->getUUID());
}
LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(folders, FALSE);
fetch->startFetch();
inc_busy_count();
if(fetch->isFinished())
{
// everything is already here - call done.
fetch->done();
}
else
{
// it's all on it's way - add an observer, and the inventory
// will call done for us when everything is here.
gInventory.addObserver(fetch);
}
}
// Preemptively disable system folder removal if more than one item selected.
@ -2623,6 +2611,27 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
hide_context_entries(menu, mItems, mDisabledItems);
// Add menu items that are dependent on the contents of the folder.
uuid_vec_t folders;
LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID);
if (category)
{
folders.push_back(category->getUUID());
}
LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(folders, FALSE);
fetch->startFetch();
inc_busy_count();
if(fetch->isFinished())
{
// everything is already here - call done.
fetch->done();
}
else
{
// it's all on its way - add an observer, and the inventory will call done for us when everything is here.
gInventory.addObserver(fetch);
}
}
BOOL LLFolderBridge::hasChildren() const
@ -2989,7 +2998,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// BAP - should skip if dup.
if (move_is_into_current_outfit)
{
LLAppearanceMgr::instance().addCOFItemLink(inv_item);
LLAppearanceMgr::instance().wearItemOnAvatar(inv_item->getUUID(), true, true);
}
else
{

View File

@ -603,8 +603,12 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
void* user_data = NULL);
// Utility function to hide all entries except those in the list
// Can be called multiple times on the same menu (e.g. if multiple items
// are selected). If "append" is false, then only common enabled items
// are set as enabled.
void hide_context_entries(LLMenuGL& menu,
const menuentry_vec_t &entries_to_show,
const menuentry_vec_t &disabled_entries);
const menuentry_vec_t &disabled_entries,
BOOL append = FALSE);
#endif // LL_LLINVENTORYBRIDGE_H

View File

@ -704,13 +704,20 @@ void LLPanelOutfitEdit::onSearchEdit(const std::string& string)
void LLPanelOutfitEdit::onPlusBtnClicked(void)
{
LLUUID selected_id;
getCurrentItemUUID(selected_id);
uuid_vec_t selected_items;
getSelectedItemsUUID(selected_items);
if (selected_id.isNull()) return;
//replacing instead of adding the item
LLAppearanceMgr::getInstance()->wearItemOnAvatar(selected_id, true, true);
LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy;
for(uuid_vec_t::iterator iter = selected_items.begin(); iter != selected_items.end(); iter++)
{
LLUUID selected_id = *iter;
if (!selected_id.isNull())
{
//replacing instead of adding the item
LLAppearanceMgr::getInstance()->wearItemOnAvatar(selected_id, false, true, link_waiter);
}
}
}
void LLPanelOutfitEdit::onVisibilityChange()

View File

@ -300,6 +300,7 @@ LLSpatialGroup::~LLSpatialGroup()
}
delete [] mOcclusionVerts;
mOcclusionVerts = NULL;
LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION);
clearDrawMap();

View File

@ -164,8 +164,6 @@ public:
static BOOL sNoDelete; //deletion of spatial groups and draw info not allowed if TRUE
typedef std::vector<LLPointer<LLSpatialGroup> > sg_vector_t;
typedef std::set<LLPointer<LLSpatialGroup> > sg_set_t;
typedef std::list<LLPointer<LLSpatialGroup> > sg_list_t;
typedef std::vector<LLPointer<LLSpatialBridge> > bridge_list_t;
typedef std::vector<LLPointer<LLDrawInfo> > drawmap_elem_t;
typedef std::map<U32, drawmap_elem_t > draw_map_t;

View File

@ -53,6 +53,7 @@
#include "llmediaentry.h"
#include "llmenugl.h"
#include "llmutelist.h"
#include "llresmgr.h" // getMonetaryString
#include "llselectmgr.h"
#include "lltoolfocus.h"
#include "lltoolgrab.h"
@ -808,7 +809,8 @@ BOOL LLToolPie::handleTooltipLand(std::string line, std::string tooltip_msg)
if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE))
{
LLStringUtil::format_map_t args;
args["[AMOUNT]"] = llformat("%d", hover_parcel->getSalePrice());
S32 price = hover_parcel->getSalePrice();
args["[AMOUNT]"] = LLResMgr::getInstance()->getMonetaryString(price);
line = LLTrans::getString("TooltipForSaleL$", args);
tooltip_msg.append(line);
tooltip_msg.push_back('\n');
@ -906,13 +908,14 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
|| !existing_inspector->getVisible()
|| existing_inspector->getKey()["object_id"].asUUID() != hover_object->getID()))
{
// Add price to tooltip for items on sale
bool for_sale = for_sale_selection(nodep);
if(for_sale)
{
LLStringUtil::format_map_t args;
args["[PRICE]"] = llformat ("%d", nodep->mSaleInfo.getSalePrice());
S32 price = nodep->mSaleInfo.getSalePrice();
args["[AMOUNT]"] = LLResMgr::getInstance()->getMonetaryString(price);
tooltip_msg.append(LLTrans::getString("TooltipPrice", args) );
}

View File

@ -625,7 +625,15 @@ bool LLViewerInventoryCategory::fetch()
// AIS folks are aware of the issue and have a fix in process.
// see ticket for details.
std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents");
std::string url;
if (gAgent.getRegion())
{
url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents");
}
else
{
llwarns << "agent region is null" << llendl;
}
if (!url.empty()) //Capability found. Build up LLSD and use it.
{
LLInventoryModelBackgroundFetch::instance().start(mUUID, false);

View File

@ -2097,8 +2097,10 @@ void LLVOAvatar::computeBodySize()
if (new_body_size != mBodySize)
{
mBodySize = new_body_size;
if (isSelf())
if (isSelf() && !LLAppearanceMgr::instance().isInUpdateAppearanceFromCOF())
{ // notify simulator of change in size
// but not if we are in the middle of updating appearance
gAgent.sendAgentSetAppearance();
}
}
@ -5566,6 +5568,7 @@ LLViewerJointAttachment* LLVOAvatar::getTargetAttachmentPoint(LLViewerObject* vi
if (!attachment)
{
llwarns << "Object attachment point invalid: " << attachmentID << llendl;
attachment = get_if_there(mAttachmentPoints, 1, (LLViewerJointAttachment*)NULL); // Arbitrary using 1 (chest)
}
return attachment;

View File

@ -618,8 +618,8 @@ LLContextMenu* LLWearableItemsList::ContextMenu::createMenu()
const uuid_vec_t& ids = mUUIDs; // selected items IDs
LLUUID selected_id = ids.front(); // ID of the first selected item
functor_t wear = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, true);
functor_t add = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, false);
functor_t wear = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, true, LLPointer<LLInventoryCallback>(NULL));
functor_t add = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, false, LLPointer<LLInventoryCallback>(NULL));
functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1);
// Register handlers common for all wearable types.
@ -767,10 +767,8 @@ void LLWearableItemsList::ContextMenu::updateItemsLabels(LLContextMenu* menu)
LLViewerInventoryItem* item = gInventory.getLinkedItem(mUUIDs.back());
if (!item || !item->isWearableType()) return;
LLStringUtil::format_map_t args;
LLWearableType::EType w_type = item->getWearableType();
args["[WEARABLE_TYPE]"] = LLWearableType::getTypeDefaultNewName(w_type);
std::string new_label = LLTrans::getString("CreateNewWearable", args);
std::string new_label = LLTrans::getString("create_new_" + LLWearableType::getTypeName(w_type));
LLMenuItemGL* menu_item = menu->getChild<LLMenuItemGL>("create_new");
menu_item->setLabel(new_label);

View File

@ -1812,7 +1812,7 @@ void LLPipeline::rebuildPriorityGroups()
assertInitialized();
// Iterate through all drawables on the priority build queue,
for (LLSpatialGroup::sg_list_t::iterator iter = mGroupQ1.begin();
for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ1.begin();
iter != mGroupQ1.end(); ++iter)
{
LLSpatialGroup* group = *iter;

View File

@ -605,7 +605,7 @@ protected:
//
LLDrawable::drawable_list_t mBuildQ1; // priority
LLDrawable::drawable_list_t mBuildQ2; // non-priority
LLSpatialGroup::sg_list_t mGroupQ1; //priority
LLSpatialGroup::sg_vector_t mGroupQ1; //priority
LLSpatialGroup::sg_vector_t mGroupQ2; // non-priority
LLViewerObject::vobj_list_t mCreateQ;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 724 B

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -233,7 +233,7 @@
Klik for at starte secondlife:// kommando
</string>
<string name="CurrentURL" value=" Nuværende URL: [CurrentURL]"/>
<string name="TooltipPrice" value="L$[PRICE]-"/>
<string name="TooltipPrice" value="L$[AMOUNT]: "/>
<string name="SLurlLabelTeleport">
Teleportér til
</string>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_alpha_panel" width="320">
<panel name="avatar_alpha_color_panel" width="300">
<texture_picker label="Alpha: Unten" name="Lower Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken" width="70"/>
<texture_picker label="Alpha: Oben" name="Upper Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken" width="66"/>
<panel name="edit_alpha_panel">
<panel name="avatar_alpha_color_panel">
<texture_picker label="Alpha: Unten" name="Lower Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<texture_picker label="Alpha: Oben" name="Upper Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<texture_picker label="Kopf: Alpha" name="Head Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<texture_picker label="Alpha: Augen" name="Eye Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken" width="72"/>
<texture_picker label="Alpha: Haare" name="Hair Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken" width="70"/>
<texture_picker label="Alpha: Augen" name="Eye Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<texture_picker label="Alpha: Haare" name="Hair Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
</panel>
</panel>

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_tattoo_panel">
<panel name="avatar_tattoo_color_panel">
<texture_picker label="Kopftattoo" name="Head Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken" width="80"/>
<texture_picker label="Obere Tattoos" name="Upper Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken" width="80"/>
<texture_picker label="Untere Tattoos" name="Lower Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken" width="80"/>
<texture_picker label="Kopftattoo" name="Head Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<texture_picker label="Obere Tattoos" name="Upper Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<texture_picker label="Untere Tattoos" name="Lower Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
</panel>
</panel>

View File

@ -248,7 +248,7 @@
Anklicken, um Befehl secondlife:// auszuführen
</string>
<string name="CurrentURL" value=" CurrentURL: [CurrentURL]"/>
<string name="TooltipPrice" value="[PRICE] L$"/>
<string name="TooltipPrice" value="[AMOUNT]L$: "/>
<string name="SLurlLabelTeleport">
Teleportieren nach
</string>

View File

@ -910,40 +910,24 @@
width="75">
Group:
</text>
<button
follows="top|left"
height="10"
image_disabled="Activate_Checkmark"
image_selected="Activate_Checkmark"
image_unselected="Activate_Checkmark"
image_color="White_50"
layout="topleft"
left_pad="0"
top_delta="0"
name="button set group"
tab_stop="false"
tool_tip="Choose a group to share this object's permissions"
width="10" />
<name_box
follows="left|top"
height="18"
initial_value="Loading..."
layout="topleft"
left_pad="5"
top_delta="-1"
left_pad="23"
name="Group Name Proxy"
width="150" />
width="142" />
<button
follows="top|left"
height="23"
label="Deed"
label_selected="Deed"
layout="topleft"
name="button deed"
top_pad="0"
left="108"
tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."
width="80" />
follows="top|left"
height="23"
image_overlay="Edit_Wrench"
layout="topleft"
left_pad="3"
name="button set group"
tab_stop="false"
tool_tip="Choose a group to share this object's permissions"
width="23" />
<check_box
height="19"
follows="left|top"
@ -951,15 +935,26 @@
layout="topleft"
name="checkbox share with group"
tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."
top_pad="10"
left="106"
width="87" />
<button
follows="top|left"
height="23"
label="Deed"
label_selected="Deed"
layout="topleft"
name="button deed"
left_pad="3"
width="100" />
tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."
width="80" />
<text
type="string"
length="1"
follows="left|top"
height="16"
layout="topleft"
top_pad="15"
top_pad="10"
left="10"
name="label click action"
width="98">

View File

@ -472,7 +472,7 @@
layout="topleft"
name="Paste Separator" />
<menu_item_call
label="Remove Link"
label="Delete"
layout="topleft"
name="Remove Link">
<menu_item_call.on_click

View File

@ -67,7 +67,7 @@
<string name="SentToInvalidRegion">You were sent to an invalid region.</string>
<string name="TestingDisconnect">Testing viewer disconnect</string>
<!-- Tooltip, lltooltipview.cpp -->
<!-- Tooltip -->
<string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar -->
<string name="TooltipNoName">(no name)</string> <!-- No name on an object -->
<string name="TooltipOwner">Owner:</string> <!-- Owner name follows -->
@ -83,6 +83,7 @@
<string name="TooltipFlagNoScripts">No Scripts</string>
<string name="TooltipLand">Land:</string>
<string name="TooltipMustSingleDrop">Only a single item can be dragged here</string>
<string name="TooltipPrice" value="L$[AMOUNT]: "/>
<!-- tooltips for Urls -->
<string name="TooltipHttpUrl">Click to view this web page</string>
@ -103,8 +104,6 @@
<string name="TooltipMapUrl">Click to view this location on a map</string>
<string name="TooltipSLAPP">Click to run the secondlife:// command</string>
<string name="CurrentURL" value=" CurrentURL: [CurrentURL]" />
<string name="TooltipPrice" value=" L$[PRICE]-" />
<!-- text for SLURL labels -->
<string name="SLurlLabelTeleport">Teleport to</string>
@ -1830,9 +1829,26 @@ Clears (deletes) the media and all params from the given face.
<string name="tattoo_not_worn">Tattoo not worn</string>
<string name="invalid_not_worn">invalid</string>
<!-- Create new wearable of the specified type -->
<string name="create_new_shape">Create new shape</string>
<string name="create_new_skin">Create new skin</string>
<string name="create_new_hair">Create new hair</string>
<string name="create_new_eyes">Create new eyes</string>
<string name="create_new_shirt">Create new shirt</string>
<string name="create_new_pants">Create new pants</string>
<string name="create_new_shoes">Create new shoes</string>
<string name="create_new_socks">Create new socks</string>
<string name="create_new_jacket">Create new jacket</string>
<string name="create_new_gloves">Create new gloves</string>
<string name="create_new_undershirt">Create new undershirt</string>
<string name="create_new_underpants">Create new underpants</string>
<string name="create_new_skirt">Create new skirt</string>
<string name="create_new_alpha">Create new alpha</string>
<string name="create_new_tattoo">Create new tattoo</string>
<string name="create_new_invalid">invalid</string>
<!-- Wearable List-->
<string name="NewWearable">New [WEARABLE_ITEM]</string>
<string name="CreateNewWearable">Create [WEARABLE_TYPE]</string>
<!-- LLGroupNotify -->
<!-- used in the construction of a Group Notice blue dialog box, buttons, tooltip etc. Seems to be no longer utilized by code in Viewer 2.0 -->

View File

@ -236,7 +236,7 @@
Pulsa para ejecutar el comando secondlife://
</string>
<string name="CurrentURL" value="URL actual: [CurrentURL]"/>
<string name="TooltipPrice" value="[PRICE] L$"/>
<string name="TooltipPrice" value="[AMOUNT]L$: "/>
<string name="SLurlLabelTeleport">
Teleportarse a
</string>

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_tattoo_panel">
<panel name="avatar_tattoo_color_panel">
<texture_picker label="Tatouage tête" name="Head Tattoo" tool_tip="Cliquez pour sélectionner une image" width="76"/>
<texture_picker label="Tatouage haut" name="Upper Tattoo" tool_tip="Cliquez pour sélectionner une image" width="80"/>
<texture_picker label="Tatouage bas" name="Lower Tattoo" tool_tip="Cliquez pour sélectionner une image" width="76"/>
<texture_picker label="Tatouage tête" name="Head Tattoo" tool_tip="Cliquez pour sélectionner une image"/>
<texture_picker label="Tatouage haut" name="Upper Tattoo" tool_tip="Cliquez pour sélectionner une image"/>
<texture_picker label="Tatouage bas" name="Lower Tattoo" tool_tip="Cliquez pour sélectionner une image"/>
<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
</panel>
</panel>

View File

@ -248,7 +248,7 @@
Cliquez pour exécuter la commande secondlife:// command
</string>
<string name="CurrentURL" value=" URL actuelle : [CurrentURL]"/>
<string name="TooltipPrice" value="[PRICE] L$-"/>
<string name="TooltipPrice" value="[AMOUNT]L$: "/>
<string name="SLurlLabelTeleport">
Me téléporter vers
</string>

View File

@ -242,7 +242,7 @@
Clicca per avviare il comando secondlife://
</string>
<string name="CurrentURL" value="URL attuale: [CurrentURL]"/>
<string name="TooltipPrice" value="L$ [PRICE]-"/>
<string name="TooltipPrice" value="L$[AMOUNT]: "/>
<string name="SLurlLabelTeleport">
Teleportati a
</string>

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_tattoo_panel">
<panel name="avatar_tattoo_color_panel">
<texture_picker label="頭部のタトゥー" name="Head Tattoo" tool_tip="クリックして写真を選択" width="70"/>
<texture_picker label="上部のタトゥー" name="Upper Tattoo" tool_tip="クリックして写真を選択" width="70"/>
<texture_picker label="下部のタトゥー" name="Lower Tattoo" tool_tip="クリックして写真を選択" width="70"/>
<texture_picker label="頭部のタトゥー" name="Head Tattoo" tool_tip="クリックして写真を選択"/>
<texture_picker label="上部のタトゥー" name="Upper Tattoo" tool_tip="クリックして写真を選択"/>
<texture_picker label="下部のタトゥー" name="Lower Tattoo" tool_tip="クリックして写真を選択"/>
<color_swatch label="色・色彩配合" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
</panel>
</panel>

View File

@ -248,7 +248,7 @@
クリックして secondlife:// コマンドを出します
</string>
<string name="CurrentURL" value=" 現在の URL [CurrentURL]"/>
<string name="TooltipPrice" value="L$[PRICE]-"/>
<string name="TooltipPrice" value="L$[AMOUNT]: "/>
<string name="SLurlLabelTeleport">
テレポート
</string>

View File

@ -215,7 +215,7 @@
Kliknij by uruchomić secondlife:// command
</string>
<string name="CurrentURL" value=" Obecny Adres: [CurrentURL]"/>
<string name="TooltipPrice" value="L$[PRICE]-"/>
<string name="TooltipPrice" value="L$[AMOUNT]: "/>
<string name="SLurlLabelTeleport">
Teleportuj do
</string>

View File

@ -236,7 +236,7 @@
Clique para ativar no secondlife:// comando
</string>
<string name="CurrentURL" value="URL atual: [CurrentURL]"/>
<string name="TooltipPrice" value="L$[PRICE]-"/>
<string name="TooltipPrice" value="L$[AMOUNT]: "/>
<string name="SLurlLabelTeleport">
Teletransportar para
</string>