From 30b6d29b042f6f9a5054d80cad26960b83d8472b Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Mon, 26 Sep 2022 23:23:52 +0300 Subject: SL-17640 Material editor permissions support --- indra/newview/llmaterialeditor.cpp | 43 ++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) (limited to 'indra/newview/llmaterialeditor.cpp') diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp index 12d21cf284..a0ab771c7b 100644 --- a/indra/newview/llmaterialeditor.cpp +++ b/indra/newview/llmaterialeditor.cpp @@ -149,6 +149,8 @@ BOOL LLMaterialEditor::postBuild() childSetVisible("unsaved_changes", mHasUnsavedChanges); + getChild("total_upload_fee")->setTextArg("[FEE]", llformat("%d", 0)); + // Todo: // Disable/enable setCanApplyImmediately() based on // working from inventory, upload or editing inworld @@ -391,16 +393,43 @@ void LLMaterialEditor::setHasUnsavedChanges(bool value) getChild("total_upload_fee")->setTextArg("[FEE]", llformat("%d", mExpectedUploadCost)); } -void LLMaterialEditor::setCanSaveAs(BOOL value) +void LLMaterialEditor::setCanSaveAs(bool value) { childSetEnabled("save_as", value); } -void LLMaterialEditor::setCanSave(BOOL value) +void LLMaterialEditor::setCanSave(bool value) { childSetEnabled("save", value); } +void LLMaterialEditor::setEnableEditing(bool can_modify) +{ + childSetEnabled("double sided", can_modify); + + // BaseColor + childSetEnabled("base color", can_modify); + childSetEnabled("transparency", can_modify); + childSetEnabled("alpha mode", can_modify); + childSetEnabled("alpha cutoff", can_modify); + + // Metallic-Roughness + childSetEnabled("metalness factor", can_modify); + childSetEnabled("roughness factor", can_modify); + + // Metallic-Roughness + childSetEnabled("metalness factor", can_modify); + childSetEnabled("roughness factor", can_modify); + + // Emissive + childSetEnabled("emissive color", can_modify); + + mBaseColorTextureCtrl->setEnabled(can_modify); + mMetallicTextureCtrl->setEnabled(can_modify); + mEmissiveTextureCtrl->setEnabled(can_modify); + mNormalTextureCtrl->setEnabled(can_modify); +} + void LLMaterialEditor::onCommitBaseColorTexture(LLUICtrl * ctrl, const LLSD & data) { // might be better to use arrays, to have a single callback @@ -1624,6 +1653,7 @@ void LLMaterialEditor::loadAsset() mAssetStatus = PREVIEW_ASSET_LOADED; loadDefaults(); setHasUnsavedChanges(false); + setEnableEditing(allow_modify && !source_library); } else { @@ -1644,6 +1674,7 @@ void LLMaterialEditor::loadAsset() mAssetID.setNull(); mAssetStatus = PREVIEW_ASSET_LOADED; setHasUnsavedChanges(false); + setEnableEditing(allow_modify && !source_library); return; } user_data->with("taskid", mObjectUUID).with("itemid", mItemUUID); @@ -1653,6 +1684,8 @@ void LLMaterialEditor::loadAsset() user_data = new LLSD(mItemUUID); } + setEnableEditing(false); // wait for it to load + gAssetStorage->getInvItemAsset(source_sim, gAgent.getID(), gAgent.getSessionID(), @@ -1724,8 +1757,9 @@ void LLMaterialEditor::onLoadComplete(const LLUUID& asset_uuid, editor->decodeAsset(buffer); - BOOL modifiable = editor->canModify(editor->mObjectID, editor->getItem()); - editor->setEnabled(modifiable); + BOOL allow_modify = editor->canModify(editor->mObjectID, editor->getItem()); + BOOL source_library = editor->mObjectID.isNull() && gInventory.isObjectDescendentOf(editor->mItemUUID, gInventory.getLibraryRootFolderID()); + editor->setEnableEditing(allow_modify && !source_library); editor->setHasUnsavedChanges(false); editor->mAssetStatus = PREVIEW_ASSET_LOADED; } @@ -1744,6 +1778,7 @@ void LLMaterialEditor::onLoadComplete(const LLUUID& asset_uuid, { LLNotificationsUtil::add("UnableToLoadMaterial"); } + editor->setEnableEditing(false); LL_WARNS() << "Problem loading material: " << status << LL_ENDL; editor->mAssetStatus = PREVIEW_ASSET_ERROR; -- cgit v1.2.3