merge from viewer-trunk
commit
84f417f9ab
|
|
@ -77,23 +77,23 @@ LLAssetDictionary::LLAssetDictionary()
|
|||
{
|
||||
// DESCRIPTION TYPE NAME HUMAN NAME CAN LINK? CAN FETCH? CAN KNOW?
|
||||
// |--------------------|-----------|-------------------|-----------|-----------|---------|
|
||||
addEntry(LLAssetType::AT_TEXTURE, new AssetEntry("TEXTURE", "texture", "texture", false, false, true));
|
||||
addEntry(LLAssetType::AT_SOUND, new AssetEntry("SOUND", "sound", "sound", false, true, true));
|
||||
addEntry(LLAssetType::AT_CALLINGCARD, new AssetEntry("CALLINGCARD", "callcard", "calling card", false, false, false));
|
||||
addEntry(LLAssetType::AT_LANDMARK, new AssetEntry("LANDMARK", "landmark", "landmark", false, true, true));
|
||||
addEntry(LLAssetType::AT_SCRIPT, new AssetEntry("SCRIPT", "script", "legacy script", false, false, false));
|
||||
addEntry(LLAssetType::AT_TEXTURE, new AssetEntry("TEXTURE", "texture", "texture", true, false, true));
|
||||
addEntry(LLAssetType::AT_SOUND, new AssetEntry("SOUND", "sound", "sound", true, true, true));
|
||||
addEntry(LLAssetType::AT_CALLINGCARD, new AssetEntry("CALLINGCARD", "callcard", "calling card", true, false, false));
|
||||
addEntry(LLAssetType::AT_LANDMARK, new AssetEntry("LANDMARK", "landmark", "landmark", true, true, true));
|
||||
addEntry(LLAssetType::AT_SCRIPT, new AssetEntry("SCRIPT", "script", "legacy script", true, false, false));
|
||||
addEntry(LLAssetType::AT_CLOTHING, new AssetEntry("CLOTHING", "clothing", "clothing", true, true, true));
|
||||
addEntry(LLAssetType::AT_OBJECT, new AssetEntry("OBJECT", "object", "object", true, false, false));
|
||||
addEntry(LLAssetType::AT_NOTECARD, new AssetEntry("NOTECARD", "notecard", "note card", false, false, true));
|
||||
addEntry(LLAssetType::AT_NOTECARD, new AssetEntry("NOTECARD", "notecard", "note card", true, false, true));
|
||||
addEntry(LLAssetType::AT_CATEGORY, new AssetEntry("CATEGORY", "category", "folder", true, false, false));
|
||||
addEntry(LLAssetType::AT_LSL_TEXT, new AssetEntry("LSL_TEXT", "lsltext", "lsl2 script", false, false, false));
|
||||
addEntry(LLAssetType::AT_LSL_BYTECODE, new AssetEntry("LSL_BYTECODE", "lslbyte", "lsl bytecode", false, false, false));
|
||||
addEntry(LLAssetType::AT_TEXTURE_TGA, new AssetEntry("TEXTURE_TGA", "txtr_tga", "tga texture", false, false, false));
|
||||
addEntry(LLAssetType::AT_LSL_TEXT, new AssetEntry("LSL_TEXT", "lsltext", "lsl2 script", true, false, false));
|
||||
addEntry(LLAssetType::AT_LSL_BYTECODE, new AssetEntry("LSL_BYTECODE", "lslbyte", "lsl bytecode", true, false, false));
|
||||
addEntry(LLAssetType::AT_TEXTURE_TGA, new AssetEntry("TEXTURE_TGA", "txtr_tga", "tga texture", true, false, false));
|
||||
addEntry(LLAssetType::AT_BODYPART, new AssetEntry("BODYPART", "bodypart", "body part", true, true, true));
|
||||
addEntry(LLAssetType::AT_SOUND_WAV, new AssetEntry("SOUND_WAV", "snd_wav", "sound", false, false, false));
|
||||
addEntry(LLAssetType::AT_IMAGE_TGA, new AssetEntry("IMAGE_TGA", "img_tga", "targa image", false, false, false));
|
||||
addEntry(LLAssetType::AT_IMAGE_JPEG, new AssetEntry("IMAGE_JPEG", "jpeg", "jpeg image", false, false, false));
|
||||
addEntry(LLAssetType::AT_ANIMATION, new AssetEntry("ANIMATION", "animatn", "animation", false, true, true));
|
||||
addEntry(LLAssetType::AT_SOUND_WAV, new AssetEntry("SOUND_WAV", "snd_wav", "sound", true, false, false));
|
||||
addEntry(LLAssetType::AT_IMAGE_TGA, new AssetEntry("IMAGE_TGA", "img_tga", "targa image", true, false, false));
|
||||
addEntry(LLAssetType::AT_IMAGE_JPEG, new AssetEntry("IMAGE_JPEG", "jpeg", "jpeg image", true, false, false));
|
||||
addEntry(LLAssetType::AT_ANIMATION, new AssetEntry("ANIMATION", "animatn", "animation", true, true, true));
|
||||
addEntry(LLAssetType::AT_GESTURE, new AssetEntry("GESTURE", "gesture", "gesture", true, true, true));
|
||||
addEntry(LLAssetType::AT_SIMSTATE, new AssetEntry("SIMSTATE", "simstate", "simstate", false, false, false));
|
||||
|
||||
|
|
|
|||
|
|
@ -210,6 +210,10 @@ bool LLInventoryType::cannotRestrictPermissions(LLInventoryType::EType type)
|
|||
bool inventory_and_asset_types_match(LLInventoryType::EType inventory_type,
|
||||
LLAssetType::EType asset_type)
|
||||
{
|
||||
// Links can be of any inventory type.
|
||||
if (LLAssetType::lookupIsLinkType(asset_type))
|
||||
return true;
|
||||
|
||||
const InventoryEntry *entry = LLInventoryDictionary::getInstance()->lookup(inventory_type);
|
||||
if (!entry) return false;
|
||||
|
||||
|
|
|
|||
|
|
@ -1974,7 +1974,11 @@ void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_arra
|
|||
msg->nextBlockFast(_PREHASH_ObjectData );
|
||||
msg->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID());
|
||||
msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner());
|
||||
#if ENABLE_MULTIATTACHMENTS
|
||||
msg->addU8Fast(_PREHASH_AttachmentPt, 0 | ATTACHMENT_ADD );
|
||||
#else
|
||||
msg->addU8Fast(_PREHASH_AttachmentPt, 0 ); // Wear at the previous or default attachment point
|
||||
#endif
|
||||
pack_permissions_slam(msg, item->getFlags(), item->getPermissions());
|
||||
msg->addStringFast(_PREHASH_Name, item->getName());
|
||||
msg->addStringFast(_PREHASH_Description, item->getDescription());
|
||||
|
|
|
|||
|
|
@ -212,10 +212,14 @@ BOOL LLInvFVBridge::isItemRemovable() const
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// Disable delete from COF folder; have users explicitly choose "detach/take off".
|
||||
// Disable delete from COF folder; have users explicitly choose "detach/take off",
|
||||
// unless the item is not worn but in the COF (i.e. is bugged).
|
||||
if (LLAppearanceMgr::instance().getIsProtectedCOFItem(mUUID))
|
||||
{
|
||||
return FALSE;
|
||||
if (get_is_item_worn(mUUID))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
const LLInventoryObject *obj = model->getItem(mUUID);
|
||||
|
|
@ -495,7 +499,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
|
|||
}
|
||||
}
|
||||
const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i));
|
||||
if (cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
|
||||
if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType()))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -642,13 +646,10 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
|
|||
disabled_items.push_back(std::string("Paste"));
|
||||
}
|
||||
|
||||
if (gAgent.isGodlike())
|
||||
items.push_back(std::string("Paste As Link"));
|
||||
if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0)
|
||||
{
|
||||
items.push_back(std::string("Paste As Link"));
|
||||
if (!isClipboardPasteableAsLink() || (flags & FIRST_SELECTED_ITEM) == 0)
|
||||
{
|
||||
disabled_items.push_back(std::string("Paste As Link"));
|
||||
}
|
||||
disabled_items.push_back(std::string("Paste As Link"));
|
||||
}
|
||||
|
||||
items.push_back(std::string("Paste Separator"));
|
||||
|
|
@ -678,7 +679,8 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
{
|
||||
disabled_items.push_back(std::string("Share"));
|
||||
}
|
||||
items.push_back(std::string("Open"));
|
||||
|
||||
addOpenRightClickMenuOption(items);
|
||||
items.push_back(std::string("Properties"));
|
||||
|
||||
getClipboardEntries(true, items, disabled_items, flags);
|
||||
|
|
@ -713,7 +715,7 @@ void LLInvFVBridge::addDeleteContextMenuOptions(menuentry_vec_t &items,
|
|||
const LLInventoryObject *obj = getInventoryObject();
|
||||
|
||||
// Don't allow delete as a direct option from COF folder.
|
||||
if (obj && obj->getIsLinkType() && isCOFFolder())
|
||||
if (obj && obj->getIsLinkType() && isCOFFolder() && get_is_item_worn(mUUID))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -734,6 +736,17 @@ void LLInvFVBridge::addDeleteContextMenuOptions(menuentry_vec_t &items,
|
|||
}
|
||||
}
|
||||
|
||||
void LLInvFVBridge::addOpenRightClickMenuOption(menuentry_vec_t &items)
|
||||
{
|
||||
const LLInventoryObject *obj = getInventoryObject();
|
||||
const BOOL is_link = (obj && obj->getIsLinkType());
|
||||
|
||||
if (is_link)
|
||||
items.push_back(std::string("Open Original"));
|
||||
else
|
||||
items.push_back(std::string("Open"));
|
||||
}
|
||||
|
||||
// *TODO: remove this
|
||||
BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
|
||||
{
|
||||
|
|
@ -1108,7 +1121,7 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
|
|||
gotoItem();
|
||||
}
|
||||
|
||||
if ("open" == action)
|
||||
if ("open" == action || "open_original" == action)
|
||||
{
|
||||
openItem();
|
||||
return;
|
||||
|
|
@ -1454,17 +1467,11 @@ BOOL LLItemBridge::isItemCopyable() const
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if (gAgent.isGodlike())
|
||||
{
|
||||
// All items can be copied in god mode since you can
|
||||
// at least paste-as-link the item, though you
|
||||
// still may not be able paste the item.
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (item->getPermissions().allowCopyBy(gAgent.getID()));
|
||||
}
|
||||
// All items can be copied in god mode since you can
|
||||
// at least paste-as-link the item, though you
|
||||
// still may not be able paste the item.
|
||||
return TRUE;
|
||||
// return (item->getPermissions().allowCopyBy(gAgent.getID()));
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -1605,7 +1612,8 @@ BOOL LLFolderBridge::isUpToDate() const
|
|||
|
||||
BOOL LLFolderBridge::isItemCopyable() const
|
||||
{
|
||||
return FALSE;
|
||||
// Can copy folders to paste-as-link, but not for straight paste.
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLFolderBridge::copyToClipboard() const
|
||||
|
|
@ -1836,11 +1844,13 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
else
|
||||
{
|
||||
LLPointer<LLInventoryCallback> cb = NULL;
|
||||
const std::string empty_description = "";
|
||||
link_inventory_item(
|
||||
gAgent.getID(),
|
||||
inv_cat->getUUID(),
|
||||
mUUID,
|
||||
inv_cat->getName(),
|
||||
empty_description,
|
||||
LLAssetType::AT_LINK_FOLDER,
|
||||
cb);
|
||||
}
|
||||
|
|
@ -2512,30 +2522,29 @@ void LLFolderBridge::pasteLinkFromClipboard()
|
|||
++iter)
|
||||
{
|
||||
const LLUUID &object_id = (*iter);
|
||||
#if SUPPORT_ENSEMBLES
|
||||
if (LLInventoryCategory *cat = model->getCategory(object_id))
|
||||
{
|
||||
const std::string empty_description = "";
|
||||
link_inventory_item(
|
||||
gAgent.getID(),
|
||||
cat->getUUID(),
|
||||
parent_id,
|
||||
cat->getName(),
|
||||
empty_description,
|
||||
LLAssetType::AT_LINK_FOLDER,
|
||||
LLPointer<LLInventoryCallback>(NULL));
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (LLInventoryItem *item = model->getItem(object_id))
|
||||
{
|
||||
link_inventory_item(
|
||||
gAgent.getID(),
|
||||
item->getLinkedUUID(),
|
||||
parent_id,
|
||||
item->getName(),
|
||||
item->getDescription(),
|
||||
LLAssetType::AT_LINK,
|
||||
LLPointer<LLInventoryCallback>(NULL));
|
||||
}
|
||||
else if (LLInventoryItem *item = model->getItem(object_id))
|
||||
{
|
||||
link_inventory_item(
|
||||
gAgent.getID(),
|
||||
item->getLinkedUUID(),
|
||||
parent_id,
|
||||
item->getName(),
|
||||
item->getDescription(),
|
||||
LLAssetType::AT_LINK,
|
||||
LLPointer<LLInventoryCallback>(NULL));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3346,7 +3355,7 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
disabled_items.push_back(std::string("Share"));
|
||||
}
|
||||
|
||||
items.push_back(std::string("Open"));
|
||||
addOpenRightClickMenuOption(items);
|
||||
items.push_back(std::string("Properties"));
|
||||
|
||||
getClipboardEntries(true, items, disabled_items, flags);
|
||||
|
|
@ -3712,7 +3721,7 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
{
|
||||
disabled_items.push_back(std::string("Share"));
|
||||
}
|
||||
items.push_back(std::string("Open"));
|
||||
addOpenRightClickMenuOption(items);
|
||||
items.push_back(std::string("Properties"));
|
||||
|
||||
getClipboardEntries(true, items, disabled_items, flags);
|
||||
|
|
@ -3992,7 +4001,7 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
|
||||
if (!is_sidepanel)
|
||||
{
|
||||
items.push_back(std::string("Open"));
|
||||
addOpenRightClickMenuOption(items);
|
||||
items.push_back(std::string("Properties"));
|
||||
}
|
||||
|
||||
|
|
@ -4730,7 +4739,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
|
||||
if (can_open && !is_sidepanel)
|
||||
{
|
||||
items.push_back(std::string("Open"));
|
||||
addOpenRightClickMenuOption(items);
|
||||
}
|
||||
|
||||
if (!is_sidepanel)
|
||||
|
|
@ -5250,9 +5259,13 @@ const LLUUID &LLLinkFolderBridge::getFolderID() const
|
|||
|
||||
// static
|
||||
void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,
|
||||
const LLUUID& uuid,LLInventoryModel* model)
|
||||
const LLUUID& uuid,
|
||||
LLInventoryModel* model)
|
||||
{
|
||||
LLInvFVBridgeAction* action = createAction(asset_type,uuid,model);
|
||||
// Perform indirection in case of link.
|
||||
const LLUUID& linked_uuid = gInventory.getLinkedItemID(uuid);
|
||||
|
||||
LLInvFVBridgeAction* action = createAction(asset_type,linked_uuid,model);
|
||||
if(action)
|
||||
{
|
||||
action->doIt();
|
||||
|
|
@ -5365,7 +5378,8 @@ protected:
|
|||
|
||||
};
|
||||
|
||||
class LLNotecardBridgeAction: public LLInvFVBridgeAction
|
||||
class LLNotecardBridgeAction
|
||||
: public LLInvFVBridgeAction
|
||||
{
|
||||
friend class LLInvFVBridgeAction;
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ protected:
|
|||
menuentry_vec_t &disabled_items);
|
||||
virtual void addDeleteContextMenuOptions(menuentry_vec_t &items,
|
||||
menuentry_vec_t &disabled_items);
|
||||
|
||||
virtual void addOpenRightClickMenuOption(menuentry_vec_t &items);
|
||||
protected:
|
||||
LLInvFVBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid);
|
||||
|
||||
|
|
|
|||
|
|
@ -3624,14 +3624,14 @@ void LLSelectMgr::sendAttach(U8 attachment_point)
|
|||
return;
|
||||
}
|
||||
|
||||
#if ENABLE_MULTIATTACHMENTS
|
||||
attachment_point |= ATTACHMENT_ADD;
|
||||
#endif
|
||||
BOOL build_mode = LLToolMgr::getInstance()->inEdit();
|
||||
// Special case: Attach to default location for this object.
|
||||
if (0 == attachment_point ||
|
||||
get_if_there(gAgentAvatarp->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL))
|
||||
{
|
||||
#if ENABLE_MULTIATTACHMENTS
|
||||
attachment_point |= ATTACHMENT_ADD;
|
||||
#endif
|
||||
sendListToRegions(
|
||||
"ObjectAttach",
|
||||
packAgentIDAndSessionAndAttachment,
|
||||
|
|
|
|||
|
|
@ -1091,7 +1091,7 @@ void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
|
|||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Special handling for various types.
|
||||
const LLAssetType::EType asset_type = item->getType();
|
||||
const LLAssetType::EType asset_type = item->getActualType();
|
||||
if (check_offer_throttle(from_name, false)) // If we are throttled, don't display
|
||||
{
|
||||
LL_DEBUGS("Messaging") << "Highlighting inventory item: " << item->getUUID() << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -409,6 +409,14 @@
|
|||
function="Inventory.DoToSelected"
|
||||
parameter="open" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Open Original"
|
||||
layout="topleft"
|
||||
name="Open Original">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.DoToSelected"
|
||||
parameter="open_original" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Properties"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
background_visible="true"
|
||||
default_tab_group="1"
|
||||
follows="all"
|
||||
height="408"
|
||||
height="423"
|
||||
label="Things"
|
||||
layout="topleft"
|
||||
min_height="350"
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
left="10"
|
||||
max_length="300"
|
||||
name="inventory search editor"
|
||||
top="3"
|
||||
top="18"
|
||||
width="303" />
|
||||
<tab_container
|
||||
bg_alpha_color="DkGray"
|
||||
|
|
|
|||
Loading…
Reference in New Issue