summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelwearing.cpp
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2010-08-26 21:45:20 -0700
committerMerov Linden <merov@lindenlab.com>2010-08-26 21:45:20 -0700
commitdbe965eaa1864ff71e365608488a5015172a24ed (patch)
treef3a7f10360a50a09ca1267fd204802507b079a17 /indra/newview/llpanelwearing.cpp
parent6ed18227535e1b76ae650efdacfb14c1a884fc1a (diff)
parent838c01e87d69a29f39554fbc5fa972ddd3baace1 (diff)
Sync with viewer-development
Diffstat (limited to 'indra/newview/llpanelwearing.cpp')
-rw-r--r--indra/newview/llpanelwearing.cpp51
1 files changed, 50 insertions, 1 deletions
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 8b1682b901..a6bc34c62e 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -82,9 +82,58 @@ protected:
{
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+ functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1);
+
registrar.add("Wearing.Edit", boost::bind(&edit_outfit));
+ registrar.add("Wearing.TakeOff", boost::bind(handleMultiple, take_off, mUUIDs));
+ registrar.add("Wearing.Detach", boost::bind(handleMultiple, take_off, mUUIDs));
+
+ LLContextMenu* menu = createFromFile("menu_wearing_tab.xml");
+
+ updateMenuItemsVisibility(menu);
- return createFromFile("menu_wearing_tab.xml");
+ return menu;
+ }
+
+ void updateMenuItemsVisibility(LLContextMenu* menu)
+ {
+ bool bp_selected = false; // true if body parts selected
+ bool clothes_selected = false;
+ bool attachments_selected = false;
+
+ // See what types of wearables are selected.
+ for (uuid_vec_t::const_iterator it = mUUIDs.begin(); it != mUUIDs.end(); ++it)
+ {
+ LLViewerInventoryItem* item = gInventory.getItem(*it);
+
+ if (!item)
+ {
+ llwarns << "Invalid item" << llendl;
+ continue;
+ }
+
+ LLAssetType::EType type = item->getType();
+ if (type == LLAssetType::AT_CLOTHING)
+ {
+ clothes_selected = true;
+ }
+ else if (type == LLAssetType::AT_BODYPART)
+ {
+ bp_selected = true;
+ }
+ else if (type == LLAssetType::AT_OBJECT)
+ {
+ attachments_selected = true;
+ }
+ }
+
+ // Enable/disable some menu items depending on the selection.
+ bool allow_detach = !bp_selected && !clothes_selected && attachments_selected;
+ bool allow_take_off = !bp_selected && clothes_selected && !attachments_selected;
+
+ menu->setItemVisible("take_off", allow_take_off);
+ menu->setItemVisible("detach", allow_detach);
+ menu->setItemVisible("edit_outfit_separator", allow_take_off || allow_detach);
}
};