summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llfloaterpathfindingcharacters.cpp5
-rw-r--r--indra/newview/llfloaterpathfindingcharacters.h2
-rw-r--r--indra/newview/llfloaterpathfindinglinksets.cpp5
-rw-r--r--indra/newview/llfloaterpathfindinglinksets.h2
-rw-r--r--indra/newview/llfloaterpathfindingobjects.cpp75
-rw-r--r--indra/newview/llfloaterpathfindingobjects.h6
-rw-r--r--indra/newview/llviewermenu.cpp16
-rw-r--r--indra/newview/skins/default/xui/en/menu_object.xml334
8 files changed, 271 insertions, 174 deletions
diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp
index 09fd17855c..caf9fe382b 100644
--- a/indra/newview/llfloaterpathfindingcharacters.cpp
+++ b/indra/newview/llfloaterpathfindingcharacters.cpp
@@ -74,9 +74,10 @@ BOOL LLFloaterPathfindingCharacters::isPhysicsCapsuleEnabled(LLUUID& id, LLVecto
return (isShowPhysicsCapsule() && getCapsuleRenderData(pos, rot ));
}
-void LLFloaterPathfindingCharacters::openCharactersViewer()
+void LLFloaterPathfindingCharacters::openCharactersWithSelectedObjects()
{
- LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_characters");
+ LLFloaterPathfindingCharacters *charactersFloater = LLFloaterReg::getTypedInstance<LLFloaterPathfindingCharacters>("pathfinding_characters");
+ charactersFloater->showFloaterWithSelectionObjects();
}
LLHandle<LLFloaterPathfindingCharacters> LLFloaterPathfindingCharacters::getInstanceHandle()
diff --git a/indra/newview/llfloaterpathfindingcharacters.h b/indra/newview/llfloaterpathfindingcharacters.h
index a181a66ebd..56e08b7603 100644
--- a/indra/newview/llfloaterpathfindingcharacters.h
+++ b/indra/newview/llfloaterpathfindingcharacters.h
@@ -46,7 +46,7 @@ public:
BOOL isPhysicsCapsuleEnabled(LLUUID& id, LLVector3& pos, LLQuaternion& rot ) const;
- static void openCharactersViewer();
+ static void openCharactersWithSelectedObjects();
static LLHandle<LLFloaterPathfindingCharacters> getInstanceHandle();
protected:
diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp
index a7b856b271..ae814b0087 100644
--- a/indra/newview/llfloaterpathfindinglinksets.cpp
+++ b/indra/newview/llfloaterpathfindinglinksets.cpp
@@ -60,9 +60,10 @@
// LLFloaterPathfindingLinksets
//---------------------------------------------------------------------------
-void LLFloaterPathfindingLinksets::openLinksetsEditor()
+void LLFloaterPathfindingLinksets::openLinksetsWithSelectedObjects()
{
- LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets");
+ LLFloaterPathfindingLinksets *linksetsFloater = LLFloaterReg::getTypedInstance<LLFloaterPathfindingLinksets>("pathfinding_linksets");
+ linksetsFloater->showFloaterWithSelectionObjects();
}
LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed)
diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h
index c9ae5a059a..8e82992dbf 100644
--- a/indra/newview/llfloaterpathfindinglinksets.h
+++ b/indra/newview/llfloaterpathfindinglinksets.h
@@ -46,7 +46,7 @@ class LLVector3;
class LLFloaterPathfindingLinksets : public LLFloaterPathfindingObjects
{
public:
- static void openLinksetsEditor();
+ static void openLinksetsWithSelectedObjects();
protected:
friend class LLFloaterReg;
diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp
index 14fa0ac428..cd6d0851b9 100644
--- a/indra/newview/llfloaterpathfindingobjects.cpp
+++ b/indra/newview/llfloaterpathfindingobjects.cpp
@@ -173,6 +173,8 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)
mMessagingRequestId(0U),
mObjectList(),
mObjectsSelection(),
+ mHasObjectsToBeSelected(false),
+ mObjectsToBeSelected(),
mSelectionUpdateSlot(),
mRegionBoundaryCrossingSlot()
{
@@ -318,17 +320,19 @@ void LLFloaterPathfindingObjects::handleUpdateObjectList(LLPathfindingManager::r
void LLFloaterPathfindingObjects::rebuildObjectsScrollList()
{
- std::vector<LLScrollListItem*> selectedItems = mObjectsScrollList->getAllSelected();
- int numSelectedItems = selectedItems.size();
- uuid_vec_t selectedUUIDs;
- if (numSelectedItems > 0)
+ if (!mHasObjectsToBeSelected)
{
- selectedUUIDs.reserve(selectedItems.size());
- for (std::vector<LLScrollListItem*>::const_iterator itemIter = selectedItems.begin();
- itemIter != selectedItems.end(); ++itemIter)
+ std::vector<LLScrollListItem*> selectedItems = mObjectsScrollList->getAllSelected();
+ int numSelectedItems = selectedItems.size();
+ if (numSelectedItems > 0)
{
- const LLScrollListItem *listItem = *itemIter;
- selectedUUIDs.push_back(listItem->getUUID());
+ mObjectsToBeSelected.reserve(selectedItems.size());
+ for (std::vector<LLScrollListItem*>::const_iterator itemIter = selectedItems.begin();
+ itemIter != selectedItems.end(); ++itemIter)
+ {
+ const LLScrollListItem *listItem = *itemIter;
+ mObjectsToBeSelected.push_back(listItem->getUUID());
+ }
}
}
@@ -346,8 +350,19 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()
}
}
- mObjectsScrollList->selectMultiple(selectedUUIDs);
- mObjectsScrollList->setScrollPos(origScrollPosition);
+ mObjectsScrollList->selectMultiple(mObjectsToBeSelected);
+ if (mHasObjectsToBeSelected)
+ {
+ mObjectsScrollList->scrollToShowSelected();
+ }
+ else
+ {
+ mObjectsScrollList->setScrollPos(origScrollPosition);
+ }
+
+ mObjectsToBeSelected.clear();
+ mHasObjectsToBeSelected = false;
+
updateControlsOnScrollListChange();
}
@@ -401,6 +416,44 @@ S32 LLFloaterPathfindingObjects::getBeaconWidth() const
return DEFAULT_BEACON_WIDTH;
}
+void LLFloaterPathfindingObjects::showFloaterWithSelectionObjects()
+{
+ mObjectsToBeSelected.clear();
+
+ LLObjectSelectionHandle selectedObjectsHandle = LLSelectMgr::getInstance()->getSelection();
+ if (selectedObjectsHandle.notNull())
+ {
+ LLObjectSelection *selectedObjects = selectedObjectsHandle.get();
+ if (!selectedObjects->isEmpty())
+ {
+ for (LLObjectSelection::valid_iterator objectIter = selectedObjects->valid_begin();
+ objectIter != selectedObjects->valid_end(); ++objectIter)
+ {
+ LLSelectNode *object = *objectIter;
+ LLViewerObject *viewerObject = object->getObject();
+ mObjectsToBeSelected.push_back(viewerObject->getID());
+ }
+ }
+ }
+ mHasObjectsToBeSelected = true;
+
+ if (!isShown())
+ {
+ openFloater();
+ setVisibleAndFrontmost();
+ }
+ else
+ {
+ rebuildObjectsScrollList();
+ if (isMinimized())
+ {
+ setMinimized(FALSE);
+ }
+ setVisibleAndFrontmost();
+ }
+ setFocus(TRUE);
+}
+
BOOL LLFloaterPathfindingObjects::isShowBeacons() const
{
return mShowBeaconCheckBox->get();
diff --git a/indra/newview/llfloaterpathfindingobjects.h b/indra/newview/llfloaterpathfindingobjects.h
index 88790db12d..6d5d6d24b2 100644
--- a/indra/newview/llfloaterpathfindingobjects.h
+++ b/indra/newview/llfloaterpathfindingobjects.h
@@ -36,6 +36,7 @@
#include "llpathfindingobject.h"
#include "llpathfindingobjectlist.h"
#include "llselectmgr.h"
+#include "lluuid.h"
#include "v4color.h"
class LLAvatarName;
@@ -90,6 +91,8 @@ protected:
virtual const LLColor4 &getBeaconTextColor() const;
virtual S32 getBeaconWidth() const;
+ void showFloaterWithSelectionObjects();
+
BOOL isShowBeacons() const;
void clearAllObjects();
void selectAllObjects();
@@ -158,6 +161,9 @@ private:
LLObjectSelectionHandle mObjectsSelection;
+ bool mHasObjectsToBeSelected;
+ uuid_vec_t mObjectsToBeSelected;
+
boost::signals2::connection mSelectionUpdateSlot;
boost::signals2::connection mRegionBoundaryCrossingSlot;
LLAgent::god_level_change_slot_t mGodLevelChangeSlot;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index d244b19b4f..020de5a255 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -60,6 +60,8 @@
#include "llfloatergodtools.h"
#include "llfloaterinventory.h"
#include "llfloaterland.h"
+#include "llfloaterpathfindingcharacters.h"
+#include "llfloaterpathfindinglinksets.h"
#include "llfloaterpay.h"
#include "llfloaterreporter.h"
#include "llfloatersearch.h"
@@ -2735,6 +2737,16 @@ bool enable_object_build()
return !enable_object_edit();
}
+bool enable_object_select_in_pathfinding_linksets()
+{
+ return LLSelectMgr::getInstance()->selectGetNonCharacter();
+}
+
+bool enable_object_select_in_pathfinding_characters()
+{
+ return LLSelectMgr::getInstance()->selectGetCharacter();
+}
+
class LLSelfRemoveAllAttachments : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -8485,6 +8497,10 @@ void initialize_menus()
enable.add("EnablePayAvatar", boost::bind(&enable_pay_avatar));
enable.add("EnableEdit", boost::bind(&enable_object_edit));
enable.add("VisibleBuild", boost::bind(&enable_object_build));
+ commit.add("Pathfinding.Linksets.Select", boost::bind(&LLFloaterPathfindingLinksets::openLinksetsWithSelectedObjects));
+ enable.add("EnableSelectInPathfindingLinksets", boost::bind(&enable_object_select_in_pathfinding_linksets));
+ commit.add("Pathfinding.Characters.Select", boost::bind(&LLFloaterPathfindingCharacters::openCharactersWithSelectedObjects));
+ enable.add("EnableSelectInPathfindingCharacters", boost::bind(&enable_object_select_in_pathfinding_characters));
view_listener_t::addMenu(new LLFloaterVisible(), "FloaterVisible");
view_listener_t::addMenu(new LLShowSidetrayPanel(), "ShowSidetrayPanel");
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
index 719509301b..52b9524b11 100644
--- a/indra/newview/skins/default/xui/en/menu_object.xml
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -1,179 +1,199 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<context_menu
- layout="topleft"
- name="Object Pie">
- <menu_item_call
- enabled="false"
- label="Touch"
- name="Object Touch">
- <menu_item_call.on_click
- function="Object.Touch" />
- <menu_item_call.on_enable
- function="Object.EnableTouch"
- name="EnableTouch"
- parameter="Touch" />
- </menu_item_call>
- <menu_item_call
- label="Edit"
- name="Edit...">
- <menu_item_call.on_click
- function="Object.Edit" />
+ layout="topleft"
+ name="Object Pie">
+ <menu_item_call
+ enabled="false"
+ label="Touch"
+ name="Object Touch">
+ <menu_item_call.on_click
+ function="Object.Touch" />
<menu_item_call.on_enable
- function="EnableEdit"/>
- </menu_item_call>
- <menu_item_call
+ function="Object.EnableTouch"
+ name="EnableTouch"
+ parameter="Touch" />
+ </menu_item_call>
+ <menu_item_call
+ label="Edit"
+ name="Edit...">
+ <menu_item_call.on_click
+ function="Object.Edit" />
+ <menu_item_call.on_enable
+ function="EnableEdit"/>
+ </menu_item_call>
+ <menu_item_call
label="Build"
name="Build">
- <menu_item_call.on_click
+ <menu_item_call.on_click
function="Object.Build" />
- <menu_item_call.on_enable
- function="EnableEdit"/>
- </menu_item_call>
- <menu_item_call
- enabled="false"
- label="Open"
- name="Open">
- <menu_item_call.on_click
- function="Object.Open" />
- <menu_item_call.on_enable
- function="Object.EnableOpen" />
- </menu_item_call>
- <menu_item_call
- enabled="false"
- label="Sit Here"
- name="Object Sit">
- <menu_item_call.on_click
- function="Object.SitOrStand" />
- <menu_item_call.on_enable
- function="Object.EnableSit" />
- </menu_item_call>
- <menu_item_call
- enabled="false"
- label="Stand Up"
- name="Object Stand Up">
- <menu_item_call.on_click
- function="Object.SitOrStand" />
- <menu_item_call.on_enable
- function="Object.EnableStandUp" />
- </menu_item_call>
- <menu_item_call
- label="Object Profile"
- name="Object Inspect">
- <menu_item_call.on_click
- function="Object.Inspect" />
- <menu_item_call.on_enable
- function="Object.EnableInspect" />
- </menu_item_call>
+ <menu_item_call.on_enable
+ function="EnableEdit"/>
+ </menu_item_call>
<menu_item_call
- label="Zoom In"
- name="Zoom In">
+ label="Show in linksets"
+ name="show_in_linksets">
<menu_item_call.on_click
- function="Object.ZoomIn" />
+ function="Pathfinding.Linksets.Select" />
+ <menu_item_call.on_enable
+ function="EnableSelectInPathfindingLinksets"/>
+ <menu_item_call.on_visible
+ function="EnableSelectInPathfindingLinksets"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Show in characters"
+ name="show_in_characters">
+ <menu_item_call.on_click
+ function="Pathfinding.Characters.Select" />
+ <menu_item_call.on_enable
+ function="EnableSelectInPathfindingCharacters"/>
+ <menu_item_call.on_visible
+ function="EnableSelectInPathfindingCharacters"/>
</menu_item_call>
-<menu_item_separator layout="topleft" />
- <context_menu
- label="Put On"
- name="Put On" >
- <menu_item_call
+ <menu_item_call
enabled="false"
- label="Wear"
- name="Wear">
- <menu_item_call.on_click
- function="Object.AttachToAvatar" />
- <menu_item_call.on_enable
- function="Object.EnableWear" />
- </menu_item_call>
- <menu_item_call
+ label="Open"
+ name="Open">
+ <menu_item_call.on_click
+ function="Object.Open" />
+ <menu_item_call.on_enable
+ function="Object.EnableOpen" />
+ </menu_item_call>
+ <menu_item_call
enabled="false"
- label="Add"
- name="Add">
- <menu_item_call.on_click
- function="Object.AttachAddToAvatar" />
- <menu_item_call.on_enable
- function="Object.EnableWear" />
- </menu_item_call>
- <context_menu
- label="Attach"
- name="Object Attach" />
- <context_menu
- label="Attach HUD"
- name="Object Attach HUD" />
- </context_menu>
- <context_menu
- label="Manage"
- name="Remove">
- <menu_item_call
- enabled="false"
- label="Report Abuse"
- name="Report Abuse...">
- <menu_item_call.on_click
- function="Object.ReportAbuse" />
- <menu_item_call.on_enable
- function="Object.EnableReportAbuse" />
- </menu_item_call>
- <menu_item_call
- enabled="false"
- label="Block"
- name="Object Mute">
- <menu_item_call.on_click
- function="Object.Mute" />
- <menu_item_call.on_enable
- function="Object.EnableMute" />
- </menu_item_call>
- <menu_item_call
+ label="Sit Here"
+ name="Object Sit">
+ <menu_item_call.on_click
+ function="Object.SitOrStand" />
+ <menu_item_call.on_enable
+ function="Object.EnableSit" />
+ </menu_item_call>
+ <menu_item_call
enabled="false"
- label="Return"
- name="Return...">
- <menu_item_call.on_click
- function="Object.Return" />
- <menu_item_call.on_enable
- function="Object.EnableReturn" />
- </menu_item_call>
- </context_menu>
- <menu_item_separator layout="topleft" />
- <menu_item_call
- label="Take"
- layout="topleft"
- name="Pie Object Take">
+ label="Stand Up"
+ name="Object Stand Up">
+ <menu_item_call.on_click
+ function="Object.SitOrStand" />
+ <menu_item_call.on_enable
+ function="Object.EnableStandUp" />
+ </menu_item_call>
+ <menu_item_call
+ label="Object Profile"
+ name="Object Inspect">
+ <menu_item_call.on_click
+ function="Object.Inspect" />
+ <menu_item_call.on_enable
+ function="Object.EnableInspect" />
+ </menu_item_call>
+ <menu_item_call
+ label="Zoom In"
+ name="Zoom In">
+ <menu_item_call.on_click
+ function="Object.ZoomIn" />
+ </menu_item_call>
+ <menu_item_separator layout="topleft" />
+ <context_menu
+ label="Put On"
+ name="Put On" >
+ <menu_item_call
+ enabled="false"
+ label="Wear"
+ name="Wear">
<menu_item_call.on_click
- function="Object.Take"/>
+ function="Object.AttachToAvatar" />
<menu_item_call.on_enable
- function="Object.VisibleTake"/>
- </menu_item_call>
- <menu_item_call
- enabled="false"
- label="Take Copy"
- name="Take Copy">
+ function="Object.EnableWear" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Add"
+ name="Add">
<menu_item_call.on_click
- function="Tools.TakeCopy" />
+ function="Object.AttachAddToAvatar" />
<menu_item_call.on_enable
- function="Tools.EnableTakeCopy" />
- </menu_item_call>
- <menu_item_call
- enabled="false"
- label="Pay"
- name="Pay...">
- <menu_item_call.on_click
- function="PayObject" />
- <menu_item_call.on_enable
- function="EnablePayObject" />
-</menu_item_call>
- <menu_item_call
- enabled="false"
- label="Buy"
- name="Buy...">
+ function="Object.EnableWear" />
+ </menu_item_call>
+ <context_menu
+ label="Attach"
+ name="Object Attach" />
+ <context_menu
+ label="Attach HUD"
+ name="Object Attach HUD" />
+ </context_menu>
+ <context_menu
+ label="Manage"
+ name="Remove">
+ <menu_item_call
+ enabled="false"
+ label="Report Abuse"
+ name="Report Abuse...">
+ <menu_item_call.on_click
+ function="Object.ReportAbuse" />
+ <menu_item_call.on_enable
+ function="Object.EnableReportAbuse" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Block"
+ name="Object Mute">
<menu_item_call.on_click
- function="Object.Buy" />
+ function="Object.Mute" />
<menu_item_call.on_enable
- function="Object.EnableBuy" />
- </menu_item_call>
- <menu_item_call
- enabled="false"
- label="Delete"
- name="Delete">
+ function="Object.EnableMute" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Return"
+ name="Return...">
<menu_item_call.on_click
- function="Object.Delete" />
+ function="Object.Return" />
<menu_item_call.on_enable
- function="Object.EnableDelete" />
+ function="Object.EnableReturn" />
+ </menu_item_call>
+ </context_menu>
+ <menu_item_separator layout="topleft" />
+ <menu_item_call
+ label="Take"
+ layout="topleft"
+ name="Pie Object Take">
+ <menu_item_call.on_click
+ function="Object.Take"/>
+ <menu_item_call.on_enable
+ function="Object.VisibleTake"/>
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Take Copy"
+ name="Take Copy">
+ <menu_item_call.on_click
+ function="Tools.TakeCopy" />
+ <menu_item_call.on_enable
+ function="Tools.EnableTakeCopy" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Pay"
+ name="Pay...">
+ <menu_item_call.on_click
+ function="PayObject" />
+ <menu_item_call.on_enable
+ function="EnablePayObject" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Buy"
+ name="Buy...">
+ <menu_item_call.on_click
+ function="Object.Buy" />
+ <menu_item_call.on_enable
+ function="Object.EnableBuy" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Delete"
+ name="Delete">
+ <menu_item_call.on_click
+ function="Object.Delete" />
+ <menu_item_call.on_enable
+ function="Object.EnableDelete" />
</menu_item_call>
</context_menu>