summaryrefslogtreecommitdiff
path: root/indra/newview/llviewermenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewermenu.cpp')
-rw-r--r--indra/newview/llviewermenu.cpp554
1 files changed, 266 insertions, 288 deletions
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 7dcc734816..1310fc7d53 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -80,6 +80,7 @@
#include "lldrawpoolalpha.h"
#include "lldrawpooltree.h"
#include "llface.h"
+#include "llfilepicker.h"
#include "llfirstuse.h"
#include "llfirsttimetipmanager.h"
#include "llfloater.h"
@@ -110,6 +111,7 @@
#include "llfloaterlandholdings.h"
#include "llfloatermap.h"
#include "llfloateropenobject.h"
+#include "llfloaterpay.h"
#include "llfloaterperms.h"
#include "llfloaterpostprocess.h"
#include "llfloaterpreference.h"
@@ -128,7 +130,6 @@
#include "llavataractions.h"
#include "lllandmarkactions.h"
#include "llmemoryview.h"
-#include "llgivemoney.h"
#include "llgroupmgr.h"
#include "lltooltip.h"
#include "llhudeffecttrail.h"
@@ -296,8 +297,7 @@ S32 selection_price();
BOOL enable_take();
void handle_take();
bool confirm_take(const LLSD& notification, const LLSD& response);
-BOOL enable_buy(void*);
-void handle_buy(void *);
+
void handle_buy_object(LLSaleInfo sale_info);
void handle_buy_contents(LLSaleInfo sale_info);
@@ -570,6 +570,15 @@ void init_menus()
gAttachSubMenu = gMenuBarView->findChildMenuByName("Attach Object", TRUE);
gDetachSubMenu = gMenuBarView->findChildMenuByName("Detach Object", TRUE);
+#if !MEM_TRACK_MEM
+ // Don't display the Memory console menu if the feature is turned off
+ LLMenuItemCheckGL *memoryMenu = gMenuBarView->getChild<LLMenuItemCheckGL>("Memory", TRUE);
+ if (memoryMenu)
+ {
+ memoryMenu->setVisible(FALSE);
+ }
+#endif
+
gMenuBarView->createJumpKeys();
// Let land based option enable when parcel changes
@@ -2493,12 +2502,10 @@ class LLObjectEnableReportAbuse : public view_listener_t
}
};
-class LLObjectTouch : public view_listener_t
+void handle_object_touch()
{
- bool handleEvent(const LLSD& userdata)
- {
LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- if (!object) return true;
+ if (!object) return;
LLPickInfo pick = LLToolPie::getInstance()->getPick();
@@ -2537,19 +2544,20 @@ class LLObjectTouch : public view_listener_t
msg->addVector3("Normal", pick.mNormal);
msg->addVector3("Binormal", pick.mBinormal);
msg->sendMessage(object->getRegion()->getHost());
+}
- return true;
- }
-};
-
+bool enable_object_touch()
+{
+ LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+ return obj && obj->flagHandleTouch();
+}
// One object must have touch sensor
class LLObjectEnableTouch : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- bool new_value = obj && obj->flagHandleTouch();
+ bool new_value = enable_object_touch();
// Update label based on the node touch name if available.
std::string touch_text;
@@ -2599,23 +2607,18 @@ class LLObjectOpen : public view_listener_t
}
};
*/
-class LLObjectEnableOpen : public view_listener_t
+bool enable_object_open()
{
- bool handleEvent(const LLSD& userdata)
- {
- // Look for contents in root object, which is all the LLFloaterOpenObject
- // understands.
- LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- bool new_value = (obj != NULL);
- if (new_value)
- {
- LLViewerObject* root = obj->getRootEdit();
- if (!root) new_value = false;
- else new_value = root->allowOpen();
- }
- return new_value;
- }
-};
+ // Look for contents in root object, which is all the LLFloaterOpenObject
+ // understands.
+ LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+ if (!obj) return false;
+
+ LLViewerObject* root = obj->getRootEdit();
+ if (!root) return false;
+
+ return root->allowOpen();
+}
class LLViewJoystickFlycam : public view_listener_t
@@ -2669,52 +2672,50 @@ class LLObjectBuild : public view_listener_t
}
};
-class LLObjectEdit : public view_listener_t
+
+void handle_object_edit()
{
- bool handleEvent(const LLSD& userdata)
+ LLViewerParcelMgr::getInstance()->deselectLand();
+
+ if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit())
{
- LLViewerParcelMgr::getInstance()->deselectLand();
+ LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
- if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit())
+ if (selection->getSelectType() == SELECT_TYPE_HUD || !gSavedSettings.getBOOL("EditCameraMovement"))
{
- LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
-
- if (selection->getSelectType() == SELECT_TYPE_HUD || !gSavedSettings.getBOOL("EditCameraMovement"))
- {
- // always freeze camera in space, even if camera doesn't move
- // so, for example, follow cam scripts can't affect you when in build mode
- gAgent.setFocusGlobal(gAgent.calcFocusPositionTargetGlobal(), LLUUID::null);
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
- }
- else
+ // always freeze camera in space, even if camera doesn't move
+ // so, for example, follow cam scripts can't affect you when in build mode
+ gAgent.setFocusGlobal(gAgent.calcFocusPositionTargetGlobal(), LLUUID::null);
+ gAgent.setFocusOnAvatar(FALSE, ANIMATE);
+ }
+ else
+ {
+ gAgent.setFocusOnAvatar(FALSE, ANIMATE);
+ LLViewerObject* selected_objectp = selection->getFirstRootObject();
+ if (selected_objectp)
{
- gAgent.setFocusOnAvatar(FALSE, ANIMATE);
- LLViewerObject* selected_objectp = selection->getFirstRootObject();
- if (selected_objectp)
- {
- // zoom in on object center instead of where we clicked, as we need to see the manipulator handles
- gAgent.setFocusGlobal(selected_objectp->getPositionGlobal(), selected_objectp->getID());
- gAgent.cameraZoomIn(0.666f);
- gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD );
- gViewerWindow->moveCursorToCenter();
+ // zoom in on object center instead of where we clicked, as we need to see the manipulator handles
+ gAgent.setFocusGlobal(selected_objectp->getPositionGlobal(), selected_objectp->getID());
+ gAgent.cameraZoomIn(0.666f);
+ gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD );
+ gViewerWindow->moveCursorToCenter();
}
}
- }
-
- LLFloaterReg::showInstance("build");
-
- LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
- gFloaterTools->setEditTool( LLToolCompTranslate::getInstance() );
-
- LLViewerJoystick::getInstance()->moveObjects(true);
- LLViewerJoystick::getInstance()->setNeedsReset(true);
-
- // Could be first use
- LLFirstUse::useBuild();
- return true;
}
-};
-
+
+ LLFloaterReg::showInstance("build");
+
+ LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
+ gFloaterTools->setEditTool( LLToolCompTranslate::getInstance() );
+
+ LLViewerJoystick::getInstance()->moveObjects(true);
+ LLViewerJoystick::getInstance()->setNeedsReset(true);
+
+ // Could be first use
+ LLFirstUse::useBuild();
+ return;
+
+}
//---------------------------------------------------------------------------
// Land pie menu
//---------------------------------------------------------------------------
@@ -2798,24 +2799,21 @@ BOOL enable_object_build(void*)
return can_build;
}
-class LLEnableEdit : public view_listener_t
+bool enable_object_edit()
{
- bool handleEvent(const LLSD& userdata)
+ // *HACK: The new "prelude" Help Islands have a build sandbox area,
+ // so users need the Edit and Create pie menu options when they are
+ // there. Eventually this needs to be replaced with code that only
+ // lets you edit objects if you have permission to do so (edit perms,
+ // group edit, god). See also lltoolbar.cpp. JC
+ bool enable = true;
+ if (gAgent.inPrelude())
{
- // *HACK: The new "prelude" Help Islands have a build sandbox area,
- // so users need the Edit and Create pie menu options when they are
- // there. Eventually this needs to be replaced with code that only
- // lets you edit objects if you have permission to do so (edit perms,
- // group edit, god). See also lltoolbar.cpp. JC
- bool enable = true;
- if (gAgent.inPrelude())
- {
- enable = LLViewerParcelMgr::getInstance()->agentCanBuild()
- || LLSelectMgr::getInstance()->getSelection()->isAttachment();
- }
- return enable;
+ enable = LLViewerParcelMgr::getInstance()->agentCanBuild()
+ || LLSelectMgr::getInstance()->getSelection()->isAttachment();
}
-};
+ return enable;
+}
class LLSelfRemoveAllAttachments : public view_listener_t
{
@@ -2869,27 +2867,24 @@ BOOL enable_has_attachments(void*)
// }
//}
-class LLObjectEnableMute : public view_listener_t
+bool enable_object_mute()
{
- bool handleEvent(const LLSD& userdata)
+ LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+ bool new_value = (object != NULL);
+ if (new_value)
{
- LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- bool new_value = (object != NULL);
- if (new_value)
+ LLVOAvatar* avatar = find_avatar_from_object(object);
+ if (avatar)
{
- LLVOAvatar* avatar = find_avatar_from_object(object);
- if (avatar)
- {
- // It's an avatar
- LLNameValue *lastname = avatar->getNVPair("LastName");
- BOOL is_linden = lastname && !LLStringUtil::compareStrings(lastname->getString(), "Linden");
- BOOL is_self = avatar->isSelf();
- new_value = !is_linden && !is_self;
- }
+ // It's an avatar
+ LLNameValue *lastname = avatar->getNVPair("LastName");
+ BOOL is_linden = lastname && !LLStringUtil::compareStrings(lastname->getString(), "Linden");
+ BOOL is_self = avatar->isSelf();
+ new_value = !is_linden && !is_self;
}
- return new_value;
}
-};
+ return new_value;
+}
class LLObjectMute : public view_listener_t
{
@@ -3348,36 +3343,29 @@ void append_aggregate(std::string& string, const LLAggregatePermissions& ag_perm
string.append(buffer);
}
-BOOL enable_buy(void*)
+bool enable_buy_object()
{
// In order to buy, there must only be 1 purchaseable object in
// the selection manger.
- if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 1) return FALSE;
+ if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 1) return false;
LLViewerObject* obj = NULL;
LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
if(node)
{
obj = node->getObject();
- if(!obj) return FALSE;
+ if(!obj) return false;
- if(node->mSaleInfo.isForSale() && node->mPermissions->getMaskOwner() & PERM_TRANSFER &&
- (node->mPermissions->getMaskOwner() & PERM_COPY || node->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY))
+ if( for_sale_selection(node) )
{
- if(obj->permAnyOwner()) return TRUE;
+ // *NOTE: Is this needed? This checks to see if anyone owns the
+ // object, dating back to when we had "public" objects owned by
+ // no one. JC
+ if(obj->permAnyOwner()) return true;
}
}
- return FALSE;
+ return false;
}
-class LLObjectEnableBuy : public view_listener_t
-{
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = enable_buy(NULL);
- return new_value;
- }
-};
-
// Note: This will only work if the selected object's data has been
// received by the viewer and cached in the selection manager.
void handle_buy_object(LLSaleInfo sale_info)
@@ -3720,20 +3708,35 @@ class LLEditEnableCustomizeAvatar : public view_listener_t
}
};
+bool enable_sit_object()
+{
+ LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+
+ if (object && object->getPCode() == LL_PCODE_VOLUME)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+
// only works on pie menu
-bool handle_sit_or_stand()
+void handle_object_sit_or_stand()
{
LLPickInfo pick = LLToolPie::getInstance()->getPick();
LLViewerObject *object = pick.getObject();;
if (!object || pick.mPickType == LLPickInfo::PICK_FLORA)
{
- return true;
+ return;
}
if (sitting_on_selection())
{
gAgent.standUp();
- return true;
+ return;
}
// get object selection offset
@@ -3751,17 +3754,8 @@ bool handle_sit_or_stand()
object->getRegion()->sendReliableMessage();
}
- return true;
}
-class LLObjectSitOrStand : public view_listener_t
-{
- bool handleEvent(const LLSD& userdata)
- {
- return handle_sit_or_stand();
- }
-};
-
void near_sit_down_point(BOOL success, void *)
{
if (success)
@@ -4231,18 +4225,14 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
}
}
-class LLToolsTakeCopy : public view_listener_t
+void handle_take_copy()
{
- bool handleEvent(const LLSD& userdata)
- {
- if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true;
-
- const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
- derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id);
+ if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
- return true;
- }
-};
+ LLUUID category_id =
+ gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
+ derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id);
+}
// You can return an object to its owner if it is on your land.
@@ -4488,43 +4478,50 @@ BOOL enable_take()
return FALSE;
}
-class LLToolsBuyOrTake : public view_listener_t
+
+void handle_buy_or_take()
{
- bool handleEvent(const LLSD& userdata)
+ if (LLSelectMgr::getInstance()->getSelection()->isEmpty())
{
- if (LLSelectMgr::getInstance()->getSelection()->isEmpty())
- {
- return true;
- }
+ return;
+ }
- if (is_selection_buy_not_take())
- {
- S32 total_price = selection_price();
+ if (is_selection_buy_not_take())
+ {
+ S32 total_price = selection_price();
- if (total_price <= gStatusBar->getBalance() || total_price == 0)
- {
- handle_buy(NULL);
- }
- else
- {
- LLFloaterBuyCurrency::buyCurrency(
- "Buying this costs", total_price);
- }
+ if (total_price <= gStatusBar->getBalance() || total_price == 0)
+ {
+ handle_buy();
}
else
{
- handle_take();
+ LLFloaterBuyCurrency::buyCurrency(
+ "Buying this costs", total_price);
}
- return true;
}
-};
+ else
+ {
+ handle_take();
+ }
+}
+
+bool visible_buy_object()
+{
+ return is_selection_buy_not_take() && enable_buy_object();
+}
+
+bool visible_take_object()
+{
+ return !is_selection_buy_not_take() && enable_take();
+}
class LLToolsEnableBuyOrTake : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
bool is_buy = is_selection_buy_not_take();
- bool new_value = is_buy ? enable_buy(NULL) : enable_take();
+ bool new_value = is_buy ? enable_buy_object() : enable_take();
// Update label
std::string label;
@@ -4635,7 +4632,7 @@ void show_buy_currency(const char* extra)
LLNotifications::instance().add("PromptGoToCurrencyPage", args);//, LLSD(), callback_show_buy_currency);
}
-void handle_buy(void*)
+void handle_buy()
{
if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
@@ -4653,14 +4650,20 @@ void handle_buy(void*)
}
}
-class LLObjectBuy : public view_listener_t
+bool anyone_copy_selection(LLSelectNode* nodep)
{
- bool handleEvent(const LLSD& userdata)
- {
- handle_buy(NULL);
- return true;
- }
-};
+ bool perm_copy = (bool)(nodep->getObject()->permCopy());
+ bool all_copy = (bool)(nodep->mPermissions->getMaskEveryone() & PERM_COPY);
+ return perm_copy && all_copy;
+}
+
+bool for_sale_selection(LLSelectNode* nodep)
+{
+ return nodep->mSaleInfo.isForSale()
+ && nodep->mPermissions->getMaskOwner() & PERM_TRANSFER
+ && (nodep->mPermissions->getMaskOwner() & PERM_COPY
+ || nodep->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY);
+}
BOOL sitting_on_selection()
{
@@ -4988,28 +4991,24 @@ class LLEditDelete : public view_listener_t
}
};
-class LLObjectEnableDelete : public view_listener_t
+bool enable_object_delete()
{
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value =
+ bool new_value =
#ifdef HACKED_GODLIKE_VIEWER
- TRUE;
+ TRUE;
#else
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- (!LLViewerLogin::getInstance()->isInProductionGrid()
- && gAgent.isGodlike()) ||
+ (!LLViewerLogin::getInstance()->isInProductionGrid()
+ && gAgent.isGodlike()) ||
# endif
- LLSelectMgr::getInstance()->canDoDelete();
+ LLSelectMgr::getInstance()->canDoDelete();
#endif
- return new_value;
- }
-};
+ return new_value;
+}
-class LLObjectDelete : public view_listener_t
+void handle_object_delete()
{
- bool handleEvent(const LLSD& userdata)
- {
+
if (LLSelectMgr::getInstance())
{
LLSelectMgr::getInstance()->doDelete();
@@ -5021,9 +5020,8 @@ class LLObjectDelete : public view_listener_t
// When deleting an object we may not actually be done
// Keep selection so we know what to delete when confirmation is needed about the delete
gPieObject->hide();
- return true;
- }
-};
+ return;
+}
void handle_force_delete(void*)
{
@@ -5380,29 +5378,6 @@ class LLToolsLookAtSelection : public view_listener_t
}
};
-void callback_invite_to_group(LLUUID group_id, LLUUID dest_id)
-{
- std::vector<LLUUID> agent_ids;
- agent_ids.push_back(dest_id);
-
- LLFloaterGroupInvite::showForGroup(group_id, &agent_ids);
-}
-
-void invite_to_group(const LLUUID& dest_id)
-{
- LLViewerObject* dest = gObjectList.findObject(dest_id);
- if(dest && dest->isAvatar())
- {
- LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(gAgent.getID()));
- if (widget)
- {
- widget->center();
- widget->setPowersMask(GP_MEMBER_INVITE);
- widget->setSelectGroupCallback(boost::bind(callback_invite_to_group, _1, dest_id));
- }
- }
-}
-
class LLAvatarInviteToGroup : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -5410,7 +5385,7 @@ class LLAvatarInviteToGroup : public view_listener_t
LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
if(avatar)
{
- invite_to_group(avatar->getID());
+ LLAvatarActions::inviteToGroup(avatar->getID());
}
return true;
}
@@ -5442,7 +5417,7 @@ class LLAvatarAddContact : public view_listener_t
}
};
-bool complete_give_money(const LLSD& notification, const LLSD& response, LLObjectSelectionHandle handle)
+bool complete_give_money(const LLSD& notification, const LLSD& response, LLObjectSelectionHandle selection)
{
S32 option = LLNotification::getSelectedOption(notification, response);
if (option == 0)
@@ -5450,7 +5425,7 @@ bool complete_give_money(const LLSD& notification, const LLSD& response, LLObjec
gAgent.clearBusy();
}
- LLViewerObject* objectp = handle->getPrimaryObject();
+ LLViewerObject* objectp = selection->getPrimaryObject();
// Show avatar's name if paying attachment
if (objectp && objectp->isAttachment())
@@ -5465,20 +5440,20 @@ bool complete_give_money(const LLSD& notification, const LLSD& response, LLObjec
{
if (objectp->isAvatar())
{
- const BOOL is_group = FALSE;
- LLFloaterPay::payDirectly(&give_money,
+ const bool is_group = false;
+ LLFloaterPayUtil::payDirectly(&give_money,
objectp->getID(),
is_group);
}
else
{
- LLFloaterPay::payViaObject(&give_money, objectp->getID());
+ LLFloaterPayUtil::payViaObject(&give_money, selection);
}
}
return false;
}
-bool handle_give_money_dialog()
+void handle_give_money_dialog()
{
LLNotification::Params params("BusyModePay");
params.functor.function(boost::bind(complete_give_money, _1, _2, LLSelectMgr::getInstance()->getSelection()));
@@ -5492,38 +5467,28 @@ bool handle_give_money_dialog()
{
LLNotifications::instance().forceResponse(params, 1);
}
- return true;
}
-class LLPayObject : public view_listener_t
+bool enable_pay_avatar()
{
- bool handleEvent(const LLSD& userdata)
- {
- return handle_give_money_dialog();
- }
-};
+ LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+ LLVOAvatar* avatar = find_avatar_from_object(obj);
+ return (avatar != NULL);
+}
-class LLEnablePayObject : public view_listener_t
+bool enable_pay_object()
{
- bool handleEvent(const LLSD& userdata)
+ LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+ if( object )
{
- LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
- bool new_value = (avatar != NULL);
- if (!new_value)
+ LLViewerObject *parent = (LLViewerObject *)object->getParent();
+ if((object->flagTakesMoney()) || (parent && parent->flagTakesMoney()))
{
- LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- if( object )
- {
- LLViewerObject *parent = (LLViewerObject *)object->getParent();
- if((object->flagTakesMoney()) || (parent && parent->flagTakesMoney()))
- {
- new_value = true;
- }
- }
+ return true;
}
- return new_value;
}
-};
+ return false;
+}
class LLObjectEnableSitOrStand : public view_listener_t
{
@@ -6160,7 +6125,7 @@ class LLAttachmentEnableDetach : public view_listener_t
};
// Used to tell if the selected object can be attached to your avatar.
-BOOL object_selected_and_point_valid(const LLSD&)
+BOOL object_selected_and_point_valid()
{
LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
for (LLObjectSelection::root_iterator iter = selection->root_begin();
@@ -6190,7 +6155,7 @@ BOOL object_selected_and_point_valid(const LLSD&)
BOOL object_is_wearable()
{
- if (!object_selected_and_point_valid(LLSD()))
+ if (!object_selected_and_point_valid())
{
return FALSE;
}
@@ -6212,15 +6177,6 @@ BOOL object_is_wearable()
}
-// Also for seeing if object can be attached. See above.
-class LLObjectEnableWear : public view_listener_t
-{
- bool handleEvent(const LLSD& userdata)
- {
- return object_selected_and_point_valid(LLSD());
- }
-};
-
class LLAttachmentPointFilled : public view_listener_t
{
bool handleEvent(const LLSD& user_data)
@@ -6567,40 +6523,37 @@ class LLEditableSelectedMono : public view_listener_t
}
};
-class LLToolsEnableTakeCopy : public view_listener_t
+bool enable_object_take_copy()
{
- bool handleEvent(const LLSD& userdata)
+ bool all_valid = false;
+ if (LLSelectMgr::getInstance())
{
- bool all_valid = false;
- if (LLSelectMgr::getInstance())
+ if (!LLSelectMgr::getInstance()->getSelection()->isEmpty())
{
- if (!LLSelectMgr::getInstance()->getSelection()->isEmpty())
- {
- all_valid = true;
+ all_valid = true;
#ifndef HACKED_GODLIKE_VIEWER
# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- if (LLViewerLogin::getInstance()->isInProductionGrid()
- || !gAgent.isGodlike())
+ if (LLViewerLogin::getInstance()->isInProductionGrid()
+ || !gAgent.isGodlike())
# endif
+ {
+ struct f : public LLSelectedObjectFunctor
{
- struct f : public LLSelectedObjectFunctor
+ virtual bool apply(LLViewerObject* obj)
{
- virtual bool apply(LLViewerObject* obj)
- {
- return (!obj->permCopy() || obj->isAttachment());
- }
- } func;
- const bool firstonly = true;
- bool any_invalid = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);
- all_valid = !any_invalid;
- }
-#endif // HACKED_GODLIKE_VIEWER
+ return (!obj->permCopy() || obj->isAttachment());
+ }
+ } func;
+ const bool firstonly = true;
+ bool any_invalid = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);
+ all_valid = !any_invalid;
}
+#endif // HACKED_GODLIKE_VIEWER
}
-
- return all_valid;
}
-};
+
+ return all_valid;
+}
class LLHasAsset : public LLInventoryCollectFunctor
@@ -7704,13 +7657,14 @@ void initialize_menus()
LLUICtrl::EnableCallbackRegistry::Registrar& enable = LLUICtrl::EnableCallbackRegistry::currentRegistrar();
LLUICtrl::CommitCallbackRegistry::Registrar& commit = LLUICtrl::CommitCallbackRegistry::currentRegistrar();
+ LLUICtrl::VisibleCallbackRegistry::Registrar& visible = LLUICtrl::VisibleCallbackRegistry::currentRegistrar();
// Enable God Mode
view_listener_t::addMenu(new LLEnableGodCustomerService(), "EnableGodCustomerService");
// Agent
commit.add("Agent.toggleFlying", boost::bind(&LLAgent::toggleFlying));
- enable.add("Agent.emableFlying", boost::bind(&LLAgent::enableFlying));
+ enable.add("Agent.enableFlying", boost::bind(&LLAgent::enableFlying));
// File menu
init_menu_file();
@@ -7804,8 +7758,8 @@ void initialize_menus()
view_listener_t::addMenu(new LLToolsReleaseKeys(), "Tools.ReleaseKeys");
view_listener_t::addMenu(new LLToolsEnableReleaseKeys(), "Tools.EnableReleaseKeys");
view_listener_t::addMenu(new LLToolsLookAtSelection(), "Tools.LookAtSelection");
- view_listener_t::addMenu(new LLToolsBuyOrTake(), "Tools.BuyOrTake");
- view_listener_t::addMenu(new LLToolsTakeCopy(), "Tools.TakeCopy");
+ commit.add("Tools.BuyOrTake", boost::bind(&handle_buy_or_take));
+ commit.add("Tools.TakeCopy", boost::bind(&handle_take_copy));
view_listener_t::addMenu(new LLToolsSaveToInventory(), "Tools.SaveToInventory");
view_listener_t::addMenu(new LLToolsSaveToObjectInventory(), "Tools.SaveToObjectInventory");
view_listener_t::addMenu(new LLToolsSelectedScriptAction(), "Tools.SelectedScriptAction");
@@ -7814,7 +7768,8 @@ void initialize_menus()
view_listener_t::addMenu(new LLToolsEnableLink(), "Tools.EnableLink");
view_listener_t::addMenu(new LLToolsEnableUnlink(), "Tools.EnableUnlink");
view_listener_t::addMenu(new LLToolsEnableBuyOrTake(), "Tools.EnableBuyOrTake");
- view_listener_t::addMenu(new LLToolsEnableTakeCopy(), "Tools.EnableTakeCopy");
+ visible.add("Tools.VisibleTakeCopy", boost::bind(&enable_object_take_copy));
+ enable.add("Tools.EnableTakeCopy", boost::bind(&enable_object_take_copy));
view_listener_t::addMenu(new LLToolsEnableSaveToInventory(), "Tools.EnableSaveToInventory");
view_listener_t::addMenu(new LLToolsEnableSaveToObjectInventory(), "Tools.EnableSaveToObjectInventory");
@@ -8015,31 +7970,51 @@ void initialize_menus()
view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
view_listener_t::addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse");
- view_listener_t::addMenu(new LLObjectEnableMute(), "Avatar.EnableMute");
view_listener_t::addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend");
view_listener_t::addMenu(new LLAvatarEnableFreezeEject(), "Avatar.EnableFreezeEject");
// Object pie menu
view_listener_t::addMenu(new LLObjectBuild(), "Object.Build");
- view_listener_t::addMenu(new LLObjectTouch(), "Object.Touch");
- view_listener_t::addMenu(new LLObjectSitOrStand(), "Object.SitOrStand");
- view_listener_t::addMenu(new LLObjectDelete(), "Object.Delete");
+ commit.add("Object.Touch", boost::bind(&handle_object_touch));
+ commit.add("Object.SitOrStand", boost::bind(&handle_object_sit_or_stand));
+ visible.add("Object.EnableSit", boost::bind(&enable_sit_object));
+ commit.add("Object.Delete", boost::bind(&handle_object_delete));
view_listener_t::addMenu(new LLObjectAttachToAvatar(), "Object.AttachToAvatar");
view_listener_t::addMenu(new LLObjectReturn(), "Object.Return");
view_listener_t::addMenu(new LLObjectReportAbuse(), "Object.ReportAbuse");
view_listener_t::addMenu(new LLObjectMute(), "Object.Mute");
- view_listener_t::addMenu(new LLObjectBuy(), "Object.Buy");
- view_listener_t::addMenu(new LLObjectEdit(), "Object.Edit");
- view_listener_t::addMenu(new LLObjectEnableOpen(), "Object.EnableOpen");
+ visible.add("Object.VisibleTake", boost::bind(&visible_take_object));
+ visible.add("Object.VisibleBuy", boost::bind(&visible_buy_object));
+
+ commit.add("Object.Buy", boost::bind(&handle_buy));
+ commit.add("Object.Edit", boost::bind(&handle_object_edit));
+
+ commit.add("Object.Take", boost::bind(&handle_take));
+
+ enable.add("Object.EnableOpen", boost::bind(&enable_object_open));
+ visible.add("Object.VisibleOpen", boost::bind(&enable_object_open));
+
+ enable.add("Object.EnableTouch", boost::bind(&enable_object_touch));
+ visible.add("Object.VisibleTouch", boost::bind(&enable_object_touch));
+
view_listener_t::addMenu(new LLObjectEnableTouch(), "Object.EnableTouch");
view_listener_t::addMenu(new LLObjectEnableSitOrStand(), "Object.EnableSitOrStand");
- view_listener_t::addMenu(new LLObjectEnableDelete(), "Object.EnableDelete");
- view_listener_t::addMenu(new LLObjectEnableWear(), "Object.EnableWear");
+
+ enable.add("Object.EnableDelete", boost::bind(&enable_object_delete));
+ visible.add("Object.VisibleDelete", boost::bind(&enable_object_delete));
+
+ enable.add("Object.EnableWear", boost::bind(&object_selected_and_point_valid));
+ visible.add("Object.VisibleWear", boost::bind(&object_selected_and_point_valid));
+
view_listener_t::addMenu(new LLObjectEnableReturn(), "Object.EnableReturn");
view_listener_t::addMenu(new LLObjectEnableReportAbuse(), "Object.EnableReportAbuse");
- view_listener_t::addMenu(new LLObjectEnableMute(), "Object.EnableMute");
- view_listener_t::addMenu(new LLObjectEnableBuy(), "Object.EnableBuy");
+
+ enable.add("Avatar.EnableMute", boost::bind(&enable_object_mute));
+ enable.add("Object.EnableMute", boost::bind(&enable_object_mute));
+ visible.add("Object.VisibleMute", boost::bind(&enable_object_mute));
+
+ enable.add("Object.EnableBuy", boost::bind(&enable_buy_object));
/*view_listener_t::addMenu(new LLObjectVisibleTouch(), "Object.VisibleTouch");
view_listener_t::addMenu(new LLObjectVisibleCustomTouch(), "Object.VisibleCustomTouch");
@@ -8071,10 +8046,13 @@ void initialize_menus()
view_listener_t::addMenu(new LLToggleControl(), "ToggleControl");
view_listener_t::addMenu(new LLCheckControl(), "CheckControl");
view_listener_t::addMenu(new LLGoToObject(), "GoToObject");
- view_listener_t::addMenu(new LLPayObject(), "PayObject");
+ commit.add("PayObject", boost::bind(&handle_give_money_dialog));
- view_listener_t::addMenu(new LLEnablePayObject(), "EnablePayObject");
- view_listener_t::addMenu(new LLEnableEdit(), "EnableEdit");
+ enable.add("EnablePayObject", boost::bind(&enable_pay_object));
+ visible.add("VisiblePayObject", boost::bind(&enable_pay_object));
+ enable.add("EnablePayAvatar", boost::bind(&enable_pay_avatar));
+ enable.add("EnableEdit", boost::bind(&enable_object_edit));
+ visible.add("Object.VisibleEdit", boost::bind(&enable_object_edit));
view_listener_t::addMenu(new LLFloaterVisible(), "FloaterVisible");
view_listener_t::addMenu(new LLSomethingSelected(), "SomethingSelected");