diff options
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 63 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.h | 11 | ||||
| -rw-r--r-- | indra/newview/llpanelobjectinventory.cpp | 55 | 
3 files changed, 129 insertions, 0 deletions
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index d23980024d..cd6f631ee1 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1426,6 +1426,14 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,              new_listener = new LLSettingsBridge(inventory, root, uuid, LLSettingsType::fromInventoryFlags(flags));              break; +        case LLAssetType::AT_MATERIAL: +            if (inv_type != LLInventoryType::IT_MATERIAL) +            { +                LL_WARNS() << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << LL_ENDL; +            } +            new_listener = new LLMaterialBridge(inventory, root, uuid); +            break; +  		default:  			LL_INFOS_ONCE() << "Unhandled asset type (llassetstorage.h): "  					<< (S32)asset_type << " (" << LLAssetType::lookup(asset_type) << ")" << LL_ENDL; @@ -7215,6 +7223,39 @@ bool LLSettingsBridge::canUpdateRegion() const  // +=================================================+ +// |        LLMaterialBridge                         | +// +=================================================+ + +void LLMaterialBridge::openItem() +{ +    LLViewerInventoryItem* item = getItem(); +    if (item) +    { +        LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); +    } +} + +void LLMaterialBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ +    LL_DEBUGS() << "LLMaterialBridge::buildContextMenu()" << LL_ENDL; + +    if (isMarketplaceListingsFolder()) +    { +        menuentry_vec_t items; +        menuentry_vec_t disabled_items; +        addMarketplaceContextMenuOptions(flags, items, disabled_items); +        items.push_back(std::string("Properties")); +        getClipboardEntries(false, items, disabled_items, flags); +        hide_context_entries(menu, items, disabled_items); +    } +    else +    { +        LLItemBridge::buildContextMenu(menu, flags); +    } +} + + +// +=================================================+  // |        LLLinkBridge                             |  // +=================================================+  // For broken folder links. @@ -7601,6 +7642,25 @@ protected:      LLSettingsBridgeAction(const LLUUID& id, LLInventoryModel* model) : LLInvFVBridgeAction(id, model) {}  }; +class LLMaterialBridgeAction : public LLInvFVBridgeAction +{ +    friend class LLInvFVBridgeAction; +public: +    void doIt() override +    { +        LLViewerInventoryItem* item = getItem(); +        if (item) +        { +            // TODO - show UI for material preview? +            LL_INFOS() << "inventory action performed on material: " << item->getName() << " " << item->getUUID() << LL_ENDL; +        } +        LLInvFVBridgeAction::doIt(); +    } +    ~LLMaterialBridgeAction() = default; +private: +    LLMaterialBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; +  LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type,  													   const LLUUID& uuid, @@ -7643,6 +7703,9 @@ LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_          case LLAssetType::AT_SETTINGS:              action = new LLSettingsBridgeAction(uuid, model);              break; +        case LLAssetType::AT_MATERIAL: +            action = new LLMaterialBridgeAction(uuid, model); +            break;  		default:  			break;  	} diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 0b0ef273e1..6c1ddd716b 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -637,6 +637,17 @@ protected:  }; +class LLMaterialBridge : public LLItemBridge +{ +public: +    LLMaterialBridge(LLInventoryPanel* inventory, +                     LLFolderView* root, +                     const LLUUID& uuid) : +        LLItemBridge(inventory, root, uuid) {} +    virtual void openItem(); +    virtual void buildContextMenu(LLMenuGL& menu, U32 flags); +}; +  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // Class LLInvFVBridgeAction  // diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 0d987df6ca..defd7025b8 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -1151,6 +1151,56 @@ LLSettingsType::type_e LLTaskSettingsBridge::getSettingsType() const  }  ///---------------------------------------------------------------------------- +/// Class LLTaskMaterialBridge +///---------------------------------------------------------------------------- + +class LLTaskMaterialBridge : public LLTaskInvFVBridge +{ +public: +    LLTaskMaterialBridge(LLPanelObjectInventory* panel, +                         const LLUUID& uuid, +                         const std::string& name) : +        LLTaskInvFVBridge(panel, uuid, name) {} + +    BOOL canOpenItem() const override { return TRUE; } +    void openItem() override; +    BOOL removeItem() override; +}; + +void LLTaskMaterialBridge::openItem() +{ +    LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); +    if(!object || object->isInventoryPending()) +    { +        return; +    } + +    // Note: even if we are not allowed to modify copyable notecard, we should be able to view it +    LLInventoryItem *item = dynamic_cast<LLInventoryItem*>(object->getInventoryObject(mUUID)); +    BOOL item_copy = item && gAgent.allowOperation(PERM_COPY, item->getPermissions(), GP_OBJECT_MANIPULATE); +    if( item_copy +        || object->permModify() +        || gAgent.isGodlike()) +    { +        LLSD floater_key; +        floater_key["taskid"] = mPanel->getTaskUUID(); +        floater_key["itemid"] = mUUID; +        LLPreviewNotecard* preview = LLFloaterReg::showTypedInstance<LLPreviewNotecard>("preview_notecard", floater_key, TAKE_FOCUS_YES); +        if (preview) +        { +            preview->setObjectID(mPanel->getTaskUUID()); +        } +    } +} + +BOOL LLTaskMaterialBridge::removeItem() +{ +    LLFloaterReg::hideInstance("preview_notecard", LLSD(mUUID)); +    return LLTaskInvFVBridge::removeItem(); +} + + +///----------------------------------------------------------------------------  /// LLTaskInvFVBridge impl  //---------------------------------------------------------------------------- @@ -1237,6 +1287,11 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory*  										  object_name,                                            itemflags);  		break; +    case LLAssetType::AT_MATERIAL: +        new_bridge = new LLTaskMaterialBridge(panel, +                              object_id, +                              object_name); +        break;  	default:  		LL_INFOS() << "Unhandled inventory type (llassetstorage.h): "  				<< (S32)type << LL_ENDL;  | 
