diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index d30cb4343..b591a82db 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -314,6 +314,17 @@ Value 0 + EveryoneExport + + Comment + Whether content you upload has exportability permission by default + Persist + 1 + Type + Boolean + Value + 0 + RLVaLoginLastLocation Comment diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp index ccbeb8c5c..31809d4c2 100644 --- a/indra/newview/llfloaterperms.cpp +++ b/indra/newview/llfloaterperms.cpp @@ -41,6 +41,33 @@ #include "lluictrlfactory.h" #include "llpermissions.h" +namespace +{ + bool everyone_export; + void handle_checkboxes(LLUICtrl* ctrl, const LLSD& value) + { + LLPanel* view = static_cast(ctrl->getParent()); + if (ctrl->getName() == "everyone_export") + { + view->childSetEnabled("next_owner_copy", !value); + view->childSetEnabled("next_owner_modify", !value); + view->childSetEnabled("next_owner_transfer", !value); + } + else + { + if (ctrl->getName() == "next_owner_copy") + { + if (!value) // Implements fair use + gSavedSettings.setBOOL("NextOwnerTransfer", true); + view->childSetEnabled("next_owner_transfer", value); + } + if (!value) // If any of these are unchecked, export can no longer be checked. + view->childSetEnabled("everyone_export", false); + else // TODO: Implement Simulator Feature for Export. + view->childSetEnabled("everyone_export", /*simSupportsExport() &&*/ (LLFloaterPerms::getNextOwnerPerms() & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED); + } + } +} LLFloaterPerms::LLFloaterPerms(const LLSD& seed) { @@ -49,11 +76,30 @@ LLFloaterPerms::LLFloaterPerms(const LLSD& seed) BOOL LLFloaterPerms::postBuild() { - childSetEnabled("next_owner_transfer", gSavedSettings.getBOOL("NextOwnerCopy")); + //handle_checkboxes + { + bool export_support = true; //simSupportsExport(); // TODO: Implement Simulator Feature for Export. + const U32 next_owner_perms = getNextOwnerPerms(); + childSetEnabled("everyone_export", export_support && (next_owner_perms & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED); + if (!next_owner_perms & PERM_COPY) + childSetEnabled("next_owner_transfer", false); + else if (export_support) + { + bool export_off = !gSavedPerAccountSettings.getBOOL("EveryoneExport"); + childSetEnabled("next_owner_copy", export_off); + childSetEnabled("next_owner_modify", export_off); + childSetEnabled("next_owner_transfer", export_off); + } + else // Set EveryoneExport false, just in case. + gSavedPerAccountSettings.setBOOL("EveryoneExport", false); + } childSetAction("help", onClickHelp, this); childSetAction("ok", onClickOK, this); childSetAction("cancel", onClickCancel, this); - childSetCommitCallback("next_owner_copy", &onCommitCopy, this); + getChild("next_owner_copy")->setCommitCallback(handle_checkboxes); + getChild("next_owner_modify")->setCommitCallback(handle_checkboxes); + getChild("next_owner_transfer")->setCommitCallback(handle_checkboxes); + getChild("everyone_export")->setCommitCallback(handle_checkboxes); refresh(); @@ -76,20 +122,6 @@ void LLFloaterPerms::onClickCancel(void* data) self->close(); } -//static -void LLFloaterPerms::onCommitCopy(LLUICtrl* ctrl, void* data) -{ - LLFloaterPerms* self = static_cast(data); - // Implements fair use - BOOL copyable = gSavedSettings.getBOOL("NextOwnerCopy"); - if(!copyable) - { - gSavedSettings.setBOOL("NextOwnerTransfer", TRUE); - } - LLCheckBoxCtrl* xfer = self->getChild("next_owner_transfer"); - xfer->setEnabled(copyable); -} - void LLFloaterPerms::ok() { refresh(); // Changes were already applied to saved settings. Refreshing internal values makes it official. @@ -102,6 +134,7 @@ void LLFloaterPerms::cancel() gSavedSettings.setBOOL("NextOwnerCopy", mNextOwnerCopy); gSavedSettings.setBOOL("NextOwnerModify", mNextOwnerModify); gSavedSettings.setBOOL("NextOwnerTransfer", mNextOwnerTransfer); + gSavedPerAccountSettings.setBOOL("EveryoneExport", everyone_export); } void LLFloaterPerms::refresh() @@ -111,6 +144,7 @@ void LLFloaterPerms::refresh() mNextOwnerCopy = gSavedSettings.getBOOL("NextOwnerCopy"); mNextOwnerModify = gSavedSettings.getBOOL("NextOwnerModify"); mNextOwnerTransfer = gSavedSettings.getBOOL("NextOwnerTransfer"); + everyone_export = gSavedPerAccountSettings.getBOOL("EveryoneExport"); } void LLFloaterPerms::onClose(bool app_quitting) @@ -130,7 +164,12 @@ U32 LLFloaterPerms::getGroupPerms(std::string prefix) //static U32 LLFloaterPerms::getEveryonePerms(std::string prefix) { - return gSavedSettings.getBOOL(prefix+"EveryoneCopy") ? PERM_COPY : PERM_NONE; + U32 flags = PERM_NONE; + if (prefix.empty() && gSavedPerAccountSettings.getBOOL("EveryoneExport")) // TODO: Bulk enable export? + flags |= PERM_EXPORT; + if (gSavedSettings.getBOOL(prefix+"EveryoneCopy")) + flags |= PERM_COPY; + return flags; } //static diff --git a/indra/newview/llfloaterperms.h b/indra/newview/llfloaterperms.h index 805039efe..9193b5983 100644 --- a/indra/newview/llfloaterperms.h +++ b/indra/newview/llfloaterperms.h @@ -47,7 +47,6 @@ public: void cancel(); static void onClickOK(void*); static void onClickCancel(void*); - static void onCommitCopy(LLUICtrl* ctrl, void* data); // 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" diff --git a/indra/newview/skins/default/xui/en-us/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en-us/floater_perm_prefs.xml index cfb2857cc..f80937110 100644 --- a/indra/newview/skins/default/xui/en-us/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/en-us/floater_perm_prefs.xml @@ -3,8 +3,9 @@