diff options
38 files changed, 222 insertions, 172 deletions
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 345953f2e9..4e5fdb1219 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -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(); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 862c68ecda..43f6be42b6 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -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) diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 8834f8c395..84c911c038 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -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(); diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 5bc3b3ac8d..752a2e7504 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -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" @@ -436,12 +437,28 @@ 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(); diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 8fdbdd08bf..4c0f51056d 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -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) diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h index de148e0d46..0518d59df3 100644 --- a/indra/newview/llcofwearables.h +++ b/indra/newview/llcofwearables.h @@ -116,6 +116,8 @@ protected: LLAccordionCtrlTab* mLastSelectedTab; + std::map<const LLAccordionCtrlTab*, LLAssetType::EType> mTab2AssetType; + LLCOFCallbacks mCOFCallbacks; LLListContextMenu* mClothingMenu; diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h index 651dabff9e..08972853c3 100644 --- a/indra/newview/lldrawable.h +++ b/indra/newview/lldrawable.h @@ -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]; } diff --git a/indra/newview/llface.h b/indra/newview/llface.h index 02cc2af433..b20ecfe2b8 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -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 } }; diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 98f940c233..913bb676b0 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -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) { diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp index 6ffd534a53..160dd0b959 100644 --- a/indra/newview/llgesturemgr.cpp +++ b/indra/newview/llgesturemgr.cpp @@ -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(); } } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 9e7224d9b8..7ec6440dc3 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -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 { diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 97e87c2f3b..9dc50b542d 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -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 diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 2df1982e03..f8350a56ef 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -567,13 +567,20 @@ void LLPanelOutfitEdit::onSearchEdit(const std::string& string) void LLPanelOutfitEdit::onPlusBtnClicked(void) { - LLUUID selected_id; - getCurrentItemUUID(selected_id); - - if (selected_id.isNull()) return; + uuid_vec_t selected_items; + getSelectedItemsUUID(selected_items); - //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() diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index c229657ded..f37b1d40c2 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -300,6 +300,7 @@ LLSpatialGroup::~LLSpatialGroup() } delete [] mOcclusionVerts; + mOcclusionVerts = NULL; LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); clearDrawMap(); diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 19af6a0c38..924f38acb2 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -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; diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index ae244cd8a1..95c4f01e46 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -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) ); } diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 3430f265ae..1ff4d6db9e 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -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); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 82823f3de2..ab5a75e307 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -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; diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 9f9a9bef35..3887f64618 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -576,8 +576,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. @@ -725,10 +725,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); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index d4550a9a03..1c76944c1b 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -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; diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index faa8cec5d6..8e6390012a 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -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; diff --git a/indra/newview/skins/default/textures/icons/Edit_Wrench.png b/indra/newview/skins/default/textures/icons/Edit_Wrench.png Binary files differindex 1c43960d02..250697b4b1 100644 --- a/indra/newview/skins/default/textures/icons/Edit_Wrench.png +++ b/indra/newview/skins/default/textures/icons/Edit_Wrench.png diff --git a/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png Binary files differindex c590a5a5d3..296311e797 100644 --- a/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png +++ b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index 32f37c038e..71c9f74dc0 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -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> diff --git a/indra/newview/skins/default/xui/de/panel_edit_alpha.xml b/indra/newview/skins/default/xui/de/panel_edit_alpha.xml index b6c53be778..4b48950341 100644 --- a/indra/newview/skins/default/xui/de/panel_edit_alpha.xml +++ b/indra/newview/skins/default/xui/de/panel_edit_alpha.xml @@ -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> diff --git a/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml index 830c7b0bb8..075a9d752a 100644 --- a/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml @@ -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> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index f6ae17239a..206017c06c 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -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> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 194a93977f..a96dbe3553 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -910,29 +910,34 @@ width="75"> Group: </text> + <name_box + follows="left|top" + height="18" + initial_value="Loading..." + layout="topleft" + left_pad="23" + name="Group Name Proxy" + width="142" /> <button follows="top|left" - height="10" - image_disabled="Activate_Checkmark" - image_selected="Activate_Checkmark" - image_unselected="Activate_Checkmark" - image_color="White_50" + height="23" + image_overlay="Edit_Wrench" layout="topleft" - left_pad="0" - top_delta="0" + left_pad="3" name="button set group" tab_stop="false" tool_tip="Choose a group to share this object's permissions" - width="10" /> - <name_box + width="23" /> + <check_box + height="19" follows="left|top" - height="18" - initial_value="Loading..." + label="Share" layout="topleft" - left_pad="5" - top_delta="-1" - name="Group Name Proxy" - width="150" /> + 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" @@ -940,26 +945,16 @@ label_selected="Deed" layout="topleft" name="button deed" - top_pad="0" - left="108" + left_pad="3" tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer." width="80" /> - <check_box - height="19" - follows="left|top" - label="Share" - 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." - left_pad="3" - width="100" /> <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"> diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 5c19f1932d..c0046d8e28 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -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 diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index e43c61b202..ece57a6682 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -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 --> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 717665f4d9..17e9f687b2 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -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> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml index 9a6939e6b7..086542dee2 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml @@ -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> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 604398a658..15368c715f 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -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> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index aeaf8098b9..5554a3ca4f 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -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> diff --git a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml index c3f8c12620..f4cfe6d83f 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml @@ -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> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 619f9fc9ef..5aab0875f4 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -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> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index f110052f68..99539a84f5 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -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> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index ca32412058..701e18a58a 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -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> |