From 15fea2ef5427c5cc2d988b37d49c68566d6c1562 Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Thu, 14 Feb 2013 22:14:42 -0500 Subject: [PATCH 01/25] Export perm added to UI! Code added, Along with all the potential PERM_EXPORT bits... Actual PERM_EXPORT bit still needs to be added. SimulatorFeature comes next. --- indra/newview/llfloaterproperties.cpp | 12 +++++++ indra/newview/llpanelpermissions.cpp | 32 +++++++++++++++++++ indra/newview/llpanelpermissions.h | 1 + .../floater_inventory_item_properties.xml | 6 ++-- .../skins/default/xui/en-us/floater_tools.xml | 10 +++--- 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index 34a51e018..3cfcd4ac7 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -197,6 +197,7 @@ LLFloaterProperties::LLFloaterProperties(const std::string& name, const LLRect& // everyone permissions childSetCommitCallback("CheckEveryoneCopy",&onCommitPermissions, this); childSetCommitCallback("CheckEveryoneMove",&onCommitPermissions, this); + childSetCommitCallback("CheckExport", &onCommitPermissions, this); // next owner permissions childSetCommitCallback("CheckNextOwnerModify",&onCommitPermissions, this); childSetCommitCallback("CheckNextOwnerCopy",&onCommitPermissions, this); @@ -251,11 +252,13 @@ void LLFloaterProperties::refresh() "CheckOwnerModify", "CheckOwnerCopy", "CheckOwnerTransfer", + "CheckOwnerExport", "CheckGroupCopy", "CheckGroupMod", "CheckGroupMove", "CheckEveryoneCopy", "CheckEveryoneMove", + "CheckExport", "CheckNextOwnerModify", "CheckNextOwnerCopy", "CheckNextOwnerTransfer", @@ -436,6 +439,8 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) childSetValue("CheckOwnerCopy",LLSD((BOOL)(owner_mask & PERM_COPY))); childSetEnabled("CheckOwnerTransfer",FALSE); childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER))); + childSetEnabled("CheckOwnerExport",false); +// childSetValue("CheckOwnerExport", (bool)(owner_mask & PERM_EXPORT)); /////////////////////// // DEBUG PERMISSIONS // @@ -519,6 +524,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) childSetEnabled("CheckEveryoneCopy",false); childSetEnabled("CheckEveryoneMove",false); } + childSetEnabled("CheckExport", gAgent.getID() == item->getCreatorUUID()); // Set values. BOOL is_group_copy = (group_mask & PERM_COPY) ? TRUE : FALSE; @@ -531,6 +537,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY))); childSetValue("CheckEveryoneMove",LLSD((BOOL)(everyone_mask & PERM_MOVE))); + //childSetValue("CheckExport", everyone_mask & PERM_EXPORT); /////////////// // SALE INFO // @@ -750,6 +757,11 @@ void LLFloaterProperties::onCommitPermissions(LLUICtrl* ctrl, void* data) perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), CheckEveryoneCopy->get(), PERM_COPY); } + LLCheckBoxCtrl* CheckExport = self->getChild("CheckExport"); + if(CheckExport) + { +// perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), CheckExport->get(), PERM_EXPORT); + } LLCheckBoxCtrl* CheckNextOwnerModify = self->getChild("CheckNextOwnerModify"); if(CheckNextOwnerModify) diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 99ea6e9c4..bd7e582ed 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -112,6 +112,8 @@ BOOL LLPanelPermissions::postBuild() childSetCommitCallback("checkbox allow everyone copy",LLPanelPermissions::onCommitEveryoneCopy,this); + getChild("checkbox allow export")->setCommitCallback(boost::bind(&LLPanelPermissions::onCommitExport, this)); + childSetCommitCallback("checkbox for sale",LLPanelPermissions::onCommitSaleInfo,this); childSetCommitCallback("Edit Cost",LLPanelPermissions::onCommitSaleInfo,this); @@ -223,10 +225,13 @@ void LLPanelPermissions::refresh() childSetEnabled("checkbox share with group",false); childSetEnabled("button deed",false); + childSetEnabled("text anyone can", false); childSetValue("checkbox allow everyone move",FALSE); childSetEnabled("checkbox allow everyone move",false); childSetValue("checkbox allow everyone copy",FALSE); childSetEnabled("checkbox allow everyone copy",false); + childSetValue("checkbox allow export", false); + childSetEnabled("checkbox allow export", false); //Next owner can: childSetEnabled("Next owner can:",false); @@ -620,6 +625,8 @@ void LLPanelPermissions::refresh() LLStringUtil::replaceChar(perm_string, 'C', 'c'); if (diff_mask & PERM_TRANSFER) LLStringUtil::replaceChar(perm_string, 'T', 't'); +/* if (diff_mask & PERM_EXPORT) + LLStringUtil::replaceChar(perm_string, 'E', 'e');*/ } childSetText("B:",perm_string); childSetVisible("B:",true); @@ -688,15 +695,18 @@ void LLPanelPermissions::refresh() if (has_change_perm_ability) { childSetEnabled("checkbox share with group",true); + childSetEnabled("text anyone can", true); childSetEnabled("checkbox allow everyone move",owner_mask_on & PERM_MOVE); childSetEnabled("checkbox allow everyone copy",owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER); } else { childSetEnabled("checkbox share with group", FALSE); + childSetEnabled("text anyone can", false); childSetEnabled("checkbox allow everyone move", FALSE); childSetEnabled("checkbox allow everyone copy", FALSE); } + childSetEnabled("checkbox allow export", mCreatorID == gAgent.getID()); if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER)) { @@ -779,6 +789,23 @@ void LLPanelPermissions::refresh() childSetValue("checkbox allow everyone copy",TRUE); childSetTentative("checkbox allow everyone copy",true); } + + // Export +/* if(everyone_mask_on & PERM_EXPORT) + { + childSetValue("checkbox allow export", true); + childSetTentative("checkbox allow export", false); + } + else if(everyone_mask_on & PERM_EXPORT) + { + childSetValue("checkbox allow export", false); + childSetTentative("checkbox allow export", false); + } + else*/ + { + childSetValue("checkbox allow export", true); + childSetTentative("checkbox allow export", true); + } } if(valid_next_perms) @@ -1064,6 +1091,11 @@ void LLPanelPermissions::onCommitEveryoneCopy(LLUICtrl *ctrl, void *data) onCommitPerm(ctrl, data, PERM_EVERYONE, PERM_COPY); } +void LLPanelPermissions::onCommitExport() +{ +// perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), childGetValue("checkbox allow export"), PERM_EXPORT); +} + // static void LLPanelPermissions::onCommitNextOwnerModify(LLUICtrl* ctrl, void* data) { diff --git a/indra/newview/llpanelpermissions.h b/indra/newview/llpanelpermissions.h index 85ac41831..a4ccfffa9 100644 --- a/indra/newview/llpanelpermissions.h +++ b/indra/newview/llpanelpermissions.h @@ -86,6 +86,7 @@ protected: static void onCommitEveryoneMove(LLUICtrl *ctrl, void *data); static void onCommitEveryoneCopy(LLUICtrl *ctrl, void *data); //static void onCommitEveryoneModify(LLUICtrl *ctrl, void *data); + void onCommitExport(); static void onCommitNextOwnerModify(LLUICtrl* ctrl, void* data); static void onCommitNextOwnerCopy(LLUICtrl* ctrl, void* data); diff --git a/indra/newview/skins/default/xui/en-us/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en-us/floater_inventory_item_properties.xml index e29b362a2..f577635bf 100644 --- a/indra/newview/skins/default/xui/en-us/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/en-us/floater_inventory_item_properties.xml @@ -80,9 +80,10 @@ initial_value="false" label="Copy" left_delta="78" mouse_opaque="true" name="CheckOwnerCopy" radio_style="false" width="88" /> + + - Anyone can: + - + From 45f3a171befbac9cb285d549068a54d5c9172aac Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Thu, 14 Feb 2013 22:48:31 -0500 Subject: [PATCH 02/25] Enter PERM_EXPORT, stage right. --- indra/llinventory/llpermissions.cpp | 9 +++++++++ indra/llinventory/llpermissionsflags.h | 3 +++ indra/newview/llfloaterproperties.cpp | 6 +++--- indra/newview/llpanelpermissions.cpp | 10 +++++----- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp index 34354e3e8..6f1c25c31 100644 --- a/indra/llinventory/llpermissions.cpp +++ b/indra/llinventory/llpermissions.cpp @@ -1022,6 +1022,15 @@ void mask_to_string(U32 mask, char* str) { *str = ' '; } + + if (mask & PERM_EXPORT) + { + *str = 'E'; + } + else + { + *str = ' '; + } str++; *str = '\0'; } diff --git a/indra/llinventory/llpermissionsflags.h b/indra/llinventory/llpermissionsflags.h index f810929d6..02224d0c8 100644 --- a/indra/llinventory/llpermissionsflags.h +++ b/indra/llinventory/llpermissionsflags.h @@ -52,6 +52,9 @@ const PermissionBit PERM_MODIFY = (1 << 14); // 0x00004000 // objects, allow copy const PermissionBit PERM_COPY = (1 << 15); // 0x00008000 +// objects, allow exporting +const PermissionBit PERM_EXPORT = (1 << 16); // 0x00010000 + // parcels, allow entry, deprecated //const PermissionBit PERM_ENTER = (1 << 16); // 0x00010000 diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index 3cfcd4ac7..6eeaa5edf 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -440,7 +440,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) childSetEnabled("CheckOwnerTransfer",FALSE); childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER))); childSetEnabled("CheckOwnerExport",false); -// childSetValue("CheckOwnerExport", (bool)(owner_mask & PERM_EXPORT)); + childSetValue("CheckOwnerExport", (bool)(owner_mask & PERM_EXPORT)); /////////////////////// // DEBUG PERMISSIONS // @@ -537,7 +537,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY))); childSetValue("CheckEveryoneMove",LLSD((BOOL)(everyone_mask & PERM_MOVE))); - //childSetValue("CheckExport", everyone_mask & PERM_EXPORT); + childSetValue("CheckExport", everyone_mask & PERM_EXPORT); /////////////// // SALE INFO // @@ -760,7 +760,7 @@ void LLFloaterProperties::onCommitPermissions(LLUICtrl* ctrl, void* data) LLCheckBoxCtrl* CheckExport = self->getChild("CheckExport"); if(CheckExport) { -// perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), CheckExport->get(), PERM_EXPORT); + perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), CheckExport->get(), PERM_EXPORT); } LLCheckBoxCtrl* CheckNextOwnerModify = self->getChild("CheckNextOwnerModify"); diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index bd7e582ed..8eab2b3d5 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -625,8 +625,8 @@ void LLPanelPermissions::refresh() LLStringUtil::replaceChar(perm_string, 'C', 'c'); if (diff_mask & PERM_TRANSFER) LLStringUtil::replaceChar(perm_string, 'T', 't'); -/* if (diff_mask & PERM_EXPORT) - LLStringUtil::replaceChar(perm_string, 'E', 'e');*/ + if (diff_mask & PERM_EXPORT) + LLStringUtil::replaceChar(perm_string, 'E', 'e'); } childSetText("B:",perm_string); childSetVisible("B:",true); @@ -791,7 +791,7 @@ void LLPanelPermissions::refresh() } // Export -/* if(everyone_mask_on & PERM_EXPORT) + if(everyone_mask_on & PERM_EXPORT) { childSetValue("checkbox allow export", true); childSetTentative("checkbox allow export", false); @@ -801,7 +801,7 @@ void LLPanelPermissions::refresh() childSetValue("checkbox allow export", false); childSetTentative("checkbox allow export", false); } - else*/ + else { childSetValue("checkbox allow export", true); childSetTentative("checkbox allow export", true); @@ -1093,7 +1093,7 @@ void LLPanelPermissions::onCommitEveryoneCopy(LLUICtrl *ctrl, void *data) void LLPanelPermissions::onCommitExport() { -// perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), childGetValue("checkbox allow export"), PERM_EXPORT); + perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), childGetValue("checkbox allow export"), PERM_EXPORT); } // static From 11604ae5de67a6eb24f98081f0bf106e6a3a628e Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Fri, 15 Feb 2013 07:53:51 -0500 Subject: [PATCH 03/25] Compile fixes.. I thought I'd done this... --- indra/newview/llfloaterproperties.cpp | 2 +- indra/newview/llpanelpermissions.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index 6eeaa5edf..4d313b3c9 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -537,7 +537,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY))); childSetValue("CheckEveryoneMove",LLSD((BOOL)(everyone_mask & PERM_MOVE))); - childSetValue("CheckExport", everyone_mask & PERM_EXPORT); + childSetValue("CheckExport", (bool)(everyone_mask & PERM_EXPORT)); /////////////// // SALE INFO // diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 8eab2b3d5..86c874b2a 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -1093,7 +1093,7 @@ void LLPanelPermissions::onCommitEveryoneCopy(LLUICtrl *ctrl, void *data) void LLPanelPermissions::onCommitExport() { - perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), childGetValue("checkbox allow export"), PERM_EXPORT); + LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_EVERYONE, childGetValue("checkbox allow export"), PERM_EXPORT); } // static From c67563dfe4b713e0f0534b5839af527ab416d90e Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Sat, 16 Feb 2013 04:05:58 -0500 Subject: [PATCH 04/25] Bits and pieces Disable next owner perms boxes when PERM_EXPORT Added checks disabling the export toggle conditionally. All cases covered except textures, couldn't figure that one out... Mind the TODO's in the diff.. --- indra/newview/llfloaterproperties.cpp | 12 +++--- indra/newview/llpanelpermissions.cpp | 57 ++++++++++++++++++++++++--- 2 files changed, 59 insertions(+), 10 deletions(-) diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index 4d313b3c9..d8438a355 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -524,7 +524,8 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) childSetEnabled("CheckEveryoneCopy",false); childSetEnabled("CheckEveryoneMove",false); } - childSetEnabled("CheckExport", gAgent.getID() == item->getCreatorUUID()); + childSetEnabled("CheckExport", /*simSupportsExport() &&*/ item->getType() != LLAssetType::AT_OBJECT && gAgent.getID() == item->getCreatorUUID() //TODO: Implement Simulator Feature for Export. + && !(base_mask & PERM_EXPORT && owner_mask & PERM_EXPORT && next_owner_mask & PERM_ITEM_UNRESTRICTED)); // Set values. BOOL is_group_copy = (group_mask & PERM_COPY) ? TRUE : FALSE; @@ -552,10 +553,11 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) childSetEnabled("SaleLabel",is_complete); childSetEnabled("CheckPurchase",is_complete); - childSetEnabled("NextOwnerLabel",TRUE); - childSetEnabled("CheckNextOwnerModify",base_mask & PERM_MODIFY); - childSetEnabled("CheckNextOwnerCopy",base_mask & PERM_COPY); - childSetEnabled("CheckNextOwnerTransfer",next_owner_mask & PERM_COPY); + bool no_export = !(everyone_mask & PERM_EXPORT); // Next owner perms can't be changed if set + childSetEnabled("NextOwnerLabel", no_export); + childSetEnabled("CheckNextOwnerModify", no_export && base_mask & PERM_MODIFY); + childSetEnabled("CheckNextOwnerCopy", no_export && base_mask & PERM_COPY); + childSetEnabled("CheckNextOwnerTransfer", no_export && next_owner_mask & PERM_COPY); childSetEnabled("RadioSaleType",is_complete && is_for_sale); childSetEnabled("TextPrice",is_complete && is_for_sale); diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 86c874b2a..4815017da 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -706,7 +706,53 @@ void LLPanelPermissions::refresh() childSetEnabled("checkbox allow everyone move", FALSE); childSetEnabled("checkbox allow everyone copy", FALSE); } - childSetEnabled("checkbox allow export", mCreatorID == gAgent.getID()); + + // Is this user allowed to toggle export on this object? + { + bool can_export = self_owned && mCreatorID == mOwnerID; + if (can_export) + { + if (can_export = (base_mask_on & PERM_EXPORT && owner_mask_on & PERM_EXPORT && everyone_mask_on & PERM_ITEM_UNRESTRICTED)) //Base & Owner must have EXPORT, Everyone must be UNRESTRICTED + { + //if (can_export = simSupportsExport()) //TODO: Implement Simulator Feature for Export. + { + LLInventoryObject::object_list_t objects; + objectp->getInventoryContents(objects); + for (LLInventoryObject::object_list_t::iterator i = objects.begin(); i != objects.end(); ++i) //The object's inventory must have EXPORT. + { + LLViewerInventoryItem* item = static_cast(i->get()); //getInventoryContents() filters out categories, static_cast. + //if (item->getCreatorUUID() == gAgent.getID()) continue; //TODO: Find out if we can bypass the perms check if the creator is the agent. + const LLPermissions& perm = item->getPermissions(); + if (!(perm.getMaskBase() & PERM_EXPORT && perm.getMaskOwner() & PERM_EXPORT && perm.getMaskEveryone() & PERM_EXPORT)) + { + can_export = false; + break; + } + } + + /*if (can_export) // Can the textures be exported? + { + //TODO: iterate through faces... I can't quite figure this out, so I've left in some placeholders. + LLTexture::texture_list_t textures = objectp->getTextures(); //NOTE: Fake code + for(LLTexture::texture_list_t::iterator i = textures.begin(); i != textures.end(); ++i) //NOTE: Fake code + { + LLTexture* texture = i->get(); //NOTE: Fake code + //TODO: Do they were they uploaded by the user? + if (texture->getCreatorID == gAgent.getID()) continue; //NOTE: Fake code + //TODO: Or else have they not PERM_EXPORT? + const LLPermissions& perm = texture->getPermissions(); //NOTE: Fake code + if (!(perm.getMaskBase & PERM_EXPORT)) + { + can_export = false; + break; + } + } + }*/ + } + } + } + childSetEnabled("checkbox allow export", can_export); + } if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER)) { @@ -716,10 +762,11 @@ void LLPanelPermissions::refresh() childSetTentative("checkbox for sale", is_for_sale_mixed); childSetEnabled("sale type",num_for_sale && can_transfer && !is_sale_price_mixed); - childSetEnabled("Next owner can:", TRUE); - childSetEnabled("checkbox next owner can modify",base_mask_on & PERM_MODIFY); - childSetEnabled("checkbox next owner can copy",base_mask_on & PERM_COPY); - childSetEnabled("checkbox next owner can transfer",next_owner_mask_on & PERM_COPY); + bool no_export = everyone_mask_off & PERM_EXPORT; // Next owner perms can't be changed if set + childSetEnabled("Next owner can:", no_export); + childSetEnabled("checkbox next owner can modify", no_export && base_mask_on & PERM_MODIFY); + childSetEnabled("checkbox next owner can copy", no_export && base_mask_on & PERM_COPY); + childSetEnabled("checkbox next owner can transfer", no_export && next_owner_mask_on & PERM_COPY); } else { From 9e6e801d495ca0676d242ada89817913a6e957b8 Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Sat, 16 Feb 2013 16:31:38 -0500 Subject: [PATCH 05/25] Check if objects textures prevent it from being exportable. --- indra/newview/llpanelpermissions.cpp | 41 ++++++++++++---------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 4815017da..189195356 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -709,46 +709,41 @@ void LLPanelPermissions::refresh() // Is this user allowed to toggle export on this object? { - bool can_export = self_owned && mCreatorID == mOwnerID; + bool can_export = self_owned && mCreatorID == mOwnerID/* && simSupportsExport()*/; //TODO: Implement Simulator Feature for Export. if (can_export) { if (can_export = (base_mask_on & PERM_EXPORT && owner_mask_on & PERM_EXPORT && everyone_mask_on & PERM_ITEM_UNRESTRICTED)) //Base & Owner must have EXPORT, Everyone must be UNRESTRICTED - { - //if (can_export = simSupportsExport()) //TODO: Implement Simulator Feature for Export. { LLInventoryObject::object_list_t objects; objectp->getInventoryContents(objects); for (LLInventoryObject::object_list_t::iterator i = objects.begin(); i != objects.end(); ++i) //The object's inventory must have EXPORT. { LLViewerInventoryItem* item = static_cast(i->get()); //getInventoryContents() filters out categories, static_cast. - //if (item->getCreatorUUID() == gAgent.getID()) continue; //TODO: Find out if we can bypass the perms check if the creator is the agent. const LLPermissions& perm = item->getPermissions(); - if (!(perm.getMaskBase() & PERM_EXPORT && perm.getMaskOwner() & PERM_EXPORT && perm.getMaskEveryone() & PERM_EXPORT)) + if (!(perm.getMaskBase() & PERM_EXPORT && (perm.getMaskOwner() & PERM_EXPORT || perm.getMaskEveryone() & PERM_EXPORT))) { can_export = false; break; } } - - /*if (can_export) // Can the textures be exported? - { - //TODO: iterate through faces... I can't quite figure this out, so I've left in some placeholders. - LLTexture::texture_list_t textures = objectp->getTextures(); //NOTE: Fake code - for(LLTexture::texture_list_t::iterator i = textures.begin(); i != textures.end(); ++i) //NOTE: Fake code - { - LLTexture* texture = i->get(); //NOTE: Fake code - //TODO: Do they were they uploaded by the user? - if (texture->getCreatorID == gAgent.getID()) continue; //NOTE: Fake code - //TODO: Or else have they not PERM_EXPORT? - const LLPermissions& perm = texture->getPermissions(); //NOTE: Fake code - if (!(perm.getMaskBase & PERM_EXPORT)) + if (can_export) + for (U8 i = 0; i < objectp->getNumTEs(); ++i) // Can the textures be exported? + if (LLTextureEntry* texture = objectp->getTE(i)) { - can_export = false; - break; + const LLUUID id = texture->getID(); + if (id.isNull()) continue; // Don't permission-check null textures + else if (LLViewerInventoryItem* item = gInventory.getItem(id)) + { + const LLPermissions& perm = item->getPermissions(); + can_export = perm.getMaskBase() & PERM_EXPORT && (perm.getMaskOwner() & PERM_EXPORT || perm.getMaskEveryone() & PERM_EXPORT); + if (!can_export) break; + } + else // Texture not in inventory + { + can_export = false; + break; + } } - } - }*/ - } } } childSetEnabled("checkbox allow export", can_export); From d269b6662306d705e79a07bf7fd2c5b35b047abc Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Sat, 16 Feb 2013 16:35:57 -0500 Subject: [PATCH 06/25] Space changes. --- indra/newview/llpanelpermissions.cpp | 52 ++++++++++++++-------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 189195356..890a8d1d2 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -713,37 +713,37 @@ void LLPanelPermissions::refresh() if (can_export) { if (can_export = (base_mask_on & PERM_EXPORT && owner_mask_on & PERM_EXPORT && everyone_mask_on & PERM_ITEM_UNRESTRICTED)) //Base & Owner must have EXPORT, Everyone must be UNRESTRICTED + { + LLInventoryObject::object_list_t objects; + objectp->getInventoryContents(objects); + for (LLInventoryObject::object_list_t::iterator i = objects.begin(); i != objects.end(); ++i) //The object's inventory must have EXPORT. { - LLInventoryObject::object_list_t objects; - objectp->getInventoryContents(objects); - for (LLInventoryObject::object_list_t::iterator i = objects.begin(); i != objects.end(); ++i) //The object's inventory must have EXPORT. + LLViewerInventoryItem* item = static_cast(i->get()); //getInventoryContents() filters out categories, static_cast. + const LLPermissions& perm = item->getPermissions(); + if (!(perm.getMaskBase() & PERM_EXPORT && (perm.getMaskOwner() & PERM_EXPORT || perm.getMaskEveryone() & PERM_EXPORT))) { - LLViewerInventoryItem* item = static_cast(i->get()); //getInventoryContents() filters out categories, static_cast. - const LLPermissions& perm = item->getPermissions(); - if (!(perm.getMaskBase() & PERM_EXPORT && (perm.getMaskOwner() & PERM_EXPORT || perm.getMaskEveryone() & PERM_EXPORT))) - { - can_export = false; - break; - } + can_export = false; + break; } - if (can_export) - for (U8 i = 0; i < objectp->getNumTEs(); ++i) // Can the textures be exported? - if (LLTextureEntry* texture = objectp->getTE(i)) + } + if (can_export) + for (U8 i = 0; i < objectp->getNumTEs(); ++i) // Can the textures be exported? + if (LLTextureEntry* texture = objectp->getTE(i)) + { + const LLUUID id = texture->getID(); + if (id.isNull()) continue; // Don't permission-check null textures + else if (LLViewerInventoryItem* item = gInventory.getItem(id)) { - const LLUUID id = texture->getID(); - if (id.isNull()) continue; // Don't permission-check null textures - else if (LLViewerInventoryItem* item = gInventory.getItem(id)) - { - const LLPermissions& perm = item->getPermissions(); - can_export = perm.getMaskBase() & PERM_EXPORT && (perm.getMaskOwner() & PERM_EXPORT || perm.getMaskEveryone() & PERM_EXPORT); - if (!can_export) break; - } - else // Texture not in inventory - { - can_export = false; - break; - } + const LLPermissions& perm = item->getPermissions(); + can_export = perm.getMaskBase() & PERM_EXPORT && (perm.getMaskOwner() & PERM_EXPORT || perm.getMaskEveryone() & PERM_EXPORT); + if (!can_export) break; } + else // Texture not in inventory + { + can_export = false; + break; + } + } } } childSetEnabled("checkbox allow export", can_export); From e7cf0b716da73556a3911201c24380f0675c241c Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Sat, 16 Feb 2013 20:37:49 -0500 Subject: [PATCH 07/25] Permissions corrections. --- indra/newview/llpanelpermissions.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 890a8d1d2..188ef37ea 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -712,7 +712,7 @@ void LLPanelPermissions::refresh() bool can_export = self_owned && mCreatorID == mOwnerID/* && simSupportsExport()*/; //TODO: Implement Simulator Feature for Export. if (can_export) { - if (can_export = (base_mask_on & PERM_EXPORT && owner_mask_on & PERM_EXPORT && everyone_mask_on & PERM_ITEM_UNRESTRICTED)) //Base & Owner must have EXPORT, Everyone must be UNRESTRICTED + if (can_export = (base_mask_on & PERM_EXPORT && owner_mask_on & PERM_EXPORT && (next_owner_mask_on & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED)) //Base and Owner must have EXPORT, Next Owner must be UNRESTRICTED { LLInventoryObject::object_list_t objects; objectp->getInventoryContents(objects); @@ -720,7 +720,7 @@ void LLPanelPermissions::refresh() { LLViewerInventoryItem* item = static_cast(i->get()); //getInventoryContents() filters out categories, static_cast. const LLPermissions& perm = item->getPermissions(); - if (!(perm.getMaskBase() & PERM_EXPORT && (perm.getMaskOwner() & PERM_EXPORT || perm.getMaskEveryone() & PERM_EXPORT))) + if (!(perm.getMaskBase() & PERM_EXPORT && perm.getMaskEveryone() & PERM_EXPORT)) { can_export = false; break; From d5e6f9950d48f63525696c52d127125fb75a6a23 Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Sun, 17 Feb 2013 00:07:13 -0500 Subject: [PATCH 08/25] Add Allow exportation checkbox to Default Upload Permissions floater. Setting is per account and defaults to false. --- .../app_settings/settings_per_account.xml | 11 +++ indra/newview/llfloaterperms.cpp | 73 ++++++++++++++----- indra/newview/llfloaterperms.h | 1 - .../default/xui/en-us/floater_perm_prefs.xml | 5 +- 4 files changed, 70 insertions(+), 20 deletions(-) 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 @@