diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llappearancemgr.cpp | 29 | ||||
-rw-r--r-- | indra/newview/llappearancemgr.h | 3 | ||||
-rw-r--r-- | indra/newview/llsidepanelappearance.cpp | 26 | ||||
-rw-r--r-- | indra/newview/llsidepanelappearance.h | 6 |
4 files changed, 49 insertions, 15 deletions
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index d91b9d7ea4..c06098689d 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -574,29 +574,32 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append) linkAll(cof, obj_items, link_waiter); linkAll(cof, gest_items, link_waiter); - LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance *>(LLSideTray::getInstance()->getPanel("sidepanel_appearance")); // Add link to outfit if category is an outfit. LLViewerInventoryCategory* catp = gInventory.getCategory(category); - if (!append && catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) + if (!append) { - link_inventory_item(gAgent.getID(), category, cof, catp->getName(), - LLAssetType::AT_LINK_FOLDER, link_waiter); - - // Update the current outfit name of the appearance sidepanel. - if (panel_appearance) + std::string new_outfit_name = ""; + if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) { - panel_appearance->refreshCurrentOutfitName(catp->getName()); + link_inventory_item(gAgent.getID(), category, cof, catp->getName(), + LLAssetType::AT_LINK_FOLDER, link_waiter); + new_outfit_name = catp->getName(); } + updatePanelOutfitName(new_outfit_name); } - else +} + +void LLAppearanceManager::updatePanelOutfitName(const std::string& name) +{ + LLSidepanelAppearance* panel_appearance = + dynamic_cast<LLSidepanelAppearance *>(LLSideTray::getInstance()->getPanel("sidepanel_appearance")); + if (panel_appearance) { - if (panel_appearance) - { - panel_appearance->refreshCurrentOutfitName(""); - } + panel_appearance->refreshCurrentOutfitName(name); } } + void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, bool append) { lldebugs << "updateAgentWearables()" << llendl; diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 7038d1a35b..b625d42a50 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -64,6 +64,9 @@ public: // Finds the folder link to the currently worn outfit const LLViewerInventoryItem *getCurrentOutfitLink(); + // Update the displayed outfit name in UI. + void updatePanelOutfitName(const std::string& name); + void updateAgentWearables(LLWearableHoldingPattern* holder, bool append); // For debugging - could be moved elsewhere. diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index d5f01418c6..eb3695a371 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -67,6 +67,26 @@ private: LLSidepanelAppearance *mPanel; }; +class LLWatchForOutfitRenameObserver : public LLInventoryObserver +{ +public: + LLWatchForOutfitRenameObserver(LLSidepanelAppearance *panel) : + mPanel(panel) + {} + virtual void changed(U32 mask); + +private: + LLSidepanelAppearance *mPanel; +}; + +void LLWatchForOutfitRenameObserver::changed(U32 mask) +{ + if (mask & LABEL) + { + mPanel->refreshCurrentOutfitName(); + } +} + LLSidepanelAppearance::LLSidepanelAppearance() : LLPanel(), mFilterSubString(LLStringUtil::null), @@ -76,6 +96,8 @@ LLSidepanelAppearance::LLSidepanelAppearance() : { //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_appearance.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() mFetchWorn = new LLCurrentlyWornFetchObserver(this); + + mOutfitRenameWatcher = new LLWatchForOutfitRenameObserver(this); } LLSidepanelAppearance::~LLSidepanelAppearance() @@ -135,6 +157,8 @@ BOOL LLSidepanelAppearance::postBuild() mCurrOutfitPanel = getChild<LLPanel>("panel_currentlook"); + gInventory.addObserver(mOutfitRenameWatcher); + return TRUE; } @@ -299,7 +323,7 @@ void LLSidepanelAppearance::updateVerbs() } } -void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string name) +void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name) { if (name == "") { diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index b335fd910d..9c870f631a 100644 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -40,6 +40,7 @@ class LLFilterEditor; class LLCurrentlyWornFetchObserver; +class LLWatchForOutfitRenameObserver; class LLPanelEditWearable; class LLWearable; class LLPanelOutfitsInventory; @@ -53,7 +54,7 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ void onOpen(const LLSD& key); - void refreshCurrentOutfitName(const std::string name = ""); + void refreshCurrentOutfitName(const std::string& name = ""); static void editWearable(LLWearable *wearable, void *data); @@ -91,6 +92,9 @@ private: // Used to make sure the user's inventory is in memory. LLCurrentlyWornFetchObserver* mFetchWorn; + // Used to update title when currently worn outfit gets renamed. + LLWatchForOutfitRenameObserver* mOutfitRenameWatcher; + // Search string for filtering landmarks and teleport // history locations std::string mFilterSubString; |