diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llmaterialeditor.cpp | 110 | ||||
| -rw-r--r-- | indra/newview/llmaterialeditor.h | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerinventory.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.h | 1 | 
4 files changed, 58 insertions, 57 deletions
| diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp index bc3d5b88ab..989f18f1f4 100644 --- a/indra/newview/llmaterialeditor.cpp +++ b/indra/newview/llmaterialeditor.cpp @@ -1940,11 +1940,12 @@ void LLMaterialEditor::saveObjectsMaterialAs()          LL_WARNS("MaterialEditor") << "Failed to save GLTF material from object" << LL_ENDL;          return;      } -    saveObjectsMaterialAs(func.mMaterial, func.mLocalMaterial, permissions, func.mObjectId, item); +    const LLUUID item_id = item ? item->getUUID() : LLUUID::null; +    saveObjectsMaterialAs(func.mMaterial, func.mLocalMaterial, permissions, func.mObjectId, item_id);  } -void LLMaterialEditor::saveObjectsMaterialAs(const LLGLTFMaterial* render_material, const LLLocalGLTFMaterial *local_material, const LLPermissions& permissions, const LLUUID& object_id, LLViewerInventoryItem* item) // TODO: item should probably just be an ID at this point +void LLMaterialEditor::saveObjectsMaterialAs(const LLGLTFMaterial* render_material, const LLLocalGLTFMaterial *local_material, const LLPermissions& permissions, const LLUUID& object_id, const LLUUID& item_id)  {      if (local_material)      { @@ -2028,10 +2029,10 @@ void LLMaterialEditor::saveObjectsMaterialAs(const LLGLTFMaterial* render_materi      }      else      { -        if (item) +        if (item_id.notNull())          {              // Copy existing item from object inventory, and create new composite asset on top of it -            LLNotificationsUtil::add("SaveMaterialAs", args, payload, boost::bind(&LLMaterialEditor::onCopyObjectsMaterialAsMsgCallback, _1, _2, permissions, object_id, item->getUUID())); +            LLNotificationsUtil::add("SaveMaterialAs", args, payload, boost::bind(&LLMaterialEditor::onCopyObjectsMaterialAsMsgCallback, _1, _2, permissions, object_id, item_id));          }          else          { @@ -2044,71 +2045,74 @@ void LLMaterialEditor::saveObjectsMaterialAs(const LLGLTFMaterial* render_materi  void LLMaterialEditor::onCopyObjectsMaterialAsMsgCallback(const LLSD& notification, const LLSD& response, const LLPermissions& permissions, const LLUUID& object_id, const LLUUID& item_id)  {      S32 option = LLNotificationsUtil::getSelectedOption(notification, response); -    if (0 == option) +    if (0 != option)      { -        LLSD asset; -        asset["version"] = LLGLTFMaterial::ASSET_VERSION; -        asset["type"] = LLGLTFMaterial::ASSET_TYPE; -        // This is the string serialized from LLGLTFMaterial::asJSON -        asset["data"] = notification["payload"]["data"]; - -        std::ostringstream str; -        LLSDSerialize::serialize(asset, str, LLSDSerialize::LLSD_BINARY); +        return; +    } -        LLViewerObject* object = gObjectList.findObject(object_id); -        if (!object) -        { -            return; -        } -        const LLInventoryItem* item = object->getInventoryItem(item_id); -        if (!item) -        { -            return; -        } +    LLSD asset; +    asset["version"] = LLGLTFMaterial::ASSET_VERSION; +    asset["type"] = LLGLTFMaterial::ASSET_TYPE; +    // This is the string serialized from LLGLTFMaterial::asJSON +    asset["data"] = notification["payload"]["data"]; -        std::string new_name = response["message"].asString(); -        LLInventoryObject::correctInventoryName(new_name); -        if (new_name.empty()) -        { -            return; -        } +    std::ostringstream str; +    LLSDSerialize::serialize(asset, str, LLSDSerialize::LLSD_BINARY); -        const LLUUID destination_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MATERIAL); +    LLViewerObject* object = gObjectList.findObject(object_id); +    if (!object) +    { +        return; +    } +    const LLInventoryItem* item = object->getInventoryItem(item_id); +    if (!item) +    { +        return; +    } -        // TODO: Test -        // TODO: Rename the item -        LLPointer<LLInventoryCallback> cb = new LLObjectsMaterialItemCallback(permissions, str.str(), new_name); -        // NOTE: This should be an item copy. Saving a material to an inventory should be disabled when the associated material is no-copy. -        move_or_copy_inventory_from_object(destination_id, -                                           object_id, -                                           item_id, -                                           cb); +    std::string new_name = response["message"].asString(); +    LLInventoryObject::correctInventoryName(new_name); +    if (new_name.empty()) +    { +        return;      } + +    const LLUUID destination_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MATERIAL); + +    LLPointer<LLInventoryCallback> cb = new LLObjectsMaterialItemCallback(permissions, str.str(), new_name); +    // NOTE: This should be an item copy. Saving a material to an inventory should be disabled when the associated material is no-copy. +    move_or_copy_inventory_from_object(destination_id, +                                       object_id, +                                       item_id, +                                       cb);  }  // static  void LLMaterialEditor::onSaveObjectsMaterialAsMsgCallback(const LLSD& notification, const LLSD& response, const LLPermissions& permissions)  {      S32 option = LLNotificationsUtil::getSelectedOption(notification, response); -    if (0 == option) +    if (0 != option)      { -        LLSD asset; -        asset["version"] = LLGLTFMaterial::ASSET_VERSION; -        asset["type"] = LLGLTFMaterial::ASSET_TYPE; -        // This is the string serialized from LLGLTFMaterial::asJSON -        asset["data"] = notification["payload"]["data"]; +        return; +    } + +    LLSD asset; +    asset["version"] = LLGLTFMaterial::ASSET_VERSION; +    asset["type"] = LLGLTFMaterial::ASSET_TYPE; +    // This is the string serialized from LLGLTFMaterial::asJSON +    asset["data"] = notification["payload"]["data"]; -        std::ostringstream str; -        LLSDSerialize::serialize(asset, str, LLSDSerialize::LLSD_BINARY); +    std::ostringstream str; +    LLSDSerialize::serialize(asset, str, LLSDSerialize::LLSD_BINARY); -        std::string new_name = response["message"].asString(); -        LLInventoryObject::correctInventoryName(new_name); -        if (new_name.empty()) -        { -            return; -        } -        createInventoryItem(str.str(), new_name, std::string(), permissions); +    std::string new_name = response["message"].asString(); +    LLInventoryObject::correctInventoryName(new_name); +    if (new_name.empty()) +    { +        return;      } + +    createInventoryItem(str.str(), new_name, std::string(), permissions);  }  const void upload_bulk(const std::vector<std::string>& filenames, LLFilePicker::ELoadFilter type); diff --git a/indra/newview/llmaterialeditor.h b/indra/newview/llmaterialeditor.h index 2176f493a9..6b2f49e2fc 100644 --- a/indra/newview/llmaterialeditor.h +++ b/indra/newview/llmaterialeditor.h @@ -232,7 +232,7 @@ class LLMaterialEditor : public LLPreview, public LLVOInventoryListener      static bool capabilitiesAvailable();  private: -    static void saveObjectsMaterialAs(const LLGLTFMaterial *render_material, const LLLocalGLTFMaterial *local_material, const LLPermissions& permissions, const LLUUID& object_id /* = LLUUID::null */, LLViewerInventoryItem* item /* = nullptr */); +    static void saveObjectsMaterialAs(const LLGLTFMaterial *render_material, const LLLocalGLTFMaterial *local_material, const LLPermissions& permissions, const LLUUID& object_id /* = LLUUID::null */, const LLUUID& item /* = LLUUID::null */);      static bool updateInventoryItem(const std::string &buffer, const LLUUID &item_id, const LLUUID &task_id);      static void createInventoryItem(const std::string &buffer, const std::string &name, const std::string &desc, const LLPermissions& permissions); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index b722e715b6..aa1827a8e2 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1609,8 +1609,6 @@ void move_or_copy_inventory_from_object(const LLUUID& destination_id,                                          const LLUUID& item_id,                                          LLPointer<LLInventoryCallback> cb)  { -    // TODO: Implement -      LLViewerObject* object = gObjectList.findObject(object_id);      if (!object)      { diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index ff28937f81..898b21e1ae 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -494,7 +494,6 @@ public:  	void updateInventoryLocal(LLInventoryItem* item, U8 key); // Update without messaging.  	void updateMaterialInventory(LLViewerInventoryItem* item, U8 key, bool is_new);  	LLInventoryObject* getInventoryObject(const LLUUID& item_id); -	// TODO: Decide if this is worth keeping - Returns NULL if item does not exist or is a category  	LLInventoryItem* getInventoryItem(const LLUUID& item_id);  	// Get content except for root category | 
