PATH-764,PATH-765: Adding in a context menu option on right-click of an object to show in the linksets floater if all objects are non-characters, or to show in the characters floater if all objects are characters.

master
Todd Stinson 2012-06-22 16:12:32 -07:00
parent 1ca92d37dd
commit 328322436c
8 changed files with 279 additions and 182 deletions

View File

@ -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()

View File

@ -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:

View File

@ -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)

View File

@ -46,7 +46,7 @@ class LLVector3;
class LLFloaterPathfindingLinksets : public LLFloaterPathfindingObjects
{
public:
static void openLinksetsEditor();
static void openLinksetsWithSelectedObjects();
protected:
friend class LLFloaterReg;

View File

@ -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();

View File

@ -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;

View File

@ -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");

View File

@ -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
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
label="Zoom In"
name="Zoom In">
<menu_item_call.on_click
function="Object.ZoomIn" />
function="Object.Build" />
<menu_item_call.on_enable
function="EnableEdit"/>
</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.AttachToAvatar" />
<menu_item_call.on_enable
function="Object.EnableWear" />
</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
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">
<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...">
label="Show in linksets"
name="show_in_linksets">
<menu_item_call.on_click
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_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
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.Buy" />
function="Object.AttachToAvatar" />
<menu_item_call.on_enable
function="Object.EnableBuy" />
</menu_item_call>
<menu_item_call
enabled="false"
label="Delete"
name="Delete">
function="Object.EnableWear" />
</menu_item_call>
<menu_item_call
enabled="false"
label="Add"
name="Add">
<menu_item_call.on_click
function="Object.Delete" />
function="Object.AttachAddToAvatar" />
<menu_item_call.on_enable
function="Object.EnableDelete" />
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
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">
<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>