diff options
24 files changed, 1214 insertions, 116 deletions
| diff --git a/doc/contributions.txt b/doc/contributions.txt index 04edfb4bea..4b4ec9dcd5 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -629,6 +629,7 @@ Jonathan Yap  	STORM-1809  	STORM-1793  	STORM-1810 +	STORM-68  Kadah Coba  	STORM-1060  Jondan Lundquist diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp index fbf23bc3f0..4e5a328c54 100644 --- a/indra/llinventory/llinventory.cpp +++ b/indra/llinventory/llinventory.cpp @@ -303,6 +303,11 @@ LLInventoryItem::LLInventoryItem(const LLUUID& uuid,  	LLStringUtil::replaceNonstandardASCII(mDescription, ' ');  	LLStringUtil::replaceChar(mDescription, '|', ' ');  	mPermissions.initMasks(inv_type); +//	if (LLInventoryType::IT_LSL == inv_type) +//	{ +//		mPermissions.setMaskNext(permissions.getMaskNextOwner()); +		mPermissions.setMaskNext(PERM_ALL); +//	}  }  LLInventoryItem::LLInventoryItem() : diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 05c05b9393..b3ed917574 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -13516,5 +13516,335 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>ObjectsNextOwnerCopy</key> +    <map> +      <key>Comment</key> +      <string>Newly created objects can be copied by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>ObjectsNextOwnerModify</key> +    <map> +      <key>Comment</key> +      <string>Newly created objects can be modified by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>ObjectsNextOwnerTransfer</key> +    <map> +      <key>Comment</key> +      <string>Newly created objects can be resold or given away by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map> +    <key>ObjectsEveryoneCopy</key> +      <map> +        <key>Comment</key> +        <string>Everyone can copy the newly created object</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>Boolean</string> +        <key>Value</key> +        <integer>0</integer> +    </map> +    <key>ObjectsShareWithGroup</key> +    <map> +      <key>Comment</key> +      <string>Newly created objects are shared with the currently active group</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>UploadsNextOwnerCopy</key> +    <map> +      <key>Comment</key> +      <string>Newly uploaded items can be copied by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>UploadsNextOwnerModify</key> +    <map> +      <key>Comment</key> +      <string>Newly uploaded items can be modified by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>UploadsNextOwnerTransfer</key> +    <map> +      <key>Comment</key> +      <string>Newly uploaded items can be resold or given away by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map> +    <key>UploadsEveryoneCopy</key> +      <map> +        <key>Comment</key> +        <string>Everyone can copy the newly uploaded item</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>Boolean</string> +        <key>Value</key> +        <integer>0</integer> +    </map> +    <key>UploadsShareWithGroup</key> +    <map> +      <key>Comment</key> +      <string>Newly uploaded items are shared with the currently active group</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>ScriptsNextOwnerCopy</key> +    <map> +      <key>Comment</key> +      <string>Newly created scripts can be copied by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>ScriptsNextOwnerModify</key> +    <map> +      <key>Comment</key> +      <string>Newly created scripts can be modified by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>ScriptsNextOwnerTransfer</key> +    <map> +      <key>Comment</key> +      <string>Newly created scripts can be resold or given away by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map> +    <key>ScriptsEveryoneCopy</key> +      <map> +        <key>Comment</key> +        <string>Everyone can copy the newly created script</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>Boolean</string> +        <key>Value</key> +        <integer>0</integer> +    </map> +    <key>ScriptsShareWithGroup</key> +    <map> +      <key>Comment</key> +      <string>Newly created scripts are shared with the currently active group</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>NotecardsNextOwnerCopy</key> +    <map> +      <key>Comment</key> +      <string>Newly created notecards can be copied by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>NotecardsNextOwnerModify</key> +    <map> +      <key>Comment</key> +      <string>Newly created notecards can be modified by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>NotecardsNextOwnerTransfer</key> +    <map> +      <key>Comment</key> +      <string>Newly created notecards can be resold or given away by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map> +    <key>NotecardsEveryoneCopy</key> +      <map> +        <key>Comment</key> +        <string>Everyone can copy the newly created notecard</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>Boolean</string> +        <key>Value</key> +        <integer>0</integer> +    </map> +    <key>NotecardsShareWithGroup</key> +    <map> +      <key>Comment</key> +      <string>Newly created notecards are shared with the currently active group</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>GesturesNextOwnerCopy</key> +    <map> +      <key>Comment</key> +      <string>Newly created gestures can be copied by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>GesturesNextOwnerModify</key> +    <map> +      <key>Comment</key> +      <string>Newly created gestures can be modified by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>GesturesNextOwnerTransfer</key> +    <map> +      <key>Comment</key> +      <string>Newly created gestures can be resold or given away by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map> +    <key>GesturesEveryoneCopy</key> +      <map> +        <key>Comment</key> +        <string>Everyone can copy the newly created gesture</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>Boolean</string> +        <key>Value</key> +        <integer>0</integer> +    </map> +    <key>GesturesShareWithGroup</key> +    <map> +      <key>Comment</key> +      <string>Newly created gestures are shared with the currently active group</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>WearablesNextOwnerCopy</key> +    <map> +      <key>Comment</key> +      <string>Newly created clothing or body part can be copied by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>WearablesNextOwnerModify</key> +    <map> +      <key>Comment</key> +      <string>Newly created clothing or body part can be modified by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>WearablesNextOwnerTransfer</key> +    <map> +      <key>Comment</key> +      <string>Newly created clothing or body part can be resold or given away by next owner</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map> +    <key>WearablesEveryoneCopy</key> +      <map> +        <key>Comment</key> +        <string>Everyone can copy the newly created clothing or body part</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>Boolean</string> +        <key>Value</key> +        <integer>0</integer> +    </map> +    <key>WearablesShareWithGroup</key> +    <map> +      <key>Comment</key> +      <string>Newly created clothing or body part is shared with the currently active group</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>  </map>  </llsd> diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index dd02a74a38..7017357346 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -49,6 +49,7 @@  #include "llvoavatarself.h"  #include "llwearable.h"  #include "llwearablelist.h" +#include "llfloaterperms.h"  #include <boost/scoped_ptr.hpp> @@ -65,8 +66,24 @@ class LLWearAndEditCallback : public LLInventoryCallback  {  	void fire(const LLUUID& inv_item)  	{ +llwarns << "DBG 1" << llendl;  		if (inv_item.isNull()) return; +llwarns << "DBG 2" << llendl; +		LLViewerInventoryItem* item = gInventory.getItem(inv_item); +		if (!item) return; + +llwarns << "DBG 3" << llendl; +		LLPermissions perm = item->getPermissions(); +		perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Wearables")); +		perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Wearables")); +		perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Wearables")); +		item->setPermissions(perm); + +llwarns << "DBG 4" << llendl; +		gInventory.updateItem(item); +		gInventory.notifyObservers(); +  		// Request editing the item after it gets worn.  		gAgentWearables.requestEditingWearable(inv_item); @@ -75,6 +92,27 @@ class LLWearAndEditCallback : public LLInventoryCallback  	}  }; +class LLCreateWearableCallback : public LLInventoryCallback +{ +	void fire(const LLUUID& inv_item) +	{ +		if (inv_item.isNull()) +			return; + +		LLViewerInventoryItem* item = gInventory.getItem(inv_item); +		if (!item) return; + +		LLPermissions perm = item->getPermissions(); +		perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Wearables")); +		perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Wearables")); +		perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Wearables")); +		item->setPermissions(perm); + +		gInventory.updateItem(item); +		gInventory.notifyObservers(); +	} +}; +  ///////////////////////////////////////////////////////////////////////////////  // HACK: For EXT-3923: Pants item shows in inventory with skin icon and messes with "current look" @@ -1982,7 +2020,16 @@ void LLAgentWearables::createWearable(LLWearableType::EType type, bool wear, con  	LLWearable* wearable = LLWearableList::instance().createNewWearable(type);  	LLAssetType::EType asset_type = wearable->getAssetType();  	LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE; -	LLPointer<LLInventoryCallback> cb = wear ? new LLWearAndEditCallback : NULL; +	LLPointer<LLInventoryCallback> cb; +	if (wear) +	{ +		cb = new LLWearAndEditCallback; +	} +	else +	{ +		cb = new LLCreateWearableCallback; +	} +  	LLUUID folder_id;  	if (parent_id.notNull()) @@ -1995,10 +2042,15 @@ void LLAgentWearables::createWearable(LLWearableType::EType type, bool wear, con  		folder_id = gInventory.findCategoryUUIDForType(folder_type);  	} -	create_inventory_item(gAgent.getID(), gAgent.getSessionID(), -						  folder_id, wearable->getTransactionID(), wearable->getName(), -						  wearable->getDescription(), asset_type, inv_type, wearable->getType(), -						  wearable->getPermissions().getMaskNextOwner(), +	create_inventory_item(gAgent.getID(), +						  gAgent.getSessionID(), +						  folder_id, +						  wearable->getTransactionID(), +						  wearable->getName(), +						  wearable->getDescription(), +						  asset_type, inv_type, +						  wearable->getType(), +						  LLFloaterPerms::getNextOwnerPerms("Wearables"),  						  cb);  } diff --git a/indra/newview/llfloaterbvhpreview.cpp b/indra/newview/llfloaterbvhpreview.cpp index b050a638dc..720c2cbeea 100644 --- a/indra/newview/llfloaterbvhpreview.cpp +++ b/indra/newview/llfloaterbvhpreview.cpp @@ -991,7 +991,7 @@ void LLFloaterBvhPreview::onBtnOK(void* userdata)  						    0,  						    LLFolderType::FT_NONE,  						    LLInventoryType::IT_ANIMATION, -						    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), +						    LLFloaterPerms::getNextOwnerPerms("Uploads"), LLFloaterPerms::getGroupPerms("Uploads"), LLFloaterPerms::getEveryonePerms("Uploads"),  						    name,  						    callback, expected_upload_cost, userdata); diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp index 56051ff684..dcc245ee20 100644 --- a/indra/newview/llfloatergesture.cpp +++ b/indra/newview/llfloatergesture.cpp @@ -48,6 +48,7 @@  #include "llviewermenu.h"   #include "llviewerinventory.h"  #include "llviewercontrol.h" +#include "llfloaterperms.h"  BOOL item_name_precedes( LLInventoryItem* a, LLInventoryItem* b )  { @@ -74,6 +75,16 @@ public:  	void fire(const LLUUID &inv_item)  	{  		LLPreviewGesture::show(inv_item, LLUUID::null); +		 +		LLInventoryItem* item = gInventory.getItem(inv_item); +		if (item) +		{ +			LLPermissions perm = item->getPermissions(); +			perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Gestures")); +			perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Gestures")); +			perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Gestures")); +			item->setPermissions(perm); +		}  	}  }; @@ -449,9 +460,17 @@ void LLFloaterGesture::onClickPlay()  void LLFloaterGesture::onClickNew()  {  	LLPointer<LLInventoryCallback> cb = new GestureShowCallback(); -	create_inventory_item(gAgent.getID(), gAgent.getSessionID(), -		LLUUID::null, LLTransactionID::tnull, "New Gesture", "", LLAssetType::AT_GESTURE, -		LLInventoryType::IT_GESTURE, NOT_WEARABLE, PERM_MOVE | PERM_TRANSFER, cb); +	create_inventory_item(gAgent.getID(), +						  gAgent.getSessionID(), +						  LLUUID::null, +						  LLTransactionID::tnull, +						  "New Gesture", +						  "", +						  LLAssetType::AT_GESTURE, +						  LLInventoryType::IT_GESTURE, +						  NOT_WEARABLE, +						  PERM_MOVE | LLFloaterPerms::getNextOwnerPerms("Gestures"), +						  cb);  }  void LLFloaterGesture::onActivateBtnClick() diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index 27b1c3b9cd..eefc352287 100644 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -171,7 +171,7 @@ void LLFloaterNameDesc::onBtnOK( )  			    getChild<LLUICtrl>("name_form")->getValue().asString(),   			    getChild<LLUICtrl>("description_form")->getValue().asString(),   			    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, -			    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), +			    LLFloaterPerms::getNextOwnerPerms("Uploads"), LLFloaterPerms::getGroupPerms("Uploads"), LLFloaterPerms::getEveryonePerms("Uploads"),  			    display_name, callback, expected_upload_cost, nruserdata);  	closeFloater(false);  } diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp index 80b55c3cbb..3853dd0ef6 100644 --- a/indra/newview/llfloaterperms.cpp +++ b/indra/newview/llfloaterperms.cpp @@ -37,96 +37,139 @@  LLFloaterPerms::LLFloaterPerms(const LLSD& seed)  : LLFloater(seed)  { -	mCommitCallbackRegistrar.add("Perms.Copy",	boost::bind(&LLFloaterPerms::onCommitCopy, this)); -	mCommitCallbackRegistrar.add("Perms.OK",	boost::bind(&LLFloaterPerms::onClickOK, this)); -	mCommitCallbackRegistrar.add("Perms.Cancel",	boost::bind(&LLFloaterPerms::onClickCancel, this)); -  }  BOOL LLFloaterPerms::postBuild()  { -	mCloseSignal.connect(boost::bind(&LLFloaterPerms::cancel, this)); -	 -	refresh(); -	 -	return TRUE; +	return true;  } -void LLFloaterPerms::onClickOK() -{ -	ok(); -	closeFloater(); +//static  +U32 LLFloaterPerms::getGroupPerms(std::string prefix) +{	 +	return gSavedSettings.getBOOL(prefix+"ShareWithGroup") ? PERM_COPY : PERM_NONE;  } -void LLFloaterPerms::onClickCancel() +//static  +U32 LLFloaterPerms::getEveryonePerms(std::string prefix)  { -	cancel(); -	closeFloater(); +	return gSavedSettings.getBOOL(prefix+"EveryoneCopy") ? PERM_COPY : PERM_NONE;  } -void LLFloaterPerms::onCommitCopy() +//static  +U32 LLFloaterPerms::getNextOwnerPerms(std::string prefix)  { -	// Implements fair use -	BOOL copyable = gSavedSettings.getBOOL("NextOwnerCopy"); -	if(!copyable) +	U32 flags = PERM_MOVE; +	if ( gSavedSettings.getBOOL(prefix+"NextOwnerCopy") )  	{ -		gSavedSettings.setBOOL("NextOwnerTransfer", TRUE); +		flags |= PERM_COPY;  	} -	LLCheckBoxCtrl* xfer = getChild<LLCheckBoxCtrl>("next_owner_transfer"); -	xfer->setEnabled(copyable); +	if ( gSavedSettings.getBOOL(prefix+"NextOwnerModify") ) +	{ +		flags |= PERM_MODIFY; +	} +	if ( gSavedSettings.getBOOL(prefix+"NextOwnerTransfer") ) +	{ +		flags |= PERM_TRANSFER; +	} +	return flags;  } -void LLFloaterPerms::ok() +//static  +U32 LLFloaterPerms::getNextOwnerPermsInverted(std::string prefix)  { -	refresh(); // Changes were already applied to saved settings. Refreshing internal values makes it official. +	// Sets bits for permissions that are off +	U32 flags = PERM_MOVE; +	if ( !gSavedSettings.getBOOL(prefix+"NextOwnerCopy") ) +	{ +		flags |= PERM_COPY; +	} +	if ( !gSavedSettings.getBOOL(prefix+"NextOwnerModify") ) +	{ +		flags |= PERM_MODIFY; +	} +	if ( !gSavedSettings.getBOOL(prefix+"NextOwnerTransfer") ) +	{ +		flags |= PERM_TRANSFER; +	} +	return flags;  } -void LLFloaterPerms::cancel() +LLFloaterPermsDefault::LLFloaterPermsDefault(const LLSD& seed) +: LLFloater(seed)  { -	gSavedSettings.setBOOL("ShareWithGroup",    mShareWithGroup); -	gSavedSettings.setBOOL("EveryoneCopy",      mEveryoneCopy); -	gSavedSettings.setBOOL("NextOwnerCopy",     mNextOwnerCopy); -	gSavedSettings.setBOOL("NextOwnerModify",   mNextOwnerModify); -	gSavedSettings.setBOOL("NextOwnerTransfer", mNextOwnerTransfer); +	mCommitCallbackRegistrar.add("PermsDefault.Copy", boost::bind(&LLFloaterPermsDefault::onCommitCopy, this, _2)); +	mCommitCallbackRegistrar.add("PermsDefault.OK", boost::bind(&LLFloaterPermsDefault::onClickOK, this)); +	mCommitCallbackRegistrar.add("PermsDefault.Cancel", boost::bind(&LLFloaterPermsDefault::onClickCancel, this));  } -void LLFloaterPerms::refresh() +BOOL LLFloaterPermsDefault::postBuild()  { -	mShareWithGroup    = gSavedSettings.getBOOL("ShareWithGroup"); -	mEveryoneCopy      = gSavedSettings.getBOOL("EveryoneCopy"); -	mNextOwnerCopy     = gSavedSettings.getBOOL("NextOwnerCopy"); -	mNextOwnerModify   = gSavedSettings.getBOOL("NextOwnerModify"); -	mNextOwnerTransfer = gSavedSettings.getBOOL("NextOwnerTransfer"); +	mCloseSignal.connect(boost::bind(&LLFloaterPermsDefault::cancel, this)); + +	category_names[CAT_OBJECTS] = "Objects"; +	category_names[CAT_UPLOADS] = "Uploads"; +	category_names[CAT_SCRIPTS] = "Scripts"; +	category_names[CAT_NOTECARDS] = "Notecards"; +	category_names[CAT_GESTURES] = "Gestures"; +	category_names[CAT_WEARABLES] = "Wearables"; + +	refresh(); +	 +	return true;  } -//static  -U32 LLFloaterPerms::getGroupPerms(std::string prefix) -{	 -	return gSavedSettings.getBOOL(prefix+"ShareWithGroup") ? PERM_COPY : PERM_NONE; +void LLFloaterPermsDefault::onClickOK() +{ +	ok(); +	closeFloater();  } -//static  -U32 LLFloaterPerms::getEveryonePerms(std::string prefix) +void LLFloaterPermsDefault::onClickCancel()  { -	return gSavedSettings.getBOOL(prefix+"EveryoneCopy") ? PERM_COPY : PERM_NONE; +	cancel(); +	closeFloater();  } -//static  -U32 LLFloaterPerms::getNextOwnerPerms(std::string prefix) +void LLFloaterPermsDefault::onCommitCopy(const LLSD& user_data)  { -	U32 flags = PERM_MOVE; -	if ( gSavedSettings.getBOOL(prefix+"NextOwnerCopy") ) +	// Implements fair use +	std::string prefix = user_data.asString(); + +	BOOL copyable = gSavedSettings.getBOOL(prefix+"NextOwnerCopy"); +	if(!copyable)  	{ -		flags |= PERM_COPY; +		gSavedSettings.setBOOL(prefix+"NextOwnerTransfer", TRUE);  	} -	if ( gSavedSettings.getBOOL(prefix+"NextOwnerModify") ) +	LLCheckBoxCtrl* xfer = getChild<LLCheckBoxCtrl>(prefix+"_transfer"); +	xfer->setEnabled(copyable); +} + +void LLFloaterPermsDefault::ok() +{ +	refresh(); // Changes were already applied to saved settings. Refreshing internal values makes it official. +} + +void LLFloaterPermsDefault::cancel() +{ +	for (U32 iter = CAT_OBJECTS; iter < CAT_LAST; iter++)  	{ -		flags |= PERM_MODIFY; +		gSavedSettings.setBOOL(category_names[iter]+"NextOwnerCopy",		mNextOwnerCopy[iter]); +		gSavedSettings.setBOOL(category_names[iter]+"NextOwnerModify",		mNextOwnerModify[iter]); +		gSavedSettings.setBOOL(category_names[iter]+"NextOwnerTransfer",	mNextOwnerTransfer[iter]); +		gSavedSettings.setBOOL(category_names[iter]+"ShareWithGroup",		mShareWithGroup[iter]); +		gSavedSettings.setBOOL(category_names[iter]+"EveryoneCopy",			mEveryoneCopy[iter]);  	} -	if ( gSavedSettings.getBOOL(prefix+"NextOwnerTransfer") ) +} + +void LLFloaterPermsDefault::refresh() +{ +	for (U32 iter = CAT_OBJECTS; iter < CAT_LAST; iter++)  	{ -		flags |= PERM_TRANSFER; +		mShareWithGroup[iter]    = gSavedSettings.getBOOL(category_names[iter]+"ShareWithGroup"); +		mEveryoneCopy[iter]      = gSavedSettings.getBOOL(category_names[iter]+"EveryoneCopy"); +		mNextOwnerCopy[iter]     = gSavedSettings.getBOOL(category_names[iter]+"NextOwnerCopy"); +		mNextOwnerModify[iter]   = gSavedSettings.getBOOL(category_names[iter]+"NextOwnerModify"); +		mNextOwnerTransfer[iter] = gSavedSettings.getBOOL(category_names[iter]+"NextOwnerTransfer");  	} -	return flags;  } - diff --git a/indra/newview/llfloaterperms.h b/indra/newview/llfloaterperms.h index 6b65f4b0cd..bb4a6f9702 100644 --- a/indra/newview/llfloaterperms.h +++ b/indra/newview/llfloaterperms.h @@ -36,26 +36,53 @@ class LLFloaterPerms : public LLFloater  public:  	/*virtual*/ BOOL postBuild(); -	void ok(); -	void cancel(); -	void onClickOK(); -	void onClickCancel(); -	void onCommitCopy(); +  	// Convenience methods to get current permission preference bitfields from saved settings:  	static U32 getEveryonePerms(std::string prefix=""); // prefix + "EveryoneCopy"  	static U32 getGroupPerms(std::string prefix=""); // prefix + "ShareWithGroup"  	static U32 getNextOwnerPerms(std::string prefix=""); // bitfield for prefix + "NextOwner" + "Copy", "Modify", and "Transfer" +	static U32 getNextOwnerPermsInverted(std::string prefix="");  private:  	LLFloaterPerms(const LLSD& seed); + +}; + +class LLFloaterPermsDefault : public LLFloater +{ +	friend class LLFloaterReg; + +public: +	/*virtual*/ BOOL postBuild(); +	void ok(); +	void cancel(); +	void onClickOK(); +	void onClickCancel(); +	void onCommitCopy(const LLSD& user_data); + +enum Categories +{ +	CAT_OBJECTS, +	CAT_UPLOADS, +	CAT_SCRIPTS, +	CAT_NOTECARDS, +	CAT_GESTURES, +	CAT_WEARABLES, +	CAT_LAST +}; + +private: +	LLFloaterPermsDefault(const LLSD& seed);  	void refresh(); -	BOOL // cached values only for implementing cancel. -		mShareWithGroup, -		mEveryoneCopy, -		mNextOwnerCopy, -		mNextOwnerModify, -		mNextOwnerTransfer; +	std::string category_names[CAT_LAST]; + +	// cached values only for implementing cancel. +	bool mShareWithGroup[CAT_LAST]; +	bool mEveryoneCopy[CAT_LAST]; +	bool mNextOwnerCopy[CAT_LAST]; +	bool mNextOwnerModify[CAT_LAST]; +	bool mNextOwnerTransfer[CAT_LAST];  };  #endif diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 173b0e538c..596c73870d 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -346,7 +346,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)  	mCommitCallbackRegistrar.add("Pref.BlockList",				boost::bind(&LLFloaterPreference::onClickBlockList, this));  	mCommitCallbackRegistrar.add("Pref.Proxy",					boost::bind(&LLFloaterPreference::onClickProxySettings, this));  	mCommitCallbackRegistrar.add("Pref.TranslationSettings",	boost::bind(&LLFloaterPreference::onClickTranslationSettings, this)); -	 +	mCommitCallbackRegistrar.add("Pref.PermsDefault",	boost::bind(&LLFloaterPreference::onClickPermsDefault, this)); +  	sSkin = gSavedSettings.getString("SkinCurrent");  	mCommitCallbackRegistrar.add("Pref.ClickActionChange",				boost::bind(&LLFloaterPreference::onClickActionChange, this)); @@ -1520,6 +1521,11 @@ void LLFloaterPreference::onClickActionChange()  	mClickActionDirty = true;  } +void LLFloaterPreference::onClickPermsDefault() +{ +	LLFloaterReg::showInstance("perms_default"); +} +  void LLFloaterPreference::updateClickActionSettings()  {  	const int single_clk_action = getChild<LLComboBox>("single_click_action_combo")->getValue().asInteger(); diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index ec5994e917..bc6e74b0c7 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -157,6 +157,7 @@ public:  	void onClickBlockList();  	void onClickProxySettings();  	void onClickTranslationSettings(); +	void onClickPermsDefault();  	void applyUIColor(LLUICtrl* ctrl, const LLSD& param);  	void getUIColor(LLUICtrl* ctrl, const LLSD& param); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index d8d62e5bbb..1d429c5963 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -980,8 +980,8 @@ void LLSnapshotLivePreview::saveTexture()  				    LLFolderType::FT_SNAPSHOT_CATEGORY,  				    LLInventoryType::IT_SNAPSHOT,  				    PERM_ALL,  // Note: Snapshots to inventory is a special case of content upload -				    LLFloaterPerms::getGroupPerms(), // that is more permissive than other uploads -				    LLFloaterPerms::getEveryonePerms(), +				    LLFloaterPerms::getGroupPerms("Uploads"), // that is more permissive than other uploads +				    LLFloaterPerms::getEveryonePerms("Uploads"),  				    "Snapshot : " + pos_string,  				    callback, expected_upload_cost, userdata);  		gViewerWindow->playSnapshotAnimAndSound(); diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 85ecb133d0..bca2a28dfd 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -2778,7 +2778,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)  	{  		LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;  		titem->unpackMessage(msg, _PREHASH_ItemData, i); -		llinfos << "unpaked item '" << titem->getName() << "' in " +		llinfos << "unpacked item '" << titem->getName() << "' in "  				<< titem->getParentUUID() << llendl;  		U32 callback_id;  		msg->getU32Fast(_PREHASH_ItemData, _PREHASH_CallbackID, callback_id); diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index f461c7e46f..03547f103a 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1369,9 +1369,9 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  	result["asset_type"] = "mesh";  	result["inventory_type"] = "object";  	result["description"] = "(No Description)"; -	result["next_owner_mask"] = LLSD::Integer(LLFloaterPerms::getNextOwnerPerms()); -	result["group_mask"] = LLSD::Integer(LLFloaterPerms::getGroupPerms()); -	result["everyone_mask"] = LLSD::Integer(LLFloaterPerms::getEveryonePerms()); +	result["next_owner_mask"] = LLSD::Integer(LLFloaterPerms::getNextOwnerPerms("Uploads")); +	result["group_mask"] = LLSD::Integer(LLFloaterPerms::getGroupPerms("Uploads")); +	result["everyone_mask"] = LLSD::Integer(LLFloaterPerms::getEveryonePerms("Uploads"));  	res["mesh_list"] = LLSD::emptyArray();  	res["texture_list"] = LLSD::emptyArray(); diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp index a64b4ec94d..f180afa037 100644 --- a/indra/newview/llpanelcontents.cpp +++ b/indra/newview/llpanelcontents.cpp @@ -59,6 +59,7 @@  #include "llviewerregion.h"  #include "llviewerwindow.h"  #include "llworld.h" +#include "llfloaterperms.h"  //  // Imported globals @@ -156,12 +157,15 @@ void LLPanelContents::onClickNewScript(void *userdata)  	{  		LLPermissions perm;  		perm.init(gAgent.getID(), gAgent.getID(), LLUUID::null, LLUUID::null); + +		// Parameters are base, owner, everyone, group, next  		perm.initMasks(  			PERM_ALL,  			PERM_ALL,  			PERM_NONE,  			PERM_NONE, -			PERM_MOVE | PERM_TRANSFER); +			PERM_ALL); +//			PERM_MOVE | LLFloaterPerms::getNextOwnerPerms("Scripts"));  		std::string desc;  		LLViewerAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc);  		LLPointer<LLViewerInventoryItem> new_item = diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 7fdaac68c8..356c79a036 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -244,12 +244,12 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterPayUtil::registerFloater();  	LLFloaterReg::add("people", "floater_people.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>); +	LLFloaterReg::add("perms_default", "floater_perms_default.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPermsDefault>);  	LLFloaterReg::add("places", "floater_places.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);  	LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);  	LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceProxy>);  	LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>);  	LLFloaterReg::add("prefs_translation", "floater_translation_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTranslationSettings>); -	LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>);  	LLFloaterReg::add("picks", "floater_picks.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);  	LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>);  	LLFloaterReg::add("preview_anim", "floater_preview_animation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewAnim>, "preview"); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 45ca23cdfe..0d56233db1 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -64,6 +64,7 @@  #include "llavatarnamecache.h"  #include "llavataractions.h"  #include "lllogininstance.h" +#include "llfloaterperms.h"  ///----------------------------------------------------------------------------  /// Helper class to store special inventory item names and their localized values. @@ -1013,6 +1014,24 @@ void ActivateGestureCallback::fire(const LLUUID& inv_item)  	LLGestureMgr::instance().activateGesture(inv_item);  } +void CreateScriptCallback::fire(const LLUUID& inv_item) +{ +	if (inv_item.isNull()) +		return; + +	LLViewerInventoryItem* item = gInventory.getItem(inv_item); +	if (!item) return; + +	LLPermissions perm = item->getPermissions(); +	perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Scripts")); +	perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Scripts")); + +	item->setPermissions(perm); + +    gInventory.updateItem(item); +    gInventory.notifyObservers(); +} +  void CreateGestureCallback::fire(const LLUUID& inv_item)  {  	if (inv_item.isNull()) @@ -1022,6 +1041,12 @@ void CreateGestureCallback::fire(const LLUUID& inv_item)  	LLViewerInventoryItem* item = gInventory.getItem(inv_item);  	if (!item) return; + +	LLPermissions perm = item->getPermissions(); +	perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Gestures")); +	perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Gestures")); +	item->setPermissions(perm); +      gInventory.updateItem(item);      gInventory.notifyObservers(); @@ -1030,6 +1055,23 @@ void CreateGestureCallback::fire(const LLUUID& inv_item)  	gFloaterView->adjustToFitScreen(preview, FALSE);  } +void CreateNotecardCallback::fire(const LLUUID& inv_item) +{ +	if (inv_item.isNull()) +		return; +	 +	LLViewerInventoryItem* item = gInventory.getItem(inv_item); +	if (!item) return; + +	LLPermissions perm = item->getPermissions(); +	perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Notecards")); +	perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Notecards")); +	item->setPermissions(perm); + +    gInventory.updateItem(item); +    gInventory.notifyObservers(); +} +  void AddFavoriteLandmarkCallback::fire(const LLUUID& inv_item_id)  {  	if (mTargetLandmarkId.isNull()) return; @@ -1285,22 +1327,44 @@ void create_new_item(const std::string& name,  	LLViewerAssetType::generateDescriptionFor(asset_type, desc);  	next_owner_perm = (next_owner_perm) ? next_owner_perm : PERM_MOVE | PERM_TRANSFER; -	 -	if (inv_type == LLInventoryType::IT_GESTURE) -	{ -		LLPointer<LLInventoryCallback> cb = new CreateGestureCallback(); -		create_inventory_item(gAgent.getID(), gAgent.getSessionID(), -							  parent_id, LLTransactionID::tnull, name, desc, asset_type, inv_type, -							  NOT_WEARABLE, next_owner_perm, cb); -	} -	else +	LLPointer<LLInventoryCallback> cb = NULL; + +	switch (inv_type)  	{ -		LLPointer<LLInventoryCallback> cb = NULL; -		create_inventory_item(gAgent.getID(), gAgent.getSessionID(), -							  parent_id, LLTransactionID::tnull, name, desc, asset_type, inv_type, -							  NOT_WEARABLE, next_owner_perm, cb); -	} +		case LLInventoryType::IT_LSL: +		{ +			cb = new CreateScriptCallback(); +			next_owner_perm = LLFloaterPerms::getNextOwnerPerms("Scripts"); +			break; +		} + +		case LLInventoryType::IT_GESTURE: +		{ +			cb = new CreateGestureCallback(); +			next_owner_perm = LLFloaterPerms::getNextOwnerPerms("Gestures"); +			break; +		} + +		case LLInventoryType::IT_NOTECARD: +		{ +			cb = new CreateNotecardCallback(); +			next_owner_perm = LLFloaterPerms::getNextOwnerPerms("Notecards"); +			break; +		} +	} + +	create_inventory_item(gAgent.getID(), +						  gAgent.getSessionID(), +						  parent_id, +						  LLTransactionID::tnull, +						  name, +						  desc, +						  asset_type, +						  inv_type, +						  NOT_WEARABLE, +						  next_owner_perm, +						  cb);  }	  const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not) @@ -1341,7 +1405,7 @@ void menu_create_inventory_item(LLFolderView* root, LLFolderBridge *bridge, cons  					  parent_id,  					  LLAssetType::AT_LSL_TEXT,  					  LLInventoryType::IT_LSL, -					  PERM_MOVE | PERM_TRANSFER); +					  PERM_MOVE | PERM_TRANSFER); // overridden in create_new_item  	}  	else if ("notecard" == type_name)  	{ @@ -1350,7 +1414,7 @@ void menu_create_inventory_item(LLFolderView* root, LLFolderBridge *bridge, cons  					  parent_id,  					  LLAssetType::AT_NOTECARD,  					  LLInventoryType::IT_NOTECARD, -					  PERM_ALL); +					  PERM_ALL); // overridden in create_new_item  	}  	else if ("gesture" == type_name)  	{ @@ -1359,7 +1423,7 @@ void menu_create_inventory_item(LLFolderView* root, LLFolderBridge *bridge, cons  					  parent_id,  					  LLAssetType::AT_GESTURE,  					  LLInventoryType::IT_GESTURE, -					  PERM_ALL); +					  PERM_ALL); // overridden in create_new_item  	}  	else  	{ diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index 7822ef4da6..a88a5d31be 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -279,12 +279,24 @@ public:  	void fire(const LLUUID& inv_item);  }; +class CreateScriptCallback : public LLInventoryCallback +{ +public: +	void fire(const LLUUID& inv_item); +}; +  class CreateGestureCallback : public LLInventoryCallback  {  public:  	void fire(const LLUUID& inv_item);  }; +class CreateNotecardCallback : public LLInventoryCallback +{ +public: +	void fire(const LLUUID& inv_item); +}; +  class AddFavoriteLandmarkCallback : public LLInventoryCallback  {  public: diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index dc2ea4bd1f..aa0c0008aa 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -441,9 +441,9 @@ class LLFileUploadBulk : public view_listener_t  				0,  				LLFolderType::FT_NONE,  				LLInventoryType::IT_NONE, -				LLFloaterPerms::getNextOwnerPerms(), -				LLFloaterPerms::getGroupPerms(), -				LLFloaterPerms::getEveryonePerms(), +				LLFloaterPerms::getNextOwnerPerms("Uploads"), +				LLFloaterPerms::getGroupPerms("Uploads"), +				LLFloaterPerms::getEveryonePerms("Uploads"),  				display_name,  				callback,  				expected_upload_cost, @@ -1004,9 +1004,9 @@ void upload_done_callback(  			0,  			LLFolderType::FT_NONE,  			LLInventoryType::IT_NONE, -			PERM_NONE, -			PERM_NONE, -			PERM_NONE, +			LLFloaterPerms::getNextOwnerPerms("Uploads"), +			LLFloaterPerms::getGroupPerms("Uploads"), +			LLFloaterPerms::getEveryonePerms("Uploads"),  			display_name,  			callback,  			expected_upload_cost, // assuming next in a group of uploads is of roughly the same type, i.e. same upload cost diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index cd300accb7..98856d125f 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -100,6 +100,7 @@  #include "lltrans.h"  #include "llsdutil.h"  #include "llmediaentry.h" +#include "llfloaterperms.h"  //#define DEBUG_UPDATE_TYPE @@ -2571,8 +2572,15 @@ void LLViewerObject::saveScript(  	 * interaction with doUpdateInventory() called below.  	 */  	lldebugs << "LLViewerObject::saveScript() " << item->getUUID() << " " << item->getAssetUUID() << llendl; + +	LLPermissions perm = item->getPermissions(); +	perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Scripts")); +	perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Scripts")); +	perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Scripts")); +	perm.setMaskNext(PERM_ALL); +  	LLPointer<LLViewerInventoryItem> task_item = -		new LLViewerInventoryItem(item->getUUID(), mID, item->getPermissions(), +		new LLViewerInventoryItem(item->getUUID(), mID, perm,  								  item->getAssetUUID(), item->getType(),  								  item->getInventoryType(),  								  item->getName(), item->getDescription(), @@ -2594,6 +2602,8 @@ void LLViewerObject::saveScript(  	task_item->packMessage(msg);  	msg->sendReliable(mRegionp->getHost()); +	task_item->setPermissions(perm); +  	// do the internal logic  	doUpdateInventory(task_item, TASK_INVENTORY_ITEM_KEY, is_new);  } diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 6912faa9ec..09eec8e5ab 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -74,6 +74,7 @@  #include "object_flags.h"  #include "llappviewer.h" +#include "llfloaterperms.h"  extern F32 gMinObjectDistance;  extern BOOL gAnimateTextures; @@ -266,6 +267,17 @@ void LLViewerObjectList::processUpdateCore(LLViewerObject* objectp,  			// llinfos << "DEBUG selecting " << objectp->mID << " "   			// << objectp->mLocalID << llendl;  			LLSelectMgr::getInstance()->selectObjectAndFamily(objectp); + +			// This is a bit of a hack.  Because the server ensures one of either COPY or TRANSFER is always be on +			// to set the bits we want it is first necessary to set them all on and then clear the ones that +			// are not needed. +			LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_NEXT_OWNER, TRUE, PERM_COPY | PERM_MODIFY | PERM_TRANSFER); +			LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_NEXT_OWNER, FALSE, LLFloaterPerms::getNextOwnerPermsInverted("Objects")); + +			LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_EVERYONE, TRUE, LLFloaterPerms::getEveryonePerms("Objects")); + +			LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_GROUP, TRUE, LLFloaterPerms::getGroupPerms("Objects")); +  			dialog_refresh_all();  		} diff --git a/indra/newview/skins/default/xui/en/floater_perms_default.xml b/indra/newview/skins/default/xui/en/floater_perms_default.xml new file mode 100644 index 0000000000..ac19be8d15 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_perms_default.xml @@ -0,0 +1,508 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + height="250" + layout="topleft" + name="perms default" + help_topic="perms_default" + save_rect="true" + title="DEFAULT CREATION PERMISSIONS" + width="700"> + +  <panel +   follows="left|top|right|bottom" +   height="200" +   label="Default Permissions" +   layout="topleft" +   left="10" +   name="default permissions" +   top="20" +   width="690"> + +     <text +      type="string" +      length="1" +      follows="left|top" +      height="16" +      halign="center" +      layout="topleft" +      left="120" +      top="10" +      width="100"> +         Copy +      </text> + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="16" +       halign="center" +       layout="topleft" +       left_pad="5" +       top="10" +       width="100"> +          Modify +      </text> + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="16" +       halign="center" +       layout="topleft" +       left_pad="5" +       top="10" +       width="100"> +          Transfer +      </text> + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="32" +       halign="center" +       layout="topleft" +       left_pad="5" +       top="10" +       word_wrap="true" +       width="100"> +          Share with group +      </text> + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="32" +       halign="center" +       layout="topleft" +       left_pad="5" +       top="10" +       word_wrap="true" +       width="120"> +          Allow anyone to copy +      </text> + + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="16" +       layout="topleft" +       left="0" +       top_pad="10" +       tool_tip="Set default permissions for when Objects are created" +       width="100"> +          Objects +      </text> +      <icon +       follows="left|top" +       height="16" +       image_name="Inv_Object" +       layout="topleft" +       left_pad="2" +       width="18"/> + +      <check_box +       control_name="ObjectsNextOwnerCopy" +       height="16" +       layout="topleft" +       name="objects_c" +       left_pad="45" +       top_delta="0" +       width="100"> +        <check_box.commit_callback +         function="PermsDefault.Copy" +         parameter="Objects" /> +      </check_box> +      <check_box +       control_name="ObjectsNextOwnerModify" +       height="16" +       layout="topleft" +       name="objects_m" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       enabled_control="ObjectsNextOwnerCopy" +       control_name="ObjectsNextOwnerTransfer" +       height="16" +       layout="topleft" +       name="Objects_transfer" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       control_name="ObjectsShareWithGroup" +       height="16" +       layout="topleft" +       name="objects_s" +       left_pad="0" +       top_delta="0" +       width="120" /> +      <check_box +       control_name="ObjectsEveryoneCopy" +       height="16" +       layout="topleft" +       name="objects_a" +       left_pad="0" +       top_delta="0" +       width="100" /> + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="16" +       layout="topleft" +       left="0" +       tool_tip="Set default permissions for uploaded items" +       width="100"> +          Uploads +      </text> +      <icon +       follows="left|top" +       height="16" +       image_name="Inv_Texture" +       layout="topleft" +       left_pad="2" +       width="18"/> + +      <check_box +       control_name="UploadsNextOwnerCopy" +       height="16" +       layout="topleft" +       name="uploads_c" +       left_pad="45" +       top_delta="0" +       width="100"> +        <check_box.commit_callback +         function="PermsDefault.Copy" +         parameter="Uploads" /> +      </check_box> +      <check_box +       control_name="UploadsNextOwnerModify" +       height="16" +       layout="topleft" +       name="uploads_m" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       enabled_control="UploadsNextOwnerCopy" +       control_name="UploadsNextOwnerTransfer" +       height="16" +       layout="topleft" +       name="Uploads_transfer" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       control_name="UploadsShareWithGroup" +       height="16" +       layout="topleft" +       name="uploads_s" +       left_pad="0" +       top_delta="0" +       width="120" /> +      <check_box +       control_name="UploadsEveryoneCopy" +       height="16" +       layout="topleft" +       name="uploads_a" +       left_pad="0" +       top_delta="0" +       width="100" /> + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="16" +       layout="topleft" +       left="0" +       tool_tip="Set default permissions for when Scripts are created" +       width="100"> +          Scripts +      </text> +      <icon +       follows="left|top" +       height="16" +       image_name="Inv_Script" +       layout="topleft" +       left_pad="2" +       width="18"/> + +      <check_box +       control_name="ScriptsNextOwnerCopy" +       height="16" +       layout="topleft" +       name="scripts_c" +       left_pad="45" +       top_delta="0" +       width="100"> +        <check_box.commit_callback +         function="PermsDefault.Copy" +         parameter="Scripts" /> +      </check_box> +      <check_box +       control_name="ScriptsNextOwnerModify" +       height="16" +       layout="topleft" +       name="scripts_m" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       enabled_control="ScriptsNextOwnerCopy" +       control_name="ScriptsNextOwnerTransfer" +       height="16" +       layout="topleft" +       name="Scripts_transfer" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       control_name="ScriptsShareWithGroup" +       height="16" +       layout="topleft" +       name="scripts_s" +       left_pad="0" +       top_delta="0" +       width="120" /> +      <check_box +       control_name="ScriptsEveryoneCopy" +       height="16" +       layout="topleft" +       name="scripts_a" +       left_pad="0" +       top_delta="0" +       width="100" /> + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="16" +       layout="topleft" +       left="0" +       tool_tip="Set default permissions for when Notecards are created" +       width="100"> +        Notecards +      </text> +      <icon +       follows="left|top" +       height="16" +       image_name="Inv_Notecard" +       layout="topleft" +       left_pad="2" +       width="18"/> + +      <check_box +       control_name="NotecardsNextOwnerCopy" +       height="16" +       layout="topleft" +       name="notecards_c" +       left_pad="45" +       top_delta="0" +       width="100"> +        <check_box.commit_callback +         function="PermsDefault.Copy" +         parameter="Notecards" /> +      </check_box> +      <check_box +       control_name="NotecardsNextOwnerModify" +       height="16" +       layout="topleft" +       name="notecards_m" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       enabled_control="NotecardsNextOwnerCopy" +       control_name="NotecardsNextOwnerTransfer" +       height="16" +       layout="topleft" +       name="Notecards_transfer" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       control_name="NotecardsShareWithGroup" +       height="16" +       layout="topleft" +       name="notecards_s" +       left_pad="0" +       top_delta="0" +       width="120" /> +      <check_box +       control_name="NotecardsEveryoneCopy" +       height="16" +       layout="topleft" +       name="notecards_a" +       left_pad="0" +       top_delta="0" +       width="100" /> + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="16" +       layout="topleft" +       left="0" +       tool_tip="Set default permissions for when Gestures are created" +       width="100"> +          Gestures +      </text> +      <icon +       follows="left|top" +       height="16" +       image_name="Inv_Gesture" +       layout="topleft" +       left_pad="2" +       width="18"/> + +      <check_box +       control_name="GesturesNextOwnerCopy" +       height="16" +       layout="topleft" +       name="gestures_c" +       left_pad="45" +       top_delta="0" +       width="100"> +        <check_box.commit_callback +         function="PermsDefault.Copy" +         parameter="Gestures" /> +      </check_box> +      <check_box +       control_name="GesturesNextOwnerModify" +       height="16" +       layout="topleft" +       name="gestures_m" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       enabled_control="GesturesNextOwnerCopy" +       control_name="GesturesNextOwnerTransfer" +       height="16" +       layout="topleft" +       name="Gestures_transfer" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       control_name="GesturesShareWithGroup" +       height="16" +       layout="topleft" +       name="gestures_s" +       left_pad="0" +       top_delta="0" +       width="120" /> +      <check_box +       control_name="GesturesEveryoneCopy" +       height="16" +       layout="topleft" +       name="gestures_a" +       left_pad="0" +       top_delta="0" +       width="100" /> + + +      <text +       type="string" +       length="1" +       follows="left|top" +       height="16" +       layout="topleft" +       left="0" +       tool_tip="Set default permissions for when Clothing or Body Parts are created" +       width="100"> +          Wearables +      </text> +      <icon +       follows="left|top" +       height="16" +       image_name="Inv_BodyShape" +       layout="topleft" +       left_pad="2" +       width="18"/> + +      <check_box +       control_name="WearablesNextOwnerCopy" +       height="16" +       layout="topleft" +       name="wearables_c" +       left_pad="45" +       top_delta="0" +       width="100"> +        <check_box.commit_callback +         function="PermsDefault.Copy" +         parameter="Wearables" /> +      </check_box> +      <check_box +       control_name="WearablesNextOwnerModify" +       height="16" +       layout="topleft" +       name="wearables_m" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       enabled_control="WearablesNextOwnerCopy" +       control_name="WearablesNextOwnerTransfer" +       height="16" +       layout="topleft" +       name="Wearables_transfer" +       left_pad="0" +       top_delta="0" +       width="100" /> +      <check_box +       control_name="WearablesShareWithGroup" +       height="16" +       layout="topleft" +       name="wearables_s" +       left_pad="0" +       top_delta="0" +       width="120" /> +      <check_box +       control_name="WearablesEveryoneCopy" +       height="16" +       layout="topleft" +       name="wearables_a" +       left_pad="0" +       top_delta="0" +       width="100" /> + +  </panel> + +  <button +   height="20" +   label="OK" +   label_selected="OK" +   layout="topleft" +   name="ok" +   left="480" +   width="100"> +	<button.commit_callback +	 function="PermsDefault.OK" /> +  </button> + +  <button +   height="20" +   label="Cancel" +   label_selected="Cancel" +   layout="topleft" +   left_pad="5" +   name="cancel" +   top_delta="0" +   width="100"> +    <button.commit_callback +     function="PermsDefault.Cancel" /> +  </button> +</floater> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 5ba566b175..c660ef13ae 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1131,13 +1131,6 @@                   function="File.UploadBulk"                   parameter="" />              </menu_item_call> -            <menu_item_call -             label="Set Default Upload Permissions" -             name="perm prefs"> -                <menu_item_call.on_click -                 function="Floater.Toggle" -                 parameter="perm_prefs" /> -            </menu_item_call>          </menu>          <menu_item_separator/>          <menu_item_call diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index 2cc9d9c1b0..b6985f911e 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -222,4 +222,15 @@       name="show_develop_menu_check"       top_pad="5"       width="237"/> +    <button +     height="20" +     label="Default Creation Permissions" +     layout="topleft" +     name="Default Creation Permissions" +     left="30" +     top_pad = "20" +     width="250"> +	<button.commit_callback +	 function="Pref.PermsDefault" /> +  </button>  </panel> | 
