SL-13278 FIXED Creating default clothing not accessible through "Edit My Outfit" for any type that does not already exist
parent
372ed555ed
commit
cf2f0eddeb
|
|
@ -1282,6 +1282,7 @@ void LLPanelOutfitEdit::showFilteredWearablesListView(LLWearableType::EType type
|
|||
|
||||
//e_list_view_item_type implicitly contains LLWearableType::EType starting from LVIT_SHAPE
|
||||
applyListViewFilter(static_cast<EListViewItemType>(LVIT_SHAPE + type));
|
||||
mWearableItemsList->setMenuWearableType(type);
|
||||
}
|
||||
|
||||
static void update_status_widget_rect(LLView * widget, S32 right_border)
|
||||
|
|
|
|||
|
|
@ -639,6 +639,7 @@ LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
|
|||
: LLInventoryItemsList(p)
|
||||
{
|
||||
setSortOrder(E_SORT_BY_TYPE_LAYER, false);
|
||||
mMenuWearableType = LLWearableType::WT_NONE;
|
||||
mIsStandalone = p.standalone;
|
||||
if (mIsStandalone)
|
||||
{
|
||||
|
|
@ -730,10 +731,15 @@ void LLWearableItemsList::onRightClick(S32 x, S32 y)
|
|||
getSelectedUUIDs(selected_uuids);
|
||||
if (selected_uuids.empty())
|
||||
{
|
||||
return;
|
||||
if ((mMenuWearableType != LLWearableType::WT_NONE) && (size() == 0))
|
||||
{
|
||||
ContextMenu::instance().show(this, mMenuWearableType, x, y);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ContextMenu::instance().show(this, selected_uuids, x, y);
|
||||
}
|
||||
|
||||
ContextMenu::instance().show(this, selected_uuids, x, y);
|
||||
}
|
||||
|
||||
void LLWearableItemsList::setSortOrder(ESortOrder sort_order, bool sort_now)
|
||||
|
|
@ -784,6 +790,46 @@ void LLWearableItemsList::ContextMenu::show(LLView* spawning_view, const uuid_ve
|
|||
mParent = NULL; // to avoid dereferencing an invalid pointer
|
||||
}
|
||||
|
||||
void LLWearableItemsList::ContextMenu::show(LLView* spawning_view, LLWearableType::EType w_type, S32 x, S32 y)
|
||||
{
|
||||
mParent = dynamic_cast<LLWearableItemsList*>(spawning_view);
|
||||
LLContextMenu* menup = mMenuHandle.get();
|
||||
if (menup)
|
||||
{
|
||||
//preventing parent (menu holder) from deleting already "dead" context menus on exit
|
||||
LLView* parent = menup->getParent();
|
||||
if (parent)
|
||||
{
|
||||
parent->removeChild(menup);
|
||||
}
|
||||
delete menup;
|
||||
mUUIDs.clear();
|
||||
}
|
||||
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
registrar.add("Wearable.CreateNew", boost::bind(createNewWearableByType, w_type));
|
||||
menup = createFromFile("menu_wearable_list_item.xml");
|
||||
if (!menup)
|
||||
{
|
||||
LL_WARNS() << "Context menu creation failed" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
setMenuItemVisible(menup, "create_new", true);
|
||||
setMenuItemEnabled(menup, "create_new", true);
|
||||
setMenuItemVisible(menup, "wearable_attach_to", false);
|
||||
setMenuItemVisible(menup, "wearable_attach_to_hud", false);
|
||||
|
||||
std::string new_label = LLTrans::getString("create_new_" + LLWearableType::getTypeName(w_type));
|
||||
LLMenuItemGL* menu_item = menup->getChild<LLMenuItemGL>("create_new");
|
||||
menu_item->setLabel(new_label);
|
||||
|
||||
mMenuHandle = menup->getHandle();
|
||||
menup->show(x, y);
|
||||
LLMenuGL::showPopup(spawning_view, menup, x, y);
|
||||
|
||||
mParent = NULL; // to avoid dereferencing an invalid pointer
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLContextMenu* LLWearableItemsList::ContextMenu::createMenu()
|
||||
{
|
||||
|
|
@ -1004,4 +1050,10 @@ void LLWearableItemsList::ContextMenu::createNewWearable(const LLUUID& item_id)
|
|||
LLAgentWearables::createWearable(item->getWearableType(), true);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLWearableItemsList::ContextMenu::createNewWearableByType(LLWearableType::EType type)
|
||||
{
|
||||
LLAgentWearables::createWearable(type, true);
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -415,6 +415,8 @@ public:
|
|||
public:
|
||||
/*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y);
|
||||
|
||||
void show(LLView* spawning_view, LLWearableType::EType w_type, S32 x, S32 y);
|
||||
|
||||
protected:
|
||||
enum {
|
||||
MASK_CLOTHING = 0x01,
|
||||
|
|
@ -431,6 +433,7 @@ 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);
|
||||
static void createNewWearableByType(LLWearableType::EType type);
|
||||
|
||||
LLWearableItemsList* mParent;
|
||||
};
|
||||
|
|
@ -469,6 +472,8 @@ public:
|
|||
|
||||
void setSortOrder(ESortOrder sort_order, bool sort_now = true);
|
||||
|
||||
void setMenuWearableType(LLWearableType::EType type) { mMenuWearableType = type; }
|
||||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
LLWearableItemsList(const LLWearableItemsList::Params& p);
|
||||
|
|
@ -479,6 +484,8 @@ protected:
|
|||
bool mWornIndicationEnabled;
|
||||
|
||||
ESortOrder mSortOrder;
|
||||
|
||||
LLWearableType::EType mMenuWearableType;
|
||||
};
|
||||
|
||||
#endif //LL_LLWEARABLEITEMSLIST_H
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
<menu_item_call
|
||||
label="Replace"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="wear_replace">
|
||||
<on_click
|
||||
function="Wearable.Wear" />
|
||||
|
|
@ -11,6 +12,7 @@
|
|||
<menu_item_call
|
||||
label="Wear"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="wear_wear">
|
||||
<on_click
|
||||
function="Wearable.Wear" />
|
||||
|
|
@ -18,6 +20,7 @@
|
|||
<menu_item_call
|
||||
label="Add"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="wear_add">
|
||||
<on_click
|
||||
function="Wearable.Add" />
|
||||
|
|
@ -25,6 +28,7 @@
|
|||
<menu_item_call
|
||||
label="Take Off / Detach"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="take_off_or_detach">
|
||||
<on_click
|
||||
function="Wearable.TakeOffDetach" />
|
||||
|
|
@ -32,6 +36,7 @@
|
|||
<menu_item_call
|
||||
label="Detach"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="detach">
|
||||
<on_click
|
||||
function="Attachment.Detach" />
|
||||
|
|
@ -47,6 +52,7 @@
|
|||
<menu_item_call
|
||||
label="Take Off"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="take_off">
|
||||
<on_click
|
||||
function="Clothing.TakeOff" />
|
||||
|
|
@ -54,6 +60,7 @@
|
|||
<menu_item_call
|
||||
label="Edit"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="edit">
|
||||
<on_click
|
||||
function="Wearable.Edit" />
|
||||
|
|
@ -61,6 +68,7 @@
|
|||
<menu_item_call
|
||||
label="Item Profile"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="object_profile">
|
||||
<on_click
|
||||
function="Attachment.Profile" />
|
||||
|
|
@ -68,6 +76,7 @@
|
|||
<menu_item_call
|
||||
label="Show Original"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="show_original">
|
||||
<on_click
|
||||
function="Wearable.ShowOriginal" />
|
||||
|
|
@ -75,6 +84,7 @@
|
|||
<menu_item_call
|
||||
label="Create New"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="create_new"
|
||||
translate="false">
|
||||
<on_click
|
||||
|
|
@ -83,6 +93,7 @@
|
|||
<menu_item_call
|
||||
label="--no options--"
|
||||
layout="topleft"
|
||||
visible="false"
|
||||
name="--no options--"
|
||||
translate="false">
|
||||
</menu_item_call>
|
||||
|
|
|
|||
Loading…
Reference in New Issue