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.cpp447
1 files changed, 223 insertions, 224 deletions
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 838bf68f3d..9b6fc425fa 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -420,9 +420,6 @@ BOOL get_visibility(void*);
void request_friendship(const LLUUID& agent_id);
// Tools menu
-void handle_first_tool(void*);
-void handle_next_tool(void*);
-void handle_previous_tool(void*);
void handle_force_unlock(void*);
void handle_selected_texture_info(void*);
void handle_dump_image_list(void*);
@@ -980,6 +977,7 @@ void init_debug_ui_menu(LLMenuGL* menu)
menu->append(new LLMenuItemToggleGL("Debug SelectMgr", &gDebugSelectMgr));
menu->append(new LLMenuItemToggleGL("Debug Clicks", &gDebugClicks));
menu->append(new LLMenuItemToggleGL("Debug Views", &LLView::sDebugRects));
+ menu->append(new LLMenuItemCheckGL("Show Name Tooltips", toggle_show_xui_names, NULL, check_show_xui_names, NULL));
menu->append(new LLMenuItemToggleGL("Debug Mouse Events", &LLView::sDebugMouseHandling));
menu->append(new LLMenuItemToggleGL("Debug Keys", &LLView::sDebugKeys));
menu->append(new LLMenuItemToggleGL("Debug WindowProc", &gDebugWindowProc));
@@ -1427,7 +1425,7 @@ class LLObjectRateOwner : public view_listener_t
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
// Don't allow rating of group owned objects.
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
if (!node) return true;
if (node->mPermissions->isGroupOwned())
{
@@ -1517,12 +1515,13 @@ class LLObjectEnableReportAbuse : public view_listener_t
BOOL enable_attach(void*)
{
// All root objects must be owned by agent.
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
BOOL rv = FALSE;
- LLViewerObject* obj = gSelectMgr->getFirstRootObject();
+ LLViewerObject* obj = selection->getFirstRootObject();
if(obj)
{
rv = TRUE;
- for(obj = gSelectMgr->getFirstRootObject() ; obj != NULL; obj = gSelectMgr->getNextRootObject())
+ for(obj = selection->getFirstRootObject() ; obj != NULL; obj = selection->getNextRootObject())
{
for (U32 child_num = 0; child_num < obj->mChildList.size(); child_num++ )
{
@@ -1572,7 +1571,6 @@ class LLObjectTouch : public view_listener_t
msg->addU32Fast(_PREHASH_LocalID, object->mLocalID);
msg->sendMessage(object->getRegion()->getHost());
- gSelectMgr->deselectTransient();
return true;
}
};
@@ -1588,7 +1586,7 @@ class LLObjectEnableTouch : public view_listener_t
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
// Update label based on the node touch name if available.
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
if (node && node->mValid && !node->mTouchName.empty())
{
gMenuHolder->childSetText("Object Touch", node->mTouchName);
@@ -1604,7 +1602,7 @@ class LLObjectEnableTouch : public view_listener_t
void label_touch(LLString& label, void*)
{
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
if (node && node->mValid && !node->mTouchName.empty())
{
label.assign(node->mTouchName);
@@ -1620,8 +1618,6 @@ bool handle_object_open()
LLViewerObject* obj = gObjectList.findObject(gLastHitObjectID);
if(!obj) return true;
- // transient selection must be made permanent
- gSelectMgr->convertTransient();
LLFloaterOpenObject::show();
return true;
}
@@ -1682,8 +1678,8 @@ bool toggle_build_mode()
gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD );
}
- gCurrentToolset = gBasicToolset;
- gCurrentToolset->selectTool( gToolCreate );
+ gToolMgr->setCurrentToolset(gBasicToolset);
+ gToolMgr->getCurrentToolset()->selectTool( gToolCreate );
// Could be first use
LLFirstUse::useBuild();
@@ -1719,8 +1715,8 @@ class LLObjectBuild : public view_listener_t
gViewerWindow->moveCursorToCenter();
}
- gCurrentToolset = gBasicToolset;
- gCurrentToolset->selectTool( gToolCreate );
+ gToolMgr->setCurrentToolset(gBasicToolset);
+ gToolMgr->getCurrentToolset()->selectTool( gToolCreate );
// Could be first use
LLFirstUse::useBuild();
@@ -1733,12 +1729,12 @@ class LLObjectEdit : public view_listener_t
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
gParcelMgr->deselectLand();
- // convert transient selections to permanent
- gSelectMgr->convertTransient();
if (gAgent.getFocusOnAvatar() && !gToolMgr->inEdit())
{
- if (gSelectMgr->getSelectType() == SELECT_TYPE_HUD || !gSavedSettings.getBOOL("EditCameraMovement"))
+ LLObjectSelectionHandle selection = gSelectMgr->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
@@ -1758,7 +1754,7 @@ class LLObjectEdit : public view_listener_t
gFloaterTools->open(); /* Flawfinder: ignore */
- gCurrentToolset = gBasicToolset;
+ gToolMgr->setCurrentToolset(gBasicToolset);
gFloaterTools->setEditTool( gToolTranslate );
// Could be first use
@@ -1771,7 +1767,6 @@ class LLObjectInspect : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- gSelectMgr->convertTransient();
LLFloaterInspect::show();
return true;
}
@@ -1804,8 +1799,8 @@ class LLLandBuild : public view_listener_t
}
- gCurrentToolset = gBasicToolset;
- gCurrentToolset->selectTool( gToolCreate );
+ gToolMgr->setCurrentToolset(gBasicToolset);
+ gToolMgr->getCurrentToolset()->selectTool( gToolCreate );
// Could be first use
LLFirstUse::useBuild();
@@ -1974,7 +1969,7 @@ class LLObjectMute : public view_listener_t
// it's an object
id = object->getID();
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
if (node)
{
name = node->mName;
@@ -1994,7 +1989,6 @@ class LLObjectMute : public view_listener_t
gFloaterMute->show();
}
- gSelectMgr->deselectAll();
return true;
}
};
@@ -2012,9 +2006,6 @@ bool handle_go_to()
strings.push_back(val);
send_generic_message("autopilot", strings);
- // Don't select anything
- gSelectMgr->deselectTransient();
-
gParcelMgr->deselectLand();
if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera"))
@@ -2359,9 +2350,9 @@ BOOL enable_buy(void*)
{
// In order to buy, there must only be 1 purchaseable object in
// the selection manger.
- if(gSelectMgr->getRootObjectCount() != 1) return FALSE;
+ if(gSelectMgr->getSelection()->getRootObjectCount() != 1) return FALSE;
LLViewerObject* obj = NULL;
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
if(node)
{
obj = node->getObject();
@@ -2422,14 +2413,12 @@ void handle_buy_object(LLSaleInfo sale_info)
return;
}
- gSelectMgr->convertTransient();
LLFloaterBuy::show(sale_info);
}
void handle_buy_contents(LLSaleInfo sale_info)
{
- gSelectMgr->convertTransient();
LLFloaterBuyContents::show(sale_info);
}
@@ -2772,7 +2761,6 @@ bool handle_sit_or_stand()
if (sitting_on_selection())
{
gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
- gSelectMgr->deselectTransient();
return true;
}
@@ -2793,8 +2781,6 @@ bool handle_sit_or_stand()
gMessageSystem->addVector3Fast(_PREHASH_Offset, offset_single);
object->getRegion()->sendReliableMessage();
-
- gSelectMgr->deselectTransient();
}
return true;
}
@@ -2809,11 +2795,14 @@ class LLObjectSitOrStand : public view_listener_t
void near_sit_down_point(BOOL success, void *)
{
- gAgent.setFlying(FALSE);
- gAgent.setControlFlags(AGENT_CONTROL_SIT_ON_GROUND);
+ if (success)
+ {
+ gAgent.setFlying(FALSE);
+ gAgent.setControlFlags(AGENT_CONTROL_SIT_ON_GROUND);
- // Might be first sit
- LLFirstUse::useSit();
+ // Might be first sit
+ LLFirstUse::useSit();
+ }
}
class LLLandSit : public view_listener_t
@@ -3153,13 +3142,12 @@ void reset_view_final( BOOL proceed, void* )
gAgent.changeCameraToDefault();
gAgent.resetView(!gFloaterTools->getVisible());
+ gFloaterTools->close();
gViewerWindow->showCursor();
// Switch back to basic toolset
- gCurrentToolset = gBasicToolset;
- gBasicToolset->selectFirstTool();
- gToolMgr->useSelectedTool( gBasicToolset );
+ gToolMgr->setCurrentToolset(gBasicToolset);
}
class LLViewLookAtLastChatter : public view_listener_t
@@ -3232,7 +3220,7 @@ class LLEditEnableDuplicate : public view_listener_t
void disabled_duplicate(void*)
{
- if (gSelectMgr->getFirstObject())
+ if (gSelectMgr->getSelection()->getFirstObject())
{
LLNotifyBox::showXml("CopyFailed");
}
@@ -3262,7 +3250,7 @@ void handle_deed_object_to_group(void*)
BOOL enable_deed_object_to_group(void*)
{
- if(gSelectMgr->isEmpty()) return FALSE;
+ if(gSelectMgr->getSelection()->isEmpty()) return FALSE;
LLPermissions perm;
LLUUID group_id;
@@ -3321,8 +3309,8 @@ void handle_object_owner_permissive(void*)
if(gAgent.isGodlike())
{
// do the objects.
- gSelectMgr->setObjectPermissions(PERM_BASE, TRUE, PERM_ALL, TRUE);
- gSelectMgr->setObjectPermissions(PERM_OWNER, TRUE, PERM_ALL, TRUE);
+ gSelectMgr->selectionSetObjectPermissions(PERM_BASE, TRUE, PERM_ALL, TRUE);
+ gSelectMgr->selectionSetObjectPermissions(PERM_OWNER, TRUE, PERM_ALL, TRUE);
}
}
@@ -3338,7 +3326,7 @@ void handle_object_owner_self(void*)
// Shortcut to set owner permissions to not editable.
void handle_object_lock(void*)
{
- gSelectMgr->setObjectPermissions(PERM_OWNER, FALSE, PERM_MODIFY);
+ gSelectMgr->selectionSetObjectPermissions(PERM_OWNER, FALSE, PERM_MODIFY);
}
void handle_object_asset_ids(void*)
@@ -3490,8 +3478,9 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
}
//gInventoryView->setPanelOpen(TRUE);
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
LLViewerObject* object = NULL;
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = selection->getFirstRootNode();
if(!node) return;
object = node->getObject();
if(!object) return;
@@ -3502,7 +3491,7 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
// everything that we'll actually be derezzing.
LLDynamicArray<LLViewerObject*> derez_objects;
BOOL can_derez_current;
- for( ; node != NULL; node = gSelectMgr->getNextRootNode())
+ for( ; node != NULL; node = selection->getNextRootNode())
{
object = node->getObject();
if(!object || !node->mValid) continue;
@@ -3636,42 +3625,47 @@ class LLToolsTakeCopy : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- if (gSelectMgr->isEmpty()) return true;
+ if (gSelectMgr->getSelection()->isEmpty()) return true;
const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id);
- // Only deselect if we're not building
- if (!gToolMgr->inEdit())
- {
- gSelectMgr->deselectTransient();
- }
return true;
}
};
-void callback_return_to_owner(S32 option, void* data)
-{
- if (0 == option)
- {
- // Ignore category ID for this derez destination.
- derez_objects(DRD_RETURN_TO_OWNER, LLUUID::null);
- }
-}
-
// You can return an object to its owner if it is on your land.
class LLObjectReturn : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- if (gSelectMgr->isEmpty()) return true;
+ if (gSelectMgr->getSelection()->isEmpty()) return true;
+
+ mObjectSelection = gSelectMgr->getEditSelection();
gViewerWindow->alertXml("ReturnToOwner",
- callback_return_to_owner,
- NULL);
+ onReturnToOwner,
+ (void*)this);
return true;
}
+
+ static void onReturnToOwner(S32 option, void* data)
+ {
+ LLObjectReturn* object_return = (LLObjectReturn*)data;
+
+ if (0 == option)
+ {
+ // Ignore category ID for this derez destination.
+ derez_objects(DRD_RETURN_TO_OWNER, LLUUID::null);
+ }
+
+ // drop reference to current selection
+ object_return->mObjectSelection = NULL;
+ }
+
+protected:
+ LLObjectSelectionHandle mObjectSelection;
};
@@ -3701,10 +3695,11 @@ class LLObjectEnableReturn : public view_listener_t
}
else
{
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
LLViewerObject* obj = NULL;
- for(obj = gSelectMgr->getFirstRootObject();
+ for(obj = selection->getFirstRootObject();
obj;
- obj = gSelectMgr->getNextRootObject())
+ obj = selection->getNextRootObject())
{
if (obj->isOverAgentOwnedLand()
|| obj->isOverGroupOwnedLand()
@@ -3725,22 +3720,16 @@ class LLObjectEnableReturn : public view_listener_t
void force_take_copy(void*)
{
- if (gSelectMgr->isEmpty()) return;
+ if (gSelectMgr->getSelection()->isEmpty()) return;
const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT);
derez_objects(DRD_FORCE_TO_GOD_INVENTORY, category_id);
-
- // Only deselect if we're not building
- if (!gToolMgr->inEdit())
- {
- gSelectMgr->deselectTransient();
- }
}
#ifdef _CORY_TESTING
void force_export_copy(void*)
{
LLViewerObject* object = NULL;
- LLSelectNode* node = gSelectMgr->getFirstNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstNode();
if(!node) return;
object = node->getObject();
if(!object) return;
@@ -3761,7 +3750,7 @@ void force_export_copy(void*)
S32 object_index = 0;
- for( ; node != NULL; node = gSelectMgr->getNextNode())
+ for( ; node != NULL; node = gSelectMgr->getSelection()->getNextNode())
{
object = node->getObject();
if(!object || !node->mValid)
@@ -4090,16 +4079,16 @@ void handle_take()
{
// we want to use the folder this was derezzed from if it's
// available. Otherwise, derez to the normal place.
- if(gSelectMgr->isEmpty()) return;
+ if(gSelectMgr->getSelection()->isEmpty()) return;
LLSelectNode* node = NULL;
LLViewerObject* object = NULL;
BOOL you_own_everything = TRUE;
BOOL locked_but_takeable_object = FALSE;
LLUUID category_id;
- for(node = gSelectMgr->getFirstRootNode();
+ for(node = gSelectMgr->getSelection()->getFirstRootNode();
node != NULL;
- node = gSelectMgr->getNextRootNode())
+ node = gSelectMgr->getSelection()->getNextRootNode())
{
object = node->getObject();
if(object)
@@ -4222,9 +4211,9 @@ BOOL enable_take()
}
LLViewerObject* object = NULL;
- for(LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ for(LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
node != NULL;
- node = gSelectMgr->getNextRootNode())
+ node = gSelectMgr->getSelection()->getNextRootNode())
{
object = node->getObject();
if(!object || !node->mValid) continue;
@@ -4258,7 +4247,7 @@ class LLToolsBuyOrTake : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- if (gSelectMgr->isEmpty())
+ if (gSelectMgr->getSelection()->isEmpty())
{
return true;
}
@@ -4338,9 +4327,9 @@ class LLToolsEnableBuyOrTake : public view_listener_t
BOOL is_selection_buy_not_take()
{
LLViewerObject* obj = NULL;
- for(LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ for(LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
node != NULL;
- node = gSelectMgr->getNextRootNode())
+ node = gSelectMgr->getSelection()->getNextRootNode())
{
obj = node->getObject();
if(obj && !(obj->permYouOwner()) && (node->mSaleInfo.isForSale()))
@@ -4357,9 +4346,9 @@ S32 selection_price()
{
LLViewerObject* obj = NULL;
S32 total_price = 0;
- for(LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ for(LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
node != NULL;
- node = gSelectMgr->getNextRootNode())
+ node = gSelectMgr->getSelection()->getNextRootNode())
{
obj = node->getObject();
if(obj && !(obj->permYouOwner()) && (node->mSaleInfo.isForSale()))
@@ -4408,7 +4397,7 @@ void handle_buy_currency(void*)
void handle_buy(void*)
{
- if (gSelectMgr->isEmpty()) return;
+ if (gSelectMgr->getSelection()->isEmpty()) return;
LLSaleInfo sale_info;
BOOL valid = gSelectMgr->selectGetSaleInfo(sale_info);
@@ -4435,7 +4424,7 @@ class LLObjectBuy : public view_listener_t
BOOL sitting_on_selection()
{
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
if (!node)
{
return FALSE;
@@ -4480,7 +4469,7 @@ class LLToolsSaveToObjectInventory : public view_listener_t
{
if(gSelectMgr)
{
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
if(node && (node->mValid) && (!node->mFromTaskID.isNull()))
{
// *TODO: check to see if the fromtaskid object exists.
@@ -4499,9 +4488,10 @@ class LLToolsSnapObjectXY : public view_listener_t
F64 snap_size = (F64)gSavedSettings.getF32("GridResolution");
LLViewerObject* obj;
- for (obj = gSelectMgr->getFirstRootObject();
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ for (obj = selection->getFirstRootObject();
obj != NULL;
- obj = gSelectMgr->getNextRootObject())
+ obj = selection->getNextRootObject())
{
if (obj->permModify())
{
@@ -4557,11 +4547,12 @@ class LLToolsEnableLink : public view_listener_t
// in component mode, can't link
if (gSavedSettings.getBOOL("SelectLinkedSet"))
{
- if(gSelectMgr->selectGetAllRootsValid() && gSelectMgr->getRootObjectCount() >= 2)
+ if(gSelectMgr->selectGetAllRootsValid() && gSelectMgr->getSelection()->getRootObjectCount() >= 2)
{
- for(LLViewerObject* object = gSelectMgr->getFirstRootObject();
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ for(LLViewerObject* object = selection->getFirstRootObject();
object != NULL;
- object = gSelectMgr->getNextRootObject())
+ object = selection->getNextRootObject())
{
if(object->permModify())
{
@@ -4586,7 +4577,7 @@ class LLToolsLink : public view_listener_t
return true;
}
- S32 object_count = gSelectMgr->getObjectCount();
+ S32 object_count = gSelectMgr->getSelection()->getObjectCount();
if (object_count > MAX_CHILDREN_PER_TASK + 1)
{
LLStringBase<char>::format_map_t args;
@@ -4597,7 +4588,7 @@ class LLToolsLink : public view_listener_t
return true;
}
- if(gSelectMgr->getRootObjectCount() < 2)
+ if(gSelectMgr->getSelection()->getRootObjectCount() < 2)
{
gViewerWindow->alertXml("CannotLinkIncompleteSet");
return true;
@@ -4627,8 +4618,8 @@ class LLToolsEnableUnlink : public view_listener_t
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
bool new_value = gSelectMgr->selectGetAllRootsValid() &&
- gSelectMgr->getFirstEditableObject() &&
- !gSelectMgr->getFirstEditableObject()->isAttachment();
+ gSelectMgr->getSelection()->getFirstEditableObject() &&
+ !gSelectMgr->getSelection()->getFirstEditableObject()->isAttachment();
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
}
@@ -4690,7 +4681,7 @@ void handle_dehinge(void*)
BOOL enable_dehinge(void*)
{
- LLViewerObject* obj = gSelectMgr->getFirstEditableObject();
+ LLViewerObject* obj = gSelectMgr->getSelection()->getFirstEditableObject();
return obj && !obj->isAttachment();
}
@@ -5890,12 +5881,13 @@ LLUploadDialog *gExportDialog = NULL;
void handle_export_selected( void * )
{
- if (gSelectMgr->isEmpty())
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ if (selection->isEmpty())
{
return;
}
llinfos << "Exporting selected objects:" << llendl;
- LLViewerObject *object = gSelectMgr->getFirstRootObject();
+ LLViewerObject *object = selection->getFirstRootObject();
gExporterRequestID.generate();
gExportDirectory = "";
@@ -5907,7 +5899,7 @@ void handle_export_selected( void * )
msg->addUUIDFast(_PREHASH_RequestID, gExporterRequestID);
msg->addS16Fast(_PREHASH_VolumeDetail, 4);
- for (; object != NULL; object = gSelectMgr->getNextRootObject())
+ for (; object != NULL; object = selection->getNextRootObject())
{
msg->nextBlockFast(_PREHASH_ObjectData);
msg->addUUIDFast(_PREHASH_ObjectID, object->getID());
@@ -5921,7 +5913,7 @@ void handle_export_selected( void * )
BOOL menu_check_build_tool( void* user_data )
{
S32 index = (intptr_t) user_data;
- return gCurrentToolset->isToolSelected( index );
+ return gToolMgr->getCurrentToolset()->isToolSelected( index );
}
void handle_reload_settings(void*)
@@ -6070,7 +6062,7 @@ class LLToolsLookAtSelection : public view_listener_t
{
const F32 PADDING_FACTOR = 2.f;
BOOL zoom = (userdata.asString() == "zoom");
- if (!gSelectMgr->isEmpty())
+ if (!gSelectMgr->getSelection()->isEmpty())
{
gAgent.setFocusOnAvatar(FALSE, ANIMATE);
@@ -6083,11 +6075,11 @@ class LLToolsLookAtSelection : public view_listener_t
if (zoom)
{
- gAgent.setCameraPosAndFocusGlobal(gSelectMgr->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance), gSelectMgr->getSelectionCenterGlobal(), gSelectMgr->getFirstObject()->mID );
+ gAgent.setCameraPosAndFocusGlobal(gSelectMgr->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance), gSelectMgr->getSelectionCenterGlobal(), gSelectMgr->getSelection()->getFirstObject()->mID );
}
else
{
- gAgent.setFocusGlobal( gSelectMgr->getSelectionCenterGlobal(), gSelectMgr->getFirstObject()->mID );
+ gAgent.setFocusGlobal( gSelectMgr->getSelectionCenterGlobal(), gSelectMgr->getSelection()->getFirstObject()->mID );
}
}
return true;
@@ -6112,7 +6104,6 @@ class LLAvatarAddFriend : public view_listener_t
{
request_friendship(avatar->getID());
}
- gSelectMgr->deselectTransient();
return true;
}
};
@@ -6239,7 +6230,7 @@ class LLObjectEnableSitOrStand : public view_listener_t
}
else
{
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
if (node && node->mValid && !node->mSitName.empty())
{
label.assign(node->mSitName);
@@ -6275,25 +6266,6 @@ void dump_inventory(void*)
gInventory.dumpInventory();
}
-
-void handle_first_tool(void*)
-{
- gCurrentToolset->selectFirstTool();
-}
-
-
-void handle_next_tool(void*)
-{
- gCurrentToolset->selectNextTool();
-}
-
-
-void handle_previous_tool(void*)
-{
- gCurrentToolset->selectPrevTool();
-}
-
-
// forcibly unlock an object
void handle_force_unlock(void*)
{
@@ -6302,7 +6274,7 @@ void handle_force_unlock(void*)
// Second, lie to the viewer and mark it editable and unowned
LLViewerObject* object;
- for (object = gSelectMgr->getFirstObject(); object; object = gSelectMgr->getNextObject() )
+ for (object = gSelectMgr->getSelection()->getFirstObject(); object; object = gSelectMgr->getSelection()->getNextObject() )
{
object->mFlags |= FLAGS_OBJECT_MOVE;
object->mFlags |= FLAGS_OBJECT_MODIFY;
@@ -6722,8 +6694,8 @@ void handle_focus(void *)
gViewerWindow->moveCursorToCenter();
// Switch to camera toolset
-// gCurrentToolset = gCameraToolset;
- gCurrentToolset->selectTool( gToolCamera );
+// gToolMgr->setCurrentToolset(gCameraToolset);
+ gToolMgr->getCurrentToolset()->selectTool( gToolCamera );
}
class LLLandEdit : public view_listener_t
@@ -6749,10 +6721,10 @@ class LLLandEdit : public view_listener_t
gParcelMgr->selectParcelAt( gLastHitPosGlobal );
gFloaterTools->showMore(TRUE);
- gFloaterView->bringToFront( gFloaterTools );
+ gFloaterView->bringToFront( gFloaterTools );
// Switch to land edit toolset
- gCurrentToolset->selectTool( gToolParcel );
+ gToolMgr->getCurrentToolset()->selectTool( gToolParcel );
return true;
}
};
@@ -6764,7 +6736,7 @@ class LLWorldEnableBuyLand : public view_listener_t
bool new_value = gParcelMgr->canAgentBuyParcel(
gParcelMgr->selectionEmpty()
? gParcelMgr->getAgentParcel()
- : gParcelMgr->getSelectedParcel(),
+ : gParcelMgr->getParcelSelection()->getParcel(),
false);
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
@@ -6774,7 +6746,7 @@ class LLWorldEnableBuyLand : public view_listener_t
BOOL enable_buy_land(void*)
{
return gParcelMgr->canAgentBuyParcel(
- gParcelMgr->getSelectedParcel(), false);
+ gParcelMgr->getParcelSelection()->getParcel(), false);
}
@@ -6795,46 +6767,59 @@ void handle_move(void*)
gViewerWindow->moveCursorToCenter();
- gCurrentToolset = gBasicToolset;
- gCurrentToolset->selectTool( gToolGrab );
-}
-
-
-void near_attach_object(BOOL success, void *user_data)
-{
- LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data;
-
- U8 attachment_id;
- if (attachment)
- {
- attachment_id = gAgent.getAvatarObject()->mAttachmentPoints.reverseLookup(attachment);
- }
- else
- {
- // interpret 0 as "default location"
- attachment_id = 0;
- }
-
- gSelectMgr->sendAttach(attachment_id);
+ gToolMgr->setCurrentToolset(gBasicToolset);
+ gToolMgr->getCurrentToolset()->selectTool( gToolGrab );
}
class LLObjectAttachToAvatar : public view_listener_t
{
+public:
+ static void setObjectSelection(LLObjectSelectionHandle selection) { sObjectSelection = selection; }
+
+private:
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- LLViewerObject* selectedObject = gSelectMgr->getFirstRootObject();
+ setObjectSelection(gSelectMgr->getSelection());
+ LLViewerObject* selectedObject = sObjectSelection->getFirstRootObject();
if (selectedObject)
{
- confirm_replace_attachment(0, NULL);
+ LLViewerJointAttachment* attachment_point = gAgent.getAvatarObject()->mAttachmentPoints[userdata.asInteger()];
+ confirm_replace_attachment(0, attachment_point);
}
return true;
}
+
+protected:
+ static LLObjectSelectionHandle sObjectSelection;
};
+LLObjectSelectionHandle LLObjectAttachToAvatar::sObjectSelection;
+
+void near_attach_object(BOOL success, void *user_data)
+{
+ if (success)
+ {
+ LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data;
+
+ U8 attachment_id;
+ if (attachment)
+ {
+ attachment_id = gAgent.getAvatarObject()->mAttachmentPoints.reverseLookup(attachment);
+ }
+ else
+ {
+ // interpret 0 as "default location"
+ attachment_id = 0;
+ }
+ gSelectMgr->sendAttach(attachment_id);
+ }
+ LLObjectAttachToAvatar::setObjectSelection(NULL);
+}
+
// move this somewhere global
void handle_attach_to_avatar(void* user_data)
{
- LLViewerObject* selectedObject = gSelectMgr->getFirstRootObject();
+ LLViewerObject* selectedObject = gSelectMgr->getSelection()->getFirstRootObject();
if (selectedObject)
{
LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data;
@@ -6853,8 +6838,7 @@ void confirm_replace_attachment(S32 option, void* user_data)
{
if (option == 0/*YES*/)
{
- gSelectMgr->convertTransient();
- LLViewerObject* selectedObject = gSelectMgr->getFirstRootObject();
+ LLViewerObject* selectedObject = gSelectMgr->getSelection()->getFirstRootObject();
if (selectedObject)
{
const F32 MIN_STOP_DISTANCE = 1.f; // meters
@@ -6921,12 +6905,7 @@ class LLAttachmentDrop : public view_listener_t
// objects. Thus we need to clear the list, make sure it only
// contains the object the user clicked, send the message,
// then clear the list.
- // We use deselectAll to update the simulator's notion of what's
- // selected, and removeAll just to change things locally.
- //gSelectMgr->deselectAll();
- //gSelectMgr->selectObjectAndFamily(object);
gSelectMgr->sendDropAttachment();
- gSelectMgr->deselectTransient();
return true;
}
};
@@ -7029,10 +7008,9 @@ class LLAttachmentDetach : public view_listener_t
// We use deselectAll to update the simulator's notion of what's
// selected, and removeAll just to change things locally.
//RN: I thought it was more useful to detach everything that was selected
- if (gSelectMgr->selectionIsAttachment())
+ if (gSelectMgr->getSelection()->isAttachment())
{
gSelectMgr->sendDetach();
- gSelectMgr->deselectAll();
}
return true;
}
@@ -7149,8 +7127,10 @@ class LLAttachmentEnableDetach : public view_listener_t
BOOL object_selected_and_point_valid(void *user_data)
{
//LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data;
+ if (gSelectMgr == NULL) return FALSE;
- for (LLViewerObject *object = gSelectMgr->getFirstRootObject(); object; object = gSelectMgr->getNextRootObject())
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ for (LLViewerObject *object = selection->getFirstRootObject(); object; object = selection->getNextRootObject())
{
for (U32 child_num = 0; child_num < object->mChildList.size(); child_num++ )
{
@@ -7161,12 +7141,11 @@ BOOL object_selected_and_point_valid(void *user_data)
}
}
- return ((gSelectMgr != NULL) &&
- (gSelectMgr->getRootObjectCount() == 1) &&
- (gSelectMgr->getFirstRootObject()->getPCode() == LL_PCODE_VOLUME) &&
- gSelectMgr->getFirstRootObject()->permYouOwner() &&
- !((LLViewerObject*)gSelectMgr->getFirstRootObject()->getRoot())->isAvatar() &&
- (gSelectMgr->getFirstRootObject()->getNVPair("AssetContainer") == NULL));
+ return (selection->getRootObjectCount() == 1) &&
+ (selection->getFirstRootObject()->getPCode() == LL_PCODE_VOLUME) &&
+ selection->getFirstRootObject()->permYouOwner() &&
+ !((LLViewerObject*)selection->getFirstRootObject()->getRoot())->isAvatar() &&
+ (selection->getFirstRootObject()->getNVPair("AssetContainer") == NULL);
}
// Also for seeing if object can be attached. See above.
@@ -7177,13 +7156,14 @@ class LLObjectEnableWear : public view_listener_t
bool new_value = false;
if (gSelectMgr)
{
- LLViewerObject* first_root = gSelectMgr->getFirstRootObject();
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ LLViewerObject* first_root = selection->getFirstRootObject();
if (first_root)
{
- new_value = gSelectMgr->getRootObjectCount() == 1
+ new_value = selection->getRootObjectCount() == 1
&& first_root->getPCode() == LL_PCODE_VOLUME
&& first_root->permYouOwner()
- && !((LLViewerObject*)gSelectMgr->getFirstRootObject()->getRoot())->isAvatar()
+ && !((LLViewerObject*)selection->getFirstRootObject()->getRoot())->isAvatar()
&& (first_root->getNVPair("AssetContainer") == NULL);
}
}
@@ -7266,9 +7246,9 @@ class LLToolsSelectedScriptAction : public view_listener_t
BOOL scripted = FALSE;
BOOL modifiable = FALSE;
- for(LLViewerObject* obj = gSelectMgr->getFirstObject();
+ for(LLViewerObject* obj = gSelectMgr->getSelection()->getFirstObject();
obj;
- obj = gSelectMgr->getNextObject())
+ obj = gSelectMgr->getSelection()->getNextObject())
{
scripted = obj->flagScripted();
modifiable = obj->permModify();
@@ -7301,9 +7281,9 @@ void handle_reset_selection(void*)
BOOL scripted = FALSE;
BOOL modifiable = FALSE;
- for(LLViewerObject* obj = gSelectMgr->getFirstObject();
+ for(LLViewerObject* obj = gSelectMgr->getSelection()->getFirstObject();
obj;
- obj = gSelectMgr->getNextObject())
+ obj = gSelectMgr->getSelection()->getNextObject())
{
scripted = obj->flagScripted();
modifiable = obj->permModify();
@@ -7334,9 +7314,9 @@ void handle_set_run_selection(void*)
BOOL scripted = FALSE;
BOOL modifiable = FALSE;
- for(LLViewerObject* obj = gSelectMgr->getFirstObject();
+ for(LLViewerObject* obj = gSelectMgr->getSelection()->getFirstObject();
obj;
- obj = gSelectMgr->getNextObject())
+ obj = gSelectMgr->getSelection()->getNextObject())
{
scripted = obj->flagScripted();
modifiable = obj->permModify();
@@ -7367,9 +7347,9 @@ void handle_set_not_run_selection(void*)
BOOL scripted = FALSE;
BOOL modifiable = FALSE;
- for(LLViewerObject* obj = gSelectMgr->getFirstObject();
+ for(LLViewerObject* obj = gSelectMgr->getSelection()->getFirstObject();
obj;
- obj = gSelectMgr->getNextObject())
+ obj = gSelectMgr->getSelection()->getNextObject())
{
scripted = obj->flagScripted();
modifiable = obj->permModify();
@@ -7396,7 +7376,7 @@ void handle_set_not_run_selection(void*)
void handle_selected_texture_info(void*)
{
LLSelectNode* node = NULL;
- for (node = gSelectMgr->getFirstNode(); node != NULL; node = gSelectMgr->getNextNode())
+ for (node = gSelectMgr->getSelection()->getFirstNode(); node != NULL; node = gSelectMgr->getSelection()->getNextNode())
{
if (!node->mValid) continue;
@@ -7583,7 +7563,7 @@ class LLSomethingSelected : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- bool new_value = !(gSelectMgr->isEmpty());
+ bool new_value = !(gSelectMgr->getSelection()->isEmpty());
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
}
@@ -7593,7 +7573,8 @@ class LLSomethingSelectedNoHUD : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- bool new_value = !(gSelectMgr->isEmpty()) && !(gSelectMgr->getSelectType() == SELECT_TYPE_HUD);
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ bool new_value = !(selection->isEmpty()) && !(selection->getSelectType() == SELECT_TYPE_HUD);
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
}
@@ -7601,14 +7582,14 @@ class LLSomethingSelectedNoHUD : public view_listener_t
BOOL enable_more_than_one_selected(void* )
{
- return (gSelectMgr->getObjectCount() > 1);
+ return (gSelectMgr->getSelection()->getObjectCount() > 1);
}
class LLEditableSelected : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- bool new_value = (gSelectMgr->getFirstEditableObject() != NULL);
+ bool new_value = (gSelectMgr->getSelection()->getFirstEditableObject() != NULL);
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
}
@@ -7627,10 +7608,11 @@ class LLToolsEnableTakeCopy : public view_listener_t
if (gInProductionGrid || !gAgent.isGodlike())
# endif
{
- LLViewerObject* obj = gSelectMgr->getFirstRootObject();
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ LLViewerObject* obj = selection->getFirstRootObject();
if(obj)
{
- for( ; obj; obj = gSelectMgr->getNextRootObject())
+ for( ; obj; obj = selection->getNextRootObject())
{
if(!(obj->permCopy()) || obj->isAttachment())
{
@@ -7650,11 +7632,15 @@ class LLToolsEnableTakeCopy : public view_listener_t
BOOL enable_selection_you_own_all(void*)
{
LLViewerObject *obj;
- for (obj = gSelectMgr->getFirstRootObject(); obj; obj = gSelectMgr->getNextRootObject())
+ if (gSelectMgr)
{
- if (!obj->permYouOwner())
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ for (obj = selection->getFirstRootObject(); obj; obj = selection->getNextRootObject())
{
- return FALSE;
+ if (!obj->permYouOwner())
+ {
+ return FALSE;
+ }
}
}
@@ -7663,15 +7649,18 @@ BOOL enable_selection_you_own_all(void*)
BOOL enable_selection_you_own_one(void*)
{
- LLViewerObject *obj;
- for (obj = gSelectMgr->getFirstRootObject(); obj; obj = gSelectMgr->getNextRootObject())
+ if (gSelectMgr)
{
- if (obj->permYouOwner())
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ LLViewerObject *obj;
+ for (obj = selection->getFirstRootObject(); obj; obj = selection->getNextRootObject())
{
- return TRUE;
+ if (obj->permYouOwner())
+ {
+ return TRUE;
+ }
}
}
-
return FALSE;
}
@@ -7705,9 +7694,9 @@ BOOL enable_save_into_inventory(void*)
{
// find the last root
LLSelectNode* last_node = NULL;
- for(LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ for(LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
node != NULL;
- node = gSelectMgr->getNextRootNode())
+ node = gSelectMgr->getSelection()->getNextRootNode())
{
last_node = node;
}
@@ -7751,7 +7740,7 @@ BOOL enable_save_into_task_inventory(void*)
{
if(gSelectMgr)
{
- LLSelectNode* node = gSelectMgr->getFirstRootNode();
+ LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
if(node && (node->mValid) && (!node->mFromTaskID.isNull()))
{
// *TODO: check to see if the fromtaskid object exists.
@@ -7792,7 +7781,7 @@ class LLFileEnableUpload : public view_listener_t
BOOL enable_export_selected(void *)
{
- if (gSelectMgr->isEmpty())
+ if (gSelectMgr->getSelection()->isEmpty())
{
return FALSE;
}
@@ -7823,7 +7812,7 @@ class LLToolsEnableToolNotPie : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- bool new_value = ( gToolMgr->getCurrentTool(MASK_NONE) != gToolPie );
+ bool new_value = ( gToolMgr->getBaseTool() != gToolPie );
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
}
@@ -8212,10 +8201,10 @@ class LLToolsUseSelectionForGrid : public view_listener_t
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
gSelectMgr->clearGridObjects();
-
- for (LLViewerObject* objectp = gSelectMgr->getFirstRootObject();
+ LLObjectSelectionHandle selection = gSelectMgr->getSelection();
+ for (LLViewerObject* objectp = selection->getFirstRootObject();
objectp;
- objectp = gSelectMgr->getNextRootObject())
+ objectp = selection->getNextRootObject())
{
gSelectMgr->addGridObject(objectp);
}
@@ -8240,25 +8229,35 @@ void handle_test_load_url(void*)
// LLViewerMenuHolderGL
//
+LLViewerMenuHolderGL::LLViewerMenuHolderGL() : LLMenuHolderGL()
+{
+}
+
BOOL LLViewerMenuHolderGL::hideMenus()
{
BOOL handled = LLMenuHolderGL::hideMenus();
- if (handled)
- {
- gSelectMgr->deselectTransient();
- if(!gFloaterTools->getVisible()
- && !LLFloaterLand::floaterVisible()
- && !LLFloaterBuyLand::isOpen())
- {
- gParcelMgr->deselectLand();
- }
- }
+
+ // drop pie menu selection
+ mParcelSelection = NULL;
+ mObjectSelection = NULL;
+
gMenuBarView->clearHoverItem();
gMenuBarView->resetMenuTrigger();
return handled;
}
+void LLViewerMenuHolderGL::setParcelSelection(LLHandle<LLParcelSelection> selection)
+{
+ mParcelSelection = selection;
+}
+
+void LLViewerMenuHolderGL::setObjectSelection(LLHandle<LLObjectSelection> selection)
+{
+ mObjectSelection = selection;
+}
+
+
const LLRect LLViewerMenuHolderGL::getMenuRect() const
{
return LLRect(0, mRect.getHeight() - MENU_BAR_HEIGHT, mRect.getWidth(), STATUS_BAR_HEIGHT);
@@ -8586,23 +8585,23 @@ class LLToolsSelectTool : public view_listener_t
LLString tool_name = userdata.asString();
if (tool_name == "focus")
{
- gCurrentToolset->selectToolByIndex(1);
+ gToolMgr->getCurrentToolset()->selectToolByIndex(1);
}
else if (tool_name == "move")
{
- gCurrentToolset->selectToolByIndex(2);
+ gToolMgr->getCurrentToolset()->selectToolByIndex(2);
}
else if (tool_name == "edit")
{
- gCurrentToolset->selectToolByIndex(3);
+ gToolMgr->getCurrentToolset()->selectToolByIndex(3);
}
else if (tool_name == "create")
{
- gCurrentToolset->selectToolByIndex(4);
+ gToolMgr->getCurrentToolset()->selectToolByIndex(4);
}
else if (tool_name == "land")
{
- gCurrentToolset->selectToolByIndex(5);
+ gToolMgr->getCurrentToolset()->selectToolByIndex(5);
}
return true;
}