diff options
Diffstat (limited to 'indra/newview')
29 files changed, 290 insertions, 129 deletions
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 12d2752180..3691d731ed 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -965,18 +965,10 @@ bool LLAppearanceMgr::getCanRemoveOutfit(const LLUUID& outfit_cat_id) return false; } - // Check if the folder contains worn items. - LLInventoryModel::cat_array_t cats; - LLInventoryModel::item_array_t items; - LLFindWorn filter_worn; - gInventory.collectDescendentsIf(outfit_cat_id, cats, items, false, filter_worn); - if (!items.empty()) - { - return false; - } - // Check for the folder's non-removable descendants. LLFindNonRemovableObjects filter_non_removable; + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; LLInventoryModel::item_array_t::const_iterator it; gInventory.collectDescendentsIf(outfit_cat_id, cats, items, false, filter_non_removable); if (!cats.empty() || !items.empty()) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 961969a5c5..18c69b5130 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -243,7 +243,7 @@ public: gCacheName->get(mAvatarID, FALSE, boost::bind(&LLChatHistoryHeader::nameUpdatedCallback, this, _1, _2, _3, _4)); //*TODO overly defensive thing, source type should be maintained out there - if((chat.mFromID.isNull() && chat.mFromName.empty()) || chat.mFromName == SYSTEM_FROM) + if((chat.mFromID.isNull() && chat.mFromName.empty()) || chat.mFromName == SYSTEM_FROM && chat.mFromID.isNull()) { mSourceType = CHAT_SOURCE_SYSTEM; } diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 010033fcd3..74034cfbf7 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -88,6 +88,10 @@ const S32 MIN_ITEM_WIDTH_VISIBLE = LLFolderViewItem::ICON_WIDTH + /*first few characters*/ 40; const S32 MINIMUM_RENAMER_WIDTH = 80; +// *TODO: move in params in xml if necessary. Requires modification of LLFolderView & LLInventoryPanel Params. +const S32 STATUS_TEXT_HPAD = 6; +const S32 STATUS_TEXT_VPAD = 8; + enum { SIGNAL_NO_KEYBOARD_FOCUS = 1, SIGNAL_KEYBOARD_FOCUS = 2 @@ -247,6 +251,9 @@ LLFolderView::LLFolderView(const Params& p) text_p.visible(false); text_p.allow_html(true); text_p.wrap(true); // allow multiline text. See EXT-7564, EXT-7047 + // set text padding the same as in People panel. EXT-7047, EXT-4837 + text_p.h_pad(STATUS_TEXT_HPAD); + text_p.v_pad(STATUS_TEXT_VPAD); mStatusTextBox = LLUICtrlFactory::create<LLTextBox> (text_p); mStatusTextBox->setFollowsLeft(); mStatusTextBox->setFollowsTop(); diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp index 55cb2619cf..23ea786484 100644 --- a/indra/newview/llinventoryitemslist.cpp +++ b/indra/newview/llinventoryitemslist.cpp @@ -70,23 +70,19 @@ void LLPanelInventoryListItemBase::draw() { if (getNeedsRefresh()) { - updateItem(); + if (mItem) + { + updateItem(mItem->getName()); + } setNeedsRefresh(false); } LLPanel::draw(); } -void LLPanelInventoryListItemBase::updateItem() +// virtual +void LLPanelInventoryListItemBase::updateItem(const std::string& name) { setIconImage(mIconImage); - - std::string name = mItem->getName(); - - if (get_is_item_worn(mItem->getUUID())) - { - name += LLTrans::getString("worn"); - } - setTitle(name, mHighlightedText); } @@ -140,7 +136,11 @@ BOOL LLPanelInventoryListItemBase::postBuild() setIconCtrl(getChild<LLIconCtrl>("item_icon")); setTitleCtrl(getChild<LLTextBox>("item_name")); - mIconImage = LLInventoryIcon::getIcon(mItem->getType(), mItem->getInventoryType(), mItem->getFlags(), FALSE); + if (mItem) + { + mIconImage = LLInventoryIcon::getIcon(mItem->getType(), mItem->getInventoryType(), mItem->getFlags(), FALSE); + updateItem(mItem->getName()); + } setNeedsRefresh(true); @@ -169,6 +169,42 @@ void LLPanelInventoryListItemBase::onMouseLeave(S32 x, S32 y, MASK mask) LLPanel::onMouseLeave(x, y, mask); } +const std::string& LLPanelInventoryListItemBase::getItemName() const +{ + if (!mItem) + { + return LLStringUtil::null; + } + return mItem->getName(); +} + +LLAssetType::EType LLPanelInventoryListItemBase::getType() const +{ + if (!mItem) + { + return LLAssetType::AT_NONE; + } + return mItem->getType(); +} + +LLWearableType::EType LLPanelInventoryListItemBase::getWearableType() const +{ + if (!mItem) + { + return LLWearableType::WT_NONE; + } + return mItem->getWearableType(); +} + +const std::string& LLPanelInventoryListItemBase::getDescription() const +{ + if (!mItem) + { + return LLStringUtil::null; + } + return mItem->getDescription(); +} + S32 LLPanelInventoryListItemBase::notify(const LLSD& info) { S32 rv = 0; @@ -176,7 +212,7 @@ S32 LLPanelInventoryListItemBase::notify(const LLSD& info) { mHighlightedText = info["match_filter"].asString(); - std::string test(mItem->getName()); + std::string test(mTitleCtrl->getText()); LLStringUtil::toUpper(test); if(mHighlightedText.empty() || std::string::npos != test.find(mHighlightedText)) diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h index c1b1a6f281..d6132717e8 100644 --- a/indra/newview/llinventoryitemslist.h +++ b/indra/newview/llinventoryitemslist.h @@ -122,16 +122,16 @@ public: /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); /** Get the name of a corresponding inventory item */ - const std::string& getItemName() const { return mItem->getName(); } + const std::string& getItemName() const; /** Get the asset type of a corresponding inventory item */ - LLAssetType::EType getType() const { return mItem->getType(); } + LLAssetType::EType getType() const; /** Get the wearable type of a corresponding inventory item */ - LLWearableType::EType getWearableType() const { return mItem->getWearableType(); } + LLWearableType::EType getWearableType() const; /** Get the description of a corresponding inventory item */ - const std::string& getDescription() const { return mItem->getDescription(); } + const std::string& getDescription() const; /** Get the associated inventory item */ LLViewerInventoryItem* getItem() const { return mItem; } @@ -152,7 +152,7 @@ protected: /** * Called after inventory item was updated, update panel widgets to reflect inventory changes. */ - virtual void updateItem(); + virtual void updateItem(const std::string& name); /** setter for mIconCtrl */ void setIconCtrl(LLIconCtrl* icon) { mIconCtrl = icon; } diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 7d81cf18aa..6b0103e0de 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -189,6 +189,8 @@ LLInventoryPanel::~LLInventoryPanel() } } + gIdleCallbacks.deleteFunction(onIdle, this); + // LLView destructor will take care of the sub-views. mInventory->removeObserver(mInventoryObserver); delete mInventoryObserver; diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 4b5e765c4f..1fadb126e4 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -32,6 +32,7 @@ #include "llviewerprecompiledheaders.h" +#include "llagentdata.h" // for gAgentID #include "llnearbychathandler.h" #include "llbottomtray.h" @@ -367,6 +368,13 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) { if(gSavedSettings.getBOOL("ShowScriptErrors") == FALSE) return; + + // don't process debug messages from not owned objects, see EXT-7762 + if (gAgentID != chat_msg.mOwnerID) + { + return; + } + if (gSavedSettings.getS32("ShowScriptErrorsLocation")== 1)// show error in window //("ScriptErrorsAsChat")) { diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index bca292fa4a..03df2d2b20 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -90,17 +90,33 @@ protected: registrar.add("Outfit.Delete", boost::bind(deleteOutfit, selected_id)); enable_registrar.add("Outfit.OnEnable", boost::bind(&OutfitContextMenu::onEnable, this, _2)); + enable_registrar.add("Outfit.OnVisible", boost::bind(&OutfitContextMenu::onVisible, this, _2)); return createFromFile("menu_outfit_tab.xml"); } - bool onEnable(const LLSD& data) + bool onEnable(LLSD::String param) + { + LLUUID outfit_cat_id = mUUIDs.back(); + + if ("rename" == param) + { + return get_is_category_renameable(&gInventory, outfit_cat_id); + } + + return true; + } + + bool onVisible(LLSD::String param) { - std::string param = data.asString(); LLUUID outfit_cat_id = mUUIDs.back(); bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == outfit_cat_id; - if ("wear_replace" == param) + if ("edit" == param) + { + return is_worn; + } + else if ("wear_replace" == param) { return !is_worn; } @@ -112,14 +128,6 @@ protected: { return is_worn; } - else if ("edit" == param) - { - return is_worn; - } - else if ("rename" == param) - { - return get_is_category_renameable(&gInventory, outfit_cat_id); - } else if ("delete" == param) { return LLAppearanceMgr::instance().getCanRemoveOutfit(outfit_cat_id); diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 1286642897..1157c40b39 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -91,6 +91,7 @@ public: registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2)); enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitListGearMenu::onEnable, this, _2)); + enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2)); mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>( "menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); @@ -99,6 +100,28 @@ public: LLMenuGL* getMenu() { return mMenu; } + void show(LLView* spawning_view) + { + if (!mMenu) return; + + updateItemsVisibility(); + mMenu->buildDrawLabels(); + mMenu->updateParent(LLMenuGL::sMenuContainer); + S32 menu_x = 0; + S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight(); + LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y); + } + + void updateItemsVisibility() + { + if (!mMenu) return; + + bool have_selection = getSelectedOutfitID().notNull(); + mMenu->setItemVisible("sepatator1", have_selection); + mMenu->setItemVisible("sepatator2", have_selection); + mMenu->arrangeAndClear(); // update menu height + } + private: const LLUUID& getSelectedOutfitID() { @@ -174,6 +197,26 @@ private: return false; } + if ("rename" == param) + { + return get_is_category_renameable(&gInventory, selected_outfit_id); + } + else if ("delete" == param) + { + return LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit_id); + } + + return true; + } + + bool onVisible(LLSD::String param) + { + const LLUUID& selected_outfit_id = getSelectedOutfitID(); + if (selected_outfit_id.isNull()) // no selection or invalid outfit selected + { + return false; + } + bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == selected_outfit_id; if ("wear" == param) @@ -184,14 +227,6 @@ private: { return is_worn; } - else if ("rename" == param) - { - return get_is_category_renameable(&gInventory, selected_outfit_id); - } - else if ("delete" == param) - { - return LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit_id); - } return true; } @@ -528,28 +563,21 @@ void LLPanelOutfitsInventory::updateListCommands() { bool trash_enabled = isActionEnabled("delete"); bool wear_enabled = isActionEnabled("wear"); + bool wear_visible = !isCOFPanelActive(); bool make_outfit_enabled = isActionEnabled("save_outfit"); mListCommands->childSetEnabled("trash_btn", trash_enabled); mListCommands->childSetEnabled("wear_btn", wear_enabled); - mListCommands->childSetVisible("wear_btn", wear_enabled); + mListCommands->childSetVisible("wear_btn", wear_visible); mSaveComboBtn->setMenuItemEnabled("save_outfit", make_outfit_enabled); } void LLPanelOutfitsInventory::showGearMenu() { - LLMenuGL* menu = mGearMenu ? mGearMenu->getMenu() : NULL; - if (menu) - { - menu->buildDrawLabels(); - menu->updateParent(LLMenuGL::sMenuContainer); - LLView* spawning_view = getChild<LLView>("options_gear_btn"); - S32 menu_x, menu_y; - //show menu in co-ordinates of panel - spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this); - menu_y += menu->getRect().getHeight(); - LLMenuGL::showPopup(this, menu, menu_x, menu_y); - } + if (!mGearMenu) return; + + LLView* spawning_view = getChild<LLView>("options_gear_btn"); + mGearMenu->show(spawning_view); } void LLPanelOutfitsInventory::onTrashButtonClick() @@ -691,6 +719,7 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) { return FALSE; } + return hasItemsSelected(); } if (command_name == "save_outfit") { @@ -713,7 +742,6 @@ bool LLPanelOutfitsInventory::hasItemsSelected() { bool has_items_selected = false; - // TODO: add handling "My Outfits" tab. if (isCOFPanelActive()) { LLFolderView* root = getActivePanel()->getRootFolder(); @@ -723,6 +751,10 @@ bool LLPanelOutfitsInventory::hasItemsSelected() has_items_selected = (selection_set.size() > 0); } } + else // My Outfits Tab is active + { + has_items_selected = mMyOutfitsPanel->getSelectedOutfitUUID().notNull(); + } return has_items_selected; } diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index c8abcc83c4..1f979b0ef1 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -84,7 +84,9 @@ LLPanelPlaceProfile::LLPanelPlaceProfile() // virtual LLPanelPlaceProfile::~LLPanelPlaceProfile() -{} +{ + gIdleCallbacks.deleteFunction(&LLPanelPlaceProfile::updateYouAreHereBanner, this); +} // virtual BOOL LLPanelPlaceProfile::postBuild() diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index a27afeab7c..8fe78a0f81 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -52,6 +52,18 @@ static const LLAvatarItemAgentOnTopComparator AGENT_ON_TOP_NAME_COMPARATOR; +// helper function to update AvatarList Item's indicator in the voice participant list +static void update_speaker_indicator(const LLAvatarList* const avatar_list, const LLUUID& avatar_uuid, bool is_muted) +{ + LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*>(avatar_list->getItemByValue(avatar_uuid)); + if (item) + { + LLOutputMonitorCtrl* indicator = item->getChild<LLOutputMonitorCtrl>("speaking_indicator"); + indicator->setIsMuted(is_muted); + } +} + + // See EXT-4301. /** * class LLAvalineUpdater - observe the list of voice participants in session and check @@ -354,6 +366,20 @@ void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param) } } } + + // update voice mute state of all items. See EXT-7235 + LLSpeakerMgr::speaker_list_t speaker_list; + + // Use also participants which are not in voice session now (the second arg is TRUE). + // They can already have mModeratorMutedVoice set from the previous voice session + // and LLSpeakerVoiceModerationEvent will not be sent when speaker manager is updated next time. + mSpeakerMgr->getSpeakerList(&speaker_list, TRUE); + for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++) + { + const LLPointer<LLSpeaker>& speakerp = *it; + + update_speaker_indicator(list, speakerp->mID, speakerp->mModeratorMutedVoice); + } } } @@ -506,12 +532,7 @@ bool LLParticipantList::onSpeakerMuteEvent(LLPointer<LLOldEvents::LLEvent> event // update UI on confirmation of moderator mutes if (event->getValue().asString() == "voice") { - LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*>(mAvatarList->getItemByValue(speakerp->mID)); - if (item) - { - LLOutputMonitorCtrl* indicator = item->getChild<LLOutputMonitorCtrl>("speaking_indicator"); - indicator->setIsMuted(speakerp->mModeratorMutedVoice); - } + update_speaker_indicator(mAvatarList, speakerp->mID, speakerp->mModeratorMutedVoice); } return true; } diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 54695e9d40..f86838194e 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -126,6 +126,19 @@ BOOL LLPanelWearableOutfitItem::handleDoubleClick(S32 x, S32 y, MASK mask) return LLUICtrl::handleDoubleClick(x, y, mask); } +// virtual +void LLPanelWearableOutfitItem::updateItem(const std::string& name) +{ + std::string search_label = name; + + if (mItem && get_is_item_worn(mItem->getUUID())) + { + search_label += LLTrans::getString("worn"); + } + + LLPanelInventoryListItemBase::updateItem(search_label); +} + LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item) : LLPanelInventoryListItemBase(item) { @@ -292,12 +305,6 @@ LLPanelDummyClothingListItem* LLPanelDummyClothingListItem::create(LLWearableTyp return list_item; } -void LLPanelDummyClothingListItem::updateItem() -{ - std::string title = wearableTypeToString(mWearableType); - setTitle(title, LLStringUtil::null); -} - BOOL LLPanelDummyClothingListItem::postBuild() { LLIconCtrl* icon = getChild<LLIconCtrl>("item_icon"); @@ -307,7 +314,7 @@ BOOL LLPanelDummyClothingListItem::postBuild() addWidgetToRightSide("btn_add_panel"); setIconImage(LLInventoryIcon::getIcon(LLAssetType::AT_CLOTHING, LLInventoryType::IT_NONE, mWearableType, FALSE)); - updateItem(); + updateItem(wearableTypeToString(mWearableType)); // Make it look loke clothing item - reserve space for 'delete' button setLeftWidgetsWidth(icon->getRect().mLeft); @@ -452,15 +459,17 @@ static const LLWearableItemTypeNameComparator WEARABLE_TYPE_NAME_COMPARATOR; static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_items_list"); LLWearableItemsList::Params::Params() -: use_internal_context_menu("use_internal_context_menu", true) +: standalone("standalone", true) {} LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p) : LLInventoryItemsList(p) { setComparator(&WEARABLE_TYPE_NAME_COMPARATOR); - if (p.use_internal_context_menu) + mIsStandalone = p.standalone; + if (mIsStandalone) { + // Use built-in context menu. setRightMouseDownCallback(boost::bind(&LLWearableItemsList::onRightClick, this, _2, _3)); } } @@ -555,6 +564,18 @@ void LLWearableItemsList::onRightClick(S32 x, S32 y) /// ContextMenu ////////////////////////////////////////////////////////////////////////// +LLWearableItemsList::ContextMenu::ContextMenu() +: mParent(NULL) +{ +} + +void LLWearableItemsList::ContextMenu::show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) +{ + mParent = dynamic_cast<LLWearableItemsList*>(spawning_view); + LLListContextMenu::show(spawning_view, uuids, x, y); + mParent = NULL; // to avoid dereferencing an invalid pointer +} + // virtual LLContextMenu* LLWearableItemsList::ContextMenu::createMenu() { @@ -642,17 +663,21 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu } } // for + bool standalone = mParent ? mParent->isStandalone() : false; + // *TODO: eliminate multiple traversals over the menu items + setMenuItemVisible(menu, "wear_add", mask == MASK_CLOTHING && n_worn == 0); setMenuItemVisible(menu, "wear", n_worn == 0); - setMenuItemVisible(menu, "edit", mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1); - setMenuItemEnabled(menu, "edit", n_editable == 1 && n_worn == 1); + setMenuItemVisible(menu, "edit", !standalone && mask & (MASK_CLOTHING|MASK_BODYPART)); + setMenuItemEnabled(menu, "edit", n_editable == 1 && n_worn == 1 && n_items == 1); setMenuItemVisible(menu, "create_new", mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1); + setMenuItemVisible(menu, "show_original", !standalone); setMenuItemEnabled(menu, "show_original", n_items == 1 && n_links == n_items); setMenuItemVisible(menu, "take_off", mask == MASK_CLOTHING && n_worn == n_items); setMenuItemVisible(menu, "detach", mask == MASK_ATTACHMENT && n_worn == n_items); setMenuItemVisible(menu, "take_off_or_detach", mask == (MASK_ATTACHMENT|MASK_CLOTHING)); setMenuItemEnabled(menu, "take_off_or_detach", n_worn == n_items); - setMenuItemVisible(menu, "object_profile", mask & (MASK_ATTACHMENT|MASK_CLOTHING)); + setMenuItemVisible(menu, "object_profile", !standalone); setMenuItemEnabled(menu, "object_profile", n_items == 1); // Populate or hide the "Attach to..." / "Attach to HUD..." submenus. diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index dd0ceb99e4..2f95c733aa 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -56,13 +56,13 @@ class LLPanelWearableListItem : public LLPanelInventoryListItemBase public: /** - * Shows buttons when mouse is over - */ + * Shows buttons when mouse is over + */ /*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask); /** - * Hides buttons when mouse is out - */ + * Hides buttons when mouse is out + */ /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); protected: @@ -84,11 +84,16 @@ public: static LLPanelWearableOutfitItem* create(LLViewerInventoryItem* item); /** - * Puts item on if it is not worn by agent - * otherwise takes it off on double click. - */ + * Puts item on if it is not worn by agent + * otherwise takes it off on double click. + */ /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); + /** + * Updates item name and (worn) suffix. + */ + /*virtual*/ void updateItem(const std::string& name); + protected: LLPanelWearableOutfitItem(LLViewerInventoryItem* item); @@ -198,7 +203,6 @@ class LLPanelDummyClothingListItem : public LLPanelWearableListItem public: static LLPanelDummyClothingListItem* create(LLWearableType::EType w_type); - /*virtual*/ void updateItem(); /*virtual*/ BOOL postBuild(); LLWearableType::EType getWearableType() const; @@ -325,6 +329,10 @@ public: */ class ContextMenu : public LLListContextMenu, public LLSingleton<ContextMenu> { + public: + ContextMenu(); + /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y); + protected: enum { MASK_CLOTHING = 0x01, @@ -340,11 +348,13 @@ public: static void setMenuItemEnabled(LLContextMenu* menu, const std::string& name, bool val); static void updateMask(U32& mask, LLAssetType::EType at); static void createNewWearable(const LLUUID& item_id); + + LLWearableItemsList* mParent; }; struct Params : public LLInitParam::Block<Params, LLInventoryItemsList::Params> { - Optional<bool> use_internal_context_menu; + Optional<bool> standalone; Params(); }; @@ -361,11 +371,15 @@ public: */ void updateChangedItems(const LLInventoryModel::changed_items_t& changed_items_uuids); + bool isStandalone() const { return mIsStandalone; } + protected: friend class LLUICtrlFactory; LLWearableItemsList(const LLWearableItemsList::Params& p); void onRightClick(S32 x, S32 y); + + bool mIsStandalone; }; #endif //LL_LLWEARABLEITEMSLIST_H diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml index c4e31ed180..8e7ef7f0b5 100644 --- a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml @@ -11,6 +11,9 @@ <on_enable function="Gear.OnEnable" parameter="wear" /> + <on_visible + function="Gear.OnVisible" + parameter="wear" /> </menu_item_call> <menu_item_call label="Take Off - Remove from Current Outfit" @@ -21,9 +24,12 @@ <on_enable function="Gear.OnEnable" parameter="take_off" /> + <on_visible + function="Gear.OnVisible" + parameter="take_off" /> </menu_item_call> - <menu_item_separator /> + <menu_item_separator name="sepatator1" /> <!-- copied (with minor modifications) from menu_inventory_add.xml --> <!-- *TODO: generate dynamically? --> <menu @@ -168,7 +174,7 @@ </menu> <!-- copied from menu_inventory_add.xml --> - <menu_item_separator /> + <menu_item_separator name="sepatator2" /> <menu_item_call label="Rename Outfit" layout="topleft" @@ -178,6 +184,9 @@ <on_enable function="Gear.OnEnable" parameter="rename" /> + <on_visible + function="Gear.OnVisible" + parameter="rename" /> </menu_item_call> <menu_item_call label="Delete Outfit" @@ -188,5 +197,8 @@ <on_enable function="Gear.OnEnable" parameter="delete" /> + <on_visible + function="Gear.OnVisible" + parameter="delete" /> </menu_item_call> </menu> diff --git a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml index 67559638d9..e084216a69 100644 --- a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml +++ b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml @@ -8,8 +8,8 @@ name="wear_replace"> <on_click function="Outfit.WearReplace" /> - <on_enable - function="Outfit.OnEnable" + <on_visible + function="Outfit.OnVisible" parameter="wear_replace" /> </menu_item_call> <menu_item_call @@ -18,8 +18,8 @@ name="wear_add"> <on_click function="Outfit.WearAdd" /> - <on_enable - function="Outfit.OnEnable" + <on_visible + function="Outfit.OnVisible" parameter="wear_add" /> </menu_item_call> <menu_item_call @@ -28,8 +28,8 @@ name="take_off"> <on_click function="Outfit.TakeOff" /> - <on_enable - function="Outfit.OnEnable" + <on_visible + function="Outfit.OnVisible" parameter="take_off" /> </menu_item_call> <menu_item_call @@ -38,8 +38,8 @@ name="edit"> <on_click function="Outfit.Edit" /> - <on_enable - function="Outfit.OnEnable" + <on_visible + function="Outfit.OnVisible" parameter="edit" /> </menu_item_call> <menu_item_separator /> @@ -59,8 +59,8 @@ name="delete"> <on_click function="Outfit.Delete" /> - <on_enable - function="Outfit.OnEnable" + <on_visible + function="Outfit.OnVisible" parameter="delete" /> </menu_item_call> </context_menu> diff --git a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml index 44437d01eb..bdfa928b1d 100644 --- a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml +++ b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml @@ -19,6 +19,6 @@ multi_select="true" name="wearable_items_list" translate="false" - use_internal_context_menu="false" + standalone="false" /> </accordion_tab> diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index 859cc82e81..976f6d6cd0 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -47,7 +47,7 @@ layout="topleft" name="back_btn" picture_style="true" - left="9" + left="10" tab_stop="false" top="2" width="30" /> @@ -56,7 +56,7 @@ font="SansSerifHugeBold" height="26" layout="topleft" - left_pad="10" + left_pad="4" name="title" text_color="LtGray" top="0" diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml index 1b4f547f9d..6744a7b9c2 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -31,7 +31,7 @@ layout="topleft" name="back_btn" picture_style="true" - left="7" + left="10" tab_stop="false" top="2" width="30" /> @@ -42,7 +42,7 @@ font="SansSerifHugeBold" height="26" layout="topleft" - left_pad="10" + left_pad="4" name="title" text_color="LtGray" top="0" diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml index 589ea10e8d..dc83b334b5 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml @@ -24,7 +24,7 @@ image_unselected="BackButton_Off" layout="topleft" name="back_btn" - left="7" + left="10" tab_stop="false" top="2" width="30" /> @@ -35,10 +35,10 @@ font="SansSerifHugeBold" height="26" layout="topleft" - left_pad="10" + left_pad="4" name="title" text_color="LtGray" - top="0" + top="2" width="250"> Edit Pick </text> diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index 645ee8a435..950c4a5fdb 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -141,15 +141,16 @@ left="0" layout="topleft" name="back_btn" left="11" - top="7" /> + top="3" /> <text follows="top|left" font="SansSerifHugeBold" height="22" layout="topleft" - left_pad="15" + left_pad="8" name="edit_wearable_title" text_color="white" + top="3" value="Editing Shape" width="270" /> <panel diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index 58b78cfa02..e4eb9afb29 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -57,9 +57,9 @@ background_visible="true" font="SansSerifHugeBold" h_pad="0" height="26" - left_pad="10" + left_pad="8" text_color="LtGray" - top="0" + top="1" use_ellipses="true" width="275" follows="top|left|right" diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml index bb73360e0b..55fef5aaf7 100644 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -63,7 +63,7 @@ image_pressed="BackButton_Press" image_unselected="BackButton_Off" layout="topleft" - left="8" + left="9" name="back_btn" tool_tip="Back" tab_stop="false" @@ -74,10 +74,10 @@ font="SansSerifHugeBold" height="26" layout="topleft" - left_pad="10" + left_pad="7" name="title" text_color="LtGray" - top="2" + top="3" use_ellipses="true" value="Place Profile" width="280" /> diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index 741f60669a..decdeca00d 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -64,14 +64,14 @@ name="back_btn" left="5" tab_stop="false" - top="2" + top="1" width="30" /> <text follows="top|right" font="SansSerifHugeBold" height="26" layout="topleft" - left_pad="20" + left_pad="10" name="title" text_color="LtGray" top="0" diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index 49e1d16f6a..1d01bcb8a5 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -18,7 +18,7 @@ image_unselected="BackButton_Off" layout="topleft" name="back_btn" - left="7" + left="10" tab_stop="false" top="2" width="30" /> @@ -27,10 +27,10 @@ font="SansSerifHugeBold" height="26" layout="topleft" - left_pad="10" + left_pad="4" name="title" text_color="LtGray" - top="0" + top="2" value="Pick Info" use_ellipses="true" width="275" /> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 59f1f6d638..55e0184282 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -160,7 +160,7 @@ image_pressed="BackButton_Press" image_unselected="BackButton_Off" layout="topleft" - left="7" + left="8" name="back_btn" tool_tip="Back" tab_stop="false" @@ -174,7 +174,7 @@ left_pad="10" name="title" text_color="LtGray" - top="2" + top="4" use_ellipses="true" value="Place Profile" width="280" /> diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 33f895e13a..638e190e8f 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -37,6 +37,7 @@ background_visible="true" left="6" name="Places Tabs" tab_min_width="80" + tab_max_width="157" tab_height="30" tab_group="1" tab_position="top" diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index cc5ba334d6..d9030fc0d6 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -24,7 +24,7 @@ image_unselected="BackButton_Off" layout="topleft" name="back" - left="9" + left="10" tab_stop="false" top="2" width="30" /> @@ -38,10 +38,10 @@ font="SansSerifHugeBold" height="26" layout="topleft" - left_pad="10" + left_pad="5" name="user_name" text_color="LtGray" - top="0" + top="2" value="(Loading...)" use_ellipses="true" width="275" /> diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index ae08a13793..227c470d14 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -144,7 +144,7 @@ width="333"> left="5" min_height="410" name="panel_outfit_edit" - top="5" + top="2" visible="false" width="320"/> <panel diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index b736f5e29c..e2bd6f375e 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -55,10 +55,10 @@ font="SansSerifHugeBold" height="26" layout="topleft" - left_pad="10" + left_pad="3" name="title" text_color="LtGray" - top="0" + top="2" use_ellipses="true" value="Object Profile" width="275" /> |