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 @@
+ tool_tip="Copy Parameters to Clipboard" width="42" />