diff options
Diffstat (limited to 'indra/newview/llpanelcontents.cpp')
| -rw-r--r-- | indra/newview/llpanelcontents.cpp | 416 |
1 files changed, 208 insertions, 208 deletions
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp index 38c6e32e3b..7413a2d93e 100644 --- a/indra/newview/llpanelcontents.cpp +++ b/indra/newview/llpanelcontents.cpp @@ -1,208 +1,208 @@ -/** - * @file llpanelcontents.cpp - * @brief Object contents panel in the tools floater. - * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -// file include -#include "llpanelcontents.h" - -// linden library includes -#include "llerror.h" -#include "llfloaterreg.h" -#include "llfontgl.h" -#include "llinventorydefines.h" -#include "llmaterialtable.h" -#include "llpermissionsflags.h" -#include "llrect.h" -#include "llstring.h" -#include "llui.h" -#include "m3math.h" -#include "material_codes.h" - -// project includes -#include "llagent.h" -#include "llpanelobjectinventory.h" -#include "llpreviewscript.h" -#include "llresmgr.h" -#include "llselectmgr.h" -#include "lltool.h" -#include "lltoolcomp.h" -#include "lltoolmgr.h" -#include "lltrans.h" -#include "llviewerassettype.h" -#include "llviewerinventory.h" -#include "llviewerobject.h" -#include "llviewerregion.h" -#include "llviewerwindow.h" -#include "llworld.h" -#include "llfloaterperms.h" - -// -// Imported globals -// - - -// -// Globals -// -const char* LLPanelContents::TENTATIVE_SUFFIX = "_tentative"; -const char* LLPanelContents::PERMS_OWNER_INTERACT_KEY = "perms_owner_interact"; -const char* LLPanelContents::PERMS_OWNER_CONTROL_KEY = "perms_owner_control"; -const char* LLPanelContents::PERMS_GROUP_INTERACT_KEY = "perms_group_interact"; -const char* LLPanelContents::PERMS_GROUP_CONTROL_KEY = "perms_group_control"; -const char* LLPanelContents::PERMS_ANYONE_INTERACT_KEY = "perms_anyone_interact"; -const char* LLPanelContents::PERMS_ANYONE_CONTROL_KEY = "perms_anyone_control"; - -bool LLPanelContents::postBuild() -{ - setMouseOpaque(false); - - childSetAction("button new script",&LLPanelContents::onClickNewScript, this); - childSetAction("button permissions",&LLPanelContents::onClickPermissions, this); - - mPanelInventoryObject = getChild<LLPanelObjectInventory>("contents_inventory"); - - return true; -} - -LLPanelContents::LLPanelContents() - : LLPanel(), - mPanelInventoryObject(NULL) -{ -} - - -LLPanelContents::~LLPanelContents() -{ - // Children all cleaned up by default view destructor. -} - - -void LLPanelContents::getState(LLViewerObject *objectp ) -{ - if( !objectp ) - { - getChildView("button new script")->setEnabled(false); - return; - } - - LLUUID group_id; // used for SL-23488 - LLSelectMgr::getInstance()->selectGetGroup(group_id); // sets group_id as a side effect SL-23488 - - // BUG? Check for all objects being editable? - bool editable = gAgent.isGodlike() - || (objectp->permModify() && !objectp->isPermanentEnforced() - && ( objectp->permYouOwner() || ( !group_id.isNull() && gAgent.isInGroup(group_id) ))); // solves SL-23488 - bool all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); - - // Edit script button - ok if object is editable and there's an unambiguous destination for the object. - getChildView("button new script")->setEnabled( - editable && - all_volume && - ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1) - || (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1))); - - getChildView("button permissions")->setEnabled(!objectp->isPermanentEnforced()); - mPanelInventoryObject->setEnabled(!objectp->isPermanentEnforced()); -} - -void LLPanelContents::refresh() -{ - const bool children_ok = true; - LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok); - - getState(object); - if (mPanelInventoryObject) - { - mPanelInventoryObject->refresh(); - } -} - -void LLPanelContents::clearContents() -{ - if (mPanelInventoryObject) - { - mPanelInventoryObject->clearInventoryTask(); - } -} - - -// -// Static functions -// - -// static -void LLPanelContents::onClickNewScript(void *userdata) -{ - const bool children_ok = true; - LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok); - if(object) - { - 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, - LLFloaterPerms::getEveryonePerms("Scripts"), - LLFloaterPerms::getGroupPerms("Scripts"), - PERM_MOVE | LLFloaterPerms::getNextOwnerPerms("Scripts")); - std::string desc; - LLViewerAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc); - LLPointer<LLViewerInventoryItem> new_item = - new LLViewerInventoryItem( - LLUUID::null, - LLUUID::null, - perm, - LLUUID::null, - LLAssetType::AT_LSL_TEXT, - LLInventoryType::IT_LSL, - "New Script", - desc, - LLSaleInfo::DEFAULT, - LLInventoryItemFlags::II_FLAGS_NONE, - time_corrected()); - object->saveScript(new_item, true, true); - - std::string name = new_item->getName(); - - // *NOTE: In order to resolve SL-22177, we needed to create - // the script first, and then you have to click it in - // inventory to edit it. - // *TODO: The script creation should round-trip back to the - // viewer so the viewer can auto-open the script and start - // editing ASAP. - } -} - - -// static -void LLPanelContents::onClickPermissions(void *userdata) -{ - LLPanelContents* self = (LLPanelContents*)userdata; - gFloaterView->getParentFloater(self)->addDependentFloater(LLFloaterReg::showInstance("bulk_perms")); -} +/**
+ * @file llpanelcontents.cpp
+ * @brief Object contents panel in the tools floater.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+// file include
+#include "llpanelcontents.h"
+
+// linden library includes
+#include "llerror.h"
+#include "llfloaterreg.h"
+#include "llfontgl.h"
+#include "llinventorydefines.h"
+#include "llmaterialtable.h"
+#include "llpermissionsflags.h"
+#include "llrect.h"
+#include "llstring.h"
+#include "llui.h"
+#include "m3math.h"
+#include "material_codes.h"
+
+// project includes
+#include "llagent.h"
+#include "llpanelobjectinventory.h"
+#include "llpreviewscript.h"
+#include "llresmgr.h"
+#include "llselectmgr.h"
+#include "lltool.h"
+#include "lltoolcomp.h"
+#include "lltoolmgr.h"
+#include "lltrans.h"
+#include "llviewerassettype.h"
+#include "llviewerinventory.h"
+#include "llviewerobject.h"
+#include "llviewerregion.h"
+#include "llviewerwindow.h"
+#include "llworld.h"
+#include "llfloaterperms.h"
+
+//
+// Imported globals
+//
+
+
+//
+// Globals
+//
+const char* LLPanelContents::TENTATIVE_SUFFIX = "_tentative";
+const char* LLPanelContents::PERMS_OWNER_INTERACT_KEY = "perms_owner_interact";
+const char* LLPanelContents::PERMS_OWNER_CONTROL_KEY = "perms_owner_control";
+const char* LLPanelContents::PERMS_GROUP_INTERACT_KEY = "perms_group_interact";
+const char* LLPanelContents::PERMS_GROUP_CONTROL_KEY = "perms_group_control";
+const char* LLPanelContents::PERMS_ANYONE_INTERACT_KEY = "perms_anyone_interact";
+const char* LLPanelContents::PERMS_ANYONE_CONTROL_KEY = "perms_anyone_control";
+
+bool LLPanelContents::postBuild()
+{
+ setMouseOpaque(false);
+
+ childSetAction("button new script",&LLPanelContents::onClickNewScript, this);
+ childSetAction("button permissions",&LLPanelContents::onClickPermissions, this);
+
+ mPanelInventoryObject = getChild<LLPanelObjectInventory>("contents_inventory");
+
+ return true;
+}
+
+LLPanelContents::LLPanelContents()
+ : LLPanel(),
+ mPanelInventoryObject(NULL)
+{
+}
+
+
+LLPanelContents::~LLPanelContents()
+{
+ // Children all cleaned up by default view destructor.
+}
+
+
+void LLPanelContents::getState(LLViewerObject *objectp )
+{
+ if( !objectp )
+ {
+ getChildView("button new script")->setEnabled(false);
+ return;
+ }
+
+ LLUUID group_id; // used for SL-23488
+ LLSelectMgr::getInstance()->selectGetGroup(group_id); // sets group_id as a side effect SL-23488
+
+ // BUG? Check for all objects being editable?
+ bool editable = gAgent.isGodlike()
+ || (objectp->permModify() && !objectp->isPermanentEnforced()
+ && ( objectp->permYouOwner() || ( !group_id.isNull() && gAgent.isInGroup(group_id) ))); // solves SL-23488
+ bool all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
+
+ // Edit script button - ok if object is editable and there's an unambiguous destination for the object.
+ getChildView("button new script")->setEnabled(
+ editable &&
+ all_volume &&
+ ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1)
+ || (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1)));
+
+ getChildView("button permissions")->setEnabled(!objectp->isPermanentEnforced());
+ mPanelInventoryObject->setEnabled(!objectp->isPermanentEnforced());
+}
+
+void LLPanelContents::refresh()
+{
+ const bool children_ok = true;
+ LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok);
+
+ getState(object);
+ if (mPanelInventoryObject)
+ {
+ mPanelInventoryObject->refresh();
+ }
+}
+
+void LLPanelContents::clearContents()
+{
+ if (mPanelInventoryObject)
+ {
+ mPanelInventoryObject->clearInventoryTask();
+ }
+}
+
+
+//
+// Static functions
+//
+
+// static
+void LLPanelContents::onClickNewScript(void *userdata)
+{
+ const bool children_ok = true;
+ LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok);
+ if(object)
+ {
+ 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,
+ LLFloaterPerms::getEveryonePerms("Scripts"),
+ LLFloaterPerms::getGroupPerms("Scripts"),
+ PERM_MOVE | LLFloaterPerms::getNextOwnerPerms("Scripts"));
+ std::string desc;
+ LLViewerAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc);
+ LLPointer<LLViewerInventoryItem> new_item =
+ new LLViewerInventoryItem(
+ LLUUID::null,
+ LLUUID::null,
+ perm,
+ LLUUID::null,
+ LLAssetType::AT_LSL_TEXT,
+ LLInventoryType::IT_LSL,
+ "New Script",
+ desc,
+ LLSaleInfo::DEFAULT,
+ LLInventoryItemFlags::II_FLAGS_NONE,
+ time_corrected());
+ object->saveScript(new_item, true, true);
+
+ std::string name = new_item->getName();
+
+ // *NOTE: In order to resolve SL-22177, we needed to create
+ // the script first, and then you have to click it in
+ // inventory to edit it.
+ // *TODO: The script creation should round-trip back to the
+ // viewer so the viewer can auto-open the script and start
+ // editing ASAP.
+ }
+}
+
+
+// static
+void LLPanelContents::onClickPermissions(void *userdata)
+{
+ LLPanelContents* self = (LLPanelContents*)userdata;
+ gFloaterView->getParentFloater(self)->addDependentFloater(LLFloaterReg::showInstance("bulk_perms"));
+}
|
