diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index b1f702bcd..4e5bc6987 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -130,6 +130,10 @@ LLVector3 LLPanelObject::mClipboardPos; LLVector3 LLPanelObject::mClipboardSize; LLVector3 LLPanelObject::mClipboardRot; LLVolumeParams LLPanelObject::mClipboardVolumeParams; +LLFlexibleObjectData* LLPanelObject::mClipboardFlexiParams = NULL; +LLLightParams* LLPanelObject::mClipboardLightParams = NULL; +LLSculptParams* LLPanelObject::mClipboardSculptParams = NULL; +LLLightImageParams* LLPanelObject::mClipboardLightImageParams = NULL; BOOL LLPanelObject::hasParamClipboard = FALSE; BOOL LLPanelObject::postBuild() @@ -2493,15 +2497,65 @@ void LLPanelObject::onCopyRot(void* user_data) void LLPanelObject::onCopyParams(void* user_data) { LLPanelObject* self = (LLPanelObject*) user_data; + if (!self) return; + self->getVolumeParams(mClipboardVolumeParams); hasParamClipboard = TRUE; + + LLViewerObject* objp = self->mObject; + + mClipboardFlexiParams = (LLFlexibleObjectData*)objp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE); + mClipboardLightParams = (LLLightParams*)objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT); + mClipboardSculptParams = (LLSculptParams*)objp->getParameterEntry(LLNetworkData::PARAMS_SCULPT); + if (mClipboardSculptParams) + { + LLUUID id = mClipboardSculptParams->getSculptTexture(); + + // Texture perms check + if (!(id.isNull() || gInventory.isObjectDescendentOf(id, gInventory.getLibraryRootFolderID()) + || id == LLUUID(gSavedSettings.getString("UIImgWhiteUUID")) + || id == LLUUID(gSavedSettings.getString("UIImgInvisibleUUID")) + || id == LLUUID(std::string("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"))) // alpha + && findItemID(id).isNull()) + { + mClipboardSculptParams->setSculptTexture(LLUUID(SCULPT_DEFAULT_TEXTURE)); + } + } + mClipboardLightImageParams = (LLLightImageParams*)objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE); + if (mClipboardLightImageParams) + { + LLUUID id = mClipboardLightImageParams->getLightTexture(); + + // Texture perms check + if (!(id.isNull() || gInventory.isObjectDescendentOf(id, gInventory.getLibraryRootFolderID()) + || id == LLUUID(gSavedSettings.getString("UIImgWhiteUUID")) + || id == LLUUID(gSavedSettings.getString("UIImgInvisibleUUID")) + || id == LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"))) // alpha + { + mClipboardLightImageParams->setLightTexture(findItemID(id)); + } + } } void LLPanelObject::onPasteParams(void* user_data) { + if(!hasParamClipboard) return; + LLPanelObject* self = (LLPanelObject*) user_data; - if(hasParamClipboard) - self->mObject->updateVolume(mClipboardVolumeParams); + if(!self) return; + + LLViewerObject* objp = self->mObject; + + objp->updateVolume(mClipboardVolumeParams); + + if (mClipboardFlexiParams) + objp->setParameterEntry(LLNetworkData::PARAMS_FLEXIBLE, *mClipboardFlexiParams, true); + if (mClipboardLightParams) + objp->setParameterEntry(LLNetworkData::PARAMS_LIGHT, *mClipboardLightParams, true); + if (mClipboardSculptParams) + objp->setParameterEntry(LLNetworkData::PARAMS_SCULPT, *mClipboardSculptParams, true); + if (mClipboardLightImageParams) + objp->setParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE, *mClipboardLightImageParams, true); } void LLPanelObject::onLinkObj(void* user_data) diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h index ae2397294..e34d318c6 100644 --- a/indra/newview/llpanelobject.h +++ b/indra/newview/llpanelobject.h @@ -50,6 +50,10 @@ class LLColorSwatchCtrl; class LLTextureCtrl; class LLInventoryItem; class LLUUID; +class LLFlexibleObjectData; +class LLLightParams; +class LLLightImageParams; +class LLSculptParams; class LLPanelObject : public LLPanel { @@ -119,6 +123,10 @@ protected: static LLVector3 mClipboardSize; static LLVector3 mClipboardRot; static LLVolumeParams mClipboardVolumeParams; + static LLFlexibleObjectData* mClipboardFlexiParams; + static LLLightParams* mClipboardLightParams; + static LLSculptParams* mClipboardSculptParams; + static LLLightImageParams* mClipboardLightImageParams; static BOOL hasParamClipboard; S32 mComboMaterialItemCount; diff --git a/indra/newview/skins/default/xui/en-us/floater_tools.xml b/indra/newview/skins/default/xui/en-us/floater_tools.xml index b981ef791..fe18acba2 100644 --- a/indra/newview/skins/default/xui/en-us/floater_tools.xml +++ b/indra/newview/skins/default/xui/en-us/floater_tools.xml @@ -779,7 +779,7 @@