From e90cdf6682cacd261b2927cc4cecf06dfe5a5447 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 15 Dec 2011 10:31:25 -0800 Subject: Introducing the initial hooks for building the pathfinding linkset floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 49 ++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 indra/newview/llfloaterpathfindinglinksets.cpp (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp new file mode 100644 index 0000000000..fcbc3e7cad --- /dev/null +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -0,0 +1,49 @@ +/** + * @file llfloaterpathfindinglinksets.cpp + * @author William Todd Stinson + * @brief "Pathfinding linksets" floater, allowing manipulation of the Havok AI pathfinding settings. + * + * $LicenseInfo:firstyear=2002&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llfloaterpathfindinglinksets.h" + +#include "llsd.h" + +//--------------------------------------------------------------------------- +// LLFloaterPathfindingLinksets +//--------------------------------------------------------------------------- + +BOOL LLFloaterPathfindingLinksets::postBuild() +{ + return LLFloater::postBuild(); +} + +LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& seed) + : LLFloater(seed) +{ +} + +LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() +{ +} -- cgit v1.2.3 From dcd945fc74b57313da96e97f7de4ee0b6b81ef70 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 16 Dec 2011 10:15:43 -0800 Subject: Adding functionality for the linksets button on the console to open the linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index fcbc3e7cad..4f98834dde 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -27,8 +27,9 @@ #include "llviewerprecompiledheaders.h" #include "llfloaterpathfindinglinksets.h" - #include "llsd.h" +#include "llfloater.h" +#include "llfloaterreg.h" //--------------------------------------------------------------------------- // LLFloaterPathfindingLinksets @@ -39,6 +40,11 @@ BOOL LLFloaterPathfindingLinksets::postBuild() return LLFloater::postBuild(); } +void LLFloaterPathfindingLinksets::openLinksetsEditor() +{ + LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); +} + LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& seed) : LLFloater(seed) { -- cgit v1.2.3 From 10614ebd917f4dbb8a16e8a0473409c42f8d7608 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 4 Jan 2012 15:52:20 -0800 Subject: Hijaking the land status messaging for temporary development of the pathfinding linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 308 +++++++++++++++++++++---- 1 file changed, 264 insertions(+), 44 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 4f98834dde..efcb5a1c80 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -1,55 +1,275 @@ -/** - * @file llfloaterpathfindinglinksets.cpp - * @author William Todd Stinson - * @brief "Pathfinding linksets" floater, allowing manipulation of the Havok AI pathfinding settings. - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" -#include "llfloaterpathfindinglinksets.h" -#include "llsd.h" -#include "llfloater.h" -#include "llfloaterreg.h" - -//--------------------------------------------------------------------------- -// LLFloaterPathfindingLinksets -//--------------------------------------------------------------------------- - -BOOL LLFloaterPathfindingLinksets::postBuild() +/** + * @file llfloaterpathfindinglinksets.cpp + * @author William Todd Stinson + * @brief "Pathfinding linksets" floater, allowing manipulation of the Havok AI pathfinding settings. + * + * $LicenseInfo:firstyear=2002&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llfloaterpathfindinglinksets.h" +#include "message.h" +#include "lluuid.h" +#include "llsd.h" +#include "llagent.h" +#include "lluictrl.h" +#include "llfloater.h" +#include "llfloaterreg.h" +#include "llscrolllistctrl.h" +#include "llavatarnamecache.h" +#include "llresmgr.h" + +//--------------------------------------------------------------------------- +// LLFloaterPathfindingLinksets +//--------------------------------------------------------------------------- + +BOOL LLFloaterPathfindingLinksets::postBuild() +{ + childSetAction("refresh_linksets_list", boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this)); + childSetAction("select_all_linksets", boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this)); + childSetAction("select_none_linksets", boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this)); + + mLinksetsScrollList = findChild("pathfinding_linksets"); + llassert(mLinksetsScrollList != NULL); + mLinksetsScrollList->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onLinksetsSelectionChange, this)); + mLinksetsScrollList->setCommitOnSelectionChange(true); + + mLinksetsStatus = findChild("linksets_status"); + llassert(mLinksetsStatus != NULL); + + updateLinksetsStatus(); + + return LLFloater::postBuild(); +} + +void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) +{ + sendLandStatRequest(); +} + +void LLFloaterPathfindingLinksets::handleLandStatReply(LLMessageSystem* pMsg, void** pData) +{ + LLFloaterPathfindingLinksets *instance = LLFloaterReg::findTypedInstance("pathfinding_linksets"); + if (instance != NULL) + { + instance->handleLandStatReply(pMsg); + } +} + +void LLFloaterPathfindingLinksets::openLinksetsEditor() +{ + LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); +} + +LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) + : LLFloater(pSeed), + mLinksetsScrollList(NULL), + mLinksetsStatus(NULL) +{ +} + +LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() +{ +} + +void LLFloaterPathfindingLinksets::sendLandStatRequest() +{ + clearLinksetsList(); + updateLinksetsStatusForFetch(); + + U32 mode = 0; + U32 flags = 0; + std::string filter = ""; + + LLMessageSystem *msg = gMessageSystem; + msg->newMessageFast(_PREHASH_LandStatRequest); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_RequestData); + msg->addU32Fast(_PREHASH_ReportType, mode); + msg->addU32Fast(_PREHASH_RequestFlags, flags); + msg->addStringFast(_PREHASH_Filter, filter); + msg->addS32Fast(_PREHASH_ParcelLocalID, 0); + + msg->sendReliable(gAgent.getRegionHost()); +} + +void LLFloaterPathfindingLinksets::handleLandStatReply(LLMessageSystem *pMsg) +{ + U32 request_flags; + U32 total_count; + U32 current_mode; + + pMsg->getU32Fast(_PREHASH_RequestData, _PREHASH_RequestFlags, request_flags); + pMsg->getU32Fast(_PREHASH_RequestData, _PREHASH_TotalObjectCount, total_count); + pMsg->getU32Fast(_PREHASH_RequestData, _PREHASH_ReportType, current_mode); + + clearLinksetsList(); + + const LLVector3& avatarPosition = gAgent.getPositionAgent(); + + S32 block_count = pMsg->getNumberOfBlocks("ReportData"); + for (S32 block = 0; block < block_count; ++block) + { + U32 task_local_id; + U32 time_stamp = 0; + LLUUID task_id; + F32 location_x, location_y, location_z; + F32 score; + std::string name_buf; + std::string owner_buf; + F32 mono_score = 0.f; + bool have_extended_data = false; + S32 public_urls = 0; + + pMsg->getU32Fast(_PREHASH_ReportData, _PREHASH_TaskLocalID, task_local_id, block); + pMsg->getUUIDFast(_PREHASH_ReportData, _PREHASH_TaskID, task_id, block); + pMsg->getF32Fast(_PREHASH_ReportData, _PREHASH_LocationX, location_x, block); + pMsg->getF32Fast(_PREHASH_ReportData, _PREHASH_LocationY, location_y, block); + pMsg->getF32Fast(_PREHASH_ReportData, _PREHASH_LocationZ, location_z, block); + pMsg->getF32Fast(_PREHASH_ReportData, _PREHASH_Score, score, block); + pMsg->getStringFast(_PREHASH_ReportData, _PREHASH_TaskName, name_buf, block); + pMsg->getStringFast(_PREHASH_ReportData, _PREHASH_OwnerName, owner_buf, block); + if(pMsg->has("DataExtended")) + { + have_extended_data = true; + pMsg->getU32("DataExtended", "TimeStamp", time_stamp, block); + pMsg->getF32("DataExtended", "MonoScore", mono_score, block); + pMsg->getS32("DataExtended", "PublicURLs", public_urls, block); + } + + LLSD element; + + element["id"] = task_id; + + LLSD columns; + + columns[0]["column"] = "name"; + columns[0]["value"] = name_buf; + columns[0]["font"] = "SANSSERIF"; + + // Owner names can have trailing spaces sent from server + LLStringUtil::trim(owner_buf); + + if (LLAvatarNameCache::useDisplayNames()) + { + // ...convert hard-coded name from server to a username + // *TODO: Send owner_id from server and look up display name + owner_buf = LLCacheName::buildUsername(owner_buf); + } + else + { + // ...just strip out legacy "Resident" name + owner_buf = LLCacheName::cleanFullName(owner_buf); + } + columns[1]["column"] = "description"; + columns[1]["value"] = owner_buf; + columns[1]["font"] = "SANSSERIF"; + + columns[2]["column"] = "land_impact"; + columns[2]["value"] = llformat("%0.1f", 55.679); + columns[2]["font"] = "SANSSERIF"; + + LLVector3 location(location_x, location_y, location_z); + F32 distance = dist_vec(avatarPosition, location); + + columns[3]["column"] = "dist_from_you"; + columns[3]["value"] = llformat("%1.0f m", distance); + columns[3]["font"] = "SANSSERIF"; + + element["columns"] = columns; + mLinksetsScrollList->addElement(element); + } + + updateLinksetsStatus(); +} + +void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() +{ + updateLinksetsStatus(); +} + +void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() +{ + sendLandStatRequest(); +} + +void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() { - return LLFloater::postBuild(); + selectAllLinksets(); } -void LLFloaterPathfindingLinksets::openLinksetsEditor() +void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() { - LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); + selectNoneLinksets(); } -LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& seed) - : LLFloater(seed) +void LLFloaterPathfindingLinksets::clearLinksetsList() { + mLinksetsScrollList->deleteAllItems(); + updateLinksetsStatus(); +} + +void LLFloaterPathfindingLinksets::selectAllLinksets() +{ + mLinksetsScrollList->selectAll(); +} + +void LLFloaterPathfindingLinksets::selectNoneLinksets() +{ + mLinksetsScrollList->deselectAllItems(); +} + +void LLFloaterPathfindingLinksets::updateLinksetsStatus() +{ + std::string statusText(""); + + if (mLinksetsScrollList->isEmpty()) + { + statusText = getString("linksets_none_found"); + } + else + { + S32 numItems = mLinksetsScrollList->getItemCount(); + S32 numSelectedItems = mLinksetsScrollList->getNumSelected(); + + LLLocale locale(LLStringUtil::getLocale()); + std::string numItemsString; + LLResMgr::getInstance()->getIntegerString(numItemsString, numItems); + + std::string numSelectedItemsString; + LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems); + + LLStringUtil::format_map_t string_args; + string_args["[NUM_SELECTED]"] = numSelectedItemsString; + string_args["[NUM_TOTAL]"] = numItemsString; + statusText = getString("linksets_available", string_args); + } + + mLinksetsStatus->setValue(statusText); } -LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() +void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetch() { + mLinksetsStatus->setValue(getString("linksets_fetching")); } -- cgit v1.2.3 From 1eea77add246604315711e9e2635078dc038d42f Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 9 Jan 2012 17:05:06 -0800 Subject: PATH-142: Initial pass at hooking up the NavmeshData GET service to the UI. --- indra/newview/llfloaterpathfindinglinksets.cpp | 372 ++++++++++++++----------- 1 file changed, 215 insertions(+), 157 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index efcb5a1c80..c16fd8fee6 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -27,16 +27,35 @@ #include "llviewerprecompiledheaders.h" #include "llfloaterpathfindinglinksets.h" -#include "message.h" -#include "lluuid.h" #include "llsd.h" #include "llagent.h" -#include "lluictrl.h" #include "llfloater.h" #include "llfloaterreg.h" #include "llscrolllistctrl.h" -#include "llavatarnamecache.h" #include "llresmgr.h" +#include "llviewerregion.h" +#include "llhttpclient.h" +#include "lltextbase.h" + +//--------------------------------------------------------------------------- +// NavmeshDataGetResponder +//--------------------------------------------------------------------------- + +class NavmeshDataGetResponder : public LLHTTPClient::Responder +{ +public: + NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater); + virtual ~NavmeshDataGetResponder(); + + virtual void result(const LLSD& pContent); + virtual void error(U32 pStatus, const std::string& pReason); + +private: + NavmeshDataGetResponder(const NavmeshDataGetResponder& pOther); + + std::string mNavmeshDataGetURL; + LLFloaterPathfindingLinksets *mLinksetsFloater; +}; //--------------------------------------------------------------------------- // LLFloaterPathfindingLinksets @@ -53,7 +72,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLinksetsScrollList->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onLinksetsSelectionChange, this)); mLinksetsScrollList->setCommitOnSelectionChange(true); - mLinksetsStatus = findChild("linksets_status"); + mLinksetsStatus = findChild("linksets_status"); llassert(mLinksetsStatus != NULL); updateLinksetsStatus(); @@ -63,16 +82,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) { - sendLandStatRequest(); -} - -void LLFloaterPathfindingLinksets::handleLandStatReply(LLMessageSystem* pMsg, void** pData) -{ - LLFloaterPathfindingLinksets *instance = LLFloaterReg::findTypedInstance("pathfinding_linksets"); - if (instance != NULL) - { - instance->handleLandStatReply(pMsg); - } + sendNavmeshDataGetRequest(); } void LLFloaterPathfindingLinksets::openLinksetsEditor() @@ -83,127 +93,141 @@ void LLFloaterPathfindingLinksets::openLinksetsEditor() LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) : LLFloater(pSeed), mLinksetsScrollList(NULL), - mLinksetsStatus(NULL) + mLinksetsStatus(NULL), + mNavmeshDataGetResponder(NULL) { } LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() { + clearNavmeshDataResponder(); } -void LLFloaterPathfindingLinksets::sendLandStatRequest() +void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() { - clearLinksetsList(); - updateLinksetsStatusForFetch(); - - U32 mode = 0; - U32 flags = 0; - std::string filter = ""; - - LLMessageSystem *msg = gMessageSystem; - msg->newMessageFast(_PREHASH_LandStatRequest); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_RequestData); - msg->addU32Fast(_PREHASH_ReportType, mode); - msg->addU32Fast(_PREHASH_RequestFlags, flags); - msg->addStringFast(_PREHASH_Filter, filter); - msg->addS32Fast(_PREHASH_ParcelLocalID, 0); - - msg->sendReliable(gAgent.getRegionHost()); + if (mNavmeshDataGetResponder != NULL) + { + updateLinksetsStatusForFetchInProgress(); + } + else + { + clearLinksetsList(); + + LLViewerRegion* region = gAgent.getRegion(); + if (region != NULL) + { + std::string navmeshDataURL = region->getCapability("ObjectNavmesh"); + if (navmeshDataURL.empty()) + { + llinfos << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl; + } + else + { + updateLinksetsStatusForFetch(); + mNavmeshDataGetResponder = new NavmeshDataGetResponder(navmeshDataURL, this); + LLHTTPClient::get(navmeshDataURL, mNavmeshDataGetResponder); + } + } + } } -void LLFloaterPathfindingLinksets::handleLandStatReply(LLMessageSystem *pMsg) +void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmeshData) { - U32 request_flags; - U32 total_count; - U32 current_mode; - - pMsg->getU32Fast(_PREHASH_RequestData, _PREHASH_RequestFlags, request_flags); - pMsg->getU32Fast(_PREHASH_RequestData, _PREHASH_TotalObjectCount, total_count); - pMsg->getU32Fast(_PREHASH_RequestData, _PREHASH_ReportType, current_mode); - + clearNavmeshDataResponder(); clearLinksetsList(); const LLVector3& avatarPosition = gAgent.getPositionAgent(); - S32 block_count = pMsg->getNumberOfBlocks("ReportData"); - for (S32 block = 0; block < block_count; ++block) + for (LLSD::map_const_iterator itemsIter = pNavmeshData.beginMap(); + itemsIter != pNavmeshData.endMap(); ++itemsIter) { - U32 task_local_id; - U32 time_stamp = 0; - LLUUID task_id; - F32 location_x, location_y, location_z; - F32 score; - std::string name_buf; - std::string owner_buf; - F32 mono_score = 0.f; - bool have_extended_data = false; - S32 public_urls = 0; - - pMsg->getU32Fast(_PREHASH_ReportData, _PREHASH_TaskLocalID, task_local_id, block); - pMsg->getUUIDFast(_PREHASH_ReportData, _PREHASH_TaskID, task_id, block); - pMsg->getF32Fast(_PREHASH_ReportData, _PREHASH_LocationX, location_x, block); - pMsg->getF32Fast(_PREHASH_ReportData, _PREHASH_LocationY, location_y, block); - pMsg->getF32Fast(_PREHASH_ReportData, _PREHASH_LocationZ, location_z, block); - pMsg->getF32Fast(_PREHASH_ReportData, _PREHASH_Score, score, block); - pMsg->getStringFast(_PREHASH_ReportData, _PREHASH_TaskName, name_buf, block); - pMsg->getStringFast(_PREHASH_ReportData, _PREHASH_OwnerName, owner_buf, block); - if(pMsg->has("DataExtended")) - { - have_extended_data = true; - pMsg->getU32("DataExtended", "TimeStamp", time_stamp, block); - pMsg->getF32("DataExtended", "MonoScore", mono_score, block); - pMsg->getS32("DataExtended", "PublicURLs", public_urls, block); - } - - LLSD element; - - element["id"] = task_id; + const std::string& uuid = itemsIter->first; + const LLSD& itemData = itemsIter->second; + + const LLSD::String& itemName = itemData.get("name").asString(); + const LLSD::String& itemDescription = itemData.get("description").asString(); + LLSD::Integer itemLandImpact = itemData.get("landimpact").asInteger(); + LLSD::Boolean isItemFixed = itemData.get("fixed").asBoolean(); + LLSD::Boolean isItemWalkable = true; // XXX stinson: walkable data not coming from service yet + LLSD::Boolean isItemPhantom = itemData.get("phantom").asBoolean(); + LLSD::Real itemA = itemData.get("A").asReal(); + LLSD::Real itemB = itemData.get("B").asReal(); + LLSD::Real itemC = itemData.get("C").asReal(); + LLSD::Real itemD = itemData.get("D").asReal(); + + F32 location_x = 50.0f, location_y = 50.0f, location_z = 50.0f; // XXX stinson: use real location later + LLVector3 itemLocation(location_x, location_y, location_z); + F32 itemDistance = dist_vec(avatarPosition, itemLocation); LLSD columns; columns[0]["column"] = "name"; - columns[0]["value"] = name_buf; + columns[0]["value"] = itemName; columns[0]["font"] = "SANSSERIF"; - // Owner names can have trailing spaces sent from server - LLStringUtil::trim(owner_buf); - - if (LLAvatarNameCache::useDisplayNames()) - { - // ...convert hard-coded name from server to a username - // *TODO: Send owner_id from server and look up display name - owner_buf = LLCacheName::buildUsername(owner_buf); - } - else - { - // ...just strip out legacy "Resident" name - owner_buf = LLCacheName::cleanFullName(owner_buf); - } columns[1]["column"] = "description"; - columns[1]["value"] = owner_buf; + columns[1]["value"] = itemDescription; columns[1]["font"] = "SANSSERIF"; columns[2]["column"] = "land_impact"; - columns[2]["value"] = llformat("%0.1f", 55.679); + columns[2]["value"] = llformat("%1d m", itemLandImpact); columns[2]["font"] = "SANSSERIF"; - LLVector3 location(location_x, location_y, location_z); - F32 distance = dist_vec(avatarPosition, location); - columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = llformat("%1.0f m", distance); + columns[3]["value"] = llformat("%1.0f m", itemDistance); columns[3]["font"] = "SANSSERIF"; - element["columns"] = columns; + columns[4]["column"] = "is_fixed"; + columns[4]["value"] = getString(isItemFixed ? "linkset_is_fixed" : "linkset_is_not_fixed"); + columns[4]["font"] = "SANSSERIF"; + + columns[5]["column"] = "is_walkable"; + columns[5]["value"] = getString(isItemWalkable ? "linkset_is_walkable" : "linkset_is_not_walkable"); + columns[5]["font"] = "SANSSERIF"; + + columns[6]["column"] = "is_phantom"; + columns[6]["value"] = getString(isItemPhantom ? "linkset_is_phantom" : "linkset_is_not_phantom"); + columns[6]["font"] = "SANSSERIF"; + + columns[7]["column"] = "a_percent"; + columns[7]["value"] = llformat("%2.0f", itemA); + columns[7]["font"] = "SANSSERIF"; + + columns[8]["column"] = "b_percent"; + columns[8]["value"] = llformat("%2.0f", itemB); + columns[8]["font"] = "SANSSERIF"; + + columns[9]["column"] = "c_percent"; + columns[9]["value"] = llformat("%2.0f", itemC); + columns[9]["font"] = "SANSSERIF"; + + columns[10]["column"] = "d_percent"; + columns[10]["value"] = llformat("%2.0f", itemD); + columns[10]["font"] = "SANSSERIF"; + + LLSD element; + element["id"] = uuid; + element["column"] = columns; + mLinksetsScrollList->addElement(element); } - updateLinksetsStatus(); + updateLinksetsStatus(); } +void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason) +{ + clearNavmeshDataResponder(); + clearLinksetsList(); + updateLinksetsStatusForFetchError(); + llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl; +} + +void LLFloaterPathfindingLinksets::clearNavmeshDataResponder() +{ + mNavmeshDataGetResponder = NULL; +} + void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() { updateLinksetsStatus(); @@ -211,65 +235,99 @@ void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() { - sendLandStatRequest(); + sendNavmeshDataGetRequest(); } -void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() -{ - selectAllLinksets(); -} - -void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() -{ - selectNoneLinksets(); -} - -void LLFloaterPathfindingLinksets::clearLinksetsList() -{ +void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() +{ + selectAllLinksets(); +} + +void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() +{ + selectNoneLinksets(); +} + +void LLFloaterPathfindingLinksets::clearLinksetsList() +{ mLinksetsScrollList->deleteAllItems(); - updateLinksetsStatus(); + updateLinksetsStatus(); } -void LLFloaterPathfindingLinksets::selectAllLinksets() -{ - mLinksetsScrollList->selectAll(); -} - -void LLFloaterPathfindingLinksets::selectNoneLinksets() -{ - mLinksetsScrollList->deselectAllItems(); -} - -void LLFloaterPathfindingLinksets::updateLinksetsStatus() -{ - std::string statusText(""); - - if (mLinksetsScrollList->isEmpty()) - { - statusText = getString("linksets_none_found"); - } - else - { - S32 numItems = mLinksetsScrollList->getItemCount(); - S32 numSelectedItems = mLinksetsScrollList->getNumSelected(); - - LLLocale locale(LLStringUtil::getLocale()); - std::string numItemsString; - LLResMgr::getInstance()->getIntegerString(numItemsString, numItems); - - std::string numSelectedItemsString; - LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems); - - LLStringUtil::format_map_t string_args; - string_args["[NUM_SELECTED]"] = numSelectedItemsString; - string_args["[NUM_TOTAL]"] = numItemsString; - statusText = getString("linksets_available", string_args); - } - - mLinksetsStatus->setValue(statusText); -} - -void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetch() -{ - mLinksetsStatus->setValue(getString("linksets_fetching")); -} +void LLFloaterPathfindingLinksets::selectAllLinksets() +{ + mLinksetsScrollList->selectAll(); +} + +void LLFloaterPathfindingLinksets::selectNoneLinksets() +{ + mLinksetsScrollList->deselectAllItems(); +} + +void LLFloaterPathfindingLinksets::updateLinksetsStatus() +{ + std::string statusText(""); + + if (mLinksetsScrollList->isEmpty()) + { + statusText = getString("linksets_none_found"); + } + else + { + S32 numItems = mLinksetsScrollList->getItemCount(); + S32 numSelectedItems = mLinksetsScrollList->getNumSelected(); + + LLLocale locale(LLStringUtil::getLocale()); + std::string numItemsString; + LLResMgr::getInstance()->getIntegerString(numItemsString, numItems); + + std::string numSelectedItemsString; + LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems); + + LLStringUtil::format_map_t string_args; + string_args["[NUM_SELECTED]"] = numSelectedItemsString; + string_args["[NUM_TOTAL]"] = numItemsString; + statusText = getString("linksets_available", string_args); + } + + mLinksetsStatus->setText((LLStringExplicit)statusText); +} + +void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetch() +{ + mLinksetsStatus->setText((LLStringExplicit)getString("linksets_fetching")); +} + +void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetchInProgress() +{ + mLinksetsStatus->setText((LLStringExplicit)getString("linksets_fetching_inprogress")); +} + +void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetchError() +{ + LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow"); + LLStyle::Params styleParams; + styleParams.color = warningColor; + mLinksetsStatus->setText((LLStringExplicit)getString("linksets_fetching_error"), styleParams); +} + +NavmeshDataGetResponder::NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) + : mNavmeshDataGetURL(pNavmeshDataGetURL), + mLinksetsFloater(pLinksetsFloater) +{ +} + +NavmeshDataGetResponder::~NavmeshDataGetResponder() +{ + mLinksetsFloater = NULL; +} + +void NavmeshDataGetResponder::result(const LLSD& pContent) +{ + mLinksetsFloater->handleNavmeshDataGetReply(pContent); +} + +void NavmeshDataGetResponder::error(U32 status, const std::string& reason) +{ + mLinksetsFloater->handleNavmeshDataGetError(mNavmeshDataGetURL, reason); +} -- cgit v1.2.3 From ebeddd7fd9ae2fa82a35baa0cab9aff024c2c9f1 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 9 Jan 2012 18:15:32 -0800 Subject: PATH-142: Refined the linksets status messaging functionlity. --- indra/newview/llfloaterpathfindinglinksets.cpp | 153 +++++++++++++++---------- 1 file changed, 95 insertions(+), 58 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index c16fd8fee6..0cce1277b0 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -75,7 +75,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLinksetsStatus = findChild("linksets_status"); llassert(mLinksetsStatus != NULL); - updateLinksetsStatus(); + setFetchState(kFetchInitial); return LLFloater::postBuild(); } @@ -90,27 +90,54 @@ void LLFloaterPathfindingLinksets::openLinksetsEditor() LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); } +LLFloaterPathfindingLinksets::EFetchState LLFloaterPathfindingLinksets::getFetchState() const +{ + return mFetchState; +} + +BOOL LLFloaterPathfindingLinksets::isFetchInProgress() const +{ + BOOL retVal; + switch (getFetchState()) + { + case kFetchStarting : + case kFetchInProgress : + case kFetchInProgress_MultiRequested : + case kFetchReceived : + retVal = true; + break; + default : + retVal = false; + break; + } + + return retVal; +} + LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) : LLFloater(pSeed), + mFetchState(kFetchInitial), mLinksetsScrollList(NULL), - mLinksetsStatus(NULL), - mNavmeshDataGetResponder(NULL) + mLinksetsStatus(NULL) { } LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() { - clearNavmeshDataResponder(); } void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() { - if (mNavmeshDataGetResponder != NULL) + if (isFetchInProgress()) { - updateLinksetsStatusForFetchInProgress(); + if (getFetchState() == kFetchInProgress) + { + setFetchState(kFetchInProgress_MultiRequested); + } } else { + setFetchState(kFetchStarting); clearLinksetsList(); LLViewerRegion* region = gAgent.getRegion(); @@ -119,13 +146,13 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() std::string navmeshDataURL = region->getCapability("ObjectNavmesh"); if (navmeshDataURL.empty()) { - llinfos << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl; + setFetchState(kFetchComplete); + llwarns << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl; } else { - updateLinksetsStatusForFetch(); - mNavmeshDataGetResponder = new NavmeshDataGetResponder(navmeshDataURL, this); - LLHTTPClient::get(navmeshDataURL, mNavmeshDataGetResponder); + setFetchState(kFetchInProgress); + LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this)); } } } @@ -133,7 +160,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmeshData) { - clearNavmeshDataResponder(); + setFetchState(kFetchReceived); clearLinksetsList(); const LLVector3& avatarPosition = gAgent.getPositionAgent(); @@ -212,25 +239,25 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes mLinksetsScrollList->addElement(element); } - updateLinksetsStatus(); + setFetchState(kFetchComplete); } void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason) { - clearNavmeshDataResponder(); + setFetchState(kFetchError); clearLinksetsList(); - updateLinksetsStatusForFetchError(); llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl; } -void LLFloaterPathfindingLinksets::clearNavmeshDataResponder() +void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) { - mNavmeshDataGetResponder = NULL; + mFetchState = pFetchState; + updateLinksetsStatusMessage(); } void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() { - updateLinksetsStatus(); + updateLinksetsStatusMessage(); } void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() @@ -251,7 +278,7 @@ void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() void LLFloaterPathfindingLinksets::clearLinksetsList() { mLinksetsScrollList->deleteAllItems(); - updateLinksetsStatus(); + updateLinksetsStatusMessage(); } void LLFloaterPathfindingLinksets::selectAllLinksets() @@ -264,53 +291,63 @@ void LLFloaterPathfindingLinksets::selectNoneLinksets() mLinksetsScrollList->deselectAllItems(); } -void LLFloaterPathfindingLinksets::updateLinksetsStatus() +void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() { + static const LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow"); + std::string statusText(""); + LLStyle::Params styleParams; - if (mLinksetsScrollList->isEmpty()) + switch (getFetchState()) { - statusText = getString("linksets_none_found"); + case kFetchStarting : + statusText = getString("linksets_fetching_starting"); + break; + case kFetchInProgress : + statusText = getString("linksets_fetching_inprogress"); + break; + case kFetchInProgress_MultiRequested : + statusText = getString("linksets_fetching_inprogress_multi_request"); + break; + case kFetchReceived : + statusText = getString("linksets_fetching_received"); + break; + case kFetchError : + statusText = getString("linksets_fetching_error"); + styleParams.color = warningColor; + break; + case kFetchComplete : + if (mLinksetsScrollList->isEmpty()) + { + statusText = getString("linksets_fetching_done_none_found"); + } + else + { + S32 numItems = mLinksetsScrollList->getItemCount(); + S32 numSelectedItems = mLinksetsScrollList->getNumSelected(); + + LLLocale locale(LLStringUtil::getLocale()); + std::string numItemsString; + LLResMgr::getInstance()->getIntegerString(numItemsString, numItems); + + std::string numSelectedItemsString; + LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems); + + LLStringUtil::format_map_t string_args; + string_args["[NUM_SELECTED]"] = numSelectedItemsString; + string_args["[NUM_TOTAL]"] = numItemsString; + statusText = getString("linksets_fetching_done_available", string_args); + } + break; + case kFetchInitial: + default: + statusText = getString("linksets_fetching_initial"); + break; } - else - { - S32 numItems = mLinksetsScrollList->getItemCount(); - S32 numSelectedItems = mLinksetsScrollList->getNumSelected(); - - LLLocale locale(LLStringUtil::getLocale()); - std::string numItemsString; - LLResMgr::getInstance()->getIntegerString(numItemsString, numItems); - - std::string numSelectedItemsString; - LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems); - LLStringUtil::format_map_t string_args; - string_args["[NUM_SELECTED]"] = numSelectedItemsString; - string_args["[NUM_TOTAL]"] = numItemsString; - statusText = getString("linksets_available", string_args); - } - - mLinksetsStatus->setText((LLStringExplicit)statusText); -} - -void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetch() -{ - mLinksetsStatus->setText((LLStringExplicit)getString("linksets_fetching")); -} - -void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetchInProgress() -{ - mLinksetsStatus->setText((LLStringExplicit)getString("linksets_fetching_inprogress")); + mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams); } - -void LLFloaterPathfindingLinksets::updateLinksetsStatusForFetchError() -{ - LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow"); - LLStyle::Params styleParams; - styleParams.color = warningColor; - mLinksetsStatus->setText((LLStringExplicit)getString("linksets_fetching_error"), styleParams); -} - + NavmeshDataGetResponder::NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) : mNavmeshDataGetURL(pNavmeshDataGetURL), mLinksetsFloater(pLinksetsFloater) -- cgit v1.2.3 From f36b2612139d12f0a6853b02784b40614b7aacf0 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 10 Jan 2012 11:06:15 -0800 Subject: PATH-142: Implementing some basic distance from viewer calculation per linksets. Note that this does not return all distances because some objects are in the region but the viewer is not aware of yet. --- indra/newview/llfloaterpathfindinglinksets.cpp | 121 ++++++++++++++----------- 1 file changed, 69 insertions(+), 52 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 0cce1277b0..78c0d342b2 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -36,26 +36,29 @@ #include "llviewerregion.h" #include "llhttpclient.h" #include "lltextbase.h" +#include "lluuid.h" +#include "llviewerobject.h" +#include "llviewerobjectlist.h" //--------------------------------------------------------------------------- // NavmeshDataGetResponder //--------------------------------------------------------------------------- - -class NavmeshDataGetResponder : public LLHTTPClient::Responder -{ -public: - NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater); - virtual ~NavmeshDataGetResponder(); - - virtual void result(const LLSD& pContent); - virtual void error(U32 pStatus, const std::string& pReason); - -private: - NavmeshDataGetResponder(const NavmeshDataGetResponder& pOther); - - std::string mNavmeshDataGetURL; - LLFloaterPathfindingLinksets *mLinksetsFloater; -}; + +class NavmeshDataGetResponder : public LLHTTPClient::Responder +{ +public: + NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater); + virtual ~NavmeshDataGetResponder(); + + virtual void result(const LLSD& pContent); + virtual void error(U32 pStatus, const std::string& pReason); + +private: + NavmeshDataGetResponder(const NavmeshDataGetResponder& pOther); + + std::string mNavmeshDataGetURL; + LLFloaterPathfindingLinksets *mLinksetsFloater; +}; //--------------------------------------------------------------------------- // LLFloaterPathfindingLinksets @@ -90,10 +93,10 @@ void LLFloaterPathfindingLinksets::openLinksetsEditor() LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); } -LLFloaterPathfindingLinksets::EFetchState LLFloaterPathfindingLinksets::getFetchState() const -{ - return mFetchState; -} +LLFloaterPathfindingLinksets::EFetchState LLFloaterPathfindingLinksets::getFetchState() const +{ + return mFetchState; +} BOOL LLFloaterPathfindingLinksets::isFetchInProgress() const { @@ -140,22 +143,22 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() setFetchState(kFetchStarting); clearLinksetsList(); - LLViewerRegion* region = gAgent.getRegion(); - if (region != NULL) - { - std::string navmeshDataURL = region->getCapability("ObjectNavmesh"); - if (navmeshDataURL.empty()) - { + LLViewerRegion* region = gAgent.getRegion(); + if (region != NULL) + { + std::string navmeshDataURL = region->getCapability("ObjectNavmesh"); + if (navmeshDataURL.empty()) + { setFetchState(kFetchComplete); - llwarns << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl; - } - else - { + llwarns << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl; + } + else + { setFetchState(kFetchInProgress); - LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this)); - } - } - } + LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this)); + } + } + } } void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmeshData) @@ -168,7 +171,7 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes for (LLSD::map_const_iterator itemsIter = pNavmeshData.beginMap(); itemsIter != pNavmeshData.endMap(); ++itemsIter) { - const std::string& uuid = itemsIter->first; + LLUUID uuid(itemsIter->first); const LLSD& itemData = itemsIter->second; const LLSD::String& itemName = itemData.get("name").asString(); @@ -182,9 +185,16 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes LLSD::Real itemC = itemData.get("C").asReal(); LLSD::Real itemD = itemData.get("D").asReal(); - F32 location_x = 50.0f, location_y = 50.0f, location_z = 50.0f; // XXX stinson: use real location later - LLVector3 itemLocation(location_x, location_y, location_z); - F32 itemDistance = dist_vec(avatarPosition, itemLocation); + // XXX stinson: get a better way to get all objects locations in the region as the + // following calculation only returns objects of which the viewer is aware. + LLViewerObject *viewerObject = gObjectList.findObject(uuid); + bool hasDistance = (viewerObject != NULL); + F32 itemDistance = -999.0f; + if (hasDistance) + { + const LLVector3& itemLocation = viewerObject->getPositionAgent(); + itemDistance = dist_vec(avatarPosition, itemLocation); + } LLSD columns; @@ -197,11 +207,18 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes columns[1]["font"] = "SANSSERIF"; columns[2]["column"] = "land_impact"; - columns[2]["value"] = llformat("%1d m", itemLandImpact); + columns[2]["value"] = llformat("%1d", itemLandImpact); columns[2]["font"] = "SANSSERIF"; columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = llformat("%1.0f m", itemDistance); + if (hasDistance) + { + columns[3]["value"] = llformat("%1.0f m", itemDistance); + } + else + { + columns[3]["value"] = "--"; + } columns[3]["font"] = "SANSSERIF"; columns[4]["column"] = "is_fixed"; @@ -242,18 +259,18 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes setFetchState(kFetchComplete); } -void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason) -{ +void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason) +{ setFetchState(kFetchError); clearLinksetsList(); - llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl; -} - -void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) -{ - mFetchState = pFetchState; - updateLinksetsStatusMessage(); -} + llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl; +} + +void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) +{ + mFetchState = pFetchState; + updateLinksetsStatusMessage(); +} void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() { @@ -347,8 +364,8 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams); } - -NavmeshDataGetResponder::NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) + +NavmeshDataGetResponder::NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) : mNavmeshDataGetURL(pNavmeshDataGetURL), mLinksetsFloater(pLinksetsFloater) { -- cgit v1.2.3 From e683c48e466c264642dc42997327410fb6ebae7f Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 10 Jan 2012 18:16:58 -0800 Subject: PATH-142: Pulling the new data fields for position and walkable from the ObjectNavmesh capability service. PATH-145: Started building foundation to support filtering of pathfinding linksets. --- indra/newview/llfloaterpathfindinglinksets.cpp | 355 +++++++++++++++++++++---- 1 file changed, 308 insertions(+), 47 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 78c0d342b2..87f667154a 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -26,8 +26,10 @@ */ #include "llviewerprecompiledheaders.h" +#include "llfloater.h" #include "llfloaterpathfindinglinksets.h" #include "llsd.h" +#include "v3math.h" #include "llagent.h" #include "llfloater.h" #include "llfloaterreg.h" @@ -37,8 +39,6 @@ #include "llhttpclient.h" #include "lltextbase.h" #include "lluuid.h" -#include "llviewerobject.h" -#include "llviewerobjectlist.h" //--------------------------------------------------------------------------- // NavmeshDataGetResponder @@ -60,6 +60,292 @@ private: LLFloaterPathfindingLinksets *mLinksetsFloater; }; +//--------------------------------------------------------------------------- +// PathfindingLinkset +//--------------------------------------------------------------------------- + +PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNavmeshItem) + : mUUID(pUUID), + mName(), + mDescription(), + mLandImpact(0U), + mLocation(), + mIsFixed(false), + mIsWalkable(false), + mIsPhantom(false), + mA(0.0f), + mB(0.0f), + mC(0.0f), + mD(0.0f) +{ + llassert(pNavmeshItem.has("name")); + llassert(pNavmeshItem.get("name").isString()); + mName = pNavmeshItem.get("name").asString(); + + llassert(pNavmeshItem.has("description")); + llassert(pNavmeshItem.get("description").isString()); + mDescription = pNavmeshItem.get("description").asString(); + + llassert(pNavmeshItem.has("landimpact")); + llassert(pNavmeshItem.get("landimpact").isInteger()); + llassert(pNavmeshItem.get("landimpact").asInteger() >= 0); + mLandImpact = pNavmeshItem.get("landimpact").asInteger(); + + llassert(pNavmeshItem.has("fixed")); + llassert(pNavmeshItem.get("fixed").isBoolean()); + mIsFixed = pNavmeshItem.get("fixed").asBoolean(); + + llassert(pNavmeshItem.has("walkable")); + llassert(pNavmeshItem.get("walkable").isBoolean()); + mIsWalkable = pNavmeshItem.get("walkable").asBoolean(); + + llassert(pNavmeshItem.has("phantom")); + //llassert(pNavmeshItem.get("phantom").isBoolean()); XXX stinson 01/10/2012: this should be a boolean but is not + mIsPhantom = pNavmeshItem.get("phantom").asBoolean(); + + llassert(pNavmeshItem.has("A")); + llassert(pNavmeshItem.get("A").isReal()); + mA = pNavmeshItem.get("A").asReal(); + + llassert(pNavmeshItem.has("B")); + llassert(pNavmeshItem.get("B").isReal()); + mB = pNavmeshItem.get("B").asReal(); + + llassert(pNavmeshItem.has("C")); + llassert(pNavmeshItem.get("C").isReal()); + mC = pNavmeshItem.get("C").asReal(); + + llassert(pNavmeshItem.has("D")); + llassert(pNavmeshItem.get("D").isReal()); + mD = pNavmeshItem.get("D").asReal(); + + llassert(pNavmeshItem.has("position")); + llassert(pNavmeshItem.get("position").isArray()); + mLocation.setValue(pNavmeshItem.get("position")); +} + +PathfindingLinkset::PathfindingLinkset(const PathfindingLinkset& pOther) + : mUUID(pOther.mUUID), + mName(pOther.mName), + mDescription(pOther.mDescription), + mLandImpact(pOther.mLandImpact), + mLocation(pOther.mLocation), + mIsFixed(pOther.mIsFixed), + mIsWalkable(pOther.mIsWalkable), + mIsPhantom(pOther.mIsPhantom), + mA(pOther.mA), + mB(pOther.mB), + mC(pOther.mC), + mD(pOther.mD) +{ +} + +PathfindingLinkset::~PathfindingLinkset() +{ +} + +PathfindingLinkset& PathfindingLinkset::operator =(const PathfindingLinkset& pOther) +{ + mUUID = pOther.mUUID; + mName = pOther.mName; + mDescription = pOther.mDescription; + mLandImpact = pOther.mLandImpact; + mLocation = pOther.mLocation; + mIsFixed = pOther.mIsFixed; + mIsWalkable = pOther.mIsWalkable; + mIsPhantom = pOther.mIsPhantom; + mA = pOther.mA; + mB = pOther.mB; + mC = pOther.mC; + mD = pOther.mD; + + return *this; +} + +const LLUUID& PathfindingLinkset::getUUID() const +{ + return mUUID; +} + +const std::string& PathfindingLinkset::getName() const +{ + return mName; +} + +const std::string& PathfindingLinkset::getDescription() const +{ + return mDescription; +} + +U32 PathfindingLinkset::getLandImpact() const +{ + return mLandImpact; +} + +const LLVector3& PathfindingLinkset::getPositionAgent() const +{ + return mLocation; +} + +BOOL PathfindingLinkset::isFixed() const +{ + return mIsFixed; +} + +void PathfindingLinkset::setFixed(BOOL pIsFixed) +{ + mIsFixed = pIsFixed; +} + +BOOL PathfindingLinkset::isWalkable() const +{ + return mIsWalkable; +} + +void PathfindingLinkset::setWalkable(BOOL pIsWalkable) +{ + mIsWalkable = pIsWalkable; +} + +BOOL PathfindingLinkset::isPhantom() const +{ + return mIsPhantom; +} + +void PathfindingLinkset::setPhantom(BOOL pIsPhantom) +{ + mIsPhantom = pIsPhantom; +} + +F32 PathfindingLinkset::getA() const +{ + return mA; +} + +void PathfindingLinkset::setA(F32 pA) +{ + mA = pA; +} + +F32 PathfindingLinkset::getB() const +{ + return mB; +} + +void PathfindingLinkset::setB(F32 pB) +{ + mB = pB; +} + +F32 PathfindingLinkset::getC() const +{ + return mC; +} + +void PathfindingLinkset::setC(F32 pC) +{ + mC = pC; +} + +F32 PathfindingLinkset::getD() const +{ + return mD; +} + +void PathfindingLinkset::setD(F32 pD) +{ + mD = pD; +} + +//--------------------------------------------------------------------------- +// PathfindingLinksets +//--------------------------------------------------------------------------- + +PathfindingLinksets::PathfindingLinksets() + : mAllLinksets(), + mFilteredLinksets(), + mIsFilterDirty(false), + mNameFilter() +{ +} + +PathfindingLinksets::PathfindingLinksets(const LLSD& pNavmeshData) + : mAllLinksets(), + mFilteredLinksets(), + mIsFilterDirty(false), + mNameFilter() +{ + parseNavmeshData(pNavmeshData); +} + +PathfindingLinksets::PathfindingLinksets(const PathfindingLinksets& pOther) + : mAllLinksets(pOther.mAllLinksets), + mFilteredLinksets(pOther.mFilteredLinksets), + mIsFilterDirty(pOther.mIsFilterDirty), + mNameFilter(pOther.mNameFilter) +{ +} + +PathfindingLinksets::~PathfindingLinksets() +{ + clearLinksets(); +} + +void PathfindingLinksets::parseNavmeshData(const LLSD& pNavmeshData) +{ + clearLinksets(); + + for (LLSD::map_const_iterator linksetIter = pNavmeshData.beginMap(); + linksetIter != pNavmeshData.endMap(); ++linksetIter) + { + const std::string& uuid(linksetIter->first); + const LLSD& linksetData = linksetIter->second; + PathfindingLinkset linkset(uuid, linksetData); + + mAllLinksets.insert(std::pair(uuid, linkset)); + } + + mIsFilterDirty = true; +} + +void PathfindingLinksets::clearLinksets() +{ + mAllLinksets.clear(); + mFilteredLinksets.clear(); + mIsFilterDirty = false; +} + +const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getAllLinksets() const +{ + return mAllLinksets; +} + +const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getFilteredLinksets() +{ +#if 0 + if (!isFilterActive()) + { + return mAllLinksets; + } + else + { + if (mIsFilterDirty) + { + mFilteredLinksets.clear(); + for (PathfindingLinksetMap::const_iterator linksetIter = mAllLinksets.begin(); + linksetIter != mAllLinksets.end(); ++linksetIter) + { + + } + mIsFilterDirty = false; + } + return mFilteredLinksets; + } +#else + return mAllLinksets; +#endif +} + //--------------------------------------------------------------------------- // LLFloaterPathfindingLinksets //--------------------------------------------------------------------------- @@ -119,6 +405,7 @@ BOOL LLFloaterPathfindingLinksets::isFetchInProgress() const LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) : LLFloater(pSeed), + mPathfindingLinksets(), mFetchState(kFetchInitial), mLinksetsScrollList(NULL), mLinksetsStatus(NULL) @@ -166,91 +453,64 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes setFetchState(kFetchReceived); clearLinksetsList(); + mPathfindingLinksets.parseNavmeshData(pNavmeshData); + const LLVector3& avatarPosition = gAgent.getPositionAgent(); + const PathfindingLinksets::PathfindingLinksetMap& linksetMap = mPathfindingLinksets.getFilteredLinksets(); - for (LLSD::map_const_iterator itemsIter = pNavmeshData.beginMap(); - itemsIter != pNavmeshData.endMap(); ++itemsIter) + for (PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetMap.begin(); + linksetIter != linksetMap.end(); ++linksetIter) { - LLUUID uuid(itemsIter->first); - const LLSD& itemData = itemsIter->second; - - const LLSD::String& itemName = itemData.get("name").asString(); - const LLSD::String& itemDescription = itemData.get("description").asString(); - LLSD::Integer itemLandImpact = itemData.get("landimpact").asInteger(); - LLSD::Boolean isItemFixed = itemData.get("fixed").asBoolean(); - LLSD::Boolean isItemWalkable = true; // XXX stinson: walkable data not coming from service yet - LLSD::Boolean isItemPhantom = itemData.get("phantom").asBoolean(); - LLSD::Real itemA = itemData.get("A").asReal(); - LLSD::Real itemB = itemData.get("B").asReal(); - LLSD::Real itemC = itemData.get("C").asReal(); - LLSD::Real itemD = itemData.get("D").asReal(); - - // XXX stinson: get a better way to get all objects locations in the region as the - // following calculation only returns objects of which the viewer is aware. - LLViewerObject *viewerObject = gObjectList.findObject(uuid); - bool hasDistance = (viewerObject != NULL); - F32 itemDistance = -999.0f; - if (hasDistance) - { - const LLVector3& itemLocation = viewerObject->getPositionAgent(); - itemDistance = dist_vec(avatarPosition, itemLocation); - } + const PathfindingLinkset& linkset(linksetIter->second); LLSD columns; columns[0]["column"] = "name"; - columns[0]["value"] = itemName; + columns[0]["value"] = linkset.getName(); columns[0]["font"] = "SANSSERIF"; columns[1]["column"] = "description"; - columns[1]["value"] = itemDescription; + columns[1]["value"] = linkset.getDescription(); columns[1]["font"] = "SANSSERIF"; columns[2]["column"] = "land_impact"; - columns[2]["value"] = llformat("%1d", itemLandImpact); + columns[2]["value"] = llformat("%1d", linkset.getLandImpact()); columns[2]["font"] = "SANSSERIF"; columns[3]["column"] = "dist_from_you"; - if (hasDistance) - { - columns[3]["value"] = llformat("%1.0f m", itemDistance); - } - else - { - columns[3]["value"] = "--"; - } + columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linkset.getPositionAgent())); columns[3]["font"] = "SANSSERIF"; columns[4]["column"] = "is_fixed"; - columns[4]["value"] = getString(isItemFixed ? "linkset_is_fixed" : "linkset_is_not_fixed"); + columns[4]["value"] = getString(linkset.isFixed() ? "linkset_is_fixed" : "linkset_is_not_fixed"); columns[4]["font"] = "SANSSERIF"; columns[5]["column"] = "is_walkable"; - columns[5]["value"] = getString(isItemWalkable ? "linkset_is_walkable" : "linkset_is_not_walkable"); + columns[5]["value"] = getString(linkset.isWalkable() ? "linkset_is_walkable" : "linkset_is_not_walkable"); columns[5]["font"] = "SANSSERIF"; columns[6]["column"] = "is_phantom"; - columns[6]["value"] = getString(isItemPhantom ? "linkset_is_phantom" : "linkset_is_not_phantom"); + columns[6]["value"] = getString(linkset.isPhantom() ? "linkset_is_phantom" : "linkset_is_not_phantom"); columns[6]["font"] = "SANSSERIF"; columns[7]["column"] = "a_percent"; - columns[7]["value"] = llformat("%2.0f", itemA); + columns[7]["value"] = llformat("%2.0f", linkset.getA()); columns[7]["font"] = "SANSSERIF"; columns[8]["column"] = "b_percent"; - columns[8]["value"] = llformat("%2.0f", itemB); + columns[8]["value"] = llformat("%2.0f", linkset.getB()); columns[8]["font"] = "SANSSERIF"; columns[9]["column"] = "c_percent"; - columns[9]["value"] = llformat("%2.0f", itemC); + columns[9]["value"] = llformat("%2.0f", linkset.getC()); columns[9]["font"] = "SANSSERIF"; columns[10]["column"] = "d_percent"; - columns[10]["value"] = llformat("%2.0f", itemD); + columns[10]["value"] = llformat("%2.0f", linkset.getD()); columns[10]["font"] = "SANSSERIF"; LLSD element; - element["id"] = uuid; + element["id"] = linkset.getUUID().asString(); element["column"] = columns; mLinksetsScrollList->addElement(element); @@ -294,6 +554,7 @@ void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() void LLFloaterPathfindingLinksets::clearLinksetsList() { + mPathfindingLinksets.clearLinksets(); mLinksetsScrollList->deleteAllItems(); updateLinksetsStatusMessage(); } -- cgit v1.2.3 From 6f6641219ea36ad0b4c3b39d0a35c55b1bf0a2fc Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 11 Jan 2012 11:25:45 -0800 Subject: Changing the name of the fetch states to be more informative. --- indra/newview/llfloaterpathfindinglinksets.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 87f667154a..699e105a31 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -390,8 +390,8 @@ BOOL LLFloaterPathfindingLinksets::isFetchInProgress() const switch (getFetchState()) { case kFetchStarting : - case kFetchInProgress : - case kFetchInProgress_MultiRequested : + case kFetchRequestSent : + case kFetchRequestSent_MultiRequested : case kFetchReceived : retVal = true; break; @@ -420,9 +420,9 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() { if (isFetchInProgress()) { - if (getFetchState() == kFetchInProgress) + if (getFetchState() == kFetchRequestSent) { - setFetchState(kFetchInProgress_MultiRequested); + setFetchState(kFetchRequestSent_MultiRequested); } } else @@ -441,7 +441,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() } else { - setFetchState(kFetchInProgress); + setFetchState(kFetchRequestSent); LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this)); } } @@ -581,10 +581,10 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() case kFetchStarting : statusText = getString("linksets_fetching_starting"); break; - case kFetchInProgress : + case kFetchRequestSent : statusText = getString("linksets_fetching_inprogress"); break; - case kFetchInProgress_MultiRequested : + case kFetchRequestSent_MultiRequested : statusText = getString("linksets_fetching_inprogress_multi_request"); break; case kFetchReceived : -- cgit v1.2.3 From c0c642862e8e4b58e185aafdd29460c7a89c6483 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 11 Jan 2012 17:44:49 -0800 Subject: PATH-145: Implementing the basics of filtering on the pathfinding linksets console. Still need some refinments in usability. --- indra/newview/llfloaterpathfindinglinksets.cpp | 352 ++++++++++++++++++++----- 1 file changed, 285 insertions(+), 67 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 699e105a31..af9eda51cd 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -33,11 +33,13 @@ #include "llagent.h" #include "llfloater.h" #include "llfloaterreg.h" +#include "lltextbase.h" +#include "lllineeditor.h" #include "llscrolllistctrl.h" +#include "llcheckboxctrl.h" #include "llresmgr.h" #include "llviewerregion.h" #include "llhttpclient.h" -#include "lltextbase.h" #include "lluuid.h" //--------------------------------------------------------------------------- @@ -257,6 +259,83 @@ void PathfindingLinkset::setD(F32 pD) mD = pD; } +//--------------------------------------------------------------------------- +// FilterString +//--------------------------------------------------------------------------- + +FilterString::FilterString() + : mFilter(), + mUpperFilter() +{ +} + +FilterString::FilterString(const std::string& pFilter) + : mFilter(pFilter), + mUpperFilter() +{ + LLStringUtil::trim(mFilter); + mUpperFilter = mFilter; + if (!mUpperFilter.empty()) + { + LLStringUtil::toUpper(mUpperFilter); + } +} + +FilterString::FilterString(const FilterString& pOther) + : mFilter(pOther.mFilter), + mUpperFilter(pOther.mUpperFilter) +{ +} + +FilterString::~FilterString() +{ +} + +const std::string& FilterString::get() const +{ + return mFilter; +} + +bool FilterString::set(const std::string& pFilter) +{ + std::string newFilter(pFilter); + LLStringUtil::trim(newFilter); + bool didFilterChange = (mFilter.compare(newFilter) != 0); + if (didFilterChange) + { + mFilter = newFilter; + mUpperFilter = newFilter; + LLStringUtil::toUpper(mUpperFilter); + } + + return didFilterChange; +} + +void FilterString::clear() +{ + mFilter.clear(); + mUpperFilter.clear(); +} + +bool FilterString::isActive() const +{ + return !mFilter.empty(); +} + +bool FilterString::doesMatch(const std::string& pTestString) const +{ + bool doesMatch = true; + + if (isActive()) + { + std::string upperTestString(pTestString); + LLStringUtil::toUpper(upperTestString); + doesMatch = (upperTestString.find(mUpperFilter) != std::string::npos); + } + + return doesMatch; +} + //--------------------------------------------------------------------------- // PathfindingLinksets //--------------------------------------------------------------------------- @@ -264,16 +343,22 @@ void PathfindingLinkset::setD(F32 pD) PathfindingLinksets::PathfindingLinksets() : mAllLinksets(), mFilteredLinksets(), - mIsFilterDirty(false), - mNameFilter() + mIsFiltersDirty(false), + mNameFilter(), + mDescriptionFilter(), + mIsFixedFilter(false), + mIsWalkableFilter(false) { } PathfindingLinksets::PathfindingLinksets(const LLSD& pNavmeshData) : mAllLinksets(), mFilteredLinksets(), - mIsFilterDirty(false), - mNameFilter() + mIsFiltersDirty(false), + mNameFilter(), + mDescriptionFilter(), + mIsFixedFilter(false), + mIsWalkableFilter(false) { parseNavmeshData(pNavmeshData); } @@ -281,8 +366,11 @@ PathfindingLinksets::PathfindingLinksets(const LLSD& pNavmeshData) PathfindingLinksets::PathfindingLinksets(const PathfindingLinksets& pOther) : mAllLinksets(pOther.mAllLinksets), mFilteredLinksets(pOther.mFilteredLinksets), - mIsFilterDirty(pOther.mIsFilterDirty), - mNameFilter(pOther.mNameFilter) + mIsFiltersDirty(pOther.mIsFiltersDirty), + mNameFilter(pOther.mNameFilter), + mDescriptionFilter(pOther.mDescriptionFilter), + mIsFixedFilter(pOther.mIsFixedFilter), + mIsWalkableFilter(pOther.mIsWalkableFilter) { } @@ -305,14 +393,14 @@ void PathfindingLinksets::parseNavmeshData(const LLSD& pNavmeshData) mAllLinksets.insert(std::pair(uuid, linkset)); } - mIsFilterDirty = true; + mIsFiltersDirty = true; } void PathfindingLinksets::clearLinksets() { mAllLinksets.clear(); mFilteredLinksets.clear(); - mIsFilterDirty = false; + mIsFiltersDirty = false; } const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getAllLinksets() const @@ -322,28 +410,97 @@ const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getAllLin const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getFilteredLinksets() { -#if 0 - if (!isFilterActive()) + if (!isFiltersActive()) { return mAllLinksets; } else { - if (mIsFilterDirty) - { - mFilteredLinksets.clear(); - for (PathfindingLinksetMap::const_iterator linksetIter = mAllLinksets.begin(); - linksetIter != mAllLinksets.end(); ++linksetIter) - { + applyFilters(); + return mFilteredLinksets; + } +} - } - mIsFilterDirty = false; +BOOL PathfindingLinksets::isFiltersActive() const +{ + return (mNameFilter.isActive() || mDescriptionFilter.isActive() || mIsFixedFilter || mIsWalkableFilter); +} + +void PathfindingLinksets::setNameFilter(const std::string& pNameFilter) +{ + mIsFiltersDirty = (mNameFilter.set(pNameFilter) || mIsFiltersDirty); +} + +const std::string& PathfindingLinksets::getNameFilter() const +{ + return mNameFilter.get(); +} + +void PathfindingLinksets::setDescriptionFilter(const std::string& pDescriptionFilter) +{ + mIsFiltersDirty = (mDescriptionFilter.set(pDescriptionFilter) || mIsFiltersDirty); +} + +const std::string& PathfindingLinksets::getDescriptionFilter() const +{ + return mDescriptionFilter.get(); +} + +void PathfindingLinksets::setFixedFilter(BOOL pFixedFilter) +{ + mIsFiltersDirty = (mIsFiltersDirty || (mIsFixedFilter == pFixedFilter)); + mIsFixedFilter = pFixedFilter; +} + +BOOL PathfindingLinksets::isFixedFilter() const +{ + return mIsFixedFilter; +} + +void PathfindingLinksets::setWalkableFilter(BOOL pWalkableFilter) +{ + mIsFiltersDirty = (mIsFiltersDirty || (mIsWalkableFilter == pWalkableFilter)); + mIsWalkableFilter = pWalkableFilter; +} + +BOOL PathfindingLinksets::isWalkableFilter() const +{ + return mIsWalkableFilter; +} + +void PathfindingLinksets::clearFilters() +{ + mNameFilter.clear(); + mDescriptionFilter.clear(); + mIsFixedFilter = false; + mIsWalkableFilter = false; + mIsFiltersDirty = false; +} + +void PathfindingLinksets::applyFilters() +{ + mFilteredLinksets.clear(); + + for (PathfindingLinksetMap::const_iterator linksetIter = mAllLinksets.begin(); + linksetIter != mAllLinksets.end(); ++linksetIter) + { + const std::string& uuid(linksetIter->first); + const PathfindingLinkset& linkset(linksetIter->second); + if (doesMatchFilters(linkset)) + { + mFilteredLinksets.insert(std::pair(uuid, linkset)); } - return mFilteredLinksets; } -#else - return mAllLinksets; -#endif + + mIsFiltersDirty = false; +} + +BOOL PathfindingLinksets::doesMatchFilters(const PathfindingLinkset& pLinkset) const +{ + return ((!mIsFixedFilter || pLinkset.isFixed()) && + (!mIsWalkableFilter || pLinkset.isWalkable()) && + (!mNameFilter.isActive() || mNameFilter.doesMatch(pLinkset.getName())) && + (!mDescriptionFilter.isActive() || mDescriptionFilter.doesMatch(pLinkset.getDescription()))); } //--------------------------------------------------------------------------- @@ -352,6 +509,8 @@ const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getFilter BOOL LLFloaterPathfindingLinksets::postBuild() { + childSetAction("apply_filters", boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + childSetAction("clear_filters", boost::bind(&LLFloaterPathfindingLinksets::onClearFiltersClicked, this)); childSetAction("refresh_linksets_list", boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this)); childSetAction("select_all_linksets", boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this)); childSetAction("select_none_linksets", boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this)); @@ -364,6 +523,26 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLinksetsStatus = findChild("linksets_status"); llassert(mLinksetsStatus != NULL); + mFilterByName = findChild("filter_by_name"); + llassert(mFilterByName != NULL); + mFilterByName->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + mFilterByName->setSelectAllonFocusReceived(true); + mFilterByName->setCommitOnFocusLost(true); + + mFilterByDescription = findChild("filter_by_description"); + llassert(mFilterByDescription != NULL); + mFilterByDescription->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + mFilterByDescription->setSelectAllonFocusReceived(true); + mFilterByDescription->setCommitOnFocusLost(true); + + mFilterByFixed = findChild("filter_by_fixed"); + llassert(mFilterByFixed != NULL); + mFilterByFixed->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + + mFilterByWalkable = findChild("filter_by_walkable"); + llassert(mFilterByWalkable != NULL); + mFilterByWalkable->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + setFetchState(kFetchInitial); return LLFloater::postBuild(); @@ -408,7 +587,11 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mPathfindingLinksets(), mFetchState(kFetchInitial), mLinksetsScrollList(NULL), - mLinksetsStatus(NULL) + mLinksetsStatus(NULL), + mFilterByName(NULL), + mFilterByDescription(NULL), + mFilterByFixed(NULL), + mFilterByWalkable(NULL) { } @@ -428,7 +611,8 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() else { setFetchState(kFetchStarting); - clearLinksetsList(); + mPathfindingLinksets.clearLinksets(); + updateLinksetsList(); LLViewerRegion* region = gAgent.getRegion(); if (region != NULL) @@ -451,9 +635,78 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmeshData) { setFetchState(kFetchReceived); - clearLinksetsList(); - mPathfindingLinksets.parseNavmeshData(pNavmeshData); + updateLinksetsList(); + setFetchState(kFetchComplete); +} + +void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason) +{ + setFetchState(kFetchError); + mPathfindingLinksets.clearLinksets(); + updateLinksetsList(); + llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl; +} + +void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) +{ + mFetchState = pFetchState; + updateLinksetsStatusMessage(); +} + +void LLFloaterPathfindingLinksets::onApplyFiltersClicked() +{ + applyFilters(); +} + +void LLFloaterPathfindingLinksets::onClearFiltersClicked() +{ + clearFilters(); +} + +void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() +{ + updateLinksetsStatusMessage(); +} + +void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() +{ + sendNavmeshDataGetRequest(); +} + +void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() +{ + selectAllLinksets(); +} + +void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() +{ + selectNoneLinksets(); +} + +void LLFloaterPathfindingLinksets::applyFilters() +{ + mPathfindingLinksets.setNameFilter(mFilterByName->getText()); + mPathfindingLinksets.setDescriptionFilter(mFilterByDescription->getText()); + mPathfindingLinksets.setFixedFilter(mFilterByFixed->get()); + mPathfindingLinksets.setWalkableFilter(mFilterByWalkable->get()); + updateLinksetsList(); +} + +void LLFloaterPathfindingLinksets::clearFilters() +{ + mPathfindingLinksets.clearFilters(); + mFilterByName->setText(LLStringExplicit(mPathfindingLinksets.getNameFilter())); + mFilterByDescription->setText(LLStringExplicit(mPathfindingLinksets.getDescriptionFilter())); + mFilterByFixed->set(mPathfindingLinksets.isFixedFilter()); + mFilterByWalkable->set(mPathfindingLinksets.isWalkableFilter()); + updateLinksetsList(); +} + +void LLFloaterPathfindingLinksets::updateLinksetsList() +{ + mLinksetsScrollList->deleteAllItems(); + updateLinksetsStatusMessage(); const LLVector3& avatarPosition = gAgent.getPositionAgent(); const PathfindingLinksets::PathfindingLinksetMap& linksetMap = mPathfindingLinksets.getFilteredLinksets(); @@ -516,46 +769,6 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes mLinksetsScrollList->addElement(element); } - setFetchState(kFetchComplete); -} - -void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason) -{ - setFetchState(kFetchError); - clearLinksetsList(); - llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl; -} - -void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) -{ - mFetchState = pFetchState; - updateLinksetsStatusMessage(); -} - -void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() -{ - updateLinksetsStatusMessage(); -} - -void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() -{ - sendNavmeshDataGetRequest(); -} - -void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() -{ - selectAllLinksets(); -} - -void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() -{ - selectNoneLinksets(); -} - -void LLFloaterPathfindingLinksets::clearLinksetsList() -{ - mPathfindingLinksets.clearLinksets(); - mLinksetsScrollList->deleteAllItems(); updateLinksetsStatusMessage(); } @@ -626,6 +839,10 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams); } +//--------------------------------------------------------------------------- +// NavmeshDataGetResponder +//--------------------------------------------------------------------------- + NavmeshDataGetResponder::NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) : mNavmeshDataGetURL(pNavmeshDataGetURL), mLinksetsFloater(pLinksetsFloater) @@ -646,3 +863,4 @@ void NavmeshDataGetResponder::error(U32 status, const std::string& reason) { mLinksetsFloater->handleNavmeshDataGetError(mNavmeshDataGetURL, reason); } + -- cgit v1.2.3 From 218c8c9476dbc31507b114fd920f001176e28a84 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 12 Jan 2012 12:02:35 -0800 Subject: Adding some fake data to the linksets UI grid for development purposes. --- indra/newview/llfloaterpathfindinglinksets.cpp | 138 +++++++++++++++++++++++++ 1 file changed, 138 insertions(+) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index af9eda51cd..d0c85d3ef6 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -42,6 +42,8 @@ #include "llhttpclient.h" #include "lluuid.h" +#define XXX_STINSON_USE_FAKE_DATA + //--------------------------------------------------------------------------- // NavmeshDataGetResponder //--------------------------------------------------------------------------- @@ -601,6 +603,141 @@ LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() { +#ifdef XXX_STINSON_USE_FAKE_DATA + LLSD allData; + + const std::string firstUUID("37198314751"); + LLSD firstData; + firstData["name"] = "Curabitur malesuada"; + firstData["description"] = "Accusam nominavi contentiones per ad"; + firstData["landimpact"] = S32(57); + firstData["fixed"] = bool(false); + firstData["walkable"] = bool(false); + firstData["phantom"] = bool(false); + firstData["A"] = F32(37.5f); + firstData["B"] = F32(7.8f); + firstData["C"] = F32(98.6f); + firstData["D"] = F32(0.0f); + LLVector3 firstLocation(135.0f, 57.0f, 2.0f); + firstData["position"] = firstLocation.getValue(); + + const std::string secondUUID("5467227"); + LLSD secondData; + secondData["name"] = "At tota"; + secondData["description"] = "His ad placerat tincidun"; + secondData["landimpact"] = S32(2); + secondData["fixed"] = bool(false); + secondData["walkable"] = bool(false); + secondData["phantom"] = bool(true); + secondData["A"] = F32(30.5f); + secondData["B"] = F32(70.8f); + secondData["C"] = F32(100.0f); + secondData["D"] = F32(0.1f); + LLVector3 secondLocation(15.0f, 157.0f, 22.0f); + secondData["position"] = secondLocation.getValue(); + + const std::string thirdUUID("897234"); + LLSD thirdData; + thirdData["name"] = "No soleat"; + thirdData["description"] = ""; + thirdData["landimpact"] = S32(200); + thirdData["fixed"] = bool(false); + thirdData["walkable"] = bool(true); + thirdData["phantom"] = bool(false); + thirdData["A"] = F32(58.5f); + thirdData["B"] = F32(8.0f); + thirdData["C"] = F32(2.0f); + thirdData["D"] = F32(15.5f); + LLVector3 thirdLocation(577.0f, 14.0f, -14.5f); + thirdData["position"] = thirdLocation.getValue(); + + const std::string fourthUUID("498792"); + LLSD fourthData; + fourthData["name"] = "Paulo tritani bonorum"; + fourthData["description"] = "Vis verear impetus"; + fourthData["landimpact"] = S32(56); + fourthData["fixed"] = bool(false); + fourthData["walkable"] = bool(true); + fourthData["phantom"] = bool(true); + fourthData["A"] = F32(100.0f); + fourthData["B"] = F32(100.0f); + fourthData["C"] = F32(0.0f); + fourthData["D"] = F32(0.0f); + LLVector3 fourthLocation(215.0f, 57.0f, 5.0f); + fourthData["position"] = fourthLocation.getValue(); + + const std::string fifthUUID("5996732"); + LLSD fifthData; + fifthData["name"] = "Curabitur malesuada"; + fifthData["description"] = "Reque possit philosophia"; + fifthData["landimpact"] = S32(20); + fifthData["fixed"] = bool(true); + fifthData["walkable"] = bool(false); + fifthData["phantom"] = bool(false); + fifthData["A"] = F32(37.5f); + fifthData["B"] = F32(7.8f); + fifthData["C"] = F32(98.6f); + fifthData["D"] = F32(0.0f); + LLVector3 fifthLocation(135.0f, 57.0f, 2.0f); + fifthData["position"] = fifthLocation.getValue(); + + const std::string sixthUUID("03217522"); + LLSD sixthData; + sixthData["name"] = "At tota"; + sixthData["description"] = "Usu no aliquid dignissim"; + sixthData["landimpact"] = S32(257); + sixthData["fixed"] = bool(true); + sixthData["walkable"] = bool(false); + sixthData["phantom"] = bool(true); + sixthData["A"] = F32(0.0f); + sixthData["B"] = F32(0.0f); + sixthData["C"] = F32(100.0f); + sixthData["D"] = F32(0.1f); + LLVector3 sixthLocation(315.0f, 57.0f, 12.0f); + sixthData["position"] = sixthLocation.getValue(); + + const std::string seventhUUID("7844327"); + LLSD seventhData; + seventhData["name"] = "No soleat"; + seventhData["description"] = "honestatis"; + seventhData["landimpact"] = S32(25); + seventhData["fixed"] = bool(true); + seventhData["walkable"] = bool(true); + seventhData["phantom"] = bool(false); + seventhData["A"] = F32(55.4f); + seventhData["B"] = F32(27.12f); + seventhData["C"] = F32(32.5f); + seventhData["D"] = F32(15.5f); + LLVector3 seventhLocation(7.0f, 0.0f, 0.0f); + seventhData["position"] = seventhLocation.getValue(); + + const std::string eigthUUID("2478739685"); + LLSD eigthData; + eigthData["name"] = "Sea te aliquam"; + eigthData["description"] = ""; + eigthData["landimpact"] = S32(17); + eigthData["fixed"] = bool(true); + eigthData["walkable"] = bool(true); + eigthData["phantom"] = bool(true); + eigthData["A"] = F32(10.0f); + eigthData["B"] = F32(10.0f); + eigthData["C"] = F32(50.0f); + eigthData["D"] = F32(60.0f); + LLVector3 eigthLocation(25.0f, 7.0f, 5.0f); + eigthData["position"] = eigthLocation.getValue(); + + allData[firstUUID] = firstData; + allData[secondUUID] = secondData; + allData[thirdUUID] = thirdData; + allData[fourthUUID] = fourthData; + allData[fifthUUID] = fifthData; + allData[sixthUUID] = sixthData; + allData[seventhUUID] = seventhData; + allData[eigthUUID] = eigthData; + + handleNavmeshDataGetReply(allData); + +#else // XXX_STINSON_USE_FAKE_DATA if (isFetchInProgress()) { if (getFetchState() == kFetchRequestSent) @@ -630,6 +767,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() } } } +#endif } void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmeshData) -- cgit v1.2.3 From a2db329ce9349d6c5ca337be284ffbe339d8d864 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 12 Jan 2012 17:47:32 -0800 Subject: PATH-145: Preserving all possible selected items between filter changes. --- indra/newview/llfloaterpathfindinglinksets.cpp | 35 ++++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index d0c85d3ef6..fb14563cbf 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -43,6 +43,10 @@ #include "lluuid.h" #define XXX_STINSON_USE_FAKE_DATA +#ifdef XXX_STINSON_USE_FAKE_DATA +#include "llviewerobject.h" +#include "llviewerobjectlist.h" +#endif // XXX_STINSON_USE_FAKE_DATA //--------------------------------------------------------------------------- // NavmeshDataGetResponder @@ -606,7 +610,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() #ifdef XXX_STINSON_USE_FAKE_DATA LLSD allData; - const std::string firstUUID("37198314751"); + const std::string firstUUID(gObjectList.getObject(0)->getID().asString()); LLSD firstData; firstData["name"] = "Curabitur malesuada"; firstData["description"] = "Accusam nominavi contentiones per ad"; @@ -621,7 +625,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() LLVector3 firstLocation(135.0f, 57.0f, 2.0f); firstData["position"] = firstLocation.getValue(); - const std::string secondUUID("5467227"); + const std::string secondUUID(gObjectList.getObject(1)->getID().asString()); LLSD secondData; secondData["name"] = "At tota"; secondData["description"] = "His ad placerat tincidun"; @@ -636,7 +640,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() LLVector3 secondLocation(15.0f, 157.0f, 22.0f); secondData["position"] = secondLocation.getValue(); - const std::string thirdUUID("897234"); + const std::string thirdUUID(gObjectList.getObject(2)->getID().asString()); LLSD thirdData; thirdData["name"] = "No soleat"; thirdData["description"] = ""; @@ -651,7 +655,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() LLVector3 thirdLocation(577.0f, 14.0f, -14.5f); thirdData["position"] = thirdLocation.getValue(); - const std::string fourthUUID("498792"); + const std::string fourthUUID(gObjectList.getObject(3)->getID().asString()); LLSD fourthData; fourthData["name"] = "Paulo tritani bonorum"; fourthData["description"] = "Vis verear impetus"; @@ -666,7 +670,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() LLVector3 fourthLocation(215.0f, 57.0f, 5.0f); fourthData["position"] = fourthLocation.getValue(); - const std::string fifthUUID("5996732"); + const std::string fifthUUID(gObjectList.getObject(4)->getID().asString()); LLSD fifthData; fifthData["name"] = "Curabitur malesuada"; fifthData["description"] = "Reque possit philosophia"; @@ -681,7 +685,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() LLVector3 fifthLocation(135.0f, 57.0f, 2.0f); fifthData["position"] = fifthLocation.getValue(); - const std::string sixthUUID("03217522"); + const std::string sixthUUID(gObjectList.getObject(5)->getID().asString()); LLSD sixthData; sixthData["name"] = "At tota"; sixthData["description"] = "Usu no aliquid dignissim"; @@ -696,7 +700,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() LLVector3 sixthLocation(315.0f, 57.0f, 12.0f); sixthData["position"] = sixthLocation.getValue(); - const std::string seventhUUID("7844327"); + const std::string seventhUUID(gObjectList.getObject(6)->getID().asString()); LLSD seventhData; seventhData["name"] = "No soleat"; seventhData["description"] = "honestatis"; @@ -711,7 +715,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() LLVector3 seventhLocation(7.0f, 0.0f, 0.0f); seventhData["position"] = seventhLocation.getValue(); - const std::string eigthUUID("2478739685"); + const std::string eigthUUID(gObjectList.getObject(7)->getID().asString()); LLSD eigthData; eigthData["name"] = "Sea te aliquam"; eigthData["description"] = ""; @@ -843,6 +847,20 @@ void LLFloaterPathfindingLinksets::clearFilters() void LLFloaterPathfindingLinksets::updateLinksetsList() { + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + int numSelectedItems = selectedItems.size(); + uuid_vec_t selectedUUIDs; + if (numSelectedItems > 0) + { + selectedUUIDs.reserve(selectedItems.size()); + for (std::vector::const_iterator itemIter = selectedItems.begin(); + itemIter != selectedItems.end(); ++itemIter) + { + const LLScrollListItem *listItem = *itemIter; + selectedUUIDs.push_back(listItem->getUUID()); + } + } + mLinksetsScrollList->deleteAllItems(); updateLinksetsStatusMessage(); @@ -907,6 +925,7 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() mLinksetsScrollList->addElement(element); } + mLinksetsScrollList->selectMultiple(selectedUUIDs); updateLinksetsStatusMessage(); } -- cgit v1.2.3 From 2cc9c54fc6027871a320b6a3dfbb212994eb949f Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 13 Jan 2012 11:12:15 -0800 Subject: Updating to the latest llpathinglib package. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index fb14563cbf..ab2f551228 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -42,7 +42,7 @@ #include "llhttpclient.h" #include "lluuid.h" -#define XXX_STINSON_USE_FAKE_DATA +//#define XXX_STINSON_USE_FAKE_DATA #ifdef XXX_STINSON_USE_FAKE_DATA #include "llviewerobject.h" #include "llviewerobjectlist.h" -- cgit v1.2.3 From fa03d3ee3d9bcf213754250a8180a65156bffe8d Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 13 Jan 2012 17:16:43 -0800 Subject: PATH-186: Starting to build some baseline UI functionality to support the editing of linnkset fields. --- indra/newview/llfloaterpathfindinglinksets.cpp | 125 ++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index ab2f551228..11211feb43 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -30,6 +30,7 @@ #include "llfloaterpathfindinglinksets.h" #include "llsd.h" #include "v3math.h" +#include "lltextvalidate.h" #include "llagent.h" #include "llfloater.h" #include "llfloaterreg.h" @@ -37,6 +38,7 @@ #include "lllineeditor.h" #include "llscrolllistctrl.h" #include "llcheckboxctrl.h" +#include "llbutton.h" #include "llresmgr.h" #include "llviewerregion.h" #include "llhttpclient.h" @@ -549,6 +551,36 @@ BOOL LLFloaterPathfindingLinksets::postBuild() llassert(mFilterByWalkable != NULL); mFilterByWalkable->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + mEditFixed = findChild("edit_fixed_value"); + llassert(mEditFixed != NULL); + + mEditWalkable = findChild("edit_walkable_value"); + llassert(mEditWalkable != NULL); + + mEditPhantom = findChild("edit_phantom_value"); + llassert(mEditPhantom != NULL); + + mEditA = findChild("edit_a_value"); + llassert(mEditA != NULL); + mEditA->setPrevalidate(LLTextValidate::validateFloat); + + mEditB = findChild("edit_b_value"); + llassert(mEditB != NULL); + mEditB->setPrevalidate(LLTextValidate::validateFloat); + + mEditC = findChild("edit_c_value"); + llassert(mEditC != NULL); + mEditC->setPrevalidate(LLTextValidate::validateFloat); + + mEditD = findChild("edit_d_value"); + llassert(mEditD != NULL); + mEditD->setPrevalidate(LLTextValidate::validateFloat); + + mApplyEdits = findChild("apply_edit_values"); + llassert(mApplyEdits != NULL); + mApplyEdits->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); + mApplyEdits->setEnabled(false); + setFetchState(kFetchInitial); return LLFloater::postBuild(); @@ -597,7 +629,14 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mFilterByName(NULL), mFilterByDescription(NULL), mFilterByFixed(NULL), - mFilterByWalkable(NULL) + mFilterByWalkable(NULL), + mEditFixed(NULL), + mEditWalkable(NULL), + mEditA(NULL), + mEditB(NULL), + mEditC(NULL), + mEditD(NULL), + mApplyEdits(NULL) { } @@ -809,6 +848,7 @@ void LLFloaterPathfindingLinksets::onClearFiltersClicked() void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() { updateLinksetsStatusMessage(); + updateEditFields(); } void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() @@ -826,6 +866,11 @@ void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() selectNoneLinksets(); } +void LLFloaterPathfindingLinksets::onApplyChangesClicked() +{ + applyEditFields(); +} + void LLFloaterPathfindingLinksets::applyFilters() { mPathfindingLinksets.setNameFilter(mFilterByName->getText()); @@ -996,6 +1041,83 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams); } +void LLFloaterPathfindingLinksets::updateEditFields() +{ + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (selectedItems.empty()) + { + mEditFixed->clear(); + mEditWalkable->clear(); + mEditPhantom->clear(); + mEditA->clear(); + mEditB->clear(); + mEditC->clear(); + mEditD->clear(); + + mApplyEdits->setEnabled(false); + } + else + { + LLScrollListItem *firstItem = selectedItems.front(); + + const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); + PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(firstItem->getUUID().asString()); + const PathfindingLinkset &linkset(linksetIter->second); + + mEditFixed->set(linkset.isFixed()); + mEditWalkable->set(linkset.isWalkable()); + mEditPhantom->set(linkset.isPhantom()); + mEditA->setValue(LLSD(linkset.getA())); + mEditB->setValue(LLSD(linkset.getB())); + mEditC->setValue(LLSD(linkset.getC())); + mEditD->setValue(LLSD(linkset.getD())); + + mApplyEdits->setEnabled(true); + } +} + +void LLFloaterPathfindingLinksets::applyEditFields() +{ + BOOL isFixedBool = mEditFixed->getValue(); + BOOL isWalkableBool = mEditWalkable->getValue(); + BOOL isPhantomBool = mEditPhantom->getValue(); + const std::string &aString = mEditA->getText(); + const std::string &bString = mEditB->getText(); + const std::string &cString = mEditC->getText(); + const std::string &dString = mEditD->getText(); + F32 aValue = (F32)atof(aString.c_str()); + F32 bValue = (F32)atof(bString.c_str()); + F32 cValue = (F32)atof(cString.c_str()); + F32 dValue = (F32)atof(dString.c_str()); + + LLSD isFixed = (bool)isFixedBool; + LLSD isWalkable = (bool)isWalkableBool; + LLSD isPhantom = (bool)isPhantomBool; + LLSD a = aValue; + LLSD b = bValue; + LLSD c = cValue; + LLSD d = dValue; + + LLSD applyData; + applyData["fixed"] = isFixed; + applyData["walkable"] = isWalkable; + applyData["phantom"] = isPhantom; + applyData["a"] = a; + applyData["b"] = b; + applyData["c"] = c; + applyData["d"] = d; + + llinfos << "Apply changes:" << llendl; + llinfos << " isFixed: " << isFixed << llendl; + llinfos << " isWalkable: " << isWalkable << llendl; + llinfos << " isPhantom: " << isPhantom << llendl; + llinfos << " a: " << a << llendl; + llinfos << " b: " << b << llendl; + llinfos << " c: " << c << llendl; + llinfos << " d: " << d << llendl; + llinfos << " applyData: " << applyData << llendl; +} + //--------------------------------------------------------------------------- // NavmeshDataGetResponder //--------------------------------------------------------------------------- @@ -1020,4 +1142,3 @@ void NavmeshDataGetResponder::error(U32 status, const std::string& reason) { mLinksetsFloater->handleNavmeshDataGetError(mNavmeshDataGetURL, reason); } - -- cgit v1.2.3 From 7e213192a2b799e0b3d8590bbc5c81c80a2ee0fa Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 17 Jan 2012 17:31:46 -0800 Subject: PATH-186: Enabling and disabling the edit fields based on whether linksets are selected. --- indra/newview/llfloaterpathfindinglinksets.cpp | 44 ++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 11211feb43..732427103f 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -560,6 +560,21 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mEditPhantom = findChild("edit_phantom_value"); llassert(mEditPhantom != NULL); + mLabelWalkabilityCoefficients = findChild("walkability_coefficients_label"); + llassert(mLabelWalkabilityCoefficients != NULL); + + mLabelEditA = findChild("edit_a_label"); + llassert(mLabelEditA != NULL); + + mLabelEditB = findChild("edit_b_label"); + llassert(mLabelEditB != NULL); + + mLabelEditC = findChild("edit_c_label"); + llassert(mLabelEditC != NULL); + + mLabelEditD = findChild("edit_d_label"); + llassert(mLabelEditD != NULL); + mEditA = findChild("edit_a_value"); llassert(mEditA != NULL); mEditA->setPrevalidate(LLTextValidate::validateFloat); @@ -579,8 +594,8 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mApplyEdits = findChild("apply_edit_values"); llassert(mApplyEdits != NULL); mApplyEdits->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); - mApplyEdits->setEnabled(false); + setEnableEditFields(false); setFetchState(kFetchInitial); return LLFloater::postBuild(); @@ -632,6 +647,12 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mFilterByWalkable(NULL), mEditFixed(NULL), mEditWalkable(NULL), + mEditPhantom(NULL), + mLabelWalkabilityCoefficients(NULL), + mLabelEditA(NULL), + mLabelEditB(NULL), + mLabelEditC(NULL), + mLabelEditD(NULL), mEditA(NULL), mEditB(NULL), mEditC(NULL), @@ -1054,7 +1075,7 @@ void LLFloaterPathfindingLinksets::updateEditFields() mEditC->clear(); mEditD->clear(); - mApplyEdits->setEnabled(false); + setEnableEditFields(false); } else { @@ -1072,7 +1093,7 @@ void LLFloaterPathfindingLinksets::updateEditFields() mEditC->setValue(LLSD(linkset.getC())); mEditD->setValue(LLSD(linkset.getD())); - mApplyEdits->setEnabled(true); + setEnableEditFields(true); } } @@ -1118,6 +1139,23 @@ void LLFloaterPathfindingLinksets::applyEditFields() llinfos << " applyData: " << applyData << llendl; } +void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) +{ + mEditFixed->setEnabled(pEnabled); + mEditWalkable->setEnabled(pEnabled); + mEditPhantom->setEnabled(pEnabled); + mLabelWalkabilityCoefficients->setEnabled(pEnabled); + mLabelEditA->setEnabled(pEnabled); + mLabelEditB->setEnabled(pEnabled); + mLabelEditC->setEnabled(pEnabled); + mLabelEditD->setEnabled(pEnabled); + mEditA->setEnabled(pEnabled); + mEditB->setEnabled(pEnabled); + mEditC->setEnabled(pEnabled); + mEditD->setEnabled(pEnabled); + mApplyEdits->setEnabled(pEnabled); +} + //--------------------------------------------------------------------------- // NavmeshDataGetResponder //--------------------------------------------------------------------------- -- cgit v1.2.3 From ceac8882c69eab1447ded270c8d93334fd3180d0 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 18 Jan 2012 11:24:33 -0800 Subject: PATH-186: Sending the PUT to update the modified fields. However, still relying on the GET response handlers for now. --- indra/newview/llfloaterpathfindinglinksets.cpp | 248 ++++++++++++++++++++----- 1 file changed, 197 insertions(+), 51 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 732427103f..29cfefa2d3 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -36,6 +36,7 @@ #include "llfloaterreg.h" #include "lltextbase.h" #include "lllineeditor.h" +#include "llscrolllistitem.h" #include "llscrolllistctrl.h" #include "llcheckboxctrl.h" #include "llbutton.h" @@ -70,6 +71,26 @@ private: LLFloaterPathfindingLinksets *mLinksetsFloater; }; +//--------------------------------------------------------------------------- +// NavmeshDataPutResponder +//--------------------------------------------------------------------------- + +class NavmeshDataPutResponder : public LLHTTPClient::Responder +{ +public: + NavmeshDataPutResponder(const std::string& pNavmeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater); + virtual ~NavmeshDataPutResponder(); + + virtual void result(const LLSD& pContent); + virtual void error(U32 pStatus, const std::string& pReason); + +private: + NavmeshDataPutResponder(const NavmeshDataPutResponder& pOther); + + std::string mNavmeshDataPutURL; + LLFloaterPathfindingLinksets *mLinksetsFloater; +}; + //--------------------------------------------------------------------------- // PathfindingLinkset //--------------------------------------------------------------------------- @@ -815,25 +836,34 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() mPathfindingLinksets.clearLinksets(); updateLinksetsList(); - LLViewerRegion* region = gAgent.getRegion(); - if (region != NULL) + std::string navmeshDataURL = this->getCapabilityURL(); + if (navmeshDataURL.empty()) { - std::string navmeshDataURL = region->getCapability("ObjectNavmesh"); - if (navmeshDataURL.empty()) - { - setFetchState(kFetchComplete); - llwarns << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl; - } - else - { - setFetchState(kFetchRequestSent); - LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this)); - } + setFetchState(kFetchComplete); + llwarns << "cannot query navmesh data from current region '" << getRegionName() << "'" << llendl; + } + else + { + setFetchState(kFetchRequestSent); + LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this)); } } #endif } +void LLFloaterPathfindingLinksets::sendNavmeshDataPutRequest(const LLSD& pPostData) +{ + std::string navmeshDataURL = this->getCapabilityURL(); + if (navmeshDataURL.empty()) + { + llwarns << "cannot put navmesh data for current region '" << getRegionName() << "'" << llendl; + } + else + { + LLHTTPClient::put(navmeshDataURL, pPostData, new NavmeshDataPutResponder(navmeshDataURL, this)); + } +} + void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmeshData) { setFetchState(kFetchReceived); @@ -850,6 +880,48 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl; } +void LLFloaterPathfindingLinksets::handleNavmeshDataPutReply(const LLSD& pModifiedData) +{ + setFetchState(kFetchReceived); + mPathfindingLinksets.parseNavmeshData(pModifiedData); + updateLinksetsList(); + setFetchState(kFetchComplete); +} + +void LLFloaterPathfindingLinksets::handleNavmeshDataPutError(const std::string& pURL, const std::string& pErrorReason) +{ + setFetchState(kFetchError); + mPathfindingLinksets.clearLinksets(); + updateLinksetsList(); + llwarns << "Error putting navmesh data to URL '" << pURL << "' because " << pErrorReason << llendl; +} + +std::string LLFloaterPathfindingLinksets::getRegionName() const +{ + std::string regionName(""); + + LLViewerRegion* region = gAgent.getRegion(); + if (region != NULL) + { + regionName = region->getName(); + } + + return regionName; +} + +std::string LLFloaterPathfindingLinksets::getCapabilityURL() const +{ + std::string navmeshDataURL(""); + + LLViewerRegion* region = gAgent.getRegion(); + if (region != NULL) + { + navmeshDataURL = region->getCapability("ObjectNavmesh"); + } + + return navmeshDataURL; +} + void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) { mFetchState = pFetchState; @@ -1099,44 +1171,93 @@ void LLFloaterPathfindingLinksets::updateEditFields() void LLFloaterPathfindingLinksets::applyEditFields() { - BOOL isFixedBool = mEditFixed->getValue(); - BOOL isWalkableBool = mEditWalkable->getValue(); - BOOL isPhantomBool = mEditPhantom->getValue(); - const std::string &aString = mEditA->getText(); - const std::string &bString = mEditB->getText(); - const std::string &cString = mEditC->getText(); - const std::string &dString = mEditD->getText(); - F32 aValue = (F32)atof(aString.c_str()); - F32 bValue = (F32)atof(bString.c_str()); - F32 cValue = (F32)atof(cString.c_str()); - F32 dValue = (F32)atof(dString.c_str()); - - LLSD isFixed = (bool)isFixedBool; - LLSD isWalkable = (bool)isWalkableBool; - LLSD isPhantom = (bool)isPhantomBool; - LLSD a = aValue; - LLSD b = bValue; - LLSD c = cValue; - LLSD d = dValue; - - LLSD applyData; - applyData["fixed"] = isFixed; - applyData["walkable"] = isWalkable; - applyData["phantom"] = isPhantom; - applyData["a"] = a; - applyData["b"] = b; - applyData["c"] = c; - applyData["d"] = d; - - llinfos << "Apply changes:" << llendl; - llinfos << " isFixed: " << isFixed << llendl; - llinfos << " isWalkable: " << isWalkable << llendl; - llinfos << " isPhantom: " << isPhantom << llendl; - llinfos << " a: " << a << llendl; - llinfos << " b: " << b << llendl; - llinfos << " c: " << c << llendl; - llinfos << " d: " << d << llendl; - llinfos << " applyData: " << applyData << llendl; + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + BOOL isFixedBool = mEditFixed->getValue(); + BOOL isWalkableBool = mEditWalkable->getValue(); + BOOL isPhantomBool = mEditPhantom->getValue(); + const std::string &aString = mEditA->getText(); + const std::string &bString = mEditB->getText(); + const std::string &cString = mEditC->getText(); + const std::string &dString = mEditD->getText(); + F32 aValue = (F32)atof(aString.c_str()); + F32 bValue = (F32)atof(bString.c_str()); + F32 cValue = (F32)atof(cString.c_str()); + F32 dValue = (F32)atof(dString.c_str()); + + LLSD isFixed = (bool)isFixedBool; + LLSD isWalkable = (bool)isWalkableBool; + LLSD isPhantom = (bool)isPhantomBool; + LLSD a = aValue; + LLSD b = bValue; + LLSD c = cValue; + LLSD d = dValue; + + const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); + + LLSD editData; + for (std::vector::const_iterator itemIter = selectedItems.begin(); + itemIter != selectedItems.end(); ++itemIter) + { + const LLScrollListItem *listItem = *itemIter; + LLUUID uuid = listItem->getUUID(); + + const PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString()); + const PathfindingLinkset &linkset = linksetIter->second; + + llinfos << "Item changes:" << llendl; + llinfos << " UUID: " << uuid << llendl; + LLSD itemData; + if (linkset.isFixed() != isFixedBool) + { + itemData["fixed"] = isFixed; + llinfos << " isFixed: " << isFixed << llendl; + } + if (linkset.isWalkable() != isWalkableBool) + { + itemData["walkable"] = isWalkable; + llinfos << " isWalkable: " << isWalkable << llendl; + } + if (linkset.isPhantom() != isPhantomBool) + { + itemData["phantom"] = isPhantom; + llinfos << " isPhantom: " << isPhantom << llendl; + } + if (linkset.getA() != aValue) + { + itemData["a"] = a; + llinfos << " a: " << a << llendl; + } + if (linkset.getB() != bValue) + { + itemData["b"] = b; + llinfos << " b: " << b << llendl; + } + if (linkset.getC() != cValue) + { + itemData["c"] = c; + llinfos << " c: " << c << llendl; + } + if (linkset.getD() != dValue) + { + itemData["d"] = d; + llinfos << " d: " << d << llendl; + } + + llinfos << " itemData: " << itemData << llendl; + editData[uuid.asString()] = itemData; + } + llinfos << "All Data: " << editData << llendl; + if (editData.isUndefined()) + { + llwarns << "No PUT data specified" << llendl; + } + else + { + sendNavmeshDataPutRequest(editData); + } + } } void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) @@ -1180,3 +1301,28 @@ void NavmeshDataGetResponder::error(U32 status, const std::string& reason) { mLinksetsFloater->handleNavmeshDataGetError(mNavmeshDataGetURL, reason); } + +//--------------------------------------------------------------------------- +// NavmeshDataPutResponder +//--------------------------------------------------------------------------- + +NavmeshDataPutResponder::NavmeshDataPutResponder(const std::string& pNavmeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater) + : mNavmeshDataPutURL(pNavmeshDataPutURL), + mLinksetsFloater(pLinksetsFloater) +{ +} + +NavmeshDataPutResponder::~NavmeshDataPutResponder() +{ + mLinksetsFloater = NULL; +} + +void NavmeshDataPutResponder::result(const LLSD& pContent) +{ + mLinksetsFloater->handleNavmeshDataPutReply(pContent); +} + +void NavmeshDataPutResponder::error(U32 status, const std::string& reason) +{ + mLinksetsFloater->handleNavmeshDataPutError(mNavmeshDataPutURL, reason); +} -- cgit v1.2.3 From 3329ba31b5605415fd5a7c49552ebf50726f4c0c Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 18 Jan 2012 12:55:50 -0800 Subject: PATH-186: Completing the linkset editing functionality. Updating the walkability coefficients in the POST body to be upper-case to match server-side. Also, updating the "fixed" parameter to be "permanent" to reflect the upcoming server-side nomenclature change. --- indra/newview/llfloaterpathfindinglinksets.cpp | 95 ++++++++++++-------------- 1 file changed, 42 insertions(+), 53 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 29cfefa2d3..506cc2ea87 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -122,9 +122,9 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa llassert(pNavmeshItem.get("landimpact").asInteger() >= 0); mLandImpact = pNavmeshItem.get("landimpact").asInteger(); - llassert(pNavmeshItem.has("fixed")); - llassert(pNavmeshItem.get("fixed").isBoolean()); - mIsFixed = pNavmeshItem.get("fixed").asBoolean(); + llassert(pNavmeshItem.has("permanent")); + llassert(pNavmeshItem.get("permanent").isBoolean()); + mIsFixed = pNavmeshItem.get("permanent").asBoolean(); llassert(pNavmeshItem.has("walkable")); llassert(pNavmeshItem.get("walkable").isBoolean()); @@ -136,19 +136,19 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa llassert(pNavmeshItem.has("A")); llassert(pNavmeshItem.get("A").isReal()); - mA = pNavmeshItem.get("A").asReal(); + mA = pNavmeshItem.get("A").asReal() * 100.0f; llassert(pNavmeshItem.has("B")); llassert(pNavmeshItem.get("B").isReal()); - mB = pNavmeshItem.get("B").asReal(); + mB = pNavmeshItem.get("B").asReal() * 100.0f; llassert(pNavmeshItem.has("C")); llassert(pNavmeshItem.get("C").isReal()); - mC = pNavmeshItem.get("C").asReal(); + mC = pNavmeshItem.get("C").asReal() * 100.0f; llassert(pNavmeshItem.has("D")); llassert(pNavmeshItem.get("D").isReal()); - mD = pNavmeshItem.get("D").asReal(); + mD = pNavmeshItem.get("D").asReal() * 100.0f; llassert(pNavmeshItem.has("position")); llassert(pNavmeshItem.get("position").isArray()); @@ -699,9 +699,9 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() firstData["fixed"] = bool(false); firstData["walkable"] = bool(false); firstData["phantom"] = bool(false); - firstData["A"] = F32(37.5f); - firstData["B"] = F32(7.8f); - firstData["C"] = F32(98.6f); + firstData["A"] = F32(0.375f); + firstData["B"] = F32(0.078f); + firstData["C"] = F32(0.986f); firstData["D"] = F32(0.0f); LLVector3 firstLocation(135.0f, 57.0f, 2.0f); firstData["position"] = firstLocation.getValue(); @@ -714,10 +714,10 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() secondData["fixed"] = bool(false); secondData["walkable"] = bool(false); secondData["phantom"] = bool(true); - secondData["A"] = F32(30.5f); - secondData["B"] = F32(70.8f); - secondData["C"] = F32(100.0f); - secondData["D"] = F32(0.1f); + secondData["A"] = F32(0.305f); + secondData["B"] = F32(0.708f); + secondData["C"] = F32(1.0f); + secondData["D"] = F32(0.001f); LLVector3 secondLocation(15.0f, 157.0f, 22.0f); secondData["position"] = secondLocation.getValue(); @@ -729,10 +729,10 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() thirdData["fixed"] = bool(false); thirdData["walkable"] = bool(true); thirdData["phantom"] = bool(false); - thirdData["A"] = F32(58.5f); - thirdData["B"] = F32(8.0f); - thirdData["C"] = F32(2.0f); - thirdData["D"] = F32(15.5f); + thirdData["A"] = F32(0.585f); + thirdData["B"] = F32(0.08f); + thirdData["C"] = F32(0.02f); + thirdData["D"] = F32(0.155f); LLVector3 thirdLocation(577.0f, 14.0f, -14.5f); thirdData["position"] = thirdLocation.getValue(); @@ -744,8 +744,8 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() fourthData["fixed"] = bool(false); fourthData["walkable"] = bool(true); fourthData["phantom"] = bool(true); - fourthData["A"] = F32(100.0f); - fourthData["B"] = F32(100.0f); + fourthData["A"] = F32(1.0f); + fourthData["B"] = F32(1.0f); fourthData["C"] = F32(0.0f); fourthData["D"] = F32(0.0f); LLVector3 fourthLocation(215.0f, 57.0f, 5.0f); @@ -759,9 +759,9 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() fifthData["fixed"] = bool(true); fifthData["walkable"] = bool(false); fifthData["phantom"] = bool(false); - fifthData["A"] = F32(37.5f); - fifthData["B"] = F32(7.8f); - fifthData["C"] = F32(98.6f); + fifthData["A"] = F32(0.375f); + fifthData["B"] = F32(0.078f); + fifthData["C"] = F32(0.986f); fifthData["D"] = F32(0.0f); LLVector3 fifthLocation(135.0f, 57.0f, 2.0f); fifthData["position"] = fifthLocation.getValue(); @@ -776,8 +776,8 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() sixthData["phantom"] = bool(true); sixthData["A"] = F32(0.0f); sixthData["B"] = F32(0.0f); - sixthData["C"] = F32(100.0f); - sixthData["D"] = F32(0.1f); + sixthData["C"] = F32(1.0f); + sixthData["D"] = F32(0.001f); LLVector3 sixthLocation(315.0f, 57.0f, 12.0f); sixthData["position"] = sixthLocation.getValue(); @@ -789,10 +789,10 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() seventhData["fixed"] = bool(true); seventhData["walkable"] = bool(true); seventhData["phantom"] = bool(false); - seventhData["A"] = F32(55.4f); - seventhData["B"] = F32(27.12f); - seventhData["C"] = F32(32.5f); - seventhData["D"] = F32(15.5f); + seventhData["A"] = F32(0.554f); + seventhData["B"] = F32(0.2712f); + seventhData["C"] = F32(0.325f); + seventhData["D"] = F32(0.155f); LLVector3 seventhLocation(7.0f, 0.0f, 0.0f); seventhData["position"] = seventhLocation.getValue(); @@ -804,10 +804,10 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() eigthData["fixed"] = bool(true); eigthData["walkable"] = bool(true); eigthData["phantom"] = bool(true); - eigthData["A"] = F32(10.0f); - eigthData["B"] = F32(10.0f); - eigthData["C"] = F32(50.0f); - eigthData["D"] = F32(60.0f); + eigthData["A"] = F32(0.1f); + eigthData["B"] = F32(0.1f); + eigthData["C"] = F32(0.5f); + eigthData["D"] = F32(0.6f); LLVector3 eigthLocation(25.0f, 7.0f, 5.0f); eigthData["position"] = eigthLocation.getValue(); @@ -1189,10 +1189,10 @@ void LLFloaterPathfindingLinksets::applyEditFields() LLSD isFixed = (bool)isFixedBool; LLSD isWalkable = (bool)isWalkableBool; LLSD isPhantom = (bool)isPhantomBool; - LLSD a = aValue; - LLSD b = bValue; - LLSD c = cValue; - LLSD d = dValue; + LLSD a = aValue / 100.0f; + LLSD b = bValue / 100.0f; + LLSD c = cValue / 100.0f; + LLSD d = dValue / 100.0f; const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); @@ -1206,49 +1206,38 @@ void LLFloaterPathfindingLinksets::applyEditFields() const PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString()); const PathfindingLinkset &linkset = linksetIter->second; - llinfos << "Item changes:" << llendl; - llinfos << " UUID: " << uuid << llendl; LLSD itemData; if (linkset.isFixed() != isFixedBool) { - itemData["fixed"] = isFixed; - llinfos << " isFixed: " << isFixed << llendl; + itemData["permanent"] = isFixed; } if (linkset.isWalkable() != isWalkableBool) { itemData["walkable"] = isWalkable; - llinfos << " isWalkable: " << isWalkable << llendl; } if (linkset.isPhantom() != isPhantomBool) { itemData["phantom"] = isPhantom; - llinfos << " isPhantom: " << isPhantom << llendl; } if (linkset.getA() != aValue) { - itemData["a"] = a; - llinfos << " a: " << a << llendl; + itemData["A"] = a; } if (linkset.getB() != bValue) { - itemData["b"] = b; - llinfos << " b: " << b << llendl; + itemData["B"] = b; } if (linkset.getC() != cValue) { - itemData["c"] = c; - llinfos << " c: " << c << llendl; + itemData["C"] = c; } if (linkset.getD() != dValue) { - itemData["d"] = d; - llinfos << " d: " << d << llendl; + itemData["D"] = d; } - llinfos << " itemData: " << itemData << llendl; editData[uuid.asString()] = itemData; } - llinfos << "All Data: " << editData << llendl; if (editData.isUndefined()) { llwarns << "No PUT data specified" << llendl; -- cgit v1.2.3 From 347f73c209eeeffa2ac457f201778d5e21072371 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 18 Jan 2012 13:14:48 -0800 Subject: PATH-186: Removing fake data code. --- indra/newview/llfloaterpathfindinglinksets.cpp | 142 ------------------------- 1 file changed, 142 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 506cc2ea87..c70430e7f7 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -45,12 +45,6 @@ #include "llhttpclient.h" #include "lluuid.h" -//#define XXX_STINSON_USE_FAKE_DATA -#ifdef XXX_STINSON_USE_FAKE_DATA -#include "llviewerobject.h" -#include "llviewerobjectlist.h" -#endif // XXX_STINSON_USE_FAKE_DATA - //--------------------------------------------------------------------------- // NavmeshDataGetResponder //--------------------------------------------------------------------------- @@ -688,141 +682,6 @@ LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() { -#ifdef XXX_STINSON_USE_FAKE_DATA - LLSD allData; - - const std::string firstUUID(gObjectList.getObject(0)->getID().asString()); - LLSD firstData; - firstData["name"] = "Curabitur malesuada"; - firstData["description"] = "Accusam nominavi contentiones per ad"; - firstData["landimpact"] = S32(57); - firstData["fixed"] = bool(false); - firstData["walkable"] = bool(false); - firstData["phantom"] = bool(false); - firstData["A"] = F32(0.375f); - firstData["B"] = F32(0.078f); - firstData["C"] = F32(0.986f); - firstData["D"] = F32(0.0f); - LLVector3 firstLocation(135.0f, 57.0f, 2.0f); - firstData["position"] = firstLocation.getValue(); - - const std::string secondUUID(gObjectList.getObject(1)->getID().asString()); - LLSD secondData; - secondData["name"] = "At tota"; - secondData["description"] = "His ad placerat tincidun"; - secondData["landimpact"] = S32(2); - secondData["fixed"] = bool(false); - secondData["walkable"] = bool(false); - secondData["phantom"] = bool(true); - secondData["A"] = F32(0.305f); - secondData["B"] = F32(0.708f); - secondData["C"] = F32(1.0f); - secondData["D"] = F32(0.001f); - LLVector3 secondLocation(15.0f, 157.0f, 22.0f); - secondData["position"] = secondLocation.getValue(); - - const std::string thirdUUID(gObjectList.getObject(2)->getID().asString()); - LLSD thirdData; - thirdData["name"] = "No soleat"; - thirdData["description"] = ""; - thirdData["landimpact"] = S32(200); - thirdData["fixed"] = bool(false); - thirdData["walkable"] = bool(true); - thirdData["phantom"] = bool(false); - thirdData["A"] = F32(0.585f); - thirdData["B"] = F32(0.08f); - thirdData["C"] = F32(0.02f); - thirdData["D"] = F32(0.155f); - LLVector3 thirdLocation(577.0f, 14.0f, -14.5f); - thirdData["position"] = thirdLocation.getValue(); - - const std::string fourthUUID(gObjectList.getObject(3)->getID().asString()); - LLSD fourthData; - fourthData["name"] = "Paulo tritani bonorum"; - fourthData["description"] = "Vis verear impetus"; - fourthData["landimpact"] = S32(56); - fourthData["fixed"] = bool(false); - fourthData["walkable"] = bool(true); - fourthData["phantom"] = bool(true); - fourthData["A"] = F32(1.0f); - fourthData["B"] = F32(1.0f); - fourthData["C"] = F32(0.0f); - fourthData["D"] = F32(0.0f); - LLVector3 fourthLocation(215.0f, 57.0f, 5.0f); - fourthData["position"] = fourthLocation.getValue(); - - const std::string fifthUUID(gObjectList.getObject(4)->getID().asString()); - LLSD fifthData; - fifthData["name"] = "Curabitur malesuada"; - fifthData["description"] = "Reque possit philosophia"; - fifthData["landimpact"] = S32(20); - fifthData["fixed"] = bool(true); - fifthData["walkable"] = bool(false); - fifthData["phantom"] = bool(false); - fifthData["A"] = F32(0.375f); - fifthData["B"] = F32(0.078f); - fifthData["C"] = F32(0.986f); - fifthData["D"] = F32(0.0f); - LLVector3 fifthLocation(135.0f, 57.0f, 2.0f); - fifthData["position"] = fifthLocation.getValue(); - - const std::string sixthUUID(gObjectList.getObject(5)->getID().asString()); - LLSD sixthData; - sixthData["name"] = "At tota"; - sixthData["description"] = "Usu no aliquid dignissim"; - sixthData["landimpact"] = S32(257); - sixthData["fixed"] = bool(true); - sixthData["walkable"] = bool(false); - sixthData["phantom"] = bool(true); - sixthData["A"] = F32(0.0f); - sixthData["B"] = F32(0.0f); - sixthData["C"] = F32(1.0f); - sixthData["D"] = F32(0.001f); - LLVector3 sixthLocation(315.0f, 57.0f, 12.0f); - sixthData["position"] = sixthLocation.getValue(); - - const std::string seventhUUID(gObjectList.getObject(6)->getID().asString()); - LLSD seventhData; - seventhData["name"] = "No soleat"; - seventhData["description"] = "honestatis"; - seventhData["landimpact"] = S32(25); - seventhData["fixed"] = bool(true); - seventhData["walkable"] = bool(true); - seventhData["phantom"] = bool(false); - seventhData["A"] = F32(0.554f); - seventhData["B"] = F32(0.2712f); - seventhData["C"] = F32(0.325f); - seventhData["D"] = F32(0.155f); - LLVector3 seventhLocation(7.0f, 0.0f, 0.0f); - seventhData["position"] = seventhLocation.getValue(); - - const std::string eigthUUID(gObjectList.getObject(7)->getID().asString()); - LLSD eigthData; - eigthData["name"] = "Sea te aliquam"; - eigthData["description"] = ""; - eigthData["landimpact"] = S32(17); - eigthData["fixed"] = bool(true); - eigthData["walkable"] = bool(true); - eigthData["phantom"] = bool(true); - eigthData["A"] = F32(0.1f); - eigthData["B"] = F32(0.1f); - eigthData["C"] = F32(0.5f); - eigthData["D"] = F32(0.6f); - LLVector3 eigthLocation(25.0f, 7.0f, 5.0f); - eigthData["position"] = eigthLocation.getValue(); - - allData[firstUUID] = firstData; - allData[secondUUID] = secondData; - allData[thirdUUID] = thirdData; - allData[fourthUUID] = fourthData; - allData[fifthUUID] = fifthData; - allData[sixthUUID] = sixthData; - allData[seventhUUID] = seventhData; - allData[eigthUUID] = eigthData; - - handleNavmeshDataGetReply(allData); - -#else // XXX_STINSON_USE_FAKE_DATA if (isFetchInProgress()) { if (getFetchState() == kFetchRequestSent) @@ -848,7 +707,6 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this)); } } -#endif } void LLFloaterPathfindingLinksets::sendNavmeshDataPutRequest(const LLSD& pPostData) -- cgit v1.2.3 From 3567fa111300e059f4778ec60a3afd5ba40298ad Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 18 Jan 2012 14:45:17 -0800 Subject: PATH-186: Ensuring to not send PUT data with no parameters specified. --- indra/newview/llfloaterpathfindinglinksets.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index c70430e7f7..b444ed6df5 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -1094,8 +1094,12 @@ void LLFloaterPathfindingLinksets::applyEditFields() itemData["D"] = d; } - editData[uuid.asString()] = itemData; + if (!itemData.isUndefined()) + { + editData[uuid.asString()] = itemData; + } } + if (editData.isUndefined()) { llwarns << "No PUT data specified" << llendl; -- cgit v1.2.3 From 47c9b857980d6bc32b03e2757c9d9fb689805b86 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 18 Jan 2012 16:17:40 -0800 Subject: PATH-186: Changing the base type for internal storage of the walkability coefficients to be S32 instead of F32 to avoid precision errors in comparing values when determining which values need to be updated through the PUT service. --- indra/newview/llfloaterpathfindinglinksets.cpp | 64 +++++++++++++------------- 1 file changed, 32 insertions(+), 32 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index b444ed6df5..6067c8345c 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -98,10 +98,10 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa mIsFixed(false), mIsWalkable(false), mIsPhantom(false), - mA(0.0f), - mB(0.0f), - mC(0.0f), - mD(0.0f) + mA(0), + mB(0), + mC(0), + mD(0) { llassert(pNavmeshItem.has("name")); llassert(pNavmeshItem.get("name").isString()); @@ -130,19 +130,19 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa llassert(pNavmeshItem.has("A")); llassert(pNavmeshItem.get("A").isReal()); - mA = pNavmeshItem.get("A").asReal() * 100.0f; + mA = llround(pNavmeshItem.get("A").asReal() * 100.0f); llassert(pNavmeshItem.has("B")); llassert(pNavmeshItem.get("B").isReal()); - mB = pNavmeshItem.get("B").asReal() * 100.0f; + mB = llround(pNavmeshItem.get("B").asReal() * 100.0f); llassert(pNavmeshItem.has("C")); llassert(pNavmeshItem.get("C").isReal()); - mC = pNavmeshItem.get("C").asReal() * 100.0f; + mC = llround(pNavmeshItem.get("C").asReal() * 100.0f); llassert(pNavmeshItem.has("D")); llassert(pNavmeshItem.get("D").isReal()); - mD = pNavmeshItem.get("D").asReal() * 100.0f; + mD = llround(pNavmeshItem.get("D").asReal() * 100.0f); llassert(pNavmeshItem.has("position")); llassert(pNavmeshItem.get("position").isArray()); @@ -242,42 +242,42 @@ void PathfindingLinkset::setPhantom(BOOL pIsPhantom) mIsPhantom = pIsPhantom; } -F32 PathfindingLinkset::getA() const +S32 PathfindingLinkset::getA() const { return mA; } -void PathfindingLinkset::setA(F32 pA) +void PathfindingLinkset::setA(S32 pA) { mA = pA; } -F32 PathfindingLinkset::getB() const +S32 PathfindingLinkset::getB() const { return mB; } -void PathfindingLinkset::setB(F32 pB) +void PathfindingLinkset::setB(S32 pB) { mB = pB; } -F32 PathfindingLinkset::getC() const +S32 PathfindingLinkset::getC() const { return mC; } -void PathfindingLinkset::setC(F32 pC) +void PathfindingLinkset::setC(S32 pC) { mC = pC; } -F32 PathfindingLinkset::getD() const +S32 PathfindingLinkset::getD() const { return mD; } -void PathfindingLinkset::setD(F32 pD) +void PathfindingLinkset::setD(S32 pD) { mD = pD; } @@ -592,19 +592,19 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mEditA = findChild("edit_a_value"); llassert(mEditA != NULL); - mEditA->setPrevalidate(LLTextValidate::validateFloat); + mEditA->setPrevalidate(LLTextValidate::validatePositiveS32); mEditB = findChild("edit_b_value"); llassert(mEditB != NULL); - mEditB->setPrevalidate(LLTextValidate::validateFloat); + mEditB->setPrevalidate(LLTextValidate::validatePositiveS32); mEditC = findChild("edit_c_value"); llassert(mEditC != NULL); - mEditC->setPrevalidate(LLTextValidate::validateFloat); + mEditC->setPrevalidate(LLTextValidate::validatePositiveS32); mEditD = findChild("edit_d_value"); llassert(mEditD != NULL); - mEditD->setPrevalidate(LLTextValidate::validateFloat); + mEditD->setPrevalidate(LLTextValidate::validatePositiveS32); mApplyEdits = findChild("apply_edit_values"); llassert(mApplyEdits != NULL); @@ -899,19 +899,19 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() columns[6]["font"] = "SANSSERIF"; columns[7]["column"] = "a_percent"; - columns[7]["value"] = llformat("%2.0f", linkset.getA()); + columns[7]["value"] = llformat("%3d", linkset.getA()); columns[7]["font"] = "SANSSERIF"; columns[8]["column"] = "b_percent"; - columns[8]["value"] = llformat("%2.0f", linkset.getB()); + columns[8]["value"] = llformat("%3d", linkset.getB()); columns[8]["font"] = "SANSSERIF"; columns[9]["column"] = "c_percent"; - columns[9]["value"] = llformat("%2.0f", linkset.getC()); + columns[9]["value"] = llformat("%3d", linkset.getC()); columns[9]["font"] = "SANSSERIF"; columns[10]["column"] = "d_percent"; - columns[10]["value"] = llformat("%2.0f", linkset.getD()); + columns[10]["value"] = llformat("%3d", linkset.getD()); columns[10]["font"] = "SANSSERIF"; LLSD element; @@ -1039,18 +1039,18 @@ void LLFloaterPathfindingLinksets::applyEditFields() const std::string &bString = mEditB->getText(); const std::string &cString = mEditC->getText(); const std::string &dString = mEditD->getText(); - F32 aValue = (F32)atof(aString.c_str()); - F32 bValue = (F32)atof(bString.c_str()); - F32 cValue = (F32)atof(cString.c_str()); - F32 dValue = (F32)atof(dString.c_str()); + S32 aValue = static_cast(atoi(aString.c_str())); + S32 bValue = static_cast(atoi(bString.c_str())); + S32 cValue = static_cast(atoi(cString.c_str())); + S32 dValue = static_cast(atoi(dString.c_str())); LLSD isFixed = (bool)isFixedBool; LLSD isWalkable = (bool)isWalkableBool; LLSD isPhantom = (bool)isPhantomBool; - LLSD a = aValue / 100.0f; - LLSD b = bValue / 100.0f; - LLSD c = cValue / 100.0f; - LLSD d = dValue / 100.0f; + LLSD a = static_cast(aValue) / 100.0f; + LLSD b = static_cast(bValue) / 100.0f; + LLSD c = static_cast(cValue) / 100.0f; + LLSD d = static_cast(dValue) / 100.0f; const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); -- cgit v1.2.3 From fe18dda3df1c5061ac0b956bfebc261c45467738 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 18 Jan 2012 16:24:15 -0800 Subject: PATH-186: Removing unnecessary this-> reference. --- indra/newview/llfloaterpathfindinglinksets.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 6067c8345c..16711190cd 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -695,7 +695,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() mPathfindingLinksets.clearLinksets(); updateLinksetsList(); - std::string navmeshDataURL = this->getCapabilityURL(); + std::string navmeshDataURL = getCapabilityURL(); if (navmeshDataURL.empty()) { setFetchState(kFetchComplete); @@ -711,7 +711,7 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() void LLFloaterPathfindingLinksets::sendNavmeshDataPutRequest(const LLSD& pPostData) { - std::string navmeshDataURL = this->getCapabilityURL(); + std::string navmeshDataURL = getCapabilityURL(); if (navmeshDataURL.empty()) { llwarns << "cannot put navmesh data for current region '" << getRegionName() << "'" << llendl; -- cgit v1.2.3 From f88a8f6f46d9b4e9e628a910e941787d327adf5d Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 18 Jan 2012 16:55:15 -0800 Subject: PATH-226: Implementing a check for the multiple names of the ObjectNavMeshProperties service until the new service name is fully deployed. --- indra/newview/llfloaterpathfindinglinksets.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 16711190cd..60c5365ade 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -769,15 +769,31 @@ std::string LLFloaterPathfindingLinksets::getRegionName() const std::string LLFloaterPathfindingLinksets::getCapabilityURL() const { +#ifdef XXX_STINSON_REGION_CAP_RENAME std::string navmeshDataURL(""); LLViewerRegion* region = gAgent.getRegion(); if (region != NULL) { - navmeshDataURL = region->getCapability("ObjectNavmesh"); + navmeshDataURL = region->getCapability("ObjectNavMeshProperties"); + if (navmeshDataURL.empty()) + { + navmeshDataURL = region->getCapability("ObjectNavmesh"); + } + } + + return navmeshDataURL; +#else // XXX_STINSON_REGION_CAP_RENAME + std::string navmeshDataURL(""); + + LLViewerRegion* region = gAgent.getRegion(); + if (region != NULL) + { + navmeshDataURL = region->getCapability("ObjectNavMeshProperties"); } return navmeshDataURL; +#endif // XXX_STINSON_REGION_CAP_RENAME } void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) -- cgit v1.2.3 From 496fa2ea87fbfa835be18f6998475175a417ea52 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 18 Jan 2012 17:23:15 -0800 Subject: Changing the camel case of Navmesh to be NavMesh. --- indra/newview/llfloaterpathfindinglinksets.cpp | 194 ++++++++++++------------- 1 file changed, 97 insertions(+), 97 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 60c5365ade..e24703aca6 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -46,42 +46,42 @@ #include "lluuid.h" //--------------------------------------------------------------------------- -// NavmeshDataGetResponder +// NavMeshDataGetResponder //--------------------------------------------------------------------------- -class NavmeshDataGetResponder : public LLHTTPClient::Responder +class NavMeshDataGetResponder : public LLHTTPClient::Responder { public: - NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater); - virtual ~NavmeshDataGetResponder(); + NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater); + virtual ~NavMeshDataGetResponder(); virtual void result(const LLSD& pContent); virtual void error(U32 pStatus, const std::string& pReason); private: - NavmeshDataGetResponder(const NavmeshDataGetResponder& pOther); + NavMeshDataGetResponder(const NavMeshDataGetResponder& pOther); - std::string mNavmeshDataGetURL; + std::string mNavMeshDataGetURL; LLFloaterPathfindingLinksets *mLinksetsFloater; }; //--------------------------------------------------------------------------- -// NavmeshDataPutResponder +// NavMeshDataPutResponder //--------------------------------------------------------------------------- -class NavmeshDataPutResponder : public LLHTTPClient::Responder +class NavMeshDataPutResponder : public LLHTTPClient::Responder { public: - NavmeshDataPutResponder(const std::string& pNavmeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater); - virtual ~NavmeshDataPutResponder(); + NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater); + virtual ~NavMeshDataPutResponder(); virtual void result(const LLSD& pContent); virtual void error(U32 pStatus, const std::string& pReason); private: - NavmeshDataPutResponder(const NavmeshDataPutResponder& pOther); + NavMeshDataPutResponder(const NavMeshDataPutResponder& pOther); - std::string mNavmeshDataPutURL; + std::string mNavMeshDataPutURL; LLFloaterPathfindingLinksets *mLinksetsFloater; }; @@ -89,7 +89,7 @@ private: // PathfindingLinkset //--------------------------------------------------------------------------- -PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNavmeshItem) +PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNavMeshItem) : mUUID(pUUID), mName(), mDescription(), @@ -103,50 +103,50 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa mC(0), mD(0) { - llassert(pNavmeshItem.has("name")); - llassert(pNavmeshItem.get("name").isString()); - mName = pNavmeshItem.get("name").asString(); + llassert(pNavMeshItem.has("name")); + llassert(pNavMeshItem.get("name").isString()); + mName = pNavMeshItem.get("name").asString(); - llassert(pNavmeshItem.has("description")); - llassert(pNavmeshItem.get("description").isString()); - mDescription = pNavmeshItem.get("description").asString(); + llassert(pNavMeshItem.has("description")); + llassert(pNavMeshItem.get("description").isString()); + mDescription = pNavMeshItem.get("description").asString(); - llassert(pNavmeshItem.has("landimpact")); - llassert(pNavmeshItem.get("landimpact").isInteger()); - llassert(pNavmeshItem.get("landimpact").asInteger() >= 0); - mLandImpact = pNavmeshItem.get("landimpact").asInteger(); + llassert(pNavMeshItem.has("landimpact")); + llassert(pNavMeshItem.get("landimpact").isInteger()); + llassert(pNavMeshItem.get("landimpact").asInteger() >= 0); + mLandImpact = pNavMeshItem.get("landimpact").asInteger(); - llassert(pNavmeshItem.has("permanent")); - llassert(pNavmeshItem.get("permanent").isBoolean()); - mIsFixed = pNavmeshItem.get("permanent").asBoolean(); + llassert(pNavMeshItem.has("permanent")); + llassert(pNavMeshItem.get("permanent").isBoolean()); + mIsFixed = pNavMeshItem.get("permanent").asBoolean(); - llassert(pNavmeshItem.has("walkable")); - llassert(pNavmeshItem.get("walkable").isBoolean()); - mIsWalkable = pNavmeshItem.get("walkable").asBoolean(); + llassert(pNavMeshItem.has("walkable")); + llassert(pNavMeshItem.get("walkable").isBoolean()); + mIsWalkable = pNavMeshItem.get("walkable").asBoolean(); - llassert(pNavmeshItem.has("phantom")); - //llassert(pNavmeshItem.get("phantom").isBoolean()); XXX stinson 01/10/2012: this should be a boolean but is not - mIsPhantom = pNavmeshItem.get("phantom").asBoolean(); + llassert(pNavMeshItem.has("phantom")); + //llassert(pNavMeshItem.get("phantom").isBoolean()); XXX stinson 01/10/2012: this should be a boolean but is not + mIsPhantom = pNavMeshItem.get("phantom").asBoolean(); - llassert(pNavmeshItem.has("A")); - llassert(pNavmeshItem.get("A").isReal()); - mA = llround(pNavmeshItem.get("A").asReal() * 100.0f); + llassert(pNavMeshItem.has("A")); + llassert(pNavMeshItem.get("A").isReal()); + mA = llround(pNavMeshItem.get("A").asReal() * 100.0f); - llassert(pNavmeshItem.has("B")); - llassert(pNavmeshItem.get("B").isReal()); - mB = llround(pNavmeshItem.get("B").asReal() * 100.0f); + llassert(pNavMeshItem.has("B")); + llassert(pNavMeshItem.get("B").isReal()); + mB = llround(pNavMeshItem.get("B").asReal() * 100.0f); - llassert(pNavmeshItem.has("C")); - llassert(pNavmeshItem.get("C").isReal()); - mC = llround(pNavmeshItem.get("C").asReal() * 100.0f); + llassert(pNavMeshItem.has("C")); + llassert(pNavMeshItem.get("C").isReal()); + mC = llround(pNavMeshItem.get("C").asReal() * 100.0f); - llassert(pNavmeshItem.has("D")); - llassert(pNavmeshItem.get("D").isReal()); - mD = llround(pNavmeshItem.get("D").asReal() * 100.0f); + llassert(pNavMeshItem.has("D")); + llassert(pNavMeshItem.get("D").isReal()); + mD = llround(pNavMeshItem.get("D").asReal() * 100.0f); - llassert(pNavmeshItem.has("position")); - llassert(pNavmeshItem.get("position").isArray()); - mLocation.setValue(pNavmeshItem.get("position")); + llassert(pNavMeshItem.has("position")); + llassert(pNavMeshItem.get("position").isArray()); + mLocation.setValue(pNavMeshItem.get("position")); } PathfindingLinkset::PathfindingLinkset(const PathfindingLinkset& pOther) @@ -374,7 +374,7 @@ PathfindingLinksets::PathfindingLinksets() { } -PathfindingLinksets::PathfindingLinksets(const LLSD& pNavmeshData) +PathfindingLinksets::PathfindingLinksets(const LLSD& pNavMeshData) : mAllLinksets(), mFilteredLinksets(), mIsFiltersDirty(false), @@ -383,7 +383,7 @@ PathfindingLinksets::PathfindingLinksets(const LLSD& pNavmeshData) mIsFixedFilter(false), mIsWalkableFilter(false) { - parseNavmeshData(pNavmeshData); + parseNavMeshData(pNavMeshData); } PathfindingLinksets::PathfindingLinksets(const PathfindingLinksets& pOther) @@ -402,12 +402,12 @@ PathfindingLinksets::~PathfindingLinksets() clearLinksets(); } -void PathfindingLinksets::parseNavmeshData(const LLSD& pNavmeshData) +void PathfindingLinksets::parseNavMeshData(const LLSD& pNavMeshData) { clearLinksets(); - for (LLSD::map_const_iterator linksetIter = pNavmeshData.beginMap(); - linksetIter != pNavmeshData.endMap(); ++linksetIter) + for (LLSD::map_const_iterator linksetIter = pNavMeshData.beginMap(); + linksetIter != pNavMeshData.endMap(); ++linksetIter) { const std::string& uuid(linksetIter->first); const LLSD& linksetData = linksetIter->second; @@ -618,7 +618,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) { - sendNavmeshDataGetRequest(); + sendNavMeshDataGetRequest(); } void LLFloaterPathfindingLinksets::openLinksetsEditor() @@ -680,7 +680,7 @@ LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() { } -void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() +void LLFloaterPathfindingLinksets::sendNavMeshDataGetRequest() { if (isFetchInProgress()) { @@ -695,63 +695,63 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() mPathfindingLinksets.clearLinksets(); updateLinksetsList(); - std::string navmeshDataURL = getCapabilityURL(); - if (navmeshDataURL.empty()) + std::string navMeshDataURL = getCapabilityURL(); + if (navMeshDataURL.empty()) { setFetchState(kFetchComplete); - llwarns << "cannot query navmesh data from current region '" << getRegionName() << "'" << llendl; + llwarns << "cannot query object navmesh properties from current region '" << getRegionName() << "'" << llendl; } else { setFetchState(kFetchRequestSent); - LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this)); + LLHTTPClient::get(navMeshDataURL, new NavMeshDataGetResponder(navMeshDataURL, this)); } } } -void LLFloaterPathfindingLinksets::sendNavmeshDataPutRequest(const LLSD& pPostData) +void LLFloaterPathfindingLinksets::sendNavMeshDataPutRequest(const LLSD& pPostData) { - std::string navmeshDataURL = getCapabilityURL(); - if (navmeshDataURL.empty()) + std::string navMeshDataURL = getCapabilityURL(); + if (navMeshDataURL.empty()) { - llwarns << "cannot put navmesh data for current region '" << getRegionName() << "'" << llendl; + llwarns << "cannot put object navmesh properties for current region '" << getRegionName() << "'" << llendl; } else { - LLHTTPClient::put(navmeshDataURL, pPostData, new NavmeshDataPutResponder(navmeshDataURL, this)); + LLHTTPClient::put(navMeshDataURL, pPostData, new NavMeshDataPutResponder(navMeshDataURL, this)); } } -void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmeshData) +void LLFloaterPathfindingLinksets::handleNavMeshDataGetReply(const LLSD& pNavMeshData) { setFetchState(kFetchReceived); - mPathfindingLinksets.parseNavmeshData(pNavmeshData); + mPathfindingLinksets.parseNavMeshData(pNavMeshData); updateLinksetsList(); setFetchState(kFetchComplete); } -void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason) +void LLFloaterPathfindingLinksets::handleNavMeshDataGetError(const std::string& pURL, const std::string& pErrorReason) { setFetchState(kFetchError); mPathfindingLinksets.clearLinksets(); updateLinksetsList(); - llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl; + llwarns << "Error fetching object navmesh properties from URL '" << pURL << "' because " << pErrorReason << llendl; } -void LLFloaterPathfindingLinksets::handleNavmeshDataPutReply(const LLSD& pModifiedData) +void LLFloaterPathfindingLinksets::handleNavMeshDataPutReply(const LLSD& pModifiedData) { setFetchState(kFetchReceived); - mPathfindingLinksets.parseNavmeshData(pModifiedData); + mPathfindingLinksets.parseNavMeshData(pModifiedData); updateLinksetsList(); setFetchState(kFetchComplete); } -void LLFloaterPathfindingLinksets::handleNavmeshDataPutError(const std::string& pURL, const std::string& pErrorReason) +void LLFloaterPathfindingLinksets::handleNavMeshDataPutError(const std::string& pURL, const std::string& pErrorReason) { setFetchState(kFetchError); mPathfindingLinksets.clearLinksets(); updateLinksetsList(); - llwarns << "Error putting navmesh data to URL '" << pURL << "' because " << pErrorReason << llendl; + llwarns << "Error putting object navmesh properties to URL '" << pURL << "' because " << pErrorReason << llendl; } std::string LLFloaterPathfindingLinksets::getRegionName() const @@ -770,29 +770,29 @@ std::string LLFloaterPathfindingLinksets::getRegionName() const std::string LLFloaterPathfindingLinksets::getCapabilityURL() const { #ifdef XXX_STINSON_REGION_CAP_RENAME - std::string navmeshDataURL(""); + std::string navMeshDataURL(""); LLViewerRegion* region = gAgent.getRegion(); if (region != NULL) { - navmeshDataURL = region->getCapability("ObjectNavMeshProperties"); - if (navmeshDataURL.empty()) + navMeshDataURL = region->getCapability("ObjectNavMeshProperties"); + if (navMeshDataURL.empty()) { - navmeshDataURL = region->getCapability("ObjectNavmesh"); + navMeshDataURL = region->getCapability("ObjectNavmesh"); } } - return navmeshDataURL; + return navMeshDataURL; #else // XXX_STINSON_REGION_CAP_RENAME - std::string navmeshDataURL(""); + std::string navMeshDataURL(""); LLViewerRegion* region = gAgent.getRegion(); if (region != NULL) { - navmeshDataURL = region->getCapability("ObjectNavMeshProperties"); + navMeshDataURL = region->getCapability("ObjectNavMeshProperties"); } - return navmeshDataURL; + return navMeshDataURL; #endif // XXX_STINSON_REGION_CAP_RENAME } @@ -820,7 +820,7 @@ void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() { - sendNavmeshDataGetRequest(); + sendNavMeshDataGetRequest(); } void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() @@ -1122,7 +1122,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() } else { - sendNavmeshDataPutRequest(editData); + sendNavMeshDataPutRequest(editData); } } } @@ -1145,51 +1145,51 @@ void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) } //--------------------------------------------------------------------------- -// NavmeshDataGetResponder +// NavMeshDataGetResponder //--------------------------------------------------------------------------- -NavmeshDataGetResponder::NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) - : mNavmeshDataGetURL(pNavmeshDataGetURL), +NavMeshDataGetResponder::NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) + : mNavMeshDataGetURL(pNavMeshDataGetURL), mLinksetsFloater(pLinksetsFloater) { } -NavmeshDataGetResponder::~NavmeshDataGetResponder() +NavMeshDataGetResponder::~NavMeshDataGetResponder() { mLinksetsFloater = NULL; } -void NavmeshDataGetResponder::result(const LLSD& pContent) +void NavMeshDataGetResponder::result(const LLSD& pContent) { - mLinksetsFloater->handleNavmeshDataGetReply(pContent); + mLinksetsFloater->handleNavMeshDataGetReply(pContent); } -void NavmeshDataGetResponder::error(U32 status, const std::string& reason) +void NavMeshDataGetResponder::error(U32 status, const std::string& reason) { - mLinksetsFloater->handleNavmeshDataGetError(mNavmeshDataGetURL, reason); + mLinksetsFloater->handleNavMeshDataGetError(mNavMeshDataGetURL, reason); } //--------------------------------------------------------------------------- -// NavmeshDataPutResponder +// NavMeshDataPutResponder //--------------------------------------------------------------------------- -NavmeshDataPutResponder::NavmeshDataPutResponder(const std::string& pNavmeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater) - : mNavmeshDataPutURL(pNavmeshDataPutURL), +NavMeshDataPutResponder::NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater) + : mNavMeshDataPutURL(pNavMeshDataPutURL), mLinksetsFloater(pLinksetsFloater) { } -NavmeshDataPutResponder::~NavmeshDataPutResponder() +NavMeshDataPutResponder::~NavMeshDataPutResponder() { mLinksetsFloater = NULL; } -void NavmeshDataPutResponder::result(const LLSD& pContent) +void NavMeshDataPutResponder::result(const LLSD& pContent) { - mLinksetsFloater->handleNavmeshDataPutReply(pContent); + mLinksetsFloater->handleNavMeshDataPutReply(pContent); } -void NavmeshDataPutResponder::error(U32 status, const std::string& reason) +void NavMeshDataPutResponder::error(U32 status, const std::string& reason) { - mLinksetsFloater->handleNavmeshDataPutError(mNavmeshDataPutURL, reason); + mLinksetsFloater->handleNavMeshDataPutError(mNavMeshDataPutURL, reason); } -- cgit v1.2.3 From 755ba8652bfdc74162c97dff9ea4c74a7a74ae81 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 19 Jan 2012 13:28:16 -0800 Subject: PATH-227: Adding code to update the scroll list after a PUT response. --- indra/newview/llfloaterpathfindinglinksets.cpp | 39 ++++++++++++++++++++------ 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index e24703aca6..2b13d64937 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -383,7 +383,7 @@ PathfindingLinksets::PathfindingLinksets(const LLSD& pNavMeshData) mIsFixedFilter(false), mIsWalkableFilter(false) { - parseNavMeshData(pNavMeshData); + setNavMeshData(pNavMeshData); } PathfindingLinksets::PathfindingLinksets(const PathfindingLinksets& pOther) @@ -402,15 +402,15 @@ PathfindingLinksets::~PathfindingLinksets() clearLinksets(); } -void PathfindingLinksets::parseNavMeshData(const LLSD& pNavMeshData) +void PathfindingLinksets::setNavMeshData(const LLSD& pNavMeshData) { clearLinksets(); - for (LLSD::map_const_iterator linksetIter = pNavMeshData.beginMap(); - linksetIter != pNavMeshData.endMap(); ++linksetIter) + for (LLSD::map_const_iterator navMeshDataIter = pNavMeshData.beginMap(); + navMeshDataIter != pNavMeshData.endMap(); ++navMeshDataIter) { - const std::string& uuid(linksetIter->first); - const LLSD& linksetData = linksetIter->second; + const std::string& uuid(navMeshDataIter->first); + const LLSD& linksetData = navMeshDataIter->second; PathfindingLinkset linkset(uuid, linksetData); mAllLinksets.insert(std::pair(uuid, linkset)); @@ -419,6 +419,29 @@ void PathfindingLinksets::parseNavMeshData(const LLSD& pNavMeshData) mIsFiltersDirty = true; } +void PathfindingLinksets::updateNavMeshData(const LLSD& pNavMeshData) +{ + for (LLSD::map_const_iterator navMeshDataIter = pNavMeshData.beginMap(); + navMeshDataIter != pNavMeshData.endMap(); ++navMeshDataIter) + { + const std::string& uuid(navMeshDataIter->first); + const LLSD& linksetData = navMeshDataIter->second; + PathfindingLinkset linkset(uuid, linksetData); + + PathfindingLinksetMap::iterator linksetIter = mAllLinksets.find(uuid); + if (linksetIter == mAllLinksets.end()) + { + mAllLinksets.insert(std::pair(uuid, linkset)); + } + else + { + linksetIter->second = linkset; + } + } + + mIsFiltersDirty = true; +} + void PathfindingLinksets::clearLinksets() { mAllLinksets.clear(); @@ -725,7 +748,7 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataPutRequest(const LLSD& pPostDa void LLFloaterPathfindingLinksets::handleNavMeshDataGetReply(const LLSD& pNavMeshData) { setFetchState(kFetchReceived); - mPathfindingLinksets.parseNavMeshData(pNavMeshData); + mPathfindingLinksets.setNavMeshData(pNavMeshData); updateLinksetsList(); setFetchState(kFetchComplete); } @@ -741,7 +764,7 @@ void LLFloaterPathfindingLinksets::handleNavMeshDataGetError(const std::string& void LLFloaterPathfindingLinksets::handleNavMeshDataPutReply(const LLSD& pModifiedData) { setFetchState(kFetchReceived); - mPathfindingLinksets.parseNavMeshData(pModifiedData); + mPathfindingLinksets.updateNavMeshData(pModifiedData); updateLinksetsList(); setFetchState(kFetchComplete); } -- cgit v1.2.3 From 53175f835ea0170a38ccaa49397eb09d26a52984 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 19 Jan 2012 17:51:46 -0800 Subject: PATH-225: Adding ability to filter and edit linksets using the pathing state values of walkable, obstacle, or ignored. --- indra/newview/llfloaterpathfindinglinksets.cpp | 258 ++++++++++++++++++------- 1 file changed, 185 insertions(+), 73 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 2b13d64937..b6b3c05e84 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -39,12 +39,17 @@ #include "llscrolllistitem.h" #include "llscrolllistctrl.h" #include "llcheckboxctrl.h" +#include "llradiogroup.h" #include "llbutton.h" #include "llresmgr.h" #include "llviewerregion.h" #include "llhttpclient.h" #include "lluuid.h" +#define XUI_PATH_STATE_WALKABLE 1 +#define XUI_PATH_STATE_OBSTACLE 2 +#define XUI_PATH_STATE_IGNORED 3 + //--------------------------------------------------------------------------- // NavMeshDataGetResponder //--------------------------------------------------------------------------- @@ -95,7 +100,7 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa mDescription(), mLandImpact(0U), mLocation(), - mIsFixed(false), + mIsPermanent(false), mIsWalkable(false), mIsPhantom(false), mA(0), @@ -118,7 +123,7 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa llassert(pNavMeshItem.has("permanent")); llassert(pNavMeshItem.get("permanent").isBoolean()); - mIsFixed = pNavMeshItem.get("permanent").asBoolean(); + mIsPermanent = pNavMeshItem.get("permanent").asBoolean(); llassert(pNavMeshItem.has("walkable")); llassert(pNavMeshItem.get("walkable").isBoolean()); @@ -155,7 +160,7 @@ PathfindingLinkset::PathfindingLinkset(const PathfindingLinkset& pOther) mDescription(pOther.mDescription), mLandImpact(pOther.mLandImpact), mLocation(pOther.mLocation), - mIsFixed(pOther.mIsFixed), + mIsPermanent(pOther.mIsPermanent), mIsWalkable(pOther.mIsWalkable), mIsPhantom(pOther.mIsPhantom), mA(pOther.mA), @@ -176,7 +181,7 @@ PathfindingLinkset& PathfindingLinkset::operator =(const PathfindingLinkset& pOt mDescription = pOther.mDescription; mLandImpact = pOther.mLandImpact; mLocation = pOther.mLocation; - mIsFixed = pOther.mIsFixed; + mIsPermanent = pOther.mIsPermanent; mIsWalkable = pOther.mIsWalkable; mIsPhantom = pOther.mIsPhantom; mA = pOther.mA; @@ -212,24 +217,69 @@ const LLVector3& PathfindingLinkset::getPositionAgent() const return mLocation; } -BOOL PathfindingLinkset::isFixed() const +PathfindingLinkset::EPathState PathfindingLinkset::getPathState() const { - return mIsFixed; + return (mIsPermanent ? (mIsWalkable ? kWalkable : kObstacle) : kIgnored); } -void PathfindingLinkset::setFixed(BOOL pIsFixed) +void PathfindingLinkset::setPathState(EPathState pPathState) { - mIsFixed = pIsFixed; + mIsPermanent = isPermanent(pPathState); + mIsWalkable = isWalkable(pPathState); } -BOOL PathfindingLinkset::isWalkable() const +BOOL PathfindingLinkset::isPermanent(EPathState pPathState) { - return mIsWalkable; + BOOL retVal; + + switch (pPathState) + { + case kWalkable : + case kObstacle : + retVal = true; + break; + case kIgnored : + retVal = false; + break; + default : + retVal = false; + llassert(0); + break; + } + + return retVal; +} + +BOOL PathfindingLinkset::isWalkable(EPathState pPathState) +{ + BOOL retVal; + + switch (pPathState) + { + case kWalkable : + retVal = true; + break; + case kObstacle : + case kIgnored : + retVal = false; + break; + default : + retVal = false; + llassert(0); + break; + } + + return retVal; } -void PathfindingLinkset::setWalkable(BOOL pIsWalkable) +BOOL PathfindingLinkset::isPermanent() const { - mIsWalkable = pIsWalkable; + return mIsPermanent; +} + +BOOL PathfindingLinkset::isWalkable() const +{ + return mIsWalkable; } BOOL PathfindingLinkset::isPhantom() const @@ -369,8 +419,9 @@ PathfindingLinksets::PathfindingLinksets() mIsFiltersDirty(false), mNameFilter(), mDescriptionFilter(), - mIsFixedFilter(false), - mIsWalkableFilter(false) + mIsWalkableFilter(true), + mIsObstacleFilter(true), + mIsIgnoredFilter(true) { } @@ -380,8 +431,9 @@ PathfindingLinksets::PathfindingLinksets(const LLSD& pNavMeshData) mIsFiltersDirty(false), mNameFilter(), mDescriptionFilter(), - mIsFixedFilter(false), - mIsWalkableFilter(false) + mIsWalkableFilter(true), + mIsObstacleFilter(true), + mIsIgnoredFilter(true) { setNavMeshData(pNavMeshData); } @@ -392,8 +444,9 @@ PathfindingLinksets::PathfindingLinksets(const PathfindingLinksets& pOther) mIsFiltersDirty(pOther.mIsFiltersDirty), mNameFilter(pOther.mNameFilter), mDescriptionFilter(pOther.mDescriptionFilter), - mIsFixedFilter(pOther.mIsFixedFilter), - mIsWalkableFilter(pOther.mIsWalkableFilter) + mIsWalkableFilter(pOther.mIsWalkableFilter), + mIsObstacleFilter(pOther.mIsObstacleFilter), + mIsIgnoredFilter(pOther.mIsIgnoredFilter) { } @@ -469,7 +522,7 @@ const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getFilter BOOL PathfindingLinksets::isFiltersActive() const { - return (mNameFilter.isActive() || mDescriptionFilter.isActive() || mIsFixedFilter || mIsWalkableFilter); + return (mNameFilter.isActive() || mDescriptionFilter.isActive() || !mIsWalkableFilter || !mIsIgnoredFilter || !mIsIgnoredFilter); } void PathfindingLinksets::setNameFilter(const std::string& pNameFilter) @@ -492,34 +545,46 @@ const std::string& PathfindingLinksets::getDescriptionFilter() const return mDescriptionFilter.get(); } -void PathfindingLinksets::setFixedFilter(BOOL pFixedFilter) +void PathfindingLinksets::setWalkableFilter(BOOL pWalkableFilter) +{ + mIsFiltersDirty = (mIsFiltersDirty || (mIsWalkableFilter == pWalkableFilter)); + mIsWalkableFilter = pWalkableFilter; +} + +BOOL PathfindingLinksets::isWalkableFilter() const { - mIsFiltersDirty = (mIsFiltersDirty || (mIsFixedFilter == pFixedFilter)); - mIsFixedFilter = pFixedFilter; + return mIsWalkableFilter; } -BOOL PathfindingLinksets::isFixedFilter() const +void PathfindingLinksets::setObstacleFilter(BOOL pObstacleFilter) { - return mIsFixedFilter; + mIsFiltersDirty = (mIsFiltersDirty || (mIsObstacleFilter == pObstacleFilter)); + mIsObstacleFilter = pObstacleFilter; } -void PathfindingLinksets::setWalkableFilter(BOOL pWalkableFilter) +BOOL PathfindingLinksets::isObstacleFilter() const { - mIsFiltersDirty = (mIsFiltersDirty || (mIsWalkableFilter == pWalkableFilter)); - mIsWalkableFilter = pWalkableFilter; + return mIsObstacleFilter; } -BOOL PathfindingLinksets::isWalkableFilter() const +void PathfindingLinksets::setIgnoredFilter(BOOL pIgnoredFilter) { - return mIsWalkableFilter; + mIsFiltersDirty = (mIsFiltersDirty || (mIsIgnoredFilter == pIgnoredFilter)); + mIsIgnoredFilter = pIgnoredFilter; +} + +BOOL PathfindingLinksets::isIgnoredFilter() const +{ + return mIsIgnoredFilter; } void PathfindingLinksets::clearFilters() { mNameFilter.clear(); mDescriptionFilter.clear(); - mIsFixedFilter = false; - mIsWalkableFilter = false; + mIsWalkableFilter = true; + mIsObstacleFilter = true; + mIsIgnoredFilter = true; mIsFiltersDirty = false; } @@ -543,8 +608,9 @@ void PathfindingLinksets::applyFilters() BOOL PathfindingLinksets::doesMatchFilters(const PathfindingLinkset& pLinkset) const { - return ((!mIsFixedFilter || pLinkset.isFixed()) && - (!mIsWalkableFilter || pLinkset.isWalkable()) && + return (((mIsWalkableFilter && (pLinkset.getPathState() == PathfindingLinkset::kWalkable)) || + (mIsObstacleFilter && (pLinkset.getPathState() == PathfindingLinkset::kObstacle)) || + (mIsIgnoredFilter && (pLinkset.getPathState() == PathfindingLinkset::kIgnored))) && (!mNameFilter.isActive() || mNameFilter.doesMatch(pLinkset.getName())) && (!mDescriptionFilter.isActive() || mDescriptionFilter.doesMatch(pLinkset.getDescription()))); } @@ -581,22 +647,20 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mFilterByDescription->setSelectAllonFocusReceived(true); mFilterByDescription->setCommitOnFocusLost(true); - mFilterByFixed = findChild("filter_by_fixed"); - llassert(mFilterByFixed != NULL); - mFilterByFixed->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); - mFilterByWalkable = findChild("filter_by_walkable"); llassert(mFilterByWalkable != NULL); mFilterByWalkable->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); - mEditFixed = findChild("edit_fixed_value"); - llassert(mEditFixed != NULL); + mFilterByObstacle = findChild("filter_by_obstacle"); + llassert(mFilterByObstacle != NULL); + mFilterByObstacle->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); - mEditWalkable = findChild("edit_walkable_value"); - llassert(mEditWalkable != NULL); + mFilterByIgnored = findChild("filter_by_ignored"); + llassert(mFilterByIgnored != NULL); + mFilterByIgnored->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); - mEditPhantom = findChild("edit_phantom_value"); - llassert(mEditPhantom != NULL); + mEditPathState = findChild("edit_path_state"); + llassert(mEditPathState != NULL); mLabelWalkabilityCoefficients = findChild("walkability_coefficients_label"); llassert(mLabelWalkabilityCoefficients != NULL); @@ -629,6 +693,9 @@ BOOL LLFloaterPathfindingLinksets::postBuild() llassert(mEditD != NULL); mEditD->setPrevalidate(LLTextValidate::validatePositiveS32); + mEditPhantom = findChild("edit_phantom_value"); + llassert(mEditPhantom != NULL); + mApplyEdits = findChild("apply_edit_values"); llassert(mApplyEdits != NULL); mApplyEdits->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); @@ -681,11 +748,10 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mLinksetsStatus(NULL), mFilterByName(NULL), mFilterByDescription(NULL), - mFilterByFixed(NULL), mFilterByWalkable(NULL), - mEditFixed(NULL), - mEditWalkable(NULL), - mEditPhantom(NULL), + mFilterByObstacle(NULL), + mFilterByIgnored(NULL), + mEditPathState(NULL), mLabelWalkabilityCoefficients(NULL), mLabelEditA(NULL), mLabelEditB(NULL), @@ -695,6 +761,7 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mEditB(NULL), mEditC(NULL), mEditD(NULL), + mEditPhantom(NULL), mApplyEdits(NULL) { } @@ -865,8 +932,9 @@ void LLFloaterPathfindingLinksets::applyFilters() { mPathfindingLinksets.setNameFilter(mFilterByName->getText()); mPathfindingLinksets.setDescriptionFilter(mFilterByDescription->getText()); - mPathfindingLinksets.setFixedFilter(mFilterByFixed->get()); mPathfindingLinksets.setWalkableFilter(mFilterByWalkable->get()); + mPathfindingLinksets.setObstacleFilter(mFilterByObstacle->get()); + mPathfindingLinksets.setIgnoredFilter(mFilterByIgnored->get()); updateLinksetsList(); } @@ -875,8 +943,9 @@ void LLFloaterPathfindingLinksets::clearFilters() mPathfindingLinksets.clearFilters(); mFilterByName->setText(LLStringExplicit(mPathfindingLinksets.getNameFilter())); mFilterByDescription->setText(LLStringExplicit(mPathfindingLinksets.getDescriptionFilter())); - mFilterByFixed->set(mPathfindingLinksets.isFixedFilter()); mFilterByWalkable->set(mPathfindingLinksets.isWalkableFilter()); + mFilterByObstacle->set(mPathfindingLinksets.isObstacleFilter()); + mFilterByIgnored->set(mPathfindingLinksets.isIgnoredFilter()); updateLinksetsList(); } @@ -926,7 +995,7 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() columns[3]["font"] = "SANSSERIF"; columns[4]["column"] = "is_fixed"; - columns[4]["value"] = getString(linkset.isFixed() ? "linkset_is_fixed" : "linkset_is_not_fixed"); + columns[4]["value"] = getString(linkset.isPermanent() ? "linkset_is_fixed" : "linkset_is_not_fixed"); columns[4]["font"] = "SANSSERIF"; columns[5]["column"] = "is_walkable"; @@ -1036,13 +1105,12 @@ void LLFloaterPathfindingLinksets::updateEditFields() std::vector selectedItems = mLinksetsScrollList->getAllSelected(); if (selectedItems.empty()) { - mEditFixed->clear(); - mEditWalkable->clear(); - mEditPhantom->clear(); + mEditPathState->clear(); mEditA->clear(); mEditB->clear(); mEditC->clear(); mEditD->clear(); + mEditPhantom->clear(); setEnableEditFields(false); } @@ -1054,13 +1122,12 @@ void LLFloaterPathfindingLinksets::updateEditFields() PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(firstItem->getUUID().asString()); const PathfindingLinkset &linkset(linksetIter->second); - mEditFixed->set(linkset.isFixed()); - mEditWalkable->set(linkset.isWalkable()); - mEditPhantom->set(linkset.isPhantom()); + setPathState(linkset.getPathState()); mEditA->setValue(LLSD(linkset.getA())); mEditB->setValue(LLSD(linkset.getB())); mEditC->setValue(LLSD(linkset.getC())); mEditD->setValue(LLSD(linkset.getD())); + mEditPhantom->set(linkset.isPhantom()); setEnableEditFields(true); } @@ -1071,9 +1138,9 @@ void LLFloaterPathfindingLinksets::applyEditFields() std::vector selectedItems = mLinksetsScrollList->getAllSelected(); if (!selectedItems.empty()) { - BOOL isFixedBool = mEditFixed->getValue(); - BOOL isWalkableBool = mEditWalkable->getValue(); - BOOL isPhantomBool = mEditPhantom->getValue(); + PathfindingLinkset::EPathState pathState = getPathState(); + BOOL isPermanentBool = PathfindingLinkset::isPermanent(pathState); + BOOL isWalkableBool = PathfindingLinkset::isWalkable(pathState); const std::string &aString = mEditA->getText(); const std::string &bString = mEditB->getText(); const std::string &cString = mEditC->getText(); @@ -1082,14 +1149,15 @@ void LLFloaterPathfindingLinksets::applyEditFields() S32 bValue = static_cast(atoi(bString.c_str())); S32 cValue = static_cast(atoi(cString.c_str())); S32 dValue = static_cast(atoi(dString.c_str())); + BOOL isPhantomBool = mEditPhantom->getValue(); - LLSD isFixed = (bool)isFixedBool; + LLSD isPermanent = (bool)isPermanentBool; LLSD isWalkable = (bool)isWalkableBool; - LLSD isPhantom = (bool)isPhantomBool; LLSD a = static_cast(aValue) / 100.0f; LLSD b = static_cast(bValue) / 100.0f; LLSD c = static_cast(cValue) / 100.0f; LLSD d = static_cast(dValue) / 100.0f; + LLSD isPhantom = (bool)isPhantomBool; const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); @@ -1104,18 +1172,11 @@ void LLFloaterPathfindingLinksets::applyEditFields() const PathfindingLinkset &linkset = linksetIter->second; LLSD itemData; - if (linkset.isFixed() != isFixedBool) - { - itemData["permanent"] = isFixed; - } - if (linkset.isWalkable() != isWalkableBool) + if (linkset.getPathState() != pathState) { + itemData["permanent"] = isPermanent; itemData["walkable"] = isWalkable; } - if (linkset.isPhantom() != isPhantomBool) - { - itemData["phantom"] = isPhantom; - } if (linkset.getA() != aValue) { itemData["A"] = a; @@ -1132,6 +1193,10 @@ void LLFloaterPathfindingLinksets::applyEditFields() { itemData["D"] = d; } + if (linkset.isPhantom() != isPhantomBool) + { + itemData["phantom"] = isPhantom; + } if (!itemData.isUndefined()) { @@ -1152,9 +1217,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) { - mEditFixed->setEnabled(pEnabled); - mEditWalkable->setEnabled(pEnabled); - mEditPhantom->setEnabled(pEnabled); + mEditPathState->setEnabled(pEnabled); mLabelWalkabilityCoefficients->setEnabled(pEnabled); mLabelEditA->setEnabled(pEnabled); mLabelEditB->setEnabled(pEnabled); @@ -1164,9 +1227,58 @@ void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) mEditB->setEnabled(pEnabled); mEditC->setEnabled(pEnabled); mEditD->setEnabled(pEnabled); + mEditPhantom->setEnabled(pEnabled); mApplyEdits->setEnabled(pEnabled); } +PathfindingLinkset::EPathState LLFloaterPathfindingLinksets::getPathState() const +{ + PathfindingLinkset::EPathState pathState; + + switch (mEditPathState->getValue().asInteger()) + { + case XUI_PATH_STATE_WALKABLE : + pathState = PathfindingLinkset::kWalkable; + break; + case XUI_PATH_STATE_OBSTACLE : + pathState = PathfindingLinkset::kObstacle; + break; + case XUI_PATH_STATE_IGNORED : + pathState = PathfindingLinkset::kIgnored; + break; + default : + pathState = PathfindingLinkset::kIgnored; + llassert(0); + break; + } + + return pathState; +} + +void LLFloaterPathfindingLinksets::setPathState(PathfindingLinkset::EPathState pPathState) +{ + LLSD radioGroupValue; + + switch (pPathState) + { + case PathfindingLinkset::kWalkable : + radioGroupValue = XUI_PATH_STATE_WALKABLE; + break; + case PathfindingLinkset::kObstacle : + radioGroupValue = XUI_PATH_STATE_OBSTACLE; + break; + case PathfindingLinkset::kIgnored : + radioGroupValue = XUI_PATH_STATE_IGNORED; + break; + default : + radioGroupValue = XUI_PATH_STATE_IGNORED; + llassert(0); + break; + } + + mEditPathState->setValue(radioGroupValue); +} + //--------------------------------------------------------------------------- // NavMeshDataGetResponder //--------------------------------------------------------------------------- -- cgit v1.2.3 From fe637c5f9571e91c8e90440a0677e5c40b7bf648 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 19 Jan 2012 18:22:17 -0800 Subject: PATH-225: Replacing the Fixed and Walkable columns with a single State column. --- indra/newview/llfloaterpathfindinglinksets.cpp | 78 ++++++++++++++------------ 1 file changed, 41 insertions(+), 37 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index b6b3c05e84..26830390e0 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -100,8 +100,7 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa mDescription(), mLandImpact(0U), mLocation(), - mIsPermanent(false), - mIsWalkable(false), + mPathState(kIgnored), mIsPhantom(false), mA(0), mB(0), @@ -123,11 +122,13 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa llassert(pNavMeshItem.has("permanent")); llassert(pNavMeshItem.get("permanent").isBoolean()); - mIsPermanent = pNavMeshItem.get("permanent").asBoolean(); + bool isPermanent = pNavMeshItem.get("permanent").asBoolean(); llassert(pNavMeshItem.has("walkable")); llassert(pNavMeshItem.get("walkable").isBoolean()); - mIsWalkable = pNavMeshItem.get("walkable").asBoolean(); + bool isWalkable = pNavMeshItem.get("walkable").asBoolean(); + + mPathState = getPathState(isPermanent, isWalkable); llassert(pNavMeshItem.has("phantom")); //llassert(pNavMeshItem.get("phantom").isBoolean()); XXX stinson 01/10/2012: this should be a boolean but is not @@ -160,8 +161,7 @@ PathfindingLinkset::PathfindingLinkset(const PathfindingLinkset& pOther) mDescription(pOther.mDescription), mLandImpact(pOther.mLandImpact), mLocation(pOther.mLocation), - mIsPermanent(pOther.mIsPermanent), - mIsWalkable(pOther.mIsWalkable), + mPathState(pOther.mPathState), mIsPhantom(pOther.mIsPhantom), mA(pOther.mA), mB(pOther.mB), @@ -181,8 +181,7 @@ PathfindingLinkset& PathfindingLinkset::operator =(const PathfindingLinkset& pOt mDescription = pOther.mDescription; mLandImpact = pOther.mLandImpact; mLocation = pOther.mLocation; - mIsPermanent = pOther.mIsPermanent; - mIsWalkable = pOther.mIsWalkable; + mPathState = pOther.mPathState; mIsPhantom = pOther.mIsPhantom; mA = pOther.mA; mB = pOther.mB; @@ -219,13 +218,17 @@ const LLVector3& PathfindingLinkset::getPositionAgent() const PathfindingLinkset::EPathState PathfindingLinkset::getPathState() const { - return (mIsPermanent ? (mIsWalkable ? kWalkable : kObstacle) : kIgnored); + return mPathState; } void PathfindingLinkset::setPathState(EPathState pPathState) { - mIsPermanent = isPermanent(pPathState); - mIsWalkable = isWalkable(pPathState); + mPathState = pPathState; +} + +PathfindingLinkset::EPathState PathfindingLinkset::getPathState(bool pIsPermanent, bool pIsWalkable) +{ + return (pIsPermanent ? (pIsWalkable ? kWalkable : kObstacle) : kIgnored); } BOOL PathfindingLinkset::isPermanent(EPathState pPathState) @@ -272,16 +275,6 @@ BOOL PathfindingLinkset::isWalkable(EPathState pPathState) return retVal; } -BOOL PathfindingLinkset::isPermanent() const -{ - return mIsPermanent; -} - -BOOL PathfindingLinkset::isWalkable() const -{ - return mIsWalkable; -} - BOOL PathfindingLinkset::isPhantom() const { return mIsPhantom; @@ -994,34 +987,45 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linkset.getPositionAgent())); columns[3]["font"] = "SANSSERIF"; - columns[4]["column"] = "is_fixed"; - columns[4]["value"] = getString(linkset.isPermanent() ? "linkset_is_fixed" : "linkset_is_not_fixed"); + columns[4]["column"] = "path_state"; + switch (linkset.getPathState()) + { + case PathfindingLinkset::kWalkable : + columns[4]["value"] = getString("linkset_path_state_walkable"); + break; + case PathfindingLinkset::kObstacle : + columns[4]["value"] = getString("linkset_path_state_obstacle"); + break; + case PathfindingLinkset::kIgnored : + columns[4]["value"] = getString("linkset_path_state_ignored"); + break; + default : + columns[4]["value"] = getString("linkset_path_state_ignored"); + llassert(0); + break; + } columns[4]["font"] = "SANSSERIF"; - columns[5]["column"] = "is_walkable"; - columns[5]["value"] = getString(linkset.isWalkable() ? "linkset_is_walkable" : "linkset_is_not_walkable"); + columns[5]["column"] = "is_phantom"; + columns[5]["value"] = getString(linkset.isPhantom() ? "linkset_is_phantom" : "linkset_is_not_phantom"); columns[5]["font"] = "SANSSERIF"; - columns[6]["column"] = "is_phantom"; - columns[6]["value"] = getString(linkset.isPhantom() ? "linkset_is_phantom" : "linkset_is_not_phantom"); + columns[6]["column"] = "a_percent"; + columns[6]["value"] = llformat("%3d", linkset.getA()); columns[6]["font"] = "SANSSERIF"; - columns[7]["column"] = "a_percent"; - columns[7]["value"] = llformat("%3d", linkset.getA()); + columns[7]["column"] = "b_percent"; + columns[7]["value"] = llformat("%3d", linkset.getB()); columns[7]["font"] = "SANSSERIF"; - columns[8]["column"] = "b_percent"; - columns[8]["value"] = llformat("%3d", linkset.getB()); + columns[8]["column"] = "c_percent"; + columns[8]["value"] = llformat("%3d", linkset.getC()); columns[8]["font"] = "SANSSERIF"; - columns[9]["column"] = "c_percent"; - columns[9]["value"] = llformat("%3d", linkset.getC()); + columns[9]["column"] = "d_percent"; + columns[9]["value"] = llformat("%3d", linkset.getD()); columns[9]["font"] = "SANSSERIF"; - columns[10]["column"] = "d_percent"; - columns[10]["value"] = llformat("%3d", linkset.getD()); - columns[10]["font"] = "SANSSERIF"; - LLSD element; element["id"] = linkset.getUUID().asString(); element["column"] = columns; -- cgit v1.2.3 From 54951581a865b4d450a25d0c7fd780b82dad10ae Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 20 Jan 2012 10:52:32 -0800 Subject: Fixing an issue with the linkset filtering that was not properly excluding obstacle linksets. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 26830390e0..d01732d05f 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -515,7 +515,7 @@ const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getFilter BOOL PathfindingLinksets::isFiltersActive() const { - return (mNameFilter.isActive() || mDescriptionFilter.isActive() || !mIsWalkableFilter || !mIsIgnoredFilter || !mIsIgnoredFilter); + return (mNameFilter.isActive() || mDescriptionFilter.isActive() || !mIsWalkableFilter || !mIsObstacleFilter || !mIsIgnoredFilter); } void PathfindingLinksets::setNameFilter(const std::string& pNameFilter) -- cgit v1.2.3 From 60b1856070e0a2c9c87474d53f3ad8ca29351ee5 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 20 Jan 2012 13:44:45 -0800 Subject: Setting initial sorting of the linksets to be ascending by name. --- indra/newview/llfloaterpathfindinglinksets.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index d01732d05f..938c961ad2 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -624,6 +624,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() llassert(mLinksetsScrollList != NULL); mLinksetsScrollList->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onLinksetsSelectionChange, this)); mLinksetsScrollList->setCommitOnSelectionChange(true); + mLinksetsScrollList->sortByColumnIndex(0, true); mLinksetsStatus = findChild("linksets_status"); llassert(mLinksetsStatus != NULL); -- cgit v1.2.3 From 2d307c193de30a02889bc1a837f12ed053acfd58 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 20 Jan 2012 15:21:10 -0800 Subject: Ensuring that the new path state radio items are properly enabled/disabled based on selection. --- indra/newview/llfloaterpathfindinglinksets.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 938c961ad2..972e70f5d9 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -656,6 +656,15 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mEditPathState = findChild("edit_path_state"); llassert(mEditPathState != NULL); + mEditPathStateWalkable = findChild("edit_pathing_state_walkable"); + llassert(mEditPathStateWalkable != NULL); + + mEditPathStateObstacle = findChild("edit_pathing_state_obstacle"); + llassert(mEditPathStateObstacle != NULL); + + mEditPathStateIgnored = findChild("edit_pathing_state_ignored"); + llassert(mEditPathStateIgnored != NULL); + mLabelWalkabilityCoefficients = findChild("walkability_coefficients_label"); llassert(mLabelWalkabilityCoefficients != NULL); @@ -746,6 +755,9 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mFilterByObstacle(NULL), mFilterByIgnored(NULL), mEditPathState(NULL), + mEditPathStateWalkable(NULL), + mEditPathStateObstacle(NULL), + mEditPathStateIgnored(NULL), mLabelWalkabilityCoefficients(NULL), mLabelEditA(NULL), mLabelEditB(NULL), @@ -1223,6 +1235,9 @@ void LLFloaterPathfindingLinksets::applyEditFields() void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) { mEditPathState->setEnabled(pEnabled); + mEditPathStateWalkable->setEnabled(pEnabled); + mEditPathStateObstacle->setEnabled(pEnabled); + mEditPathStateIgnored->setEnabled(pEnabled); mLabelWalkabilityCoefficients->setEnabled(pEnabled); mLabelEditA->setEnabled(pEnabled); mLabelEditB->setEnabled(pEnabled); -- cgit v1.2.3 From 1aa9408215d395122e1b79b8bced08d3dd9a3067 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 20 Jan 2012 15:54:20 -0800 Subject: PATH-226: Removing the extraneous checks for both the old and new CAP service names as the new server-side code has been fully deployed. --- indra/newview/llfloaterpathfindinglinksets.cpp | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 972e70f5d9..99465466e1 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -131,7 +131,7 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa mPathState = getPathState(isPermanent, isWalkable); llassert(pNavMeshItem.has("phantom")); - //llassert(pNavMeshItem.get("phantom").isBoolean()); XXX stinson 01/10/2012: this should be a boolean but is not + llassert(pNavMeshItem.get("phantom").isBoolean()); mIsPhantom = pNavMeshItem.get("phantom").asBoolean(); llassert(pNavMeshItem.has("A")); @@ -865,21 +865,6 @@ std::string LLFloaterPathfindingLinksets::getRegionName() const std::string LLFloaterPathfindingLinksets::getCapabilityURL() const { -#ifdef XXX_STINSON_REGION_CAP_RENAME - std::string navMeshDataURL(""); - - LLViewerRegion* region = gAgent.getRegion(); - if (region != NULL) - { - navMeshDataURL = region->getCapability("ObjectNavMeshProperties"); - if (navMeshDataURL.empty()) - { - navMeshDataURL = region->getCapability("ObjectNavmesh"); - } - } - - return navMeshDataURL; -#else // XXX_STINSON_REGION_CAP_RENAME std::string navMeshDataURL(""); LLViewerRegion* region = gAgent.getRegion(); @@ -889,7 +874,6 @@ std::string LLFloaterPathfindingLinksets::getCapabilityURL() const } return navMeshDataURL; -#endif // XXX_STINSON_REGION_CAP_RENAME } void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) -- cgit v1.2.3 From dd7cb6392683f4dfa536ef72e13919a082157a04 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 20 Jan 2012 17:12:24 -0800 Subject: PATH-187: Starting to refactor the capability service for querying/editing linksets. --- indra/newview/llfloaterpathfindinglinksets.cpp | 118 +++++++++++++++---------- 1 file changed, 69 insertions(+), 49 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 99465466e1..9d8f99902b 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -704,7 +704,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mApplyEdits->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); setEnableEditFields(false); - setFetchState(kFetchInitial); + setMessagingState(kMessagingInitial); return LLFloater::postBuild(); } @@ -719,20 +719,23 @@ void LLFloaterPathfindingLinksets::openLinksetsEditor() LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); } -LLFloaterPathfindingLinksets::EFetchState LLFloaterPathfindingLinksets::getFetchState() const +LLFloaterPathfindingLinksets::EMessagingState LLFloaterPathfindingLinksets::getMessagingState() const { - return mFetchState; + return mMessagingState; } -BOOL LLFloaterPathfindingLinksets::isFetchInProgress() const +BOOL LLFloaterPathfindingLinksets::isMessagingInProgress() const { BOOL retVal; - switch (getFetchState()) + switch (getMessagingState()) { - case kFetchStarting : - case kFetchRequestSent : - case kFetchRequestSent_MultiRequested : - case kFetchReceived : + case kMessagingFetchStarting : + case kMessagingFetchRequestSent : + case kMessagingFetchRequestSent_MultiRequested : + case kMessagingFetchReceived : + case kMessagingModifyStarting : + case kMessagingModifyRequestSent : + case kMessagingModifyReceived : retVal = true; break; default : @@ -746,7 +749,7 @@ BOOL LLFloaterPathfindingLinksets::isFetchInProgress() const LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) : LLFloater(pSeed), mPathfindingLinksets(), - mFetchState(kFetchInitial), + mMessagingState(kMessagingInitial), mLinksetsScrollList(NULL), mLinksetsStatus(NULL), mFilterByName(NULL), @@ -778,28 +781,28 @@ LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() void LLFloaterPathfindingLinksets::sendNavMeshDataGetRequest() { - if (isFetchInProgress()) + if (isMessagingInProgress()) { - if (getFetchState() == kFetchRequestSent) + if (getMessagingState() == kMessagingFetchRequestSent) { - setFetchState(kFetchRequestSent_MultiRequested); + setMessagingState(kMessagingFetchRequestSent_MultiRequested); } } else { - setFetchState(kFetchStarting); + setMessagingState(kMessagingFetchStarting); mPathfindingLinksets.clearLinksets(); updateLinksetsList(); std::string navMeshDataURL = getCapabilityURL(); if (navMeshDataURL.empty()) { - setFetchState(kFetchComplete); + setMessagingState(kMessagingComplete); llwarns << "cannot query object navmesh properties from current region '" << getRegionName() << "'" << llendl; } else { - setFetchState(kFetchRequestSent); + setMessagingState(kMessagingFetchRequestSent); LLHTTPClient::get(navMeshDataURL, new NavMeshDataGetResponder(navMeshDataURL, this)); } } @@ -807,28 +810,31 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataGetRequest() void LLFloaterPathfindingLinksets::sendNavMeshDataPutRequest(const LLSD& pPostData) { - std::string navMeshDataURL = getCapabilityURL(); - if (navMeshDataURL.empty()) + if (!isMessagingInProgress()) { - llwarns << "cannot put object navmesh properties for current region '" << getRegionName() << "'" << llendl; - } - else - { - LLHTTPClient::put(navMeshDataURL, pPostData, new NavMeshDataPutResponder(navMeshDataURL, this)); + std::string navMeshDataURL = getCapabilityURL(); + if (navMeshDataURL.empty()) + { + llwarns << "cannot put object navmesh properties for current region '" << getRegionName() << "'" << llendl; + } + else + { + LLHTTPClient::put(navMeshDataURL, pPostData, new NavMeshDataPutResponder(navMeshDataURL, this)); + } } } void LLFloaterPathfindingLinksets::handleNavMeshDataGetReply(const LLSD& pNavMeshData) { - setFetchState(kFetchReceived); + setMessagingState(kMessagingFetchReceived); mPathfindingLinksets.setNavMeshData(pNavMeshData); updateLinksetsList(); - setFetchState(kFetchComplete); + setMessagingState(kMessagingComplete); } void LLFloaterPathfindingLinksets::handleNavMeshDataGetError(const std::string& pURL, const std::string& pErrorReason) { - setFetchState(kFetchError); + setMessagingState(kMessagingFetchError); mPathfindingLinksets.clearLinksets(); updateLinksetsList(); llwarns << "Error fetching object navmesh properties from URL '" << pURL << "' because " << pErrorReason << llendl; @@ -836,17 +842,15 @@ void LLFloaterPathfindingLinksets::handleNavMeshDataGetError(const std::string& void LLFloaterPathfindingLinksets::handleNavMeshDataPutReply(const LLSD& pModifiedData) { - setFetchState(kFetchReceived); + setMessagingState(kMessagingModifyReceived); mPathfindingLinksets.updateNavMeshData(pModifiedData); updateLinksetsList(); - setFetchState(kFetchComplete); + setMessagingState(kMessagingComplete); } void LLFloaterPathfindingLinksets::handleNavMeshDataPutError(const std::string& pURL, const std::string& pErrorReason) { - setFetchState(kFetchError); - mPathfindingLinksets.clearLinksets(); - updateLinksetsList(); + setMessagingState(kMessagingModifyError); llwarns << "Error putting object navmesh properties to URL '" << pURL << "' because " << pErrorReason << llendl; } @@ -876,9 +880,9 @@ std::string LLFloaterPathfindingLinksets::getCapabilityURL() const return navMeshDataURL; } -void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) +void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingState) { - mFetchState = pFetchState; + mMessagingState = pMessagingState; updateLinksetsStatusMessage(); } @@ -1051,28 +1055,44 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() std::string statusText(""); LLStyle::Params styleParams; - switch (getFetchState()) + switch (getMessagingState()) { - case kFetchStarting : - statusText = getString("linksets_fetching_starting"); + case kMessagingInitial: + statusText = getString("linksets_messaging_initial"); + break; + case kMessagingFetchStarting : + statusText = getString("linksets_messaging_fetch_starting"); break; - case kFetchRequestSent : - statusText = getString("linksets_fetching_inprogress"); + case kMessagingFetchRequestSent : + statusText = getString("linksets_messaging_fetch_inprogress"); break; - case kFetchRequestSent_MultiRequested : - statusText = getString("linksets_fetching_inprogress_multi_request"); + case kMessagingFetchRequestSent_MultiRequested : + statusText = getString("linksets_messaging_fetch_inprogress_multi_request"); break; - case kFetchReceived : - statusText = getString("linksets_fetching_received"); + case kMessagingFetchReceived : + statusText = getString("linksets_messaging_fetch_received"); break; - case kFetchError : - statusText = getString("linksets_fetching_error"); + case kMessagingFetchError : + statusText = getString("linksets_messaging_fetch_error"); styleParams.color = warningColor; break; - case kFetchComplete : + case kMessagingModifyStarting : + statusText = getString("linksets_messaging_modify_starting"); + break; + case kMessagingModifyRequestSent : + statusText = getString("linksets_messaging_modify_inprogress"); + break; + case kMessagingModifyReceived : + statusText = getString("linksets_messaging_modify_received"); + break; + case kMessagingModifyError : + statusText = getString("linksets_messaging_modify_error"); + styleParams.color = warningColor; + break; + case kMessagingComplete : if (mLinksetsScrollList->isEmpty()) { - statusText = getString("linksets_fetching_done_none_found"); + statusText = getString("linksets_messaging_complete_none_found"); } else { @@ -1089,12 +1109,12 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() LLStringUtil::format_map_t string_args; string_args["[NUM_SELECTED]"] = numSelectedItemsString; string_args["[NUM_TOTAL]"] = numItemsString; - statusText = getString("linksets_fetching_done_available", string_args); + statusText = getString("linksets_messaging_complete_available", string_args); } break; - case kFetchInitial: default: - statusText = getString("linksets_fetching_initial"); + statusText = getString("linksets_messaging_initial"); + llassert(0); break; } -- cgit v1.2.3 From 3adf2d4693ba9196142a3c587828a515d7c832cd Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 26 Jan 2012 16:24:36 -0800 Subject: Introducing changes to prepare for the upcoming server-side change of the walkability coeefficients from real to integer data types. --- indra/newview/llfloaterpathfindinglinksets.cpp | 147 +++++++++++++++++++++++-- 1 file changed, 135 insertions(+), 12 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 9d8f99902b..311f193d85 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -102,6 +102,9 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa mLocation(), mPathState(kIgnored), mIsPhantom(false), +#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + mIsWalkabilityCoefficientsF32(false), +#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE mA(0), mB(0), mC(0), @@ -135,20 +138,75 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa mIsPhantom = pNavMeshItem.get("phantom").asBoolean(); llassert(pNavMeshItem.has("A")); - llassert(pNavMeshItem.get("A").isReal()); - mA = llround(pNavMeshItem.get("A").asReal() * 100.0f); +#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + mIsWalkabilityCoefficientsF32 = pNavMeshItem.get("A").isReal(); + if (mIsWalkabilityCoefficientsF32) + { + // Old server-side storage was real + mA = llround(pNavMeshItem.get("A").asReal() * 100.0f); + + llassert(pNavMeshItem.has("B")); + llassert(pNavMeshItem.get("B").isReal()); + mB = llround(pNavMeshItem.get("B").asReal() * 100.0f); + + llassert(pNavMeshItem.has("C")); + llassert(pNavMeshItem.get("C").isReal()); + mC = llround(pNavMeshItem.get("C").asReal() * 100.0f); + + llassert(pNavMeshItem.has("D")); + llassert(pNavMeshItem.get("D").isReal()); + mD = llround(pNavMeshItem.get("D").asReal() * 100.0f); + } + else + { + // New server-side storage will be integer + llassert(pNavMeshItem.get("A").isInteger()); + mA = pNavMeshItem.get("A").asInteger(); + llassert(mA >= 0); + llassert(mA <= 100); + + llassert(pNavMeshItem.has("B")); + llassert(pNavMeshItem.get("B").isInteger()); + mB = pNavMeshItem.get("B").asInteger(); + llassert(mB >= 0); + llassert(mB <= 100); + + llassert(pNavMeshItem.has("C")); + llassert(pNavMeshItem.get("C").isInteger()); + mC = pNavMeshItem.get("C").asInteger(); + llassert(mC >= 0); + llassert(mC <= 100); + + llassert(pNavMeshItem.has("D")); + llassert(pNavMeshItem.get("D").isInteger()); + mD = pNavMeshItem.get("D").asInteger(); + llassert(mD >= 0); + llassert(mD <= 100); + } +#else // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + llassert(pNavMeshItem.get("A").isInteger()); + mA = pNavMeshItem.get("A").asInteger(); + llassert(mA >= 0); + llassert(mA <= 100); llassert(pNavMeshItem.has("B")); - llassert(pNavMeshItem.get("B").isReal()); - mB = llround(pNavMeshItem.get("B").asReal() * 100.0f); + llassert(pNavMeshItem.get("B").isInteger()); + mB = pNavMeshItem.get("B").asInteger(); + llassert(mB >= 0); + llassert(mB <= 100); llassert(pNavMeshItem.has("C")); - llassert(pNavMeshItem.get("C").isReal()); - mC = llround(pNavMeshItem.get("C").asReal() * 100.0f); + llassert(pNavMeshItem.get("C").isInteger()); + mC = pNavMeshItem.get("C").asInteger(); + llassert(mC >= 0); + llassert(mC <= 100); llassert(pNavMeshItem.has("D")); - llassert(pNavMeshItem.get("D").isReal()); - mD = llround(pNavMeshItem.get("D").asReal() * 100.0f); + llassert(pNavMeshItem.get("D").isInteger()); + mD = pNavMeshItem.get("D").asInteger(); + llassert(mD >= 0); + llassert(mD <= 100); +#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE llassert(pNavMeshItem.has("position")); llassert(pNavMeshItem.get("position").isArray()); @@ -163,6 +221,9 @@ PathfindingLinkset::PathfindingLinkset(const PathfindingLinkset& pOther) mLocation(pOther.mLocation), mPathState(pOther.mPathState), mIsPhantom(pOther.mIsPhantom), +#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + mIsWalkabilityCoefficientsF32(pOther.mIsWalkabilityCoefficientsF32), +#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE mA(pOther.mA), mB(pOther.mB), mC(pOther.mC), @@ -183,6 +244,9 @@ PathfindingLinkset& PathfindingLinkset::operator =(const PathfindingLinkset& pOt mLocation = pOther.mLocation; mPathState = pOther.mPathState; mIsPhantom = pOther.mIsPhantom; +#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + mIsWalkabilityCoefficientsF32 = pOther.mIsWalkabilityCoefficientsF32; +#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE mA = pOther.mA; mB = pOther.mB; mC = pOther.mC; @@ -285,6 +349,13 @@ void PathfindingLinkset::setPhantom(BOOL pIsPhantom) mIsPhantom = pIsPhantom; } +#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE +BOOL PathfindingLinkset::isWalkabilityCoefficientsF32() const +{ + return mIsWalkabilityCoefficientsF32; +} +#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + S32 PathfindingLinkset::getA() const { return mA; @@ -1174,10 +1245,21 @@ void LLFloaterPathfindingLinksets::applyEditFields() LLSD isPermanent = (bool)isPermanentBool; LLSD isWalkable = (bool)isWalkableBool; - LLSD a = static_cast(aValue) / 100.0f; - LLSD b = static_cast(bValue) / 100.0f; - LLSD c = static_cast(cValue) / 100.0f; - LLSD d = static_cast(dValue) / 100.0f; +#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + LLSD aReal = static_cast(aValue) / 100.0f; + LLSD bReal = static_cast(bValue) / 100.0f; + LLSD cReal = static_cast(cValue) / 100.0f; + LLSD dReal = static_cast(dValue) / 100.0f; + LLSD aInteger = aValue; + LLSD bInteger = bValue; + LLSD cInteger = cValue; + LLSD dInteger = dValue; +#else // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + LLSD a = aValue; + LLSD b = bValue; + LLSD c = cValue; + LLSD d = dValue; +#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE LLSD isPhantom = (bool)isPhantomBool; const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); @@ -1198,6 +1280,46 @@ void LLFloaterPathfindingLinksets::applyEditFields() itemData["permanent"] = isPermanent; itemData["walkable"] = isWalkable; } +#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + if (linkset.isWalkabilityCoefficientsF32()) + { + if (linkset.getA() != aValue) + { + itemData["A"] = aReal; + } + if (linkset.getB() != bValue) + { + itemData["B"] = bReal; + } + if (linkset.getC() != cValue) + { + itemData["C"] = cReal; + } + if (linkset.getD() != dValue) + { + itemData["D"] = dReal; + } + } + else + { + if (linkset.getA() != aValue) + { + itemData["A"] = aInteger; + } + if (linkset.getB() != bValue) + { + itemData["B"] = bInteger; + } + if (linkset.getC() != cValue) + { + itemData["C"] = cInteger; + } + if (linkset.getD() != dValue) + { + itemData["D"] = dInteger; + } + } +#else // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE if (linkset.getA() != aValue) { itemData["A"] = a; @@ -1214,6 +1336,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() { itemData["D"] = d; } +#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE if (linkset.isPhantom() != isPhantomBool) { itemData["phantom"] = isPhantom; -- cgit v1.2.3 From f304b18a74c8d3ae92d2298845e1c9f4f248e11a Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 26 Jan 2012 17:12:13 -0800 Subject: PATH-187: Started refactoring of the CAP service by moving the translation to an LLSD into the Linkset class where it should have been anyway. --- indra/newview/llfloaterpathfindinglinksets.cpp | 215 ++++++++++++------------- 1 file changed, 99 insertions(+), 116 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 311f193d85..e8f1401095 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -94,6 +94,9 @@ private: // PathfindingLinkset //--------------------------------------------------------------------------- +const S32 PathfindingLinkset::MIN_WALKABILITY_VALUE(0); +const S32 PathfindingLinkset::MAX_WALKABILITY_VALUE(100); + PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNavMeshItem) : mUUID(pUUID), mName(), @@ -105,10 +108,10 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa #ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE mIsWalkabilityCoefficientsF32(false), #endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - mA(0), - mB(0), - mC(0), - mD(0) + mA(MIN_WALKABILITY_VALUE), + mB(MIN_WALKABILITY_VALUE), + mC(MIN_WALKABILITY_VALUE), + mD(MIN_WALKABILITY_VALUE) { llassert(pNavMeshItem.has("name")); llassert(pNavMeshItem.get("name").isString()); @@ -162,50 +165,50 @@ PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNa // New server-side storage will be integer llassert(pNavMeshItem.get("A").isInteger()); mA = pNavMeshItem.get("A").asInteger(); - llassert(mA >= 0); - llassert(mA <= 100); + llassert(mA >= MIN_WALKABILITY_VALUE); + llassert(mA <= MAX_WALKABILITY_VALUE); llassert(pNavMeshItem.has("B")); llassert(pNavMeshItem.get("B").isInteger()); mB = pNavMeshItem.get("B").asInteger(); - llassert(mB >= 0); - llassert(mB <= 100); + llassert(mB >= MIN_WALKABILITY_VALUE); + llassert(mB <= MAX_WALKABILITY_VALUE); llassert(pNavMeshItem.has("C")); llassert(pNavMeshItem.get("C").isInteger()); mC = pNavMeshItem.get("C").asInteger(); - llassert(mC >= 0); - llassert(mC <= 100); + llassert(mC >= MIN_WALKABILITY_VALUE); + llassert(mC <= MAX_WALKABILITY_VALUE); llassert(pNavMeshItem.has("D")); llassert(pNavMeshItem.get("D").isInteger()); mD = pNavMeshItem.get("D").asInteger(); - llassert(mD >= 0); - llassert(mD <= 100); + llassert(mD >= MIN_WALKABILITY_VALUE); + llassert(mD <= MAX_WALKABILITY_VALUE); } #else // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE llassert(pNavMeshItem.get("A").isInteger()); mA = pNavMeshItem.get("A").asInteger(); - llassert(mA >= 0); - llassert(mA <= 100); + llassert(mA >= MIN_WALKABILITY_VALUE); + llassert(mA <= MAX_WALKABILITY_VALUE); llassert(pNavMeshItem.has("B")); llassert(pNavMeshItem.get("B").isInteger()); mB = pNavMeshItem.get("B").asInteger(); - llassert(mB >= 0); - llassert(mB <= 100); + llassert(mB >= MIN_WALKABILITY_VALUE); + llassert(mB <= MAX_WALKABILITY_VALUE); llassert(pNavMeshItem.has("C")); llassert(pNavMeshItem.get("C").isInteger()); mC = pNavMeshItem.get("C").asInteger(); - llassert(mC >= 0); - llassert(mC <= 100); + llassert(mC >= MIN_WALKABILITY_VALUE); + llassert(mC <= MAX_WALKABILITY_VALUE); llassert(pNavMeshItem.has("D")); llassert(pNavMeshItem.get("D").isInteger()); mD = pNavMeshItem.get("D").asInteger(); - llassert(mD >= 0); - llassert(mD <= 100); + llassert(mD >= MIN_WALKABILITY_VALUE); + llassert(mD <= MAX_WALKABILITY_VALUE); #endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE llassert(pNavMeshItem.has("position")); @@ -349,13 +352,6 @@ void PathfindingLinkset::setPhantom(BOOL pIsPhantom) mIsPhantom = pIsPhantom; } -#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE -BOOL PathfindingLinkset::isWalkabilityCoefficientsF32() const -{ - return mIsWalkabilityCoefficientsF32; -} -#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - S32 PathfindingLinkset::getA() const { return mA; @@ -396,6 +392,80 @@ void PathfindingLinkset::setD(S32 pD) mD = pD; } +LLSD PathfindingLinkset::getAlteredFields(EPathState pPathState, S32 pA, S32 pB, S32 pC, S32 pD, BOOL pIsPhantom) const +{ + LLSD itemData; + + if (mPathState != pPathState) + { + itemData["permanent"] = static_cast(PathfindingLinkset::isPermanent(pPathState)); + itemData["walkable"] = static_cast(PathfindingLinkset::isWalkable(pPathState)); + } +#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + if (mIsWalkabilityCoefficientsF32) + { + if (mA != pA) + { + itemData["A"] = llclamp(static_cast(pA) / 100.0f, 0.0f, 1.0f); + } + if (mB != pB) + { + itemData["B"] = llclamp(static_cast(pB) / 100.0f, 0.0f, 1.0f); + } + if (mC != pC) + { + itemData["C"] = llclamp(static_cast(pC) / 100.0f, 0.0f, 1.0f); + } + if (mD != pD) + { + itemData["D"] = llclamp(static_cast(pD) / 100.0f, 0.0f, 1.0f); + } + } + else + { + if (mA != pA) + { + itemData["A"] = llclamp(pA, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); + } + if (mB != pB) + { + itemData["B"] = llclamp(pB, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); + } + if (mC != pC) + { + itemData["C"] = llclamp(pC, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); + } + if (mD != pD) + { + itemData["D"] = llclamp(pD, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); + } + } +#else // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + if (mA != pA) + { + itemData["A"] = llclamp(pA, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); + } + if (mB != pB) + { + itemData["B"] = llclamp(pB, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); + } + if (mC != pC) + { + itemData["C"] = llclamp(pC, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); + } + if (mD != pD) + { + itemData["D"] = llclamp(pD, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); + } +#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE + if (mIsPhantom != pIsPhantom) + { + itemData["phantom"] = static_cast(pIsPhantom); + } + + return itemData; +} + //--------------------------------------------------------------------------- // FilterString //--------------------------------------------------------------------------- @@ -1231,8 +1301,6 @@ void LLFloaterPathfindingLinksets::applyEditFields() if (!selectedItems.empty()) { PathfindingLinkset::EPathState pathState = getPathState(); - BOOL isPermanentBool = PathfindingLinkset::isPermanent(pathState); - BOOL isWalkableBool = PathfindingLinkset::isWalkable(pathState); const std::string &aString = mEditA->getText(); const std::string &bString = mEditB->getText(); const std::string &cString = mEditC->getText(); @@ -1241,26 +1309,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() S32 bValue = static_cast(atoi(bString.c_str())); S32 cValue = static_cast(atoi(cString.c_str())); S32 dValue = static_cast(atoi(dString.c_str())); - BOOL isPhantomBool = mEditPhantom->getValue(); - - LLSD isPermanent = (bool)isPermanentBool; - LLSD isWalkable = (bool)isWalkableBool; -#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - LLSD aReal = static_cast(aValue) / 100.0f; - LLSD bReal = static_cast(bValue) / 100.0f; - LLSD cReal = static_cast(cValue) / 100.0f; - LLSD dReal = static_cast(dValue) / 100.0f; - LLSD aInteger = aValue; - LLSD bInteger = bValue; - LLSD cInteger = cValue; - LLSD dInteger = dValue; -#else // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - LLSD a = aValue; - LLSD b = bValue; - LLSD c = cValue; - LLSD d = dValue; -#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - LLSD isPhantom = (bool)isPhantomBool; + BOOL isPhantom = mEditPhantom->getValue(); const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); @@ -1274,73 +1323,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() const PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString()); const PathfindingLinkset &linkset = linksetIter->second; - LLSD itemData; - if (linkset.getPathState() != pathState) - { - itemData["permanent"] = isPermanent; - itemData["walkable"] = isWalkable; - } -#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - if (linkset.isWalkabilityCoefficientsF32()) - { - if (linkset.getA() != aValue) - { - itemData["A"] = aReal; - } - if (linkset.getB() != bValue) - { - itemData["B"] = bReal; - } - if (linkset.getC() != cValue) - { - itemData["C"] = cReal; - } - if (linkset.getD() != dValue) - { - itemData["D"] = dReal; - } - } - else - { - if (linkset.getA() != aValue) - { - itemData["A"] = aInteger; - } - if (linkset.getB() != bValue) - { - itemData["B"] = bInteger; - } - if (linkset.getC() != cValue) - { - itemData["C"] = cInteger; - } - if (linkset.getD() != dValue) - { - itemData["D"] = dInteger; - } - } -#else // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - if (linkset.getA() != aValue) - { - itemData["A"] = a; - } - if (linkset.getB() != bValue) - { - itemData["B"] = b; - } - if (linkset.getC() != cValue) - { - itemData["C"] = c; - } - if (linkset.getD() != dValue) - { - itemData["D"] = d; - } -#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - if (linkset.isPhantom() != isPhantomBool) - { - itemData["phantom"] = isPhantom; - } + LLSD itemData = linkset.getAlteredFields(pathState, aValue, bValue, cValue, dValue, isPhantom); if (!itemData.isUndefined()) { -- cgit v1.2.3 From 891e99058bcc587cd6a4b4d3eece134cfddd0883 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 27 Jan 2012 16:40:23 -0800 Subject: PATH-187 : Moving the PathfindingLinkset definition into its own file. --- indra/newview/llfloaterpathfindinglinksets.cpp | 431 ++----------------------- 1 file changed, 28 insertions(+), 403 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index e8f1401095..6c4d958f14 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -45,6 +45,7 @@ #include "llviewerregion.h" #include "llhttpclient.h" #include "lluuid.h" +#include "llpathfindinglinksets.h" #define XUI_PATH_STATE_WALKABLE 1 #define XUI_PATH_STATE_OBSTACLE 2 @@ -90,382 +91,6 @@ private: LLFloaterPathfindingLinksets *mLinksetsFloater; }; -//--------------------------------------------------------------------------- -// PathfindingLinkset -//--------------------------------------------------------------------------- - -const S32 PathfindingLinkset::MIN_WALKABILITY_VALUE(0); -const S32 PathfindingLinkset::MAX_WALKABILITY_VALUE(100); - -PathfindingLinkset::PathfindingLinkset(const std::string &pUUID, const LLSD& pNavMeshItem) - : mUUID(pUUID), - mName(), - mDescription(), - mLandImpact(0U), - mLocation(), - mPathState(kIgnored), - mIsPhantom(false), -#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - mIsWalkabilityCoefficientsF32(false), -#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - mA(MIN_WALKABILITY_VALUE), - mB(MIN_WALKABILITY_VALUE), - mC(MIN_WALKABILITY_VALUE), - mD(MIN_WALKABILITY_VALUE) -{ - llassert(pNavMeshItem.has("name")); - llassert(pNavMeshItem.get("name").isString()); - mName = pNavMeshItem.get("name").asString(); - - llassert(pNavMeshItem.has("description")); - llassert(pNavMeshItem.get("description").isString()); - mDescription = pNavMeshItem.get("description").asString(); - - llassert(pNavMeshItem.has("landimpact")); - llassert(pNavMeshItem.get("landimpact").isInteger()); - llassert(pNavMeshItem.get("landimpact").asInteger() >= 0); - mLandImpact = pNavMeshItem.get("landimpact").asInteger(); - - llassert(pNavMeshItem.has("permanent")); - llassert(pNavMeshItem.get("permanent").isBoolean()); - bool isPermanent = pNavMeshItem.get("permanent").asBoolean(); - - llassert(pNavMeshItem.has("walkable")); - llassert(pNavMeshItem.get("walkable").isBoolean()); - bool isWalkable = pNavMeshItem.get("walkable").asBoolean(); - - mPathState = getPathState(isPermanent, isWalkable); - - llassert(pNavMeshItem.has("phantom")); - llassert(pNavMeshItem.get("phantom").isBoolean()); - mIsPhantom = pNavMeshItem.get("phantom").asBoolean(); - - llassert(pNavMeshItem.has("A")); -#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - mIsWalkabilityCoefficientsF32 = pNavMeshItem.get("A").isReal(); - if (mIsWalkabilityCoefficientsF32) - { - // Old server-side storage was real - mA = llround(pNavMeshItem.get("A").asReal() * 100.0f); - - llassert(pNavMeshItem.has("B")); - llassert(pNavMeshItem.get("B").isReal()); - mB = llround(pNavMeshItem.get("B").asReal() * 100.0f); - - llassert(pNavMeshItem.has("C")); - llassert(pNavMeshItem.get("C").isReal()); - mC = llround(pNavMeshItem.get("C").asReal() * 100.0f); - - llassert(pNavMeshItem.has("D")); - llassert(pNavMeshItem.get("D").isReal()); - mD = llround(pNavMeshItem.get("D").asReal() * 100.0f); - } - else - { - // New server-side storage will be integer - llassert(pNavMeshItem.get("A").isInteger()); - mA = pNavMeshItem.get("A").asInteger(); - llassert(mA >= MIN_WALKABILITY_VALUE); - llassert(mA <= MAX_WALKABILITY_VALUE); - - llassert(pNavMeshItem.has("B")); - llassert(pNavMeshItem.get("B").isInteger()); - mB = pNavMeshItem.get("B").asInteger(); - llassert(mB >= MIN_WALKABILITY_VALUE); - llassert(mB <= MAX_WALKABILITY_VALUE); - - llassert(pNavMeshItem.has("C")); - llassert(pNavMeshItem.get("C").isInteger()); - mC = pNavMeshItem.get("C").asInteger(); - llassert(mC >= MIN_WALKABILITY_VALUE); - llassert(mC <= MAX_WALKABILITY_VALUE); - - llassert(pNavMeshItem.has("D")); - llassert(pNavMeshItem.get("D").isInteger()); - mD = pNavMeshItem.get("D").asInteger(); - llassert(mD >= MIN_WALKABILITY_VALUE); - llassert(mD <= MAX_WALKABILITY_VALUE); - } -#else // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - llassert(pNavMeshItem.get("A").isInteger()); - mA = pNavMeshItem.get("A").asInteger(); - llassert(mA >= MIN_WALKABILITY_VALUE); - llassert(mA <= MAX_WALKABILITY_VALUE); - - llassert(pNavMeshItem.has("B")); - llassert(pNavMeshItem.get("B").isInteger()); - mB = pNavMeshItem.get("B").asInteger(); - llassert(mB >= MIN_WALKABILITY_VALUE); - llassert(mB <= MAX_WALKABILITY_VALUE); - - llassert(pNavMeshItem.has("C")); - llassert(pNavMeshItem.get("C").isInteger()); - mC = pNavMeshItem.get("C").asInteger(); - llassert(mC >= MIN_WALKABILITY_VALUE); - llassert(mC <= MAX_WALKABILITY_VALUE); - - llassert(pNavMeshItem.has("D")); - llassert(pNavMeshItem.get("D").isInteger()); - mD = pNavMeshItem.get("D").asInteger(); - llassert(mD >= MIN_WALKABILITY_VALUE); - llassert(mD <= MAX_WALKABILITY_VALUE); -#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - - llassert(pNavMeshItem.has("position")); - llassert(pNavMeshItem.get("position").isArray()); - mLocation.setValue(pNavMeshItem.get("position")); -} - -PathfindingLinkset::PathfindingLinkset(const PathfindingLinkset& pOther) - : mUUID(pOther.mUUID), - mName(pOther.mName), - mDescription(pOther.mDescription), - mLandImpact(pOther.mLandImpact), - mLocation(pOther.mLocation), - mPathState(pOther.mPathState), - mIsPhantom(pOther.mIsPhantom), -#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - mIsWalkabilityCoefficientsF32(pOther.mIsWalkabilityCoefficientsF32), -#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - mA(pOther.mA), - mB(pOther.mB), - mC(pOther.mC), - mD(pOther.mD) -{ -} - -PathfindingLinkset::~PathfindingLinkset() -{ -} - -PathfindingLinkset& PathfindingLinkset::operator =(const PathfindingLinkset& pOther) -{ - mUUID = pOther.mUUID; - mName = pOther.mName; - mDescription = pOther.mDescription; - mLandImpact = pOther.mLandImpact; - mLocation = pOther.mLocation; - mPathState = pOther.mPathState; - mIsPhantom = pOther.mIsPhantom; -#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - mIsWalkabilityCoefficientsF32 = pOther.mIsWalkabilityCoefficientsF32; -#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - mA = pOther.mA; - mB = pOther.mB; - mC = pOther.mC; - mD = pOther.mD; - - return *this; -} - -const LLUUID& PathfindingLinkset::getUUID() const -{ - return mUUID; -} - -const std::string& PathfindingLinkset::getName() const -{ - return mName; -} - -const std::string& PathfindingLinkset::getDescription() const -{ - return mDescription; -} - -U32 PathfindingLinkset::getLandImpact() const -{ - return mLandImpact; -} - -const LLVector3& PathfindingLinkset::getPositionAgent() const -{ - return mLocation; -} - -PathfindingLinkset::EPathState PathfindingLinkset::getPathState() const -{ - return mPathState; -} - -void PathfindingLinkset::setPathState(EPathState pPathState) -{ - mPathState = pPathState; -} - -PathfindingLinkset::EPathState PathfindingLinkset::getPathState(bool pIsPermanent, bool pIsWalkable) -{ - return (pIsPermanent ? (pIsWalkable ? kWalkable : kObstacle) : kIgnored); -} - -BOOL PathfindingLinkset::isPermanent(EPathState pPathState) -{ - BOOL retVal; - - switch (pPathState) - { - case kWalkable : - case kObstacle : - retVal = true; - break; - case kIgnored : - retVal = false; - break; - default : - retVal = false; - llassert(0); - break; - } - - return retVal; -} - -BOOL PathfindingLinkset::isWalkable(EPathState pPathState) -{ - BOOL retVal; - - switch (pPathState) - { - case kWalkable : - retVal = true; - break; - case kObstacle : - case kIgnored : - retVal = false; - break; - default : - retVal = false; - llassert(0); - break; - } - - return retVal; -} - -BOOL PathfindingLinkset::isPhantom() const -{ - return mIsPhantom; -} - -void PathfindingLinkset::setPhantom(BOOL pIsPhantom) -{ - mIsPhantom = pIsPhantom; -} - -S32 PathfindingLinkset::getA() const -{ - return mA; -} - -void PathfindingLinkset::setA(S32 pA) -{ - mA = pA; -} - -S32 PathfindingLinkset::getB() const -{ - return mB; -} - -void PathfindingLinkset::setB(S32 pB) -{ - mB = pB; -} - -S32 PathfindingLinkset::getC() const -{ - return mC; -} - -void PathfindingLinkset::setC(S32 pC) -{ - mC = pC; -} - -S32 PathfindingLinkset::getD() const -{ - return mD; -} - -void PathfindingLinkset::setD(S32 pD) -{ - mD = pD; -} - -LLSD PathfindingLinkset::getAlteredFields(EPathState pPathState, S32 pA, S32 pB, S32 pC, S32 pD, BOOL pIsPhantom) const -{ - LLSD itemData; - - if (mPathState != pPathState) - { - itemData["permanent"] = static_cast(PathfindingLinkset::isPermanent(pPathState)); - itemData["walkable"] = static_cast(PathfindingLinkset::isWalkable(pPathState)); - } -#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - if (mIsWalkabilityCoefficientsF32) - { - if (mA != pA) - { - itemData["A"] = llclamp(static_cast(pA) / 100.0f, 0.0f, 1.0f); - } - if (mB != pB) - { - itemData["B"] = llclamp(static_cast(pB) / 100.0f, 0.0f, 1.0f); - } - if (mC != pC) - { - itemData["C"] = llclamp(static_cast(pC) / 100.0f, 0.0f, 1.0f); - } - if (mD != pD) - { - itemData["D"] = llclamp(static_cast(pD) / 100.0f, 0.0f, 1.0f); - } - } - else - { - if (mA != pA) - { - itemData["A"] = llclamp(pA, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); - } - if (mB != pB) - { - itemData["B"] = llclamp(pB, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); - } - if (mC != pC) - { - itemData["C"] = llclamp(pC, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); - } - if (mD != pD) - { - itemData["D"] = llclamp(pD, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); - } - } -#else // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - if (mA != pA) - { - itemData["A"] = llclamp(pA, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); - } - if (mB != pB) - { - itemData["B"] = llclamp(pB, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); - } - if (mC != pC) - { - itemData["C"] = llclamp(pC, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); - } - if (mD != pD) - { - itemData["D"] = llclamp(pD, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE); - } -#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE - if (mIsPhantom != pIsPhantom) - { - itemData["phantom"] = static_cast(pIsPhantom); - } - - return itemData; -} - //--------------------------------------------------------------------------- // FilterString //--------------------------------------------------------------------------- @@ -598,9 +223,9 @@ void PathfindingLinksets::setNavMeshData(const LLSD& pNavMeshData) { const std::string& uuid(navMeshDataIter->first); const LLSD& linksetData = navMeshDataIter->second; - PathfindingLinkset linkset(uuid, linksetData); + LLPathfindingLinkset linkset(uuid, linksetData); - mAllLinksets.insert(std::pair(uuid, linkset)); + mAllLinksets.insert(std::pair(uuid, linkset)); } mIsFiltersDirty = true; @@ -613,12 +238,12 @@ void PathfindingLinksets::updateNavMeshData(const LLSD& pNavMeshData) { const std::string& uuid(navMeshDataIter->first); const LLSD& linksetData = navMeshDataIter->second; - PathfindingLinkset linkset(uuid, linksetData); + LLPathfindingLinkset linkset(uuid, linksetData); PathfindingLinksetMap::iterator linksetIter = mAllLinksets.find(uuid); if (linksetIter == mAllLinksets.end()) { - mAllLinksets.insert(std::pair(uuid, linkset)); + mAllLinksets.insert(std::pair(uuid, linkset)); } else { @@ -730,21 +355,21 @@ void PathfindingLinksets::applyFilters() linksetIter != mAllLinksets.end(); ++linksetIter) { const std::string& uuid(linksetIter->first); - const PathfindingLinkset& linkset(linksetIter->second); + const LLPathfindingLinkset& linkset(linksetIter->second); if (doesMatchFilters(linkset)) { - mFilteredLinksets.insert(std::pair(uuid, linkset)); + mFilteredLinksets.insert(std::pair(uuid, linkset)); } } mIsFiltersDirty = false; } -BOOL PathfindingLinksets::doesMatchFilters(const PathfindingLinkset& pLinkset) const +BOOL PathfindingLinksets::doesMatchFilters(const LLPathfindingLinkset& pLinkset) const { - return (((mIsWalkableFilter && (pLinkset.getPathState() == PathfindingLinkset::kWalkable)) || - (mIsObstacleFilter && (pLinkset.getPathState() == PathfindingLinkset::kObstacle)) || - (mIsIgnoredFilter && (pLinkset.getPathState() == PathfindingLinkset::kIgnored))) && + return (((mIsWalkableFilter && (pLinkset.getPathState() == LLPathfindingLinkset::kWalkable)) || + (mIsObstacleFilter && (pLinkset.getPathState() == LLPathfindingLinkset::kObstacle)) || + (mIsIgnoredFilter && (pLinkset.getPathState() == LLPathfindingLinkset::kIgnored))) && (!mNameFilter.isActive() || mNameFilter.doesMatch(pLinkset.getName())) && (!mDescriptionFilter.isActive() || mDescriptionFilter.doesMatch(pLinkset.getDescription()))); } @@ -1109,7 +734,7 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() for (PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetMap.begin(); linksetIter != linksetMap.end(); ++linksetIter) { - const PathfindingLinkset& linkset(linksetIter->second); + const LLPathfindingLinkset& linkset(linksetIter->second); LLSD columns; @@ -1132,13 +757,13 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() columns[4]["column"] = "path_state"; switch (linkset.getPathState()) { - case PathfindingLinkset::kWalkable : + case LLPathfindingLinkset::kWalkable : columns[4]["value"] = getString("linkset_path_state_walkable"); break; - case PathfindingLinkset::kObstacle : + case LLPathfindingLinkset::kObstacle : columns[4]["value"] = getString("linkset_path_state_obstacle"); break; - case PathfindingLinkset::kIgnored : + case LLPathfindingLinkset::kIgnored : columns[4]["value"] = getString("linkset_path_state_ignored"); break; default : @@ -1282,7 +907,7 @@ void LLFloaterPathfindingLinksets::updateEditFields() const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(firstItem->getUUID().asString()); - const PathfindingLinkset &linkset(linksetIter->second); + const LLPathfindingLinkset &linkset(linksetIter->second); setPathState(linkset.getPathState()); mEditA->setValue(LLSD(linkset.getA())); @@ -1300,7 +925,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() std::vector selectedItems = mLinksetsScrollList->getAllSelected(); if (!selectedItems.empty()) { - PathfindingLinkset::EPathState pathState = getPathState(); + LLPathfindingLinkset::EPathState pathState = getPathState(); const std::string &aString = mEditA->getText(); const std::string &bString = mEditB->getText(); const std::string &cString = mEditC->getText(); @@ -1321,7 +946,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() LLUUID uuid = listItem->getUUID(); const PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString()); - const PathfindingLinkset &linkset = linksetIter->second; + const LLPathfindingLinkset &linkset = linksetIter->second; LLSD itemData = linkset.getAlteredFields(pathState, aValue, bValue, cValue, dValue, isPhantom); @@ -1361,23 +986,23 @@ void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) mApplyEdits->setEnabled(pEnabled); } -PathfindingLinkset::EPathState LLFloaterPathfindingLinksets::getPathState() const +LLPathfindingLinkset::EPathState LLFloaterPathfindingLinksets::getPathState() const { - PathfindingLinkset::EPathState pathState; + LLPathfindingLinkset::EPathState pathState; switch (mEditPathState->getValue().asInteger()) { case XUI_PATH_STATE_WALKABLE : - pathState = PathfindingLinkset::kWalkable; + pathState = LLPathfindingLinkset::kWalkable; break; case XUI_PATH_STATE_OBSTACLE : - pathState = PathfindingLinkset::kObstacle; + pathState = LLPathfindingLinkset::kObstacle; break; case XUI_PATH_STATE_IGNORED : - pathState = PathfindingLinkset::kIgnored; + pathState = LLPathfindingLinkset::kIgnored; break; default : - pathState = PathfindingLinkset::kIgnored; + pathState = LLPathfindingLinkset::kIgnored; llassert(0); break; } @@ -1385,19 +1010,19 @@ PathfindingLinkset::EPathState LLFloaterPathfindingLinksets::getPathState() cons return pathState; } -void LLFloaterPathfindingLinksets::setPathState(PathfindingLinkset::EPathState pPathState) +void LLFloaterPathfindingLinksets::setPathState(LLPathfindingLinkset::EPathState pPathState) { LLSD radioGroupValue; switch (pPathState) { - case PathfindingLinkset::kWalkable : + case LLPathfindingLinkset::kWalkable : radioGroupValue = XUI_PATH_STATE_WALKABLE; break; - case PathfindingLinkset::kObstacle : + case LLPathfindingLinkset::kObstacle : radioGroupValue = XUI_PATH_STATE_OBSTACLE; break; - case PathfindingLinkset::kIgnored : + case LLPathfindingLinkset::kIgnored : radioGroupValue = XUI_PATH_STATE_IGNORED; break; default : -- cgit v1.2.3 From a9520ba18fcecf2b0acd74968896ce3dd33308bb Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 27 Jan 2012 16:51:34 -0800 Subject: PATH-187 : Renaming the walkability parameters to be more descriptive. --- indra/newview/llfloaterpathfindinglinksets.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 6c4d958f14..ed3b06e6de 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -778,19 +778,19 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() columns[5]["font"] = "SANSSERIF"; columns[6]["column"] = "a_percent"; - columns[6]["value"] = llformat("%3d", linkset.getA()); + columns[6]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientA()); columns[6]["font"] = "SANSSERIF"; columns[7]["column"] = "b_percent"; - columns[7]["value"] = llformat("%3d", linkset.getB()); + columns[7]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientB()); columns[7]["font"] = "SANSSERIF"; columns[8]["column"] = "c_percent"; - columns[8]["value"] = llformat("%3d", linkset.getC()); + columns[8]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientC()); columns[8]["font"] = "SANSSERIF"; columns[9]["column"] = "d_percent"; - columns[9]["value"] = llformat("%3d", linkset.getD()); + columns[9]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientD()); columns[9]["font"] = "SANSSERIF"; LLSD element; @@ -910,10 +910,10 @@ void LLFloaterPathfindingLinksets::updateEditFields() const LLPathfindingLinkset &linkset(linksetIter->second); setPathState(linkset.getPathState()); - mEditA->setValue(LLSD(linkset.getA())); - mEditB->setValue(LLSD(linkset.getB())); - mEditC->setValue(LLSD(linkset.getC())); - mEditD->setValue(LLSD(linkset.getD())); + mEditA->setValue(LLSD(linkset.getWalkabilityCoefficientA())); + mEditB->setValue(LLSD(linkset.getWalkabilityCoefficientB())); + mEditC->setValue(LLSD(linkset.getWalkabilityCoefficientC())); + mEditD->setValue(LLSD(linkset.getWalkabilityCoefficientD())); mEditPhantom->set(linkset.isPhantom()); setEnableEditFields(true); -- cgit v1.2.3 From 8330e111597c6dbbc3ede2a2a05fa20eda8ceb5f Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 27 Jan 2012 17:17:18 -0800 Subject: PATH-187: Refactoring to make the appropriate class able to be inlined. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index ed3b06e6de..433e3c9866 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -751,7 +751,7 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() columns[2]["font"] = "SANSSERIF"; columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linkset.getPositionAgent())); + columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linkset.getLocation())); columns[3]["font"] = "SANSSERIF"; columns[4]["column"] = "path_state"; -- cgit v1.2.3 From 58f299fb8ab409545b5ea386eb60965486e3d380 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 27 Jan 2012 18:03:04 -0800 Subject: PATH-187: Moving the filtered pathfinding linksets class into its own file. --- indra/newview/llfloaterpathfindinglinksets.cpp | 306 +------------------------ 1 file changed, 12 insertions(+), 294 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 433e3c9866..e2846d36f3 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -45,7 +45,8 @@ #include "llviewerregion.h" #include "llhttpclient.h" #include "lluuid.h" -#include "llpathfindinglinksets.h" +#include "llpathfindinglinkset.h" +#include "llfilteredpathfindinglinksets.h" #define XUI_PATH_STATE_WALKABLE 1 #define XUI_PATH_STATE_OBSTACLE 2 @@ -91,289 +92,6 @@ private: LLFloaterPathfindingLinksets *mLinksetsFloater; }; -//--------------------------------------------------------------------------- -// FilterString -//--------------------------------------------------------------------------- - -FilterString::FilterString() - : mFilter(), - mUpperFilter() -{ -} - -FilterString::FilterString(const std::string& pFilter) - : mFilter(pFilter), - mUpperFilter() -{ - LLStringUtil::trim(mFilter); - mUpperFilter = mFilter; - if (!mUpperFilter.empty()) - { - LLStringUtil::toUpper(mUpperFilter); - } -} - -FilterString::FilterString(const FilterString& pOther) - : mFilter(pOther.mFilter), - mUpperFilter(pOther.mUpperFilter) -{ -} - -FilterString::~FilterString() -{ -} - -const std::string& FilterString::get() const -{ - return mFilter; -} - -bool FilterString::set(const std::string& pFilter) -{ - std::string newFilter(pFilter); - LLStringUtil::trim(newFilter); - bool didFilterChange = (mFilter.compare(newFilter) != 0); - if (didFilterChange) - { - mFilter = newFilter; - mUpperFilter = newFilter; - LLStringUtil::toUpper(mUpperFilter); - } - - return didFilterChange; -} - -void FilterString::clear() -{ - mFilter.clear(); - mUpperFilter.clear(); -} - -bool FilterString::isActive() const -{ - return !mFilter.empty(); -} - -bool FilterString::doesMatch(const std::string& pTestString) const -{ - bool doesMatch = true; - - if (isActive()) - { - std::string upperTestString(pTestString); - LLStringUtil::toUpper(upperTestString); - doesMatch = (upperTestString.find(mUpperFilter) != std::string::npos); - } - - return doesMatch; -} - -//--------------------------------------------------------------------------- -// PathfindingLinksets -//--------------------------------------------------------------------------- - -PathfindingLinksets::PathfindingLinksets() - : mAllLinksets(), - mFilteredLinksets(), - mIsFiltersDirty(false), - mNameFilter(), - mDescriptionFilter(), - mIsWalkableFilter(true), - mIsObstacleFilter(true), - mIsIgnoredFilter(true) -{ -} - -PathfindingLinksets::PathfindingLinksets(const LLSD& pNavMeshData) - : mAllLinksets(), - mFilteredLinksets(), - mIsFiltersDirty(false), - mNameFilter(), - mDescriptionFilter(), - mIsWalkableFilter(true), - mIsObstacleFilter(true), - mIsIgnoredFilter(true) -{ - setNavMeshData(pNavMeshData); -} - -PathfindingLinksets::PathfindingLinksets(const PathfindingLinksets& pOther) - : mAllLinksets(pOther.mAllLinksets), - mFilteredLinksets(pOther.mFilteredLinksets), - mIsFiltersDirty(pOther.mIsFiltersDirty), - mNameFilter(pOther.mNameFilter), - mDescriptionFilter(pOther.mDescriptionFilter), - mIsWalkableFilter(pOther.mIsWalkableFilter), - mIsObstacleFilter(pOther.mIsObstacleFilter), - mIsIgnoredFilter(pOther.mIsIgnoredFilter) -{ -} - -PathfindingLinksets::~PathfindingLinksets() -{ - clearLinksets(); -} - -void PathfindingLinksets::setNavMeshData(const LLSD& pNavMeshData) -{ - clearLinksets(); - - for (LLSD::map_const_iterator navMeshDataIter = pNavMeshData.beginMap(); - navMeshDataIter != pNavMeshData.endMap(); ++navMeshDataIter) - { - const std::string& uuid(navMeshDataIter->first); - const LLSD& linksetData = navMeshDataIter->second; - LLPathfindingLinkset linkset(uuid, linksetData); - - mAllLinksets.insert(std::pair(uuid, linkset)); - } - - mIsFiltersDirty = true; -} - -void PathfindingLinksets::updateNavMeshData(const LLSD& pNavMeshData) -{ - for (LLSD::map_const_iterator navMeshDataIter = pNavMeshData.beginMap(); - navMeshDataIter != pNavMeshData.endMap(); ++navMeshDataIter) - { - const std::string& uuid(navMeshDataIter->first); - const LLSD& linksetData = navMeshDataIter->second; - LLPathfindingLinkset linkset(uuid, linksetData); - - PathfindingLinksetMap::iterator linksetIter = mAllLinksets.find(uuid); - if (linksetIter == mAllLinksets.end()) - { - mAllLinksets.insert(std::pair(uuid, linkset)); - } - else - { - linksetIter->second = linkset; - } - } - - mIsFiltersDirty = true; -} - -void PathfindingLinksets::clearLinksets() -{ - mAllLinksets.clear(); - mFilteredLinksets.clear(); - mIsFiltersDirty = false; -} - -const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getAllLinksets() const -{ - return mAllLinksets; -} - -const PathfindingLinksets::PathfindingLinksetMap& PathfindingLinksets::getFilteredLinksets() -{ - if (!isFiltersActive()) - { - return mAllLinksets; - } - else - { - applyFilters(); - return mFilteredLinksets; - } -} - -BOOL PathfindingLinksets::isFiltersActive() const -{ - return (mNameFilter.isActive() || mDescriptionFilter.isActive() || !mIsWalkableFilter || !mIsObstacleFilter || !mIsIgnoredFilter); -} - -void PathfindingLinksets::setNameFilter(const std::string& pNameFilter) -{ - mIsFiltersDirty = (mNameFilter.set(pNameFilter) || mIsFiltersDirty); -} - -const std::string& PathfindingLinksets::getNameFilter() const -{ - return mNameFilter.get(); -} - -void PathfindingLinksets::setDescriptionFilter(const std::string& pDescriptionFilter) -{ - mIsFiltersDirty = (mDescriptionFilter.set(pDescriptionFilter) || mIsFiltersDirty); -} - -const std::string& PathfindingLinksets::getDescriptionFilter() const -{ - return mDescriptionFilter.get(); -} - -void PathfindingLinksets::setWalkableFilter(BOOL pWalkableFilter) -{ - mIsFiltersDirty = (mIsFiltersDirty || (mIsWalkableFilter == pWalkableFilter)); - mIsWalkableFilter = pWalkableFilter; -} - -BOOL PathfindingLinksets::isWalkableFilter() const -{ - return mIsWalkableFilter; -} - -void PathfindingLinksets::setObstacleFilter(BOOL pObstacleFilter) -{ - mIsFiltersDirty = (mIsFiltersDirty || (mIsObstacleFilter == pObstacleFilter)); - mIsObstacleFilter = pObstacleFilter; -} - -BOOL PathfindingLinksets::isObstacleFilter() const -{ - return mIsObstacleFilter; -} - -void PathfindingLinksets::setIgnoredFilter(BOOL pIgnoredFilter) -{ - mIsFiltersDirty = (mIsFiltersDirty || (mIsIgnoredFilter == pIgnoredFilter)); - mIsIgnoredFilter = pIgnoredFilter; -} - -BOOL PathfindingLinksets::isIgnoredFilter() const -{ - return mIsIgnoredFilter; -} - -void PathfindingLinksets::clearFilters() -{ - mNameFilter.clear(); - mDescriptionFilter.clear(); - mIsWalkableFilter = true; - mIsObstacleFilter = true; - mIsIgnoredFilter = true; - mIsFiltersDirty = false; -} - -void PathfindingLinksets::applyFilters() -{ - mFilteredLinksets.clear(); - - for (PathfindingLinksetMap::const_iterator linksetIter = mAllLinksets.begin(); - linksetIter != mAllLinksets.end(); ++linksetIter) - { - const std::string& uuid(linksetIter->first); - const LLPathfindingLinkset& linkset(linksetIter->second); - if (doesMatchFilters(linkset)) - { - mFilteredLinksets.insert(std::pair(uuid, linkset)); - } - } - - mIsFiltersDirty = false; -} - -BOOL PathfindingLinksets::doesMatchFilters(const LLPathfindingLinkset& pLinkset) const -{ - return (((mIsWalkableFilter && (pLinkset.getPathState() == LLPathfindingLinkset::kWalkable)) || - (mIsObstacleFilter && (pLinkset.getPathState() == LLPathfindingLinkset::kObstacle)) || - (mIsIgnoredFilter && (pLinkset.getPathState() == LLPathfindingLinkset::kIgnored))) && - (!mNameFilter.isActive() || mNameFilter.doesMatch(pLinkset.getName())) && - (!mDescriptionFilter.isActive() || mDescriptionFilter.doesMatch(pLinkset.getDescription()))); -} - //--------------------------------------------------------------------------- // LLFloaterPathfindingLinksets //--------------------------------------------------------------------------- @@ -557,7 +275,7 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataGetRequest() else { setMessagingState(kMessagingFetchStarting); - mPathfindingLinksets.clearLinksets(); + mPathfindingLinksets.clearPathfindingLinksets(); updateLinksetsList(); std::string navMeshDataURL = getCapabilityURL(); @@ -593,7 +311,7 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataPutRequest(const LLSD& pPostDa void LLFloaterPathfindingLinksets::handleNavMeshDataGetReply(const LLSD& pNavMeshData) { setMessagingState(kMessagingFetchReceived); - mPathfindingLinksets.setNavMeshData(pNavMeshData); + mPathfindingLinksets.setPathfindingLinksets(pNavMeshData); updateLinksetsList(); setMessagingState(kMessagingComplete); } @@ -601,7 +319,7 @@ void LLFloaterPathfindingLinksets::handleNavMeshDataGetReply(const LLSD& pNavMes void LLFloaterPathfindingLinksets::handleNavMeshDataGetError(const std::string& pURL, const std::string& pErrorReason) { setMessagingState(kMessagingFetchError); - mPathfindingLinksets.clearLinksets(); + mPathfindingLinksets.clearPathfindingLinksets(); updateLinksetsList(); llwarns << "Error fetching object navmesh properties from URL '" << pURL << "' because " << pErrorReason << llendl; } @@ -609,7 +327,7 @@ void LLFloaterPathfindingLinksets::handleNavMeshDataGetError(const std::string& void LLFloaterPathfindingLinksets::handleNavMeshDataPutReply(const LLSD& pModifiedData) { setMessagingState(kMessagingModifyReceived); - mPathfindingLinksets.updateNavMeshData(pModifiedData); + mPathfindingLinksets.updatePathfindingLinksets(pModifiedData); updateLinksetsList(); setMessagingState(kMessagingComplete); } @@ -729,9 +447,9 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() updateLinksetsStatusMessage(); const LLVector3& avatarPosition = gAgent.getPositionAgent(); - const PathfindingLinksets::PathfindingLinksetMap& linksetMap = mPathfindingLinksets.getFilteredLinksets(); + const LLFilteredPathfindingLinksets::PathfindingLinksetMap& linksetMap = mPathfindingLinksets.getFilteredLinksets(); - for (PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetMap.begin(); + for (LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetMap.begin(); linksetIter != linksetMap.end(); ++linksetIter) { const LLPathfindingLinkset& linkset(linksetIter->second); @@ -905,8 +623,8 @@ void LLFloaterPathfindingLinksets::updateEditFields() { LLScrollListItem *firstItem = selectedItems.front(); - const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); - PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(firstItem->getUUID().asString()); + const LLFilteredPathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); + LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(firstItem->getUUID().asString()); const LLPathfindingLinkset &linkset(linksetIter->second); setPathState(linkset.getPathState()); @@ -936,7 +654,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() S32 dValue = static_cast(atoi(dString.c_str())); BOOL isPhantom = mEditPhantom->getValue(); - const PathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); + const LLFilteredPathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); LLSD editData; for (std::vector::const_iterator itemIter = selectedItems.begin(); @@ -945,7 +663,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() const LLScrollListItem *listItem = *itemIter; LLUUID uuid = listItem->getUUID(); - const PathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString()); + const LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString()); const LLPathfindingLinkset &linkset = linksetIter->second; LLSD itemData = linkset.getAlteredFields(pathState, aValue, bValue, cValue, dValue, isPhantom); -- cgit v1.2.3 From 588dc1b020315ca2c62eb8adc0db48af61e55c4e Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 30 Jan 2012 11:10:53 -0800 Subject: PATH-187: Using handles instead of pointers for safer implementation. --- indra/newview/llfloaterpathfindinglinksets.cpp | 58 +++++++++++++++++--------- 1 file changed, 39 insertions(+), 19 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index e2846d36f3..571c4a8427 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -32,7 +32,7 @@ #include "v3math.h" #include "lltextvalidate.h" #include "llagent.h" -#include "llfloater.h" +#include "llhandle.h" #include "llfloaterreg.h" #include "lltextbase.h" #include "lllineeditor.h" @@ -59,7 +59,8 @@ class NavMeshDataGetResponder : public LLHTTPClient::Responder { public: - NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater); + NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, + const LLHandle &pLinksetsHandle); virtual ~NavMeshDataGetResponder(); virtual void result(const LLSD& pContent); @@ -68,8 +69,8 @@ public: private: NavMeshDataGetResponder(const NavMeshDataGetResponder& pOther); - std::string mNavMeshDataGetURL; - LLFloaterPathfindingLinksets *mLinksetsFloater; + std::string mNavMeshDataGetURL; + LLHandle mLinksetsFloaterHandle; }; //--------------------------------------------------------------------------- @@ -79,7 +80,8 @@ private: class NavMeshDataPutResponder : public LLHTTPClient::Responder { public: - NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater); + NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, + const LLHandle &pLinksetsHandle); virtual ~NavMeshDataPutResponder(); virtual void result(const LLSD& pContent); @@ -88,8 +90,8 @@ public: private: NavMeshDataPutResponder(const NavMeshDataPutResponder& pOther); - std::string mNavMeshDataPutURL; - LLFloaterPathfindingLinksets *mLinksetsFloater; + std::string mNavMeshDataPutURL; + LLHandle mLinksetsFloaterHandle; }; //--------------------------------------------------------------------------- @@ -232,6 +234,7 @@ BOOL LLFloaterPathfindingLinksets::isMessagingInProgress() const LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) : LLFloater(pSeed), + mSelfHandle(), mPathfindingLinksets(), mMessagingState(kMessagingInitial), mLinksetsScrollList(NULL), @@ -257,6 +260,7 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mEditPhantom(NULL), mApplyEdits(NULL) { + mSelfHandle.bind(this); } LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() @@ -287,7 +291,7 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataGetRequest() else { setMessagingState(kMessagingFetchRequestSent); - LLHTTPClient::get(navMeshDataURL, new NavMeshDataGetResponder(navMeshDataURL, this)); + LLHTTPClient::get(navMeshDataURL, new NavMeshDataGetResponder(navMeshDataURL, mSelfHandle)); } } } @@ -303,7 +307,7 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataPutRequest(const LLSD& pPostDa } else { - LLHTTPClient::put(navMeshDataURL, pPostData, new NavMeshDataPutResponder(navMeshDataURL, this)); + LLHTTPClient::put(navMeshDataURL, pPostData, new NavMeshDataPutResponder(navMeshDataURL, mSelfHandle)); } } } @@ -756,48 +760,64 @@ void LLFloaterPathfindingLinksets::setPathState(LLPathfindingLinkset::EPathState // NavMeshDataGetResponder //--------------------------------------------------------------------------- -NavMeshDataGetResponder::NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) +NavMeshDataGetResponder::NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, + const LLHandle &pLinksetsHandle) : mNavMeshDataGetURL(pNavMeshDataGetURL), - mLinksetsFloater(pLinksetsFloater) + mLinksetsFloaterHandle(pLinksetsHandle) { } NavMeshDataGetResponder::~NavMeshDataGetResponder() { - mLinksetsFloater = NULL; } void NavMeshDataGetResponder::result(const LLSD& pContent) { - mLinksetsFloater->handleNavMeshDataGetReply(pContent); + LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); + if (linksetsFloater != NULL) + { + linksetsFloater->handleNavMeshDataGetReply(pContent); + } } void NavMeshDataGetResponder::error(U32 status, const std::string& reason) { - mLinksetsFloater->handleNavMeshDataGetError(mNavMeshDataGetURL, reason); + LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); + if (linksetsFloater != NULL) + { + linksetsFloater->handleNavMeshDataGetError(mNavMeshDataGetURL, reason); + } } //--------------------------------------------------------------------------- // NavMeshDataPutResponder //--------------------------------------------------------------------------- -NavMeshDataPutResponder::NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, LLFloaterPathfindingLinksets *pLinksetsFloater) +NavMeshDataPutResponder::NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, + const LLHandle &pLinksetsHandle) : mNavMeshDataPutURL(pNavMeshDataPutURL), - mLinksetsFloater(pLinksetsFloater) + mLinksetsFloaterHandle(pLinksetsHandle) { } NavMeshDataPutResponder::~NavMeshDataPutResponder() { - mLinksetsFloater = NULL; } void NavMeshDataPutResponder::result(const LLSD& pContent) { - mLinksetsFloater->handleNavMeshDataPutReply(pContent); + LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); + if (linksetsFloater != NULL) + { + linksetsFloater->handleNavMeshDataPutReply(pContent); + } } void NavMeshDataPutResponder::error(U32 status, const std::string& reason) { - mLinksetsFloater->handleNavMeshDataPutError(mNavMeshDataPutURL, reason); + LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); + if (linksetsFloater != NULL) + { + linksetsFloater->handleNavMeshDataPutError(mNavMeshDataPutURL, reason); + } } -- cgit v1.2.3 From b5a1d08347a88736a67e0dc0e0e6069952be7e7a Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 30 Jan 2012 12:24:31 -0800 Subject: PATH-187: Resolving an issue where in a particular scenario the edit fields were not being disabled when nothing was selected. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 571c4a8427..3edb4e5c73 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -372,6 +372,7 @@ void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingS { mMessagingState = pMessagingState; updateLinksetsStatusMessage(); + updateEditFields(); } void LLFloaterPathfindingLinksets::onApplyFiltersClicked() @@ -524,6 +525,7 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() mLinksetsScrollList->selectMultiple(selectedUUIDs); updateLinksetsStatusMessage(); + updateEditFields(); } void LLFloaterPathfindingLinksets::selectAllLinksets() -- cgit v1.2.3 From de6ae690b5315307b59b1a2ac722700c3839e4ba Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 30 Jan 2012 16:33:41 -0800 Subject: PATH-187: Consolidating field names for the cap service into local defines. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 3edb4e5c73..4d3581fc60 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -672,7 +672,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() const LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString()); const LLPathfindingLinkset &linkset = linksetIter->second; - LLSD itemData = linkset.getAlteredFields(pathState, aValue, bValue, cValue, dValue, isPhantom); + LLSD itemData = linkset.encodeAlteredFields(pathState, aValue, bValue, cValue, dValue, isPhantom); if (!itemData.isUndefined()) { -- cgit v1.2.3 From 90c174d87667b2fc106d8d88a063f9ecf8aaff8d Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 7 Feb 2012 14:25:59 -0800 Subject: Adding functionality to better handle the cause where the capability service does not exist to the linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 4d3581fc60..5c7f288226 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -285,7 +285,7 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataGetRequest() std::string navMeshDataURL = getCapabilityURL(); if (navMeshDataURL.empty()) { - setMessagingState(kMessagingComplete); + setMessagingState(kMessagingServiceNotAvailable); llwarns << "cannot query object navmesh properties from current region '" << getRegionName() << "'" << llendl; } else @@ -300,13 +300,16 @@ void LLFloaterPathfindingLinksets::sendNavMeshDataPutRequest(const LLSD& pPostDa { if (!isMessagingInProgress()) { + setMessagingState(kMessagingModifyStarting); std::string navMeshDataURL = getCapabilityURL(); if (navMeshDataURL.empty()) { + setMessagingState(kMessagingServiceNotAvailable); llwarns << "cannot put object navmesh properties for current region '" << getRegionName() << "'" << llendl; } else { + setMessagingState(kMessagingModifyRequestSent); LLHTTPClient::put(navMeshDataURL, pPostData, new NavMeshDataPutResponder(navMeshDataURL, mSelfHandle)); } } @@ -602,6 +605,10 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() statusText = getString("linksets_messaging_complete_available", string_args); } break; + case kMessagingServiceNotAvailable : + statusText = getString("linksets_messaging_service_not_available"); + styleParams.color = warningColor; + break; default: statusText = getString("linksets_messaging_initial"); llassert(0); -- cgit v1.2.3 From e156e9ed03fd16af36e2b28823f07658f4d9b0c8 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 16 Feb 2012 14:55:21 -0800 Subject: PATH-292: First pass at implementing the new design of the linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 337 +++++++++++++++---------- 1 file changed, 207 insertions(+), 130 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 5c7f288226..ac95483a66 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -27,30 +27,33 @@ #include "llviewerprecompiledheaders.h" #include "llfloater.h" +#include "llfloaterreg.h" #include "llfloaterpathfindinglinksets.h" #include "llsd.h" +#include "lluuid.h" #include "v3math.h" #include "lltextvalidate.h" #include "llagent.h" #include "llhandle.h" -#include "llfloaterreg.h" #include "lltextbase.h" #include "lllineeditor.h" #include "llscrolllistitem.h" #include "llscrolllistctrl.h" -#include "llcheckboxctrl.h" -#include "llradiogroup.h" +#include "llcombobox.h" #include "llbutton.h" #include "llresmgr.h" #include "llviewerregion.h" #include "llhttpclient.h" -#include "lluuid.h" #include "llpathfindinglinkset.h" #include "llfilteredpathfindinglinksets.h" -#define XUI_PATH_STATE_WALKABLE 1 -#define XUI_PATH_STATE_OBSTACLE 2 -#define XUI_PATH_STATE_IGNORED 3 +#define XUI_LINKSET_USE_NONE 0 +#define XUI_LINKSET_USE_WALKABLE 1 +#define XUI_LINKSET_USE_STATIC_OBSTACLE 2 +#define XUI_LINKSET_USE_DYNAMIC_OBSTACLE 3 +#define XUI_LINKSET_USE_MATERIAL_VOLUME 4 +#define XUI_LINKSET_USE_EXCLUSION_VOLUME 5 +#define XUI_LINKSET_USE_DYNAMIC_PHANTOM 6 //--------------------------------------------------------------------------- // NavMeshDataGetResponder @@ -100,11 +103,24 @@ private: BOOL LLFloaterPathfindingLinksets::postBuild() { - childSetAction("apply_filters", boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + childSetAction("apply_filters", boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); childSetAction("clear_filters", boost::bind(&LLFloaterPathfindingLinksets::onClearFiltersClicked, this)); - childSetAction("refresh_linksets_list", boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this)); - childSetAction("select_all_linksets", boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this)); - childSetAction("select_none_linksets", boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this)); + + mFilterByName = findChild("filter_by_name"); + llassert(mFilterByName != NULL); + mFilterByName->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); + mFilterByName->setSelectAllonFocusReceived(true); + mFilterByName->setCommitOnFocusLost(true); + + mFilterByDescription = findChild("filter_by_description"); + llassert(mFilterByDescription != NULL); + mFilterByDescription->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); + mFilterByDescription->setSelectAllonFocusReceived(true); + mFilterByDescription->setCommitOnFocusLost(true); + + mFilterByLinksetUse = findChild("filter_by_linkset_use"); + llassert(mFilterByLinksetUse != NULL); + mFilterByLinksetUse->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); mLinksetsScrollList = findChild("pathfinding_linksets"); llassert(mLinksetsScrollList != NULL); @@ -115,41 +131,40 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLinksetsStatus = findChild("linksets_status"); llassert(mLinksetsStatus != NULL); - mFilterByName = findChild("filter_by_name"); - llassert(mFilterByName != NULL); - mFilterByName->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); - mFilterByName->setSelectAllonFocusReceived(true); - mFilterByName->setCommitOnFocusLost(true); + mRefreshListButton = findChild("refresh_linksets_list"); + llassert(mRefreshListButton != NULL); + mRefreshListButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this)); - mFilterByDescription = findChild("filter_by_description"); - llassert(mFilterByDescription != NULL); - mFilterByDescription->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); - mFilterByDescription->setSelectAllonFocusReceived(true); - mFilterByDescription->setCommitOnFocusLost(true); + mSelectAllButton = findChild("select_all_linksets"); + llassert(mSelectAllButton != NULL); + mSelectAllButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this)); - mFilterByWalkable = findChild("filter_by_walkable"); - llassert(mFilterByWalkable != NULL); - mFilterByWalkable->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + mSelectNoneButton = findChild("select_none_linksets"); + llassert(mSelectNoneButton != NULL); + mSelectNoneButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this)); - mFilterByObstacle = findChild("filter_by_obstacle"); - llassert(mFilterByObstacle != NULL); - mFilterByObstacle->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + mTakeButton = findChild("take_linksets"); + llassert(mTakeButton != NULL); + mTakeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeClicked, this)); - mFilterByIgnored = findChild("filter_by_ignored"); - llassert(mFilterByIgnored != NULL); - mFilterByIgnored->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this)); + mTakeCopyButton = findChild("take_copy_linksets"); + llassert(mTakeCopyButton != NULL); + mTakeCopyButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeCopyClicked, this)); - mEditPathState = findChild("edit_path_state"); - llassert(mEditPathState != NULL); + mReturnButton = findChild("return_linksets"); + llassert(mReturnButton != NULL); + mReturnButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onReturnClicked, this)); - mEditPathStateWalkable = findChild("edit_pathing_state_walkable"); - llassert(mEditPathStateWalkable != NULL); + mDeleteButton = findChild("delete_linksets"); + llassert(mDeleteButton != NULL); + mDeleteButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onDeleteClicked, this)); - mEditPathStateObstacle = findChild("edit_pathing_state_obstacle"); - llassert(mEditPathStateObstacle != NULL); + mTeleportButton = findChild("teleport_me_to_linkset"); + llassert(mTeleportButton != NULL); + mTeleportButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTeleportClicked, this)); - mEditPathStateIgnored = findChild("edit_pathing_state_ignored"); - llassert(mEditPathStateIgnored != NULL); + mEditLinksetUse = findChild("edit_linkset_use"); + llassert(mEditLinksetUse != NULL); mLabelWalkabilityCoefficients = findChild("walkability_coefficients_label"); llassert(mLabelWalkabilityCoefficients != NULL); @@ -157,37 +172,34 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLabelEditA = findChild("edit_a_label"); llassert(mLabelEditA != NULL); - mLabelEditB = findChild("edit_b_label"); - llassert(mLabelEditB != NULL); - - mLabelEditC = findChild("edit_c_label"); - llassert(mLabelEditC != NULL); - - mLabelEditD = findChild("edit_d_label"); - llassert(mLabelEditD != NULL); - mEditA = findChild("edit_a_value"); llassert(mEditA != NULL); mEditA->setPrevalidate(LLTextValidate::validatePositiveS32); + mLabelEditB = findChild("edit_b_label"); + llassert(mLabelEditB != NULL); + mEditB = findChild("edit_b_value"); llassert(mEditB != NULL); mEditB->setPrevalidate(LLTextValidate::validatePositiveS32); + mLabelEditC = findChild("edit_c_label"); + llassert(mLabelEditC != NULL); + mEditC = findChild("edit_c_value"); llassert(mEditC != NULL); mEditC->setPrevalidate(LLTextValidate::validatePositiveS32); + mLabelEditD = findChild("edit_d_label"); + llassert(mLabelEditD != NULL); + mEditD = findChild("edit_d_value"); llassert(mEditD != NULL); mEditD->setPrevalidate(LLTextValidate::validatePositiveS32); - mEditPhantom = findChild("edit_phantom_value"); - llassert(mEditPhantom != NULL); - - mApplyEdits = findChild("apply_edit_values"); - llassert(mApplyEdits != NULL); - mApplyEdits->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); + mApplyEditsButton = findChild("apply_edit_values"); + llassert(mApplyEditsButton != NULL); + mApplyEditsButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); setEnableEditFields(false); setMessagingState(kMessagingInitial); @@ -235,30 +247,31 @@ BOOL LLFloaterPathfindingLinksets::isMessagingInProgress() const LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) : LLFloater(pSeed), mSelfHandle(), - mPathfindingLinksets(), - mMessagingState(kMessagingInitial), - mLinksetsScrollList(NULL), - mLinksetsStatus(NULL), mFilterByName(NULL), mFilterByDescription(NULL), - mFilterByWalkable(NULL), - mFilterByObstacle(NULL), - mFilterByIgnored(NULL), - mEditPathState(NULL), - mEditPathStateWalkable(NULL), - mEditPathStateObstacle(NULL), - mEditPathStateIgnored(NULL), + mFilterByLinksetUse(NULL), + mLinksetsScrollList(NULL), + mLinksetsStatus(NULL), + mRefreshListButton(NULL), + mSelectAllButton(NULL), + mTakeButton(NULL), + mTakeCopyButton(NULL), + mReturnButton(NULL), + mDeleteButton(NULL), + mTeleportButton(NULL), + mEditLinksetUse(NULL), mLabelWalkabilityCoefficients(NULL), mLabelEditA(NULL), - mLabelEditB(NULL), - mLabelEditC(NULL), - mLabelEditD(NULL), mEditA(NULL), + mLabelEditB(NULL), mEditB(NULL), + mLabelEditC(NULL), mEditC(NULL), + mLabelEditD(NULL), mEditD(NULL), - mEditPhantom(NULL), - mApplyEdits(NULL) + mApplyEditsButton(NULL), + mPathfindingLinksets(), + mMessagingState(kMessagingInitial) { mSelfHandle.bind(this); } @@ -378,7 +391,7 @@ void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingS updateEditFields(); } -void LLFloaterPathfindingLinksets::onApplyFiltersClicked() +void LLFloaterPathfindingLinksets::onApplyAllFilters() { applyFilters(); } @@ -409,6 +422,31 @@ void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() selectNoneLinksets(); } +void LLFloaterPathfindingLinksets::onTakeClicked() +{ + llwarns << "functionality not yet implemented for " << mTakeButton->getName() << llendl; +} + +void LLFloaterPathfindingLinksets::onTakeCopyClicked() +{ + llwarns << "functionality not yet implemented for " << mTakeCopyButton->getName() << llendl; +} + +void LLFloaterPathfindingLinksets::onReturnClicked() +{ + llwarns << "functionality not yet implemented for " << mReturnButton->getName() << llendl; +} + +void LLFloaterPathfindingLinksets::onDeleteClicked() +{ + llwarns << "functionality not yet implemented for " << mDeleteButton->getName() << llendl; +} + +void LLFloaterPathfindingLinksets::onTeleportClicked() +{ + llwarns << "functionality not yet implemented for " << mTeleportButton->getName() << llendl; +} + void LLFloaterPathfindingLinksets::onApplyChangesClicked() { applyEditFields(); @@ -418,9 +456,7 @@ void LLFloaterPathfindingLinksets::applyFilters() { mPathfindingLinksets.setNameFilter(mFilterByName->getText()); mPathfindingLinksets.setDescriptionFilter(mFilterByDescription->getText()); - mPathfindingLinksets.setWalkableFilter(mFilterByWalkable->get()); - mPathfindingLinksets.setObstacleFilter(mFilterByObstacle->get()); - mPathfindingLinksets.setIgnoredFilter(mFilterByIgnored->get()); + mPathfindingLinksets.setLinksetUseFilter(getFilterLinksetUse()); updateLinksetsList(); } @@ -429,9 +465,7 @@ void LLFloaterPathfindingLinksets::clearFilters() mPathfindingLinksets.clearFilters(); mFilterByName->setText(LLStringExplicit(mPathfindingLinksets.getNameFilter())); mFilterByDescription->setText(LLStringExplicit(mPathfindingLinksets.getDescriptionFilter())); - mFilterByWalkable->set(mPathfindingLinksets.isWalkableFilter()); - mFilterByObstacle->set(mPathfindingLinksets.isObstacleFilter()); - mFilterByIgnored->set(mPathfindingLinksets.isIgnoredFilter()); + setFilterLinksetUse(mPathfindingLinksets.getLinksetUseFilter()); updateLinksetsList(); } @@ -480,45 +514,51 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linkset.getLocation())); columns[3]["font"] = "SANSSERIF"; - columns[4]["column"] = "path_state"; - switch (linkset.getPathState()) + columns[4]["column"] = "linkset_use"; + switch (linkset.getLinksetUse()) { case LLPathfindingLinkset::kWalkable : - columns[4]["value"] = getString("linkset_path_state_walkable"); + columns[4]["value"] = getString("linkset_use_walkable"); + break; + case LLPathfindingLinkset::kStaticObstacle : + columns[4]["value"] = getString("linkset_use_static_obstacle"); break; - case LLPathfindingLinkset::kObstacle : - columns[4]["value"] = getString("linkset_path_state_obstacle"); + case LLPathfindingLinkset::kDynamicObstacle : + columns[4]["value"] = getString("linkset_use_dynamic_obstacle"); break; - case LLPathfindingLinkset::kIgnored : - columns[4]["value"] = getString("linkset_path_state_ignored"); + case LLPathfindingLinkset::kMaterialVolume : + columns[4]["value"] = getString("linkset_use_material_volume"); break; + case LLPathfindingLinkset::kExclusionVolume : + columns[4]["value"] = getString("linkset_use_exclusion_volume"); + break; + case LLPathfindingLinkset::kDynamicPhantom : + columns[4]["value"] = getString("linkset_use_dynamic_phantom"); + break; + case LLPathfindingLinkset::kUnknown : default : - columns[4]["value"] = getString("linkset_path_state_ignored"); + columns[4]["value"] = getString("linkset_use_dynamic_obstacle"); llassert(0); break; } columns[4]["font"] = "SANSSERIF"; - columns[5]["column"] = "is_phantom"; - columns[5]["value"] = getString(linkset.isPhantom() ? "linkset_is_phantom" : "linkset_is_not_phantom"); + columns[5]["column"] = "a_percent"; + columns[5]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientA()); columns[5]["font"] = "SANSSERIF"; - columns[6]["column"] = "a_percent"; - columns[6]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientA()); + columns[6]["column"] = "b_percent"; + columns[6]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientB()); columns[6]["font"] = "SANSSERIF"; - columns[7]["column"] = "b_percent"; - columns[7]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientB()); + columns[7]["column"] = "c_percent"; + columns[7]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientC()); columns[7]["font"] = "SANSSERIF"; - columns[8]["column"] = "c_percent"; - columns[8]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientC()); + columns[8]["column"] = "d_percent"; + columns[8]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientD()); columns[8]["font"] = "SANSSERIF"; - columns[9]["column"] = "d_percent"; - columns[9]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientD()); - columns[9]["font"] = "SANSSERIF"; - LLSD element; element["id"] = linkset.getUUID().asString(); element["column"] = columns; @@ -623,12 +663,11 @@ void LLFloaterPathfindingLinksets::updateEditFields() std::vector selectedItems = mLinksetsScrollList->getAllSelected(); if (selectedItems.empty()) { - mEditPathState->clear(); + mEditLinksetUse->clear(); mEditA->clear(); mEditB->clear(); mEditC->clear(); mEditD->clear(); - mEditPhantom->clear(); setEnableEditFields(false); } @@ -640,12 +679,11 @@ void LLFloaterPathfindingLinksets::updateEditFields() LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(firstItem->getUUID().asString()); const LLPathfindingLinkset &linkset(linksetIter->second); - setPathState(linkset.getPathState()); + setEditLinksetUse(linkset.getLinksetUse()); mEditA->setValue(LLSD(linkset.getWalkabilityCoefficientA())); mEditB->setValue(LLSD(linkset.getWalkabilityCoefficientB())); mEditC->setValue(LLSD(linkset.getWalkabilityCoefficientC())); mEditD->setValue(LLSD(linkset.getWalkabilityCoefficientD())); - mEditPhantom->set(linkset.isPhantom()); setEnableEditFields(true); } @@ -656,7 +694,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() std::vector selectedItems = mLinksetsScrollList->getAllSelected(); if (!selectedItems.empty()) { - LLPathfindingLinkset::EPathState pathState = getPathState(); + LLPathfindingLinkset::ELinksetUse pathState = getEditLinksetUse(); const std::string &aString = mEditA->getText(); const std::string &bString = mEditB->getText(); const std::string &cString = mEditC->getText(); @@ -665,7 +703,6 @@ void LLFloaterPathfindingLinksets::applyEditFields() S32 bValue = static_cast(atoi(bString.c_str())); S32 cValue = static_cast(atoi(cString.c_str())); S32 dValue = static_cast(atoi(dString.c_str())); - BOOL isPhantom = mEditPhantom->getValue(); const LLFilteredPathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); @@ -679,7 +716,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() const LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString()); const LLPathfindingLinkset &linkset = linksetIter->second; - LLSD itemData = linkset.encodeAlteredFields(pathState, aValue, bValue, cValue, dValue, isPhantom); + LLSD itemData = linkset.encodeAlteredFields(pathState, aValue, bValue, cValue, dValue); if (!itemData.isUndefined()) { @@ -700,10 +737,7 @@ void LLFloaterPathfindingLinksets::applyEditFields() void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) { - mEditPathState->setEnabled(pEnabled); - mEditPathStateWalkable->setEnabled(pEnabled); - mEditPathStateObstacle->setEnabled(pEnabled); - mEditPathStateIgnored->setEnabled(pEnabled); + mEditLinksetUse->setEnabled(pEnabled); mLabelWalkabilityCoefficients->setEnabled(pEnabled); mLabelEditA->setEnabled(pEnabled); mLabelEditB->setEnabled(pEnabled); @@ -713,56 +747,99 @@ void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) mEditB->setEnabled(pEnabled); mEditC->setEnabled(pEnabled); mEditD->setEnabled(pEnabled); - mEditPhantom->setEnabled(pEnabled); - mApplyEdits->setEnabled(pEnabled); + mApplyEditsButton->setEnabled(pEnabled); +} + +LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getFilterLinksetUse() const +{ + return convertToLinksetUse(mFilterByLinksetUse->getValue()); +} + +void LLFloaterPathfindingLinksets::setFilterLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse) +{ + mFilterByLinksetUse->setValue(convertToXuiValue(pLinksetUse)); +} + +LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getEditLinksetUse() const +{ + return convertToLinksetUse(mEditLinksetUse->getValue()); } -LLPathfindingLinkset::EPathState LLFloaterPathfindingLinksets::getPathState() const +void LLFloaterPathfindingLinksets::setEditLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse) { - LLPathfindingLinkset::EPathState pathState; + mEditLinksetUse->setValue(convertToXuiValue(pLinksetUse)); +} + +LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::convertToLinksetUse(LLSD pXuiValue) const +{ + LLPathfindingLinkset::ELinksetUse linkUse; - switch (mEditPathState->getValue().asInteger()) + switch (pXuiValue.asInteger()) { - case XUI_PATH_STATE_WALKABLE : - pathState = LLPathfindingLinkset::kWalkable; + case XUI_LINKSET_USE_NONE : + linkUse = LLPathfindingLinkset::kUnknown; + break; + case XUI_LINKSET_USE_WALKABLE : + linkUse = LLPathfindingLinkset::kWalkable; + break; + case XUI_LINKSET_USE_STATIC_OBSTACLE : + linkUse = LLPathfindingLinkset::kStaticObstacle; + break; + case XUI_LINKSET_USE_DYNAMIC_OBSTACLE : + linkUse = LLPathfindingLinkset::kDynamicObstacle; break; - case XUI_PATH_STATE_OBSTACLE : - pathState = LLPathfindingLinkset::kObstacle; + case XUI_LINKSET_USE_MATERIAL_VOLUME : + linkUse = LLPathfindingLinkset::kMaterialVolume; break; - case XUI_PATH_STATE_IGNORED : - pathState = LLPathfindingLinkset::kIgnored; + case XUI_LINKSET_USE_EXCLUSION_VOLUME : + linkUse = LLPathfindingLinkset::kExclusionVolume; + break; + case XUI_LINKSET_USE_DYNAMIC_PHANTOM : + linkUse = LLPathfindingLinkset::kDynamicPhantom; break; default : - pathState = LLPathfindingLinkset::kIgnored; + linkUse = LLPathfindingLinkset::kUnknown; llassert(0); break; } - return pathState; + return linkUse; } -void LLFloaterPathfindingLinksets::setPathState(LLPathfindingLinkset::EPathState pPathState) +LLSD LLFloaterPathfindingLinksets::convertToXuiValue(LLPathfindingLinkset::ELinksetUse pLinksetUse) const { - LLSD radioGroupValue; + LLSD xuiValue; - switch (pPathState) + switch (pLinksetUse) { + case LLPathfindingLinkset::kUnknown : + xuiValue = XUI_LINKSET_USE_NONE; + break; case LLPathfindingLinkset::kWalkable : - radioGroupValue = XUI_PATH_STATE_WALKABLE; + xuiValue = XUI_LINKSET_USE_WALKABLE; + break; + case LLPathfindingLinkset::kStaticObstacle : + xuiValue = XUI_LINKSET_USE_STATIC_OBSTACLE; + break; + case LLPathfindingLinkset::kDynamicObstacle : + xuiValue = XUI_LINKSET_USE_DYNAMIC_OBSTACLE; + break; + case LLPathfindingLinkset::kMaterialVolume : + xuiValue = XUI_LINKSET_USE_MATERIAL_VOLUME; break; - case LLPathfindingLinkset::kObstacle : - radioGroupValue = XUI_PATH_STATE_OBSTACLE; + case LLPathfindingLinkset::kExclusionVolume : + xuiValue = XUI_LINKSET_USE_EXCLUSION_VOLUME; break; - case LLPathfindingLinkset::kIgnored : - radioGroupValue = XUI_PATH_STATE_IGNORED; + case LLPathfindingLinkset::kDynamicPhantom : + xuiValue = XUI_LINKSET_USE_DYNAMIC_PHANTOM; break; default : - radioGroupValue = XUI_PATH_STATE_IGNORED; + xuiValue = XUI_LINKSET_USE_NONE; llassert(0); break; } - mEditPathState->setValue(radioGroupValue); + return xuiValue; } //--------------------------------------------------------------------------- -- cgit v1.2.3 From b1089ae35599427335e1391a747945d619f3158a Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 16 Feb 2012 16:09:23 -0800 Subject: PATH-292: Implementing the action buttons for the linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 142 +++++++++++++++++++------ 1 file changed, 112 insertions(+), 30 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index ac95483a66..ae78004044 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -43,6 +43,10 @@ #include "llbutton.h" #include "llresmgr.h" #include "llviewerregion.h" +#include "llselectmgr.h" +#include "llviewermenu.h" +#include "llviewerobject.h" +#include "llviewerobjectlist.h" #include "llhttpclient.h" #include "llpathfindinglinkset.h" #include "llfilteredpathfindinglinksets.h" @@ -125,7 +129,6 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLinksetsScrollList = findChild("pathfinding_linksets"); llassert(mLinksetsScrollList != NULL); mLinksetsScrollList->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onLinksetsSelectionChange, this)); - mLinksetsScrollList->setCommitOnSelectionChange(true); mLinksetsScrollList->sortByColumnIndex(0, true); mLinksetsStatus = findChild("linksets_status"); @@ -201,7 +204,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() llassert(mApplyEditsButton != NULL); mApplyEditsButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); - setEnableEditFields(false); + setEnableActionAndEditFields(false); setMessagingState(kMessagingInitial); return LLFloater::postBuild(); @@ -210,6 +213,35 @@ BOOL LLFloaterPathfindingLinksets::postBuild() void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) { sendNavMeshDataGetRequest(); + selectNoneLinksets(); + mLinksetsScrollList->setCommitOnSelectionChange(true); +} + +void LLFloaterPathfindingLinksets::onClose(bool app_quitting) +{ + mLinksetsScrollList->setCommitOnSelectionChange(false); + selectNoneLinksets(); + if (mLinksetsSelection.notNull()) + { + std::vector selectedObjects; + + LLObjectSelection *linksetsSelected = mLinksetsSelection.get(); + for (LLObjectSelection::valid_iterator linksetsIter = linksetsSelected->valid_begin(); + linksetsIter != linksetsSelected->valid_end(); ++linksetsIter) + { + LLSelectNode *linksetsNode = *linksetsIter; + selectedObjects.push_back(linksetsNode->getObject()); + } + + for (std::vector::const_iterator selectedObjectIter = selectedObjects.begin(); + selectedObjectIter != selectedObjects.end(); ++selectedObjectIter) + { + LLViewerObject *selectedObject = *selectedObjectIter; + LLSelectMgr::getInstance()->deselectObjectAndFamily(selectedObject); + } + + mLinksetsSelection.clear(); + } } void LLFloaterPathfindingLinksets::openLinksetsEditor() @@ -271,7 +303,8 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mEditD(NULL), mApplyEditsButton(NULL), mPathfindingLinksets(), - mMessagingState(kMessagingInitial) + mMessagingState(kMessagingInitial), + mLinksetsSelection() { mSelfHandle.bind(this); } @@ -388,7 +421,7 @@ void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingS { mMessagingState = pMessagingState; updateLinksetsStatusMessage(); - updateEditFields(); + updateActionAndEditFields(); } void LLFloaterPathfindingLinksets::onApplyAllFilters() @@ -403,8 +436,37 @@ void LLFloaterPathfindingLinksets::onClearFiltersClicked() void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() { + mLinksetsSelection.clear(); + LLSelectMgr::getInstance()->deselectAll(); + + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + int numSelectedItems = selectedItems.size(); + + std::vectorviewerObjects; + viewerObjects.reserve(numSelectedItems); + + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + selectedItemIter != selectedItems.end(); ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + + LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); + if (viewerObject != NULL) + { + viewerObjects.push_back(viewerObject); + } + } + + if (!viewerObjects.empty()) + { + mLinksetsSelection = LLSelectMgr::getInstance()->selectObjectAndFamily(viewerObjects); + } + } + updateLinksetsStatusMessage(); - updateEditFields(); + updateActionAndEditFields(); } void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() @@ -424,27 +486,42 @@ void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() void LLFloaterPathfindingLinksets::onTakeClicked() { - llwarns << "functionality not yet implemented for " << mTakeButton->getName() << llendl; + handle_take(); } void LLFloaterPathfindingLinksets::onTakeCopyClicked() { - llwarns << "functionality not yet implemented for " << mTakeCopyButton->getName() << llendl; + handle_take_copy(); } void LLFloaterPathfindingLinksets::onReturnClicked() { - llwarns << "functionality not yet implemented for " << mReturnButton->getName() << llendl; + handle_object_return(); } void LLFloaterPathfindingLinksets::onDeleteClicked() { - llwarns << "functionality not yet implemented for " << mDeleteButton->getName() << llendl; + handle_object_delete(); } void LLFloaterPathfindingLinksets::onTeleportClicked() { - llwarns << "functionality not yet implemented for " << mTeleportButton->getName() << llendl; + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + llassert(selectedItems.size() == 1); + if (selectedItems.size() == 1) + { + std::vector::const_reference selectedItemRef = selectedItems.front(); + const LLScrollListItem *selectedItem = selectedItemRef; + LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = mPathfindingLinksets.getFilteredLinksets().find(selectedItem->getUUID().asString()); + const LLPathfindingLinkset &linkset = linksetIter->second; + LLVector3 linksetLocation = linkset.getLocation(); + + LLViewerRegion* region = gAgent.getRegion(); + if (region != NULL) + { + gAgent.teleportRequest(region->getHandle(), linksetLocation, true); + } + } } void LLFloaterPathfindingLinksets::onApplyChangesClicked() @@ -568,7 +645,7 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() mLinksetsScrollList->selectMultiple(selectedUUIDs); updateLinksetsStatusMessage(); - updateEditFields(); + updateActionAndEditFields(); } void LLFloaterPathfindingLinksets::selectAllLinksets() @@ -658,7 +735,7 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams); } -void LLFloaterPathfindingLinksets::updateEditFields() +void LLFloaterPathfindingLinksets::updateActionAndEditFields() { std::vector selectedItems = mLinksetsScrollList->getAllSelected(); if (selectedItems.empty()) @@ -669,7 +746,7 @@ void LLFloaterPathfindingLinksets::updateEditFields() mEditC->clear(); mEditD->clear(); - setEnableEditFields(false); + setEnableActionAndEditFields(false); } else { @@ -685,16 +762,36 @@ void LLFloaterPathfindingLinksets::updateEditFields() mEditC->setValue(LLSD(linkset.getWalkabilityCoefficientC())); mEditD->setValue(LLSD(linkset.getWalkabilityCoefficientD())); - setEnableEditFields(true); + setEnableActionAndEditFields(true); } } +void LLFloaterPathfindingLinksets::setEnableActionAndEditFields(BOOL pEnabled) +{ + mTakeButton->setEnabled(pEnabled && tools_visible_take_object()); + mTakeCopyButton->setEnabled(pEnabled && enable_object_take_copy()); + mReturnButton->setEnabled(pEnabled && enable_object_return()); + mDeleteButton->setEnabled(pEnabled && enable_object_delete()); + mTeleportButton->setEnabled(pEnabled && (mLinksetsScrollList->getNumSelected() == 1)); + mEditLinksetUse->setEnabled(pEnabled); + mLabelWalkabilityCoefficients->setEnabled(pEnabled); + mLabelEditA->setEnabled(pEnabled); + mLabelEditB->setEnabled(pEnabled); + mLabelEditC->setEnabled(pEnabled); + mLabelEditD->setEnabled(pEnabled); + mEditA->setEnabled(pEnabled); + mEditB->setEnabled(pEnabled); + mEditC->setEnabled(pEnabled); + mEditD->setEnabled(pEnabled); + mApplyEditsButton->setEnabled(pEnabled); +} + void LLFloaterPathfindingLinksets::applyEditFields() { std::vector selectedItems = mLinksetsScrollList->getAllSelected(); if (!selectedItems.empty()) { - LLPathfindingLinkset::ELinksetUse pathState = getEditLinksetUse(); + LLPathfindingLinkset::ELinksetUse pathState = getEditLinksetUse(); // XXX this and pathState const std::string &aString = mEditA->getText(); const std::string &bString = mEditB->getText(); const std::string &cString = mEditC->getText(); @@ -735,21 +832,6 @@ void LLFloaterPathfindingLinksets::applyEditFields() } } -void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled) -{ - mEditLinksetUse->setEnabled(pEnabled); - mLabelWalkabilityCoefficients->setEnabled(pEnabled); - mLabelEditA->setEnabled(pEnabled); - mLabelEditB->setEnabled(pEnabled); - mLabelEditC->setEnabled(pEnabled); - mLabelEditD->setEnabled(pEnabled); - mEditA->setEnabled(pEnabled); - mEditB->setEnabled(pEnabled); - mEditC->setEnabled(pEnabled); - mEditD->setEnabled(pEnabled); - mApplyEditsButton->setEnabled(pEnabled); -} - LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getFilterLinksetUse() const { return convertToLinksetUse(mFilterByLinksetUse->getValue()); -- cgit v1.2.3 From a73ec672d1bb163e156e2c9bc8a38be5fa2d2b0d Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 16 Feb 2012 16:49:31 -0800 Subject: PATH-292: Adding an additional show beacons checkbox for the linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index ae78004044..aa0c78527d 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -40,6 +40,7 @@ #include "llscrolllistitem.h" #include "llscrolllistctrl.h" #include "llcombobox.h" +#include "llcheckboxctrl.h" #include "llbutton.h" #include "llresmgr.h" #include "llviewerregion.h" @@ -146,6 +147,9 @@ BOOL LLFloaterPathfindingLinksets::postBuild() llassert(mSelectNoneButton != NULL); mSelectNoneButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this)); + mShowBeaconCheckBox = findChild("show_beacon"); + llassert(mShowBeaconCheckBox != NULL); + mTakeButton = findChild("take_linksets"); llassert(mTakeButton != NULL); mTakeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeClicked, this)); @@ -244,6 +248,37 @@ void LLFloaterPathfindingLinksets::onClose(bool app_quitting) } } +void LLFloaterPathfindingLinksets::draw() +{ + if (mShowBeaconCheckBox->get()) + { + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + int numSelectedItems = selectedItems.size(); + + std::vector viewerObjects; + viewerObjects.reserve(numSelectedItems); + + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + selectedItemIter != selectedItems.end(); ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + + const std::string &objectName = selectedItem->getColumn(0)->getValue().asString(); + + LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); + if (viewerObject != NULL) + { + gObjectList.addDebugBeacon(viewerObject->getPositionAgent(), objectName, LLColor4(0.f, 0.f, 1.f, 0.8f), LLColor4(1.f, 1.f, 1.f, 1.f), 6); + } + } + } + } + + LLFloater::draw(); +} + void LLFloaterPathfindingLinksets::openLinksetsEditor() { LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); -- cgit v1.2.3 From 73aa47f391341e6d6ef5136ef73302be689d3e9d Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 23 Feb 2012 16:51:06 -0800 Subject: PATH-292: Reworking how and where linksets are requested and managed. --- indra/newview/llfloaterpathfindinglinksets.cpp | 639 ++++++++++--------------- 1 file changed, 249 insertions(+), 390 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index aa0c78527d..73ab01a89f 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -34,7 +34,6 @@ #include "v3math.h" #include "lltextvalidate.h" #include "llagent.h" -#include "llhandle.h" #include "lltextbase.h" #include "lllineeditor.h" #include "llscrolllistitem.h" @@ -48,9 +47,11 @@ #include "llviewermenu.h" #include "llviewerobject.h" #include "llviewerobjectlist.h" -#include "llhttpclient.h" #include "llpathfindinglinkset.h" -#include "llfilteredpathfindinglinksets.h" +#include "llpathfindinglinksetlist.h" +#include "llpathfindingmanager.h" + +#include #define XUI_LINKSET_USE_NONE 0 #define XUI_LINKSET_USE_WALKABLE 1 @@ -60,48 +61,6 @@ #define XUI_LINKSET_USE_EXCLUSION_VOLUME 5 #define XUI_LINKSET_USE_DYNAMIC_PHANTOM 6 -//--------------------------------------------------------------------------- -// NavMeshDataGetResponder -//--------------------------------------------------------------------------- - -class NavMeshDataGetResponder : public LLHTTPClient::Responder -{ -public: - NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, - const LLHandle &pLinksetsHandle); - virtual ~NavMeshDataGetResponder(); - - virtual void result(const LLSD& pContent); - virtual void error(U32 pStatus, const std::string& pReason); - -private: - NavMeshDataGetResponder(const NavMeshDataGetResponder& pOther); - - std::string mNavMeshDataGetURL; - LLHandle mLinksetsFloaterHandle; -}; - -//--------------------------------------------------------------------------- -// NavMeshDataPutResponder -//--------------------------------------------------------------------------- - -class NavMeshDataPutResponder : public LLHTTPClient::Responder -{ -public: - NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, - const LLHandle &pLinksetsHandle); - virtual ~NavMeshDataPutResponder(); - - virtual void result(const LLSD& pContent); - virtual void error(U32 pStatus, const std::string& pReason); - -private: - NavMeshDataPutResponder(const NavMeshDataPutResponder& pOther); - - std::string mNavMeshDataPutURL; - LLHandle mLinksetsFloaterHandle; -}; - //--------------------------------------------------------------------------- // LLFloaterPathfindingLinksets //--------------------------------------------------------------------------- @@ -208,44 +167,38 @@ BOOL LLFloaterPathfindingLinksets::postBuild() llassert(mApplyEditsButton != NULL); mApplyEditsButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); - setEnableActionAndEditFields(false); - setMessagingState(kMessagingInitial); - return LLFloater::postBuild(); } void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) { - sendNavMeshDataGetRequest(); + LLFloater::onOpen(pKey); + + requestGetLinksets(); selectNoneLinksets(); mLinksetsScrollList->setCommitOnSelectionChange(true); + + if (!mAgentStateSlot.connected()) + { + LLPathfindingManager::getInstance()->registerAgentStateSignal(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateCB, this, _1)); + } } -void LLFloaterPathfindingLinksets::onClose(bool app_quitting) +void LLFloaterPathfindingLinksets::onClose(bool pAppQuitting) { + if (mAgentStateSlot.connected()) + { + mAgentStateSlot.disconnect(); + } + mLinksetsScrollList->setCommitOnSelectionChange(false); selectNoneLinksets(); if (mLinksetsSelection.notNull()) { - std::vector selectedObjects; - - LLObjectSelection *linksetsSelected = mLinksetsSelection.get(); - for (LLObjectSelection::valid_iterator linksetsIter = linksetsSelected->valid_begin(); - linksetsIter != linksetsSelected->valid_end(); ++linksetsIter) - { - LLSelectNode *linksetsNode = *linksetsIter; - selectedObjects.push_back(linksetsNode->getObject()); - } - - for (std::vector::const_iterator selectedObjectIter = selectedObjects.begin(); - selectedObjectIter != selectedObjects.end(); ++selectedObjectIter) - { - LLViewerObject *selectedObject = *selectedObjectIter; - LLSelectMgr::getInstance()->deselectObjectAndFamily(selectedObject); - } - mLinksetsSelection.clear(); } + + LLFloater::onClose(pAppQuitting); } void LLFloaterPathfindingLinksets::draw() @@ -289,31 +242,13 @@ LLFloaterPathfindingLinksets::EMessagingState LLFloaterPathfindingLinksets::getM return mMessagingState; } -BOOL LLFloaterPathfindingLinksets::isMessagingInProgress() const +bool LLFloaterPathfindingLinksets::isMessagingInProgress() const { - BOOL retVal; - switch (getMessagingState()) - { - case kMessagingFetchStarting : - case kMessagingFetchRequestSent : - case kMessagingFetchRequestSent_MultiRequested : - case kMessagingFetchReceived : - case kMessagingModifyStarting : - case kMessagingModifyRequestSent : - case kMessagingModifyReceived : - retVal = true; - break; - default : - retVal = false; - break; - } - - return retVal; + return ((mMessagingState == kMessagingGetRequestSent) || (mMessagingState == kMessagingSetRequestSent)); } LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) : LLFloater(pSeed), - mSelfHandle(), mFilterByName(NULL), mFilterByDescription(NULL), mFilterByLinksetUse(NULL), @@ -321,6 +256,8 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mLinksetsStatus(NULL), mRefreshListButton(NULL), mSelectAllButton(NULL), + mSelectNoneButton(NULL), + mShowBeaconCheckBox(NULL), mTakeButton(NULL), mTakeCopyButton(NULL), mReturnButton(NULL), @@ -337,126 +274,89 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mLabelEditD(NULL), mEditD(NULL), mApplyEditsButton(NULL), - mPathfindingLinksets(), - mMessagingState(kMessagingInitial), - mLinksetsSelection() + mMessagingState(kMessagingUnknown), + mLinksetsListPtr(), + mLinksetsSelection(), + mAgentStateSlot() { - mSelfHandle.bind(this); } LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() { } -void LLFloaterPathfindingLinksets::sendNavMeshDataGetRequest() +void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingState) { - if (isMessagingInProgress()) - { - if (getMessagingState() == kMessagingFetchRequestSent) - { - setMessagingState(kMessagingFetchRequestSent_MultiRequested); - } - } - else - { - setMessagingState(kMessagingFetchStarting); - mPathfindingLinksets.clearPathfindingLinksets(); - updateLinksetsList(); - - std::string navMeshDataURL = getCapabilityURL(); - if (navMeshDataURL.empty()) - { - setMessagingState(kMessagingServiceNotAvailable); - llwarns << "cannot query object navmesh properties from current region '" << getRegionName() << "'" << llendl; - } - else - { - setMessagingState(kMessagingFetchRequestSent); - LLHTTPClient::get(navMeshDataURL, new NavMeshDataGetResponder(navMeshDataURL, mSelfHandle)); - } - } + mMessagingState = pMessagingState; + updateControls(); } -void LLFloaterPathfindingLinksets::sendNavMeshDataPutRequest(const LLSD& pPostData) +void LLFloaterPathfindingLinksets::requestGetLinksets() { + llassert(!isMessagingInProgress()); if (!isMessagingInProgress()) { - setMessagingState(kMessagingModifyStarting); - std::string navMeshDataURL = getCapabilityURL(); - if (navMeshDataURL.empty()) + switch (LLPathfindingManager::getInstance()->requestGetLinksets(boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2))) { - setMessagingState(kMessagingServiceNotAvailable); - llwarns << "cannot put object navmesh properties for current region '" << getRegionName() << "'" << llendl; - } - else - { - setMessagingState(kMessagingModifyRequestSent); - LLHTTPClient::put(navMeshDataURL, pPostData, new NavMeshDataPutResponder(navMeshDataURL, mSelfHandle)); + case LLPathfindingManager::kLinksetsRequestStarted : + setMessagingState(kMessagingGetRequestSent); + break; + case LLPathfindingManager::kLinksetsRequestNotEnabled : + setMessagingState(kMessagingNotEnabled); + break; + case LLPathfindingManager::kLinksetsRequestError : + setMessagingState(kMessagingGetError); + break; + default : + setMessagingState(kMessagingGetError); + llassert(0); + break; } } } -void LLFloaterPathfindingLinksets::handleNavMeshDataGetReply(const LLSD& pNavMeshData) -{ - setMessagingState(kMessagingFetchReceived); - mPathfindingLinksets.setPathfindingLinksets(pNavMeshData); - updateLinksetsList(); - setMessagingState(kMessagingComplete); -} - -void LLFloaterPathfindingLinksets::handleNavMeshDataGetError(const std::string& pURL, const std::string& pErrorReason) -{ - setMessagingState(kMessagingFetchError); - mPathfindingLinksets.clearPathfindingLinksets(); - updateLinksetsList(); - llwarns << "Error fetching object navmesh properties from URL '" << pURL << "' because " << pErrorReason << llendl; -} - -void LLFloaterPathfindingLinksets::handleNavMeshDataPutReply(const LLSD& pModifiedData) -{ - setMessagingState(kMessagingModifyReceived); - mPathfindingLinksets.updatePathfindingLinksets(pModifiedData); - updateLinksetsList(); - setMessagingState(kMessagingComplete); -} - -void LLFloaterPathfindingLinksets::handleNavMeshDataPutError(const std::string& pURL, const std::string& pErrorReason) +void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) { - setMessagingState(kMessagingModifyError); - llwarns << "Error putting object navmesh properties to URL '" << pURL << "' because " << pErrorReason << llendl; -} - -std::string LLFloaterPathfindingLinksets::getRegionName() const -{ - std::string regionName(""); - - LLViewerRegion* region = gAgent.getRegion(); - if (region != NULL) + llassert(!isMessagingInProgress()); + if (!isMessagingInProgress()) { - regionName = region->getName(); + switch (LLPathfindingManager::getInstance()->requestSetLinksets(pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2))) + { + case LLPathfindingManager::kLinksetsRequestStarted : + setMessagingState(kMessagingSetRequestSent); + break; + case LLPathfindingManager::kLinksetsRequestNotEnabled : + setMessagingState(kMessagingNotEnabled); + break; + case LLPathfindingManager::kLinksetsRequestError : + setMessagingState(kMessagingSetError); + break; + default : + setMessagingState(kMessagingSetError); + llassert(0); + break; + } } - - return regionName; } -std::string LLFloaterPathfindingLinksets::getCapabilityURL() const +void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) { - std::string navMeshDataURL(""); + mLinksetsListPtr = pLinksetsListPtr; + updateScrollList(); - LLViewerRegion* region = gAgent.getRegion(); - if (region != NULL) + switch (pLinksetsRequestStatus) { - navMeshDataURL = region->getCapability("ObjectNavMeshProperties"); + case LLPathfindingManager::kLinksetsRequestCompleted : + setMessagingState(kMessagingComplete); + break; + case LLPathfindingManager::kLinksetsRequestError : + setMessagingState(kMessagingGetError); + break; + default : + setMessagingState(kMessagingGetError); + llassert(0); + break; } - - return navMeshDataURL; -} - -void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingState) -{ - mMessagingState = pMessagingState; - updateLinksetsStatusMessage(); - updateActionAndEditFields(); } void LLFloaterPathfindingLinksets::onApplyAllFilters() @@ -500,13 +400,13 @@ void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() } } - updateLinksetsStatusMessage(); - updateActionAndEditFields(); + updateEditFieldValues(); + updateControls(); } void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() { - sendNavMeshDataGetRequest(); + requestGetLinksets(); } void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() @@ -547,9 +447,9 @@ void LLFloaterPathfindingLinksets::onTeleportClicked() { std::vector::const_reference selectedItemRef = selectedItems.front(); const LLScrollListItem *selectedItem = selectedItemRef; - LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = mPathfindingLinksets.getFilteredLinksets().find(selectedItem->getUUID().asString()); - const LLPathfindingLinkset &linkset = linksetIter->second; - LLVector3 linksetLocation = linkset.getLocation(); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); + const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + const LLVector3 &linksetLocation = linksetPtr->getLocation(); LLViewerRegion* region = gAgent.getRegion(); if (region != NULL) @@ -561,27 +461,80 @@ void LLFloaterPathfindingLinksets::onTeleportClicked() void LLFloaterPathfindingLinksets::onApplyChangesClicked() { - applyEditFields(); + applyEdit(); +} + +void LLFloaterPathfindingLinksets::onAgentStateCB(LLPathfindingManager::EAgentState pAgentState) +{ + updateControls(); } void LLFloaterPathfindingLinksets::applyFilters() { - mPathfindingLinksets.setNameFilter(mFilterByName->getText()); - mPathfindingLinksets.setDescriptionFilter(mFilterByDescription->getText()); - mPathfindingLinksets.setLinksetUseFilter(getFilterLinksetUse()); - updateLinksetsList(); +#if 0 + mLinksetsListPtr.setNameFilter(mFilterByName->getText()); + mLinksetsListPtr.setDescriptionFilter(mFilterByDescription->getText()); + mLinksetsListPtr.setLinksetUseFilter(getFilterLinksetUse()); +#endif + updateScrollList(); } void LLFloaterPathfindingLinksets::clearFilters() { - mPathfindingLinksets.clearFilters(); - mFilterByName->setText(LLStringExplicit(mPathfindingLinksets.getNameFilter())); - mFilterByDescription->setText(LLStringExplicit(mPathfindingLinksets.getDescriptionFilter())); - setFilterLinksetUse(mPathfindingLinksets.getLinksetUseFilter()); - updateLinksetsList(); +#if 0 + mLinksetsListPtr.clearFilters(); + mFilterByName->setText(LLStringExplicit(mLinksetsListPtr.getNameFilter())); + mFilterByDescription->setText(LLStringExplicit(mLinksetsListPtr.getDescriptionFilter())); + setFilterLinksetUse(mLinksetsListPtr.getLinksetUseFilter()); +#endif + updateScrollList(); +} + +void LLFloaterPathfindingLinksets::selectAllLinksets() +{ + mLinksetsScrollList->selectAll(); +} + +void LLFloaterPathfindingLinksets::selectNoneLinksets() +{ + mLinksetsScrollList->deselectAllItems(); } -void LLFloaterPathfindingLinksets::updateLinksetsList() +void LLFloaterPathfindingLinksets::updateControls() +{ + updateStatusMessage(); + updateEnableStateOnListActions(); + updateEnableStateOnEditFields(); +} + +void LLFloaterPathfindingLinksets::updateEditFieldValues() +{ + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + int numSelectedItems = selectedItems.size(); + if (numSelectedItems <= 0) + { + mEditLinksetUse->clear(); + mEditA->clear(); + mEditB->clear(); + mEditC->clear(); + mEditD->clear(); + } + else + { + LLScrollListItem *firstItem = selectedItems.front(); + + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(firstItem->getUUID().asString()); + const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); + + setEditLinksetUse(linksetPtr->getLinksetUse()); + mEditA->setValue(LLSD(linksetPtr->getWalkabilityCoefficientA())); + mEditB->setValue(LLSD(linksetPtr->getWalkabilityCoefficientB())); + mEditC->setValue(LLSD(linksetPtr->getWalkabilityCoefficientC())); + mEditD->setValue(LLSD(linksetPtr->getWalkabilityCoefficientD())); + } +} + +void LLFloaterPathfindingLinksets::updateScrollList() { std::vector selectedItems = mLinksetsScrollList->getAllSelected(); int numSelectedItems = selectedItems.size(); @@ -598,102 +551,94 @@ void LLFloaterPathfindingLinksets::updateLinksetsList() } mLinksetsScrollList->deleteAllItems(); - updateLinksetsStatusMessage(); const LLVector3& avatarPosition = gAgent.getPositionAgent(); - const LLFilteredPathfindingLinksets::PathfindingLinksetMap& linksetMap = mPathfindingLinksets.getFilteredLinksets(); - - for (LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetMap.begin(); - linksetIter != linksetMap.end(); ++linksetIter) + for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); + linksetIter != mLinksetsListPtr->end(); ++linksetIter) { - const LLPathfindingLinkset& linkset(linksetIter->second); + const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); LLSD columns; columns[0]["column"] = "name"; - columns[0]["value"] = linkset.getName(); + columns[0]["value"] = linksetPtr->getName(); columns[0]["font"] = "SANSSERIF"; columns[1]["column"] = "description"; - columns[1]["value"] = linkset.getDescription(); + columns[1]["value"] = linksetPtr->getDescription(); columns[1]["font"] = "SANSSERIF"; columns[2]["column"] = "land_impact"; - columns[2]["value"] = llformat("%1d", linkset.getLandImpact()); + columns[2]["value"] = llformat("%1d", linksetPtr->getLandImpact()); columns[2]["font"] = "SANSSERIF"; columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linkset.getLocation())); + columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linksetPtr->getLocation())); columns[3]["font"] = "SANSSERIF"; columns[4]["column"] = "linkset_use"; - switch (linkset.getLinksetUse()) + std::string linksetUse; + switch (linksetPtr->getLinksetUse()) { case LLPathfindingLinkset::kWalkable : - columns[4]["value"] = getString("linkset_use_walkable"); + linksetUse = getString("linkset_use_walkable"); break; case LLPathfindingLinkset::kStaticObstacle : - columns[4]["value"] = getString("linkset_use_static_obstacle"); + linksetUse = getString("linkset_use_static_obstacle"); break; case LLPathfindingLinkset::kDynamicObstacle : - columns[4]["value"] = getString("linkset_use_dynamic_obstacle"); + linksetUse = getString("linkset_use_dynamic_obstacle"); break; case LLPathfindingLinkset::kMaterialVolume : - columns[4]["value"] = getString("linkset_use_material_volume"); + linksetUse = getString("linkset_use_material_volume"); break; case LLPathfindingLinkset::kExclusionVolume : - columns[4]["value"] = getString("linkset_use_exclusion_volume"); + linksetUse = getString("linkset_use_exclusion_volume"); break; case LLPathfindingLinkset::kDynamicPhantom : - columns[4]["value"] = getString("linkset_use_dynamic_phantom"); + linksetUse = getString("linkset_use_dynamic_phantom"); break; case LLPathfindingLinkset::kUnknown : default : - columns[4]["value"] = getString("linkset_use_dynamic_obstacle"); + linksetUse = getString("linkset_use_dynamic_obstacle"); llassert(0); break; } + if (linksetPtr->isLocked()) + { + linksetUse += (" " + getString("linkset_is_locked_state")); + } + columns[4]["value"] = linksetUse; columns[4]["font"] = "SANSSERIF"; columns[5]["column"] = "a_percent"; - columns[5]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientA()); + columns[5]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientA()); columns[5]["font"] = "SANSSERIF"; columns[6]["column"] = "b_percent"; - columns[6]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientB()); + columns[6]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientB()); columns[6]["font"] = "SANSSERIF"; columns[7]["column"] = "c_percent"; - columns[7]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientC()); + columns[7]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientC()); columns[7]["font"] = "SANSSERIF"; columns[8]["column"] = "d_percent"; - columns[8]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientD()); + columns[8]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientD()); columns[8]["font"] = "SANSSERIF"; LLSD element; - element["id"] = linkset.getUUID().asString(); + element["id"] = linksetPtr->getUUID().asString(); element["column"] = columns; mLinksetsScrollList->addElement(element); } mLinksetsScrollList->selectMultiple(selectedUUIDs); - updateLinksetsStatusMessage(); - updateActionAndEditFields(); -} - -void LLFloaterPathfindingLinksets::selectAllLinksets() -{ - mLinksetsScrollList->selectAll(); -} - -void LLFloaterPathfindingLinksets::selectNoneLinksets() -{ - mLinksetsScrollList->deselectAllItems(); + updateControls(); } -void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() +void LLFloaterPathfindingLinksets::updateStatusMessage() { static const LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow"); @@ -702,36 +647,21 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() switch (getMessagingState()) { - case kMessagingInitial: + case kMessagingUnknown: statusText = getString("linksets_messaging_initial"); break; - case kMessagingFetchStarting : - statusText = getString("linksets_messaging_fetch_starting"); - break; - case kMessagingFetchRequestSent : - statusText = getString("linksets_messaging_fetch_inprogress"); - break; - case kMessagingFetchRequestSent_MultiRequested : - statusText = getString("linksets_messaging_fetch_inprogress_multi_request"); - break; - case kMessagingFetchReceived : - statusText = getString("linksets_messaging_fetch_received"); + case kMessagingGetRequestSent : + statusText = getString("linksets_messaging_get_inprogress"); break; - case kMessagingFetchError : - statusText = getString("linksets_messaging_fetch_error"); + case kMessagingGetError : + statusText = getString("linksets_messaging_get_error"); styleParams.color = warningColor; break; - case kMessagingModifyStarting : - statusText = getString("linksets_messaging_modify_starting"); + case kMessagingSetRequestSent : + statusText = getString("linksets_messaging_set_inprogress"); break; - case kMessagingModifyRequestSent : - statusText = getString("linksets_messaging_modify_inprogress"); - break; - case kMessagingModifyReceived : - statusText = getString("linksets_messaging_modify_received"); - break; - case kMessagingModifyError : - statusText = getString("linksets_messaging_modify_error"); + case kMessagingSetError : + statusText = getString("linksets_messaging_set_error"); styleParams.color = warningColor; break; case kMessagingComplete : @@ -757,8 +687,8 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() statusText = getString("linksets_messaging_complete_available", string_args); } break; - case kMessagingServiceNotAvailable : - statusText = getString("linksets_messaging_service_not_available"); + case kMessagingNotEnabled : + statusText = getString("linksets_messaging_not_enabled"); styleParams.color = warningColor; break; default: @@ -770,63 +700,72 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams); } -void LLFloaterPathfindingLinksets::updateActionAndEditFields() +void LLFloaterPathfindingLinksets::updateEnableStateOnListActions() { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (selectedItems.empty()) + switch (getMessagingState()) { - mEditLinksetUse->clear(); - mEditA->clear(); - mEditB->clear(); - mEditC->clear(); - mEditD->clear(); - - setEnableActionAndEditFields(false); + case kMessagingUnknown: + case kMessagingGetRequestSent : + case kMessagingSetRequestSent : + mRefreshListButton->setEnabled(FALSE); + mSelectAllButton->setEnabled(FALSE); + mSelectNoneButton->setEnabled(FALSE); + break; + case kMessagingGetError : + case kMessagingSetError : + case kMessagingNotEnabled : + mRefreshListButton->setEnabled(TRUE); + mSelectAllButton->setEnabled(FALSE); + mSelectNoneButton->setEnabled(FALSE); + break; + case kMessagingComplete : + { + int numItems = mLinksetsScrollList->getItemCount(); + int numSelectedItems = mLinksetsScrollList->getNumSelected(); + mRefreshListButton->setEnabled(TRUE); + mSelectAllButton->setEnabled(numSelectedItems < numItems); + mSelectNoneButton->setEnabled(numSelectedItems > 0); + } + break; + default: + llassert(0); + break; } - else - { - LLScrollListItem *firstItem = selectedItems.front(); +} - const LLFilteredPathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); - LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(firstItem->getUUID().asString()); - const LLPathfindingLinkset &linkset(linksetIter->second); +void LLFloaterPathfindingLinksets::updateEnableStateOnEditFields() +{ + int numSelectedItems = mLinksetsScrollList->getNumSelected(); + bool isEditEnabled = ((numSelectedItems > 0) && LLPathfindingManager::getInstance()->isAllowAlterPermanent()); - setEditLinksetUse(linkset.getLinksetUse()); - mEditA->setValue(LLSD(linkset.getWalkabilityCoefficientA())); - mEditB->setValue(LLSD(linkset.getWalkabilityCoefficientB())); - mEditC->setValue(LLSD(linkset.getWalkabilityCoefficientC())); - mEditD->setValue(LLSD(linkset.getWalkabilityCoefficientD())); + mShowBeaconCheckBox->setEnabled(numSelectedItems > 0); + mTakeButton->setEnabled(isEditEnabled && tools_visible_take_object()); + mTakeCopyButton->setEnabled(isEditEnabled && enable_object_take_copy()); + mReturnButton->setEnabled(isEditEnabled && enable_object_return()); + mDeleteButton->setEnabled(isEditEnabled && enable_object_delete()); + mTeleportButton->setEnabled(numSelectedItems == 1); - setEnableActionAndEditFields(true); - } -} + mEditLinksetUse->setEnabled(isEditEnabled); -void LLFloaterPathfindingLinksets::setEnableActionAndEditFields(BOOL pEnabled) -{ - mTakeButton->setEnabled(pEnabled && tools_visible_take_object()); - mTakeCopyButton->setEnabled(pEnabled && enable_object_take_copy()); - mReturnButton->setEnabled(pEnabled && enable_object_return()); - mDeleteButton->setEnabled(pEnabled && enable_object_delete()); - mTeleportButton->setEnabled(pEnabled && (mLinksetsScrollList->getNumSelected() == 1)); - mEditLinksetUse->setEnabled(pEnabled); - mLabelWalkabilityCoefficients->setEnabled(pEnabled); - mLabelEditA->setEnabled(pEnabled); - mLabelEditB->setEnabled(pEnabled); - mLabelEditC->setEnabled(pEnabled); - mLabelEditD->setEnabled(pEnabled); - mEditA->setEnabled(pEnabled); - mEditB->setEnabled(pEnabled); - mEditC->setEnabled(pEnabled); - mEditD->setEnabled(pEnabled); - mApplyEditsButton->setEnabled(pEnabled); + mLabelWalkabilityCoefficients->setEnabled(isEditEnabled); + mLabelEditA->setEnabled(isEditEnabled); + mLabelEditB->setEnabled(isEditEnabled); + mLabelEditC->setEnabled(isEditEnabled); + mLabelEditD->setEnabled(isEditEnabled); + mEditA->setEnabled(isEditEnabled); + mEditB->setEnabled(isEditEnabled); + mEditC->setEnabled(isEditEnabled); + mEditD->setEnabled(isEditEnabled); + + mApplyEditsButton->setEnabled(isEditEnabled && (getMessagingState() == kMessagingComplete)); } -void LLFloaterPathfindingLinksets::applyEditFields() +void LLFloaterPathfindingLinksets::applyEdit() { std::vector selectedItems = mLinksetsScrollList->getAllSelected(); if (!selectedItems.empty()) { - LLPathfindingLinkset::ELinksetUse pathState = getEditLinksetUse(); // XXX this and pathState + LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); const std::string &aString = mEditA->getText(); const std::string &bString = mEditB->getText(); const std::string &cString = mEditC->getText(); @@ -836,34 +775,20 @@ void LLFloaterPathfindingLinksets::applyEditFields() S32 cValue = static_cast(atoi(cString.c_str())); S32 dValue = static_cast(atoi(dString.c_str())); - const LLFilteredPathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets(); - - LLSD editData; + LLPathfindingLinksetListPtr editListPtr(new LLPathfindingLinksetList()); for (std::vector::const_iterator itemIter = selectedItems.begin(); itemIter != selectedItems.end(); ++itemIter) { const LLScrollListItem *listItem = *itemIter; LLUUID uuid = listItem->getUUID(); - - const LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString()); - const LLPathfindingLinkset &linkset = linksetIter->second; - - LLSD itemData = linkset.encodeAlteredFields(pathState, aValue, bValue, cValue, dValue); - - if (!itemData.isUndefined()) - { - editData[uuid.asString()] = itemData; - } + const std::string &uuidString = uuid.asString(); + LLPathfindingLinksetList::iterator linksetIter = mLinksetsListPtr->find(uuidString); + llassert(linksetIter != mLinksetsListPtr->end()); + LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + editListPtr->insert(std::pair(uuidString, linksetPtr)); } - if (editData.isUndefined()) - { - llwarns << "No PUT data specified" << llendl; - } - else - { - sendNavMeshDataPutRequest(editData); - } + requestSetLinksets(editListPtr, linksetUse, aValue, bValue, cValue, dValue); } } @@ -958,69 +883,3 @@ LLSD LLFloaterPathfindingLinksets::convertToXuiValue(LLPathfindingLinkset::ELink return xuiValue; } - -//--------------------------------------------------------------------------- -// NavMeshDataGetResponder -//--------------------------------------------------------------------------- - -NavMeshDataGetResponder::NavMeshDataGetResponder(const std::string& pNavMeshDataGetURL, - const LLHandle &pLinksetsHandle) - : mNavMeshDataGetURL(pNavMeshDataGetURL), - mLinksetsFloaterHandle(pLinksetsHandle) -{ -} - -NavMeshDataGetResponder::~NavMeshDataGetResponder() -{ -} - -void NavMeshDataGetResponder::result(const LLSD& pContent) -{ - LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); - if (linksetsFloater != NULL) - { - linksetsFloater->handleNavMeshDataGetReply(pContent); - } -} - -void NavMeshDataGetResponder::error(U32 status, const std::string& reason) -{ - LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); - if (linksetsFloater != NULL) - { - linksetsFloater->handleNavMeshDataGetError(mNavMeshDataGetURL, reason); - } -} - -//--------------------------------------------------------------------------- -// NavMeshDataPutResponder -//--------------------------------------------------------------------------- - -NavMeshDataPutResponder::NavMeshDataPutResponder(const std::string& pNavMeshDataPutURL, - const LLHandle &pLinksetsHandle) - : mNavMeshDataPutURL(pNavMeshDataPutURL), - mLinksetsFloaterHandle(pLinksetsHandle) -{ -} - -NavMeshDataPutResponder::~NavMeshDataPutResponder() -{ -} - -void NavMeshDataPutResponder::result(const LLSD& pContent) -{ - LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); - if (linksetsFloater != NULL) - { - linksetsFloater->handleNavMeshDataPutReply(pContent); - } -} - -void NavMeshDataPutResponder::error(U32 status, const std::string& reason) -{ - LLFloaterPathfindingLinksets *linksetsFloater = mLinksetsFloaterHandle.get(); - if (linksetsFloater != NULL) - { - linksetsFloater->handleNavMeshDataPutError(mNavMeshDataPutURL, reason); - } -} -- cgit v1.2.3 From 05a49dd4252930fbfbb61a7e88ef5ef253cceca6 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 23 Feb 2012 17:12:44 -0800 Subject: PATH-292: Fixing the post-modify update handler to update the linkset list rather than overwrite it. --- indra/newview/llfloaterpathfindinglinksets.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 73ab01a89f..2b3007b435 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -320,7 +320,7 @@ void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPt llassert(!isMessagingInProgress()); if (!isMessagingInProgress()) { - switch (LLPathfindingManager::getInstance()->requestSetLinksets(pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2))) + switch (LLPathfindingManager::getInstance()->requestSetLinksets(pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2))) { case LLPathfindingManager::kLinksetsRequestStarted : setMessagingState(kMessagingSetRequestSent); @@ -359,6 +359,26 @@ void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::ELink } } +void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) +{ + mLinksetsListPtr->update(*pLinksetsListPtr); + updateScrollList(); + + switch (pLinksetsRequestStatus) + { + case LLPathfindingManager::kLinksetsRequestCompleted : + setMessagingState(kMessagingComplete); + break; + case LLPathfindingManager::kLinksetsRequestError : + setMessagingState(kMessagingSetError); + break; + default : + setMessagingState(kMessagingSetError); + llassert(0); + break; + } +} + void LLFloaterPathfindingLinksets::onApplyAllFilters() { applyFilters(); -- cgit v1.2.3 From 640b08c58aa76d88bd603576bcc03117ac983e90 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 23 Feb 2012 18:41:23 -0800 Subject: PATH-292: Fixing an issue where clicking Apply Edits without any changes resulted in an usable floater state. --- indra/newview/llfloaterpathfindinglinksets.cpp | 168 +++++++++++++++---------- 1 file changed, 100 insertions(+), 68 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 2b3007b435..88328ee8a8 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -301,7 +301,12 @@ void LLFloaterPathfindingLinksets::requestGetLinksets() case LLPathfindingManager::kLinksetsRequestStarted : setMessagingState(kMessagingGetRequestSent); break; + case LLPathfindingManager::kLinksetsRequestCompleted : + clearLinksets(); + setMessagingState(kMessagingComplete); + break; case LLPathfindingManager::kLinksetsRequestNotEnabled : + clearLinksets(); setMessagingState(kMessagingNotEnabled); break; case LLPathfindingManager::kLinksetsRequestError : @@ -325,7 +330,11 @@ void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPt case LLPathfindingManager::kLinksetsRequestStarted : setMessagingState(kMessagingSetRequestSent); break; + case LLPathfindingManager::kLinksetsRequestCompleted : + setMessagingState(kMessagingComplete); + break; case LLPathfindingManager::kLinksetsRequestNotEnabled : + clearLinksets(); setMessagingState(kMessagingNotEnabled); break; case LLPathfindingManager::kLinksetsRequestError : @@ -361,7 +370,14 @@ void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::ELink void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) { - mLinksetsListPtr->update(*pLinksetsListPtr); + if (mLinksetsListPtr == NULL) + { + mLinksetsListPtr = pLinksetsListPtr; + } + else + { + mLinksetsListPtr->update(*pLinksetsListPtr); + } updateScrollList(); switch (pLinksetsRequestStatus) @@ -467,6 +483,7 @@ void LLFloaterPathfindingLinksets::onTeleportClicked() { std::vector::const_reference selectedItemRef = selectedItems.front(); const LLScrollListItem *selectedItem = selectedItemRef; + llassert(mLinksetsListPtr != NULL); LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; const LLVector3 &linksetLocation = linksetPtr->getLocation(); @@ -520,6 +537,15 @@ void LLFloaterPathfindingLinksets::selectNoneLinksets() mLinksetsScrollList->deselectAllItems(); } +void LLFloaterPathfindingLinksets::clearLinksets() +{ + if (mLinksetsListPtr != NULL) + { + mLinksetsListPtr->clear(); + } + updateScrollList(); +} + void LLFloaterPathfindingLinksets::updateControls() { updateStatusMessage(); @@ -543,6 +569,7 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues() { LLScrollListItem *firstItem = selectedItems.front(); + llassert(mLinksetsListPtr != NULL); LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(firstItem->getUUID().asString()); const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); @@ -572,89 +599,93 @@ void LLFloaterPathfindingLinksets::updateScrollList() mLinksetsScrollList->deleteAllItems(); - const LLVector3& avatarPosition = gAgent.getPositionAgent(); - for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); - linksetIter != mLinksetsListPtr->end(); ++linksetIter) + if (mLinksetsListPtr != NULL) { - const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); + const LLVector3& avatarPosition = gAgent.getPositionAgent(); + for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); + linksetIter != mLinksetsListPtr->end(); ++linksetIter) + { + const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); - LLSD columns; + LLSD columns; - columns[0]["column"] = "name"; - columns[0]["value"] = linksetPtr->getName(); - columns[0]["font"] = "SANSSERIF"; + columns[0]["column"] = "name"; + columns[0]["value"] = linksetPtr->getName(); + columns[0]["font"] = "SANSSERIF"; - columns[1]["column"] = "description"; - columns[1]["value"] = linksetPtr->getDescription(); - columns[1]["font"] = "SANSSERIF"; + columns[1]["column"] = "description"; + columns[1]["value"] = linksetPtr->getDescription(); + columns[1]["font"] = "SANSSERIF"; - columns[2]["column"] = "land_impact"; - columns[2]["value"] = llformat("%1d", linksetPtr->getLandImpact()); - columns[2]["font"] = "SANSSERIF"; + columns[2]["column"] = "land_impact"; + columns[2]["value"] = llformat("%1d", linksetPtr->getLandImpact()); + columns[2]["font"] = "SANSSERIF"; - columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linksetPtr->getLocation())); - columns[3]["font"] = "SANSSERIF"; + columns[3]["column"] = "dist_from_you"; + columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linksetPtr->getLocation())); + columns[3]["font"] = "SANSSERIF"; - columns[4]["column"] = "linkset_use"; - std::string linksetUse; - switch (linksetPtr->getLinksetUse()) - { - case LLPathfindingLinkset::kWalkable : - linksetUse = getString("linkset_use_walkable"); - break; - case LLPathfindingLinkset::kStaticObstacle : - linksetUse = getString("linkset_use_static_obstacle"); - break; - case LLPathfindingLinkset::kDynamicObstacle : - linksetUse = getString("linkset_use_dynamic_obstacle"); - break; - case LLPathfindingLinkset::kMaterialVolume : - linksetUse = getString("linkset_use_material_volume"); - break; - case LLPathfindingLinkset::kExclusionVolume : - linksetUse = getString("linkset_use_exclusion_volume"); - break; - case LLPathfindingLinkset::kDynamicPhantom : - linksetUse = getString("linkset_use_dynamic_phantom"); - break; - case LLPathfindingLinkset::kUnknown : - default : - linksetUse = getString("linkset_use_dynamic_obstacle"); - llassert(0); - break; - } - if (linksetPtr->isLocked()) - { - linksetUse += (" " + getString("linkset_is_locked_state")); - } - columns[4]["value"] = linksetUse; - columns[4]["font"] = "SANSSERIF"; + columns[4]["column"] = "linkset_use"; + std::string linksetUse; + switch (linksetPtr->getLinksetUse()) + { + case LLPathfindingLinkset::kWalkable : + linksetUse = getString("linkset_use_walkable"); + break; + case LLPathfindingLinkset::kStaticObstacle : + linksetUse = getString("linkset_use_static_obstacle"); + break; + case LLPathfindingLinkset::kDynamicObstacle : + linksetUse = getString("linkset_use_dynamic_obstacle"); + break; + case LLPathfindingLinkset::kMaterialVolume : + linksetUse = getString("linkset_use_material_volume"); + break; + case LLPathfindingLinkset::kExclusionVolume : + linksetUse = getString("linkset_use_exclusion_volume"); + break; + case LLPathfindingLinkset::kDynamicPhantom : + linksetUse = getString("linkset_use_dynamic_phantom"); + break; + case LLPathfindingLinkset::kUnknown : + default : + linksetUse = getString("linkset_use_dynamic_obstacle"); + llassert(0); + break; + } + if (linksetPtr->isLocked()) + { + linksetUse += (" " + getString("linkset_is_locked_state")); + } + columns[4]["value"] = linksetUse; + columns[4]["font"] = "SANSSERIF"; - columns[5]["column"] = "a_percent"; - columns[5]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientA()); - columns[5]["font"] = "SANSSERIF"; + columns[5]["column"] = "a_percent"; + columns[5]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientA()); + columns[5]["font"] = "SANSSERIF"; - columns[6]["column"] = "b_percent"; - columns[6]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientB()); - columns[6]["font"] = "SANSSERIF"; + columns[6]["column"] = "b_percent"; + columns[6]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientB()); + columns[6]["font"] = "SANSSERIF"; - columns[7]["column"] = "c_percent"; - columns[7]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientC()); - columns[7]["font"] = "SANSSERIF"; + columns[7]["column"] = "c_percent"; + columns[7]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientC()); + columns[7]["font"] = "SANSSERIF"; - columns[8]["column"] = "d_percent"; - columns[8]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientD()); - columns[8]["font"] = "SANSSERIF"; + columns[8]["column"] = "d_percent"; + columns[8]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientD()); + columns[8]["font"] = "SANSSERIF"; - LLSD element; - element["id"] = linksetPtr->getUUID().asString(); - element["column"] = columns; + LLSD element; + element["id"] = linksetPtr->getUUID().asString(); + element["column"] = columns; - mLinksetsScrollList->addElement(element); + mLinksetsScrollList->addElement(element); + } } mLinksetsScrollList->selectMultiple(selectedUUIDs); + updateEditFieldValues(); updateControls(); } @@ -802,6 +833,7 @@ void LLFloaterPathfindingLinksets::applyEdit() const LLScrollListItem *listItem = *itemIter; LLUUID uuid = listItem->getUUID(); const std::string &uuidString = uuid.asString(); + llassert(mLinksetsListPtr != NULL); LLPathfindingLinksetList::iterator linksetIter = mLinksetsListPtr->find(uuidString); llassert(linksetIter != mLinksetsListPtr->end()); LLPathfindingLinksetPtr linksetPtr = linksetIter->second; -- cgit v1.2.3 From 24f6c378b5c1e67f11eeca38c33ebbbe83046945 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 23 Feb 2012 19:56:02 -0800 Subject: PATH-292: Re-enabling filtering for the linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 193 ++++++++++++++----------- 1 file changed, 111 insertions(+), 82 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 88328ee8a8..6dd9a7ced3 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -508,22 +508,14 @@ void LLFloaterPathfindingLinksets::onAgentStateCB(LLPathfindingManager::EAgentSt void LLFloaterPathfindingLinksets::applyFilters() { -#if 0 - mLinksetsListPtr.setNameFilter(mFilterByName->getText()); - mLinksetsListPtr.setDescriptionFilter(mFilterByDescription->getText()); - mLinksetsListPtr.setLinksetUseFilter(getFilterLinksetUse()); -#endif updateScrollList(); } void LLFloaterPathfindingLinksets::clearFilters() { -#if 0 - mLinksetsListPtr.clearFilters(); - mFilterByName->setText(LLStringExplicit(mLinksetsListPtr.getNameFilter())); - mFilterByDescription->setText(LLStringExplicit(mLinksetsListPtr.getDescriptionFilter())); - setFilterLinksetUse(mLinksetsListPtr.getLinksetUseFilter()); -#endif + mFilterByName->clear(); + mFilterByDescription->clear(); + setFilterLinksetUse(LLPathfindingLinkset::kUnknown); updateScrollList(); } @@ -601,92 +593,129 @@ void LLFloaterPathfindingLinksets::updateScrollList() if (mLinksetsListPtr != NULL) { + std::string nameFilter = mFilterByName->getText(); + std::string descriptionFilter = mFilterByDescription->getText(); + LLPathfindingLinkset::ELinksetUse linksetUseFilter = getFilterLinksetUse(); + bool isFilteringName = !nameFilter.empty(); + bool isFilteringDescription = !descriptionFilter.empty(); + bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); + const LLVector3& avatarPosition = gAgent.getPositionAgent(); - for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); - linksetIter != mLinksetsListPtr->end(); ++linksetIter) + + if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) + { + LLStringUtil::toUpper(nameFilter); + LLStringUtil::toUpper(descriptionFilter); + for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); + linksetIter != mLinksetsListPtr->end(); ++linksetIter) + { + const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); + std::string linksetName = linksetPtr->getName(); + std::string linksetDescription = linksetPtr->getDescription(); + LLStringUtil::toUpper(linksetName); + LLStringUtil::toUpper(linksetDescription); + if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) && + (!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) && + (!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter))) + { + LLSD element = buildScrollListElement(linksetPtr, avatarPosition); + mLinksetsScrollList->addElement(element); + } + } + } + else { - const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); + for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); + linksetIter != mLinksetsListPtr->end(); ++linksetIter) + { + const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); + LLSD element = buildScrollListElement(linksetPtr, avatarPosition); + mLinksetsScrollList->addElement(element); + } + } + } - LLSD columns; + mLinksetsScrollList->selectMultiple(selectedUUIDs); + updateEditFieldValues(); + updateControls(); +} - columns[0]["column"] = "name"; - columns[0]["value"] = linksetPtr->getName(); - columns[0]["font"] = "SANSSERIF"; +LLSD LLFloaterPathfindingLinksets::buildScrollListElement(const LLPathfindingLinksetPtr pLinksetPtr, const LLVector3 &pAvatarPosition) +{ + LLSD columns; - columns[1]["column"] = "description"; - columns[1]["value"] = linksetPtr->getDescription(); - columns[1]["font"] = "SANSSERIF"; + columns[0]["column"] = "name"; + columns[0]["value"] = pLinksetPtr->getName(); + columns[0]["font"] = "SANSSERIF"; - columns[2]["column"] = "land_impact"; - columns[2]["value"] = llformat("%1d", linksetPtr->getLandImpact()); - columns[2]["font"] = "SANSSERIF"; + columns[1]["column"] = "description"; + columns[1]["value"] = pLinksetPtr->getDescription(); + columns[1]["font"] = "SANSSERIF"; - columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linksetPtr->getLocation())); - columns[3]["font"] = "SANSSERIF"; + columns[2]["column"] = "land_impact"; + columns[2]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + columns[2]["font"] = "SANSSERIF"; - columns[4]["column"] = "linkset_use"; - std::string linksetUse; - switch (linksetPtr->getLinksetUse()) - { - case LLPathfindingLinkset::kWalkable : - linksetUse = getString("linkset_use_walkable"); - break; - case LLPathfindingLinkset::kStaticObstacle : - linksetUse = getString("linkset_use_static_obstacle"); - break; - case LLPathfindingLinkset::kDynamicObstacle : - linksetUse = getString("linkset_use_dynamic_obstacle"); - break; - case LLPathfindingLinkset::kMaterialVolume : - linksetUse = getString("linkset_use_material_volume"); - break; - case LLPathfindingLinkset::kExclusionVolume : - linksetUse = getString("linkset_use_exclusion_volume"); - break; - case LLPathfindingLinkset::kDynamicPhantom : - linksetUse = getString("linkset_use_dynamic_phantom"); - break; - case LLPathfindingLinkset::kUnknown : - default : - linksetUse = getString("linkset_use_dynamic_obstacle"); - llassert(0); - break; - } - if (linksetPtr->isLocked()) - { - linksetUse += (" " + getString("linkset_is_locked_state")); - } - columns[4]["value"] = linksetUse; - columns[4]["font"] = "SANSSERIF"; + columns[3]["column"] = "dist_from_you"; + columns[3]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); + columns[3]["font"] = "SANSSERIF"; - columns[5]["column"] = "a_percent"; - columns[5]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientA()); - columns[5]["font"] = "SANSSERIF"; + columns[4]["column"] = "linkset_use"; + std::string linksetUse; + switch (pLinksetPtr->getLinksetUse()) + { + case LLPathfindingLinkset::kWalkable : + linksetUse = getString("linkset_use_walkable"); + break; + case LLPathfindingLinkset::kStaticObstacle : + linksetUse = getString("linkset_use_static_obstacle"); + break; + case LLPathfindingLinkset::kDynamicObstacle : + linksetUse = getString("linkset_use_dynamic_obstacle"); + break; + case LLPathfindingLinkset::kMaterialVolume : + linksetUse = getString("linkset_use_material_volume"); + break; + case LLPathfindingLinkset::kExclusionVolume : + linksetUse = getString("linkset_use_exclusion_volume"); + break; + case LLPathfindingLinkset::kDynamicPhantom : + linksetUse = getString("linkset_use_dynamic_phantom"); + break; + case LLPathfindingLinkset::kUnknown : + default : + linksetUse = getString("linkset_use_dynamic_obstacle"); + llassert(0); + break; + } + if (pLinksetPtr->isLocked()) + { + linksetUse += (" " + getString("linkset_is_locked_state")); + } + columns[4]["value"] = linksetUse; + columns[4]["font"] = "SANSSERIF"; - columns[6]["column"] = "b_percent"; - columns[6]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientB()); - columns[6]["font"] = "SANSSERIF"; + columns[5]["column"] = "a_percent"; + columns[5]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); + columns[5]["font"] = "SANSSERIF"; - columns[7]["column"] = "c_percent"; - columns[7]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientC()); - columns[7]["font"] = "SANSSERIF"; + columns[6]["column"] = "b_percent"; + columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); + columns[6]["font"] = "SANSSERIF"; - columns[8]["column"] = "d_percent"; - columns[8]["value"] = llformat("%3d", linksetPtr->getWalkabilityCoefficientD()); - columns[8]["font"] = "SANSSERIF"; + columns[7]["column"] = "c_percent"; + columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); + columns[7]["font"] = "SANSSERIF"; - LLSD element; - element["id"] = linksetPtr->getUUID().asString(); - element["column"] = columns; + columns[8]["column"] = "d_percent"; + columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); + columns[8]["font"] = "SANSSERIF"; - mLinksetsScrollList->addElement(element); - } - } + LLSD element; + element["id"] = pLinksetPtr->getUUID().asString(); + element["column"] = columns; - mLinksetsScrollList->selectMultiple(selectedUUIDs); - updateEditFieldValues(); - updateControls(); + return element; } void LLFloaterPathfindingLinksets::updateStatusMessage() -- cgit v1.2.3 From 9b06300e2c94eae83a29637073f65d4ffc73bf6d Mon Sep 17 00:00:00 2001 From: William Todd Stinson Date: Sat, 25 Feb 2012 22:27:06 -0800 Subject: PATH-292: Adding the ability to view and edit pathfinding attributes of the terrain. --- indra/newview/llfloaterpathfindinglinksets.cpp | 55 ++++++++++++++++++-------- 1 file changed, 38 insertions(+), 17 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 6dd9a7ced3..cabbe1d130 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -610,7 +610,7 @@ void LLFloaterPathfindingLinksets::updateScrollList() linksetIter != mLinksetsListPtr->end(); ++linksetIter) { const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); - std::string linksetName = linksetPtr->getName(); + std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName()); std::string linksetDescription = linksetPtr->getDescription(); LLStringUtil::toUpper(linksetName); LLStringUtil::toUpper(linksetDescription); @@ -643,22 +643,43 @@ void LLFloaterPathfindingLinksets::updateScrollList() LLSD LLFloaterPathfindingLinksets::buildScrollListElement(const LLPathfindingLinksetPtr pLinksetPtr, const LLVector3 &pAvatarPosition) { LLSD columns; - - columns[0]["column"] = "name"; - columns[0]["value"] = pLinksetPtr->getName(); - columns[0]["font"] = "SANSSERIF"; - - columns[1]["column"] = "description"; - columns[1]["value"] = pLinksetPtr->getDescription(); - columns[1]["font"] = "SANSSERIF"; - - columns[2]["column"] = "land_impact"; - columns[2]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); - columns[2]["font"] = "SANSSERIF"; - - columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); - columns[3]["font"] = "SANSSERIF"; + + if (pLinksetPtr->isTerrain()) + { + columns[0]["column"] = "name"; + columns[0]["value"] = getString("linkset_terrain_name"); + columns[0]["font"] = "SANSSERIF"; + + columns[1]["column"] = "description"; + columns[1]["value"] = getString("linkset_terrain_description"); + columns[1]["font"] = "SANSSERIF"; + + columns[2]["column"] = "land_impact"; + columns[2]["value"] = getString("linkset_terrain_land_impact"); + columns[2]["font"] = "SANSSERIF"; + + columns[3]["column"] = "dist_from_you"; + columns[3]["value"] = getString("linkset_terrain_dist_from_you"); + columns[3]["font"] = "SANSSERIF"; + } + else + { + columns[0]["column"] = "name"; + columns[0]["value"] = pLinksetPtr->getName(); + columns[0]["font"] = "SANSSERIF"; + + columns[1]["column"] = "description"; + columns[1]["value"] = pLinksetPtr->getDescription(); + columns[1]["font"] = "SANSSERIF"; + + columns[2]["column"] = "land_impact"; + columns[2]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + columns[2]["font"] = "SANSSERIF"; + + columns[3]["column"] = "dist_from_you"; + columns[3]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); + columns[3]["font"] = "SANSSERIF"; + } columns[4]["column"] = "linkset_use"; std::string linksetUse; -- cgit v1.2.3 From 460a58bfc4eea07b5cdcb6192a955cb180fb9297 Mon Sep 17 00:00:00 2001 From: William Todd Stinson Date: Sat, 25 Feb 2012 22:52:22 -0800 Subject: PATH-341: BUGFIX Allowing walkability coefficients to be set to zero. --- indra/newview/llfloaterpathfindinglinksets.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index cabbe1d130..ad021c4286 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -140,28 +140,28 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mEditA = findChild("edit_a_value"); llassert(mEditA != NULL); - mEditA->setPrevalidate(LLTextValidate::validatePositiveS32); + mEditA->setPrevalidate(LLTextValidate::validateNonNegativeS32); mLabelEditB = findChild("edit_b_label"); llassert(mLabelEditB != NULL); mEditB = findChild("edit_b_value"); llassert(mEditB != NULL); - mEditB->setPrevalidate(LLTextValidate::validatePositiveS32); + mEditB->setPrevalidate(LLTextValidate::validateNonNegativeS32); mLabelEditC = findChild("edit_c_label"); llassert(mLabelEditC != NULL); mEditC = findChild("edit_c_value"); llassert(mEditC != NULL); - mEditC->setPrevalidate(LLTextValidate::validatePositiveS32); + mEditC->setPrevalidate(LLTextValidate::validateNonNegativeS32); mLabelEditD = findChild("edit_d_label"); llassert(mLabelEditD != NULL); mEditD = findChild("edit_d_value"); llassert(mEditD != NULL); - mEditD->setPrevalidate(LLTextValidate::validatePositiveS32); + mEditD->setPrevalidate(LLTextValidate::validateNonNegativeS32); mApplyEditsButton = findChild("apply_edit_values"); llassert(mApplyEditsButton != NULL); -- cgit v1.2.3 From 3b4e4f8bc98832ac5fdd211dbf4a611e24c076a6 Mon Sep 17 00:00:00 2001 From: William Todd Stinson Date: Sat, 25 Feb 2012 23:49:41 -0800 Subject: PATH-341: BUGFIX Clamping the walkability coefficient text inputs to maximum value. --- indra/newview/llfloaterpathfindinglinksets.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index ad021c4286..11eae2386a 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -141,6 +141,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mEditA = findChild("edit_a_value"); llassert(mEditA != NULL); mEditA->setPrevalidate(LLTextValidate::validateNonNegativeS32); + mEditA->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); mLabelEditB = findChild("edit_b_label"); llassert(mLabelEditB != NULL); @@ -148,6 +149,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mEditB = findChild("edit_b_value"); llassert(mEditB != NULL); mEditB->setPrevalidate(LLTextValidate::validateNonNegativeS32); + mEditB->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); mLabelEditC = findChild("edit_c_label"); llassert(mLabelEditC != NULL); @@ -155,6 +157,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mEditC = findChild("edit_c_value"); llassert(mEditC != NULL); mEditC->setPrevalidate(LLTextValidate::validateNonNegativeS32); + mEditC->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); mLabelEditD = findChild("edit_d_label"); llassert(mLabelEditD != NULL); @@ -162,6 +165,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mEditD = findChild("edit_d_value"); llassert(mEditD != NULL); mEditD->setPrevalidate(LLTextValidate::validateNonNegativeS32); + mEditD->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); mApplyEditsButton = findChild("apply_edit_values"); llassert(mApplyEditsButton != NULL); @@ -496,6 +500,21 @@ void LLFloaterPathfindingLinksets::onTeleportClicked() } } +void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl) +{ + LLLineEditor *pLineEditor = static_cast(pUICtrl); + llassert(pLineEditor != NULL); + + const std::string &valueString = pLineEditor->getText(); + S32 value = static_cast(atoi(valueString.c_str())); + + if ((value < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (value > LLPathfindingLinkset::MAX_WALKABILITY_VALUE)) + { + value = llclamp(value, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE); + pLineEditor->setValue(LLSD(value)); + } +} + void LLFloaterPathfindingLinksets::onApplyChangesClicked() { applyEdit(); -- cgit v1.2.3 From 518bc51e668570beeec5f13fd2f3cc4d28f66551 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 27 Feb 2012 15:43:58 -0800 Subject: PATH-292: Adding better usability and warning notifications for the handling of locked linksets. --- indra/newview/llfloaterpathfindinglinksets.cpp | 246 +++++++++++++++++++++---- 1 file changed, 215 insertions(+), 31 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 11eae2386a..17ac1bd052 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -50,6 +50,7 @@ #include "llpathfindinglinkset.h" #include "llpathfindinglinksetlist.h" #include "llpathfindingmanager.h" +#include "llnotificationsutil.h" #include @@ -132,6 +133,31 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mEditLinksetUse = findChild("edit_linkset_use"); llassert(mEditLinksetUse != NULL); + mEditLinksetUse->clearRows(); + + mEditLinksetUseUnset = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getString("linkset_choose_use"), XUI_LINKSET_USE_NONE)); + llassert(mEditLinksetUseUnset != NULL); + + mEditLinksetUseWalkable = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kWalkable), XUI_LINKSET_USE_WALKABLE)); + llassert(mEditLinksetUseWalkable != NULL); + + mEditLinksetUseStaticObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kStaticObstacle), XUI_LINKSET_USE_STATIC_OBSTACLE)); + llassert(mEditLinksetUseStaticObstacle != NULL); + + mEditLinksetUseDynamicObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kDynamicObstacle), XUI_LINKSET_USE_DYNAMIC_OBSTACLE)); + llassert(mEditLinksetUseDynamicObstacle != NULL); + + mEditLinksetUseMaterialVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kMaterialVolume), XUI_LINKSET_USE_MATERIAL_VOLUME)); + llassert(mEditLinksetUseMaterialVolume != NULL); + + mEditLinksetUseExclusionVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kExclusionVolume), XUI_LINKSET_USE_EXCLUSION_VOLUME)); + llassert(mEditLinksetUseExclusionVolume != NULL); + + mEditLinksetUseDynamicPhantom = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kDynamicPhantom), XUI_LINKSET_USE_DYNAMIC_PHANTOM)); + llassert(mEditLinksetUseDynamicPhantom != NULL); + + mEditLinksetUse->selectFirstItem(); + mLabelWalkabilityCoefficients = findChild("walkability_coefficients_label"); llassert(mLabelWalkabilityCoefficients != NULL); @@ -570,7 +596,7 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues() int numSelectedItems = selectedItems.size(); if (numSelectedItems <= 0) { - mEditLinksetUse->clear(); + mEditLinksetUse->selectFirstItem(); mEditA->clear(); mEditB->clear(); mEditC->clear(); @@ -589,6 +615,37 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues() mEditB->setValue(LLSD(linksetPtr->getWalkabilityCoefficientB())); mEditC->setValue(LLSD(linksetPtr->getWalkabilityCoefficientC())); mEditD->setValue(LLSD(linksetPtr->getWalkabilityCoefficientD())); + + switch (getAllowLinksetUse()) + { + case kAllowLinksetUseAll : + mEditLinksetUseWalkable->setEnabled(TRUE); + mEditLinksetUseStaticObstacle->setEnabled(TRUE); + mEditLinksetUseDynamicObstacle->setEnabled(TRUE); + mEditLinksetUseMaterialVolume->setEnabled(TRUE); + mEditLinksetUseExclusionVolume->setEnabled(TRUE); + mEditLinksetUseDynamicPhantom->setEnabled(TRUE); + break; + case kAllowLinksetUseOnlyNonPhantom : + mEditLinksetUseWalkable->setEnabled(TRUE); + mEditLinksetUseStaticObstacle->setEnabled(TRUE); + mEditLinksetUseDynamicObstacle->setEnabled(TRUE); + mEditLinksetUseMaterialVolume->setEnabled(FALSE); + mEditLinksetUseExclusionVolume->setEnabled(FALSE); + mEditLinksetUseDynamicPhantom->setEnabled(FALSE); + break; + case kAllowLinksetUseOnlyPhantom : + mEditLinksetUseWalkable->setEnabled(FALSE); + mEditLinksetUseStaticObstacle->setEnabled(FALSE); + mEditLinksetUseDynamicObstacle->setEnabled(FALSE); + mEditLinksetUseMaterialVolume->setEnabled(TRUE); + mEditLinksetUseExclusionVolume->setEnabled(TRUE); + mEditLinksetUseDynamicPhantom->setEnabled(TRUE); + break; + default : + llassert(0); + break; + } } } @@ -637,7 +694,7 @@ void LLFloaterPathfindingLinksets::updateScrollList() (!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) && (!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter))) { - LLSD element = buildScrollListElement(linksetPtr, avatarPosition); + LLSD element = buildLinksetScrollListElement(linksetPtr, avatarPosition); mLinksetsScrollList->addElement(element); } } @@ -648,7 +705,7 @@ void LLFloaterPathfindingLinksets::updateScrollList() linksetIter != mLinksetsListPtr->end(); ++linksetIter) { const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); - LLSD element = buildScrollListElement(linksetPtr, avatarPosition); + LLSD element = buildLinksetScrollListElement(linksetPtr, avatarPosition); mLinksetsScrollList->addElement(element); } } @@ -659,7 +716,7 @@ void LLFloaterPathfindingLinksets::updateScrollList() updateControls(); } -LLSD LLFloaterPathfindingLinksets::buildScrollListElement(const LLPathfindingLinksetPtr pLinksetPtr, const LLVector3 &pAvatarPosition) +LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfindingLinksetPtr pLinksetPtr, const LLVector3 &pAvatarPosition) const { LLSD columns; @@ -701,33 +758,7 @@ LLSD LLFloaterPathfindingLinksets::buildScrollListElement(const LLPathfindingLin } columns[4]["column"] = "linkset_use"; - std::string linksetUse; - switch (pLinksetPtr->getLinksetUse()) - { - case LLPathfindingLinkset::kWalkable : - linksetUse = getString("linkset_use_walkable"); - break; - case LLPathfindingLinkset::kStaticObstacle : - linksetUse = getString("linkset_use_static_obstacle"); - break; - case LLPathfindingLinkset::kDynamicObstacle : - linksetUse = getString("linkset_use_dynamic_obstacle"); - break; - case LLPathfindingLinkset::kMaterialVolume : - linksetUse = getString("linkset_use_material_volume"); - break; - case LLPathfindingLinkset::kExclusionVolume : - linksetUse = getString("linkset_use_exclusion_volume"); - break; - case LLPathfindingLinkset::kDynamicPhantom : - linksetUse = getString("linkset_use_dynamic_phantom"); - break; - case LLPathfindingLinkset::kUnknown : - default : - linksetUse = getString("linkset_use_dynamic_obstacle"); - llassert(0); - break; - } + std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse()); if (pLinksetPtr->isLocked()) { linksetUse += (" " + getString("linkset_is_locked_state")); @@ -758,6 +789,99 @@ LLSD LLFloaterPathfindingLinksets::buildScrollListElement(const LLPathfindingLin return element; } +LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListElement(const std::string &label, S32 value) const +{ + LLSD columns; + + columns[0]["column"] = "name"; + columns[0]["relwidth"] = static_cast(100.0f); + columns[0]["value"] = label; + columns[0]["font"] = "SANSSERIF"; + + LLSD element; + element["value"] = value; + element["column"] = columns; + + return element; +} + +LLFloaterPathfindingLinksets::EAllowLinksetsUse LLFloaterPathfindingLinksets::getAllowLinksetUse() const +{ + EAllowLinksetsUse allowLinksetUse = kAllowLinksetUseAll; + + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + bool isAllLocked = true; + bool isAllPhantom = true; + bool isAllNonPhantom = true; + + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + (isAllLocked || isAllPhantom || isAllNonPhantom) && (selectedItemIter != selectedItems.end()); ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); + llassert(linksetIter != mLinksetsListPtr->end()); + const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + if (linksetPtr->isLocked()) + { + if (linksetPtr->isPhantom()) + { + isAllNonPhantom = false; + } + else + { + isAllPhantom = false; + } + } + else + { + isAllLocked = false; + } + } + + if (isAllLocked) + { + if (isAllPhantom && !isAllNonPhantom) + { + allowLinksetUse = kAllowLinksetUseOnlyPhantom; + } + else if (isAllNonPhantom && !isAllPhantom) + { + allowLinksetUse = kAllowLinksetUseOnlyNonPhantom; + } + } + } + + return allowLinksetUse; +} + +bool LLFloaterPathfindingLinksets::doShowLinksetUseSetWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const +{ + bool showWarning = false; + + if (linksetUse != LLPathfindingLinkset::kUnknown) + { + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + !showWarning && (selectedItemIter != selectedItems.end()); ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); + llassert(linksetIter != mLinksetsListPtr->end()); + const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + showWarning = (linksetPtr->isLocked() && (linksetPtr->isPhantom() != LLPathfindingLinkset::isPhantom(linksetUse))); + } + } + } + + return showWarning; +} + void LLFloaterPathfindingLinksets::updateStatusMessage() { static const LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow"); @@ -881,6 +1005,32 @@ void LLFloaterPathfindingLinksets::updateEnableStateOnEditFields() } void LLFloaterPathfindingLinksets::applyEdit() +{ + LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); + + if (doShowLinksetUseSetWarning(linksetUse)) + { + LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse); + LLSD substitutions; + substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse); + substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); + LLNotificationsUtil::add("PathfindingLinksets_SetLinksetUseMismatchOnRestricted", substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2)); + } + else + { + doApplyEdit(); + } +} + +void LLFloaterPathfindingLinksets::handleApplyEdit(const LLSD &pNotification, const LLSD &pResponse) +{ + if (LLNotificationsUtil::getSelectedOption(pNotification, pResponse) == 0) + { + doApplyEdit(); + } +} + +void LLFloaterPathfindingLinksets::doApplyEdit() { std::vector selectedItems = mLinksetsScrollList->getAllSelected(); if (!selectedItems.empty()) @@ -913,6 +1063,40 @@ void LLFloaterPathfindingLinksets::applyEdit() } } +std::string LLFloaterPathfindingLinksets::getLinksetUseString(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ + std::string linksetUse; + + switch (pLinksetUse) + { + case LLPathfindingLinkset::kWalkable : + linksetUse = getString("linkset_use_walkable"); + break; + case LLPathfindingLinkset::kStaticObstacle : + linksetUse = getString("linkset_use_static_obstacle"); + break; + case LLPathfindingLinkset::kDynamicObstacle : + linksetUse = getString("linkset_use_dynamic_obstacle"); + break; + case LLPathfindingLinkset::kMaterialVolume : + linksetUse = getString("linkset_use_material_volume"); + break; + case LLPathfindingLinkset::kExclusionVolume : + linksetUse = getString("linkset_use_exclusion_volume"); + break; + case LLPathfindingLinkset::kDynamicPhantom : + linksetUse = getString("linkset_use_dynamic_phantom"); + break; + case LLPathfindingLinkset::kUnknown : + default : + linksetUse = getString("linkset_use_dynamic_obstacle"); + llassert(0); + break; + } + + return linksetUse; +} + LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getFilterLinksetUse() const { return convertToLinksetUse(mFilterByLinksetUse->getValue()); -- cgit v1.2.3 From 10ab7acd3a9f62c0dfd2c91990f528ae3598010a Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 27 Feb 2012 17:43:16 -0800 Subject: PATH-292: Ensuring that the terrain linkset use is clearly called out as unmodifiable. --- indra/newview/llfloaterpathfindinglinksets.cpp | 39 ++++++++++++++++++++------ 1 file changed, 30 insertions(+), 9 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 17ac1bd052..9b86ecd66a 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -642,6 +642,14 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues() mEditLinksetUseExclusionVolume->setEnabled(TRUE); mEditLinksetUseDynamicPhantom->setEnabled(TRUE); break; + case kAllowLinksetUseOnlyTerrain : + mEditLinksetUseWalkable->setEnabled(TRUE); + mEditLinksetUseStaticObstacle->setEnabled(FALSE); + mEditLinksetUseDynamicObstacle->setEnabled(FALSE); + mEditLinksetUseMaterialVolume->setEnabled(FALSE); + mEditLinksetUseExclusionVolume->setEnabled(FALSE); + mEditLinksetUseDynamicPhantom->setEnabled(FALSE); + break; default : llassert(0); break; @@ -759,9 +767,13 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfin columns[4]["column"] = "linkset_use"; std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse()); - if (pLinksetPtr->isLocked()) + if (pLinksetPtr->isTerrain()) { - linksetUse += (" " + getString("linkset_is_locked_state")); + linksetUse += (" " + getString("linkset_is_terrain")); + } + else if (!pLinksetPtr->isModifiable()) + { + linksetUse += (" " + getString("linkset_is_restricted_state")); } columns[4]["value"] = linksetUse; columns[4]["font"] = "SANSSERIF"; @@ -815,6 +827,7 @@ LLFloaterPathfindingLinksets::EAllowLinksetsUse LLFloaterPathfindingLinksets::ge bool isAllLocked = true; bool isAllPhantom = true; bool isAllNonPhantom = true; + bool isAllTerrain = true; for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); (isAllLocked || isAllPhantom || isAllNonPhantom) && (selectedItemIter != selectedItems.end()); ++selectedItemIter) @@ -824,7 +837,11 @@ LLFloaterPathfindingLinksets::EAllowLinksetsUse LLFloaterPathfindingLinksets::ge LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); llassert(linksetIter != mLinksetsListPtr->end()); const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - if (linksetPtr->isLocked()) + if (!linksetPtr->isTerrain()) + { + isAllTerrain = false; + } + if (!linksetPtr->isModifiable()) { if (linksetPtr->isPhantom()) { @@ -841,7 +858,11 @@ LLFloaterPathfindingLinksets::EAllowLinksetsUse LLFloaterPathfindingLinksets::ge } } - if (isAllLocked) + if (isAllTerrain) + { + allowLinksetUse = kAllowLinksetUseOnlyTerrain; + } + else if (isAllLocked) { if (isAllPhantom && !isAllNonPhantom) { @@ -874,7 +895,7 @@ bool LLFloaterPathfindingLinksets::doShowLinksetUseSetWarning(LLPathfindingLinks LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); llassert(linksetIter != mLinksetsListPtr->end()); const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - showWarning = (linksetPtr->isLocked() && (linksetPtr->isPhantom() != LLPathfindingLinkset::isPhantom(linksetUse))); + showWarning = (!linksetPtr->isModifiable() && (linksetPtr->isPhantom() != LLPathfindingLinkset::isPhantom(linksetUse))); } } } @@ -1024,10 +1045,10 @@ void LLFloaterPathfindingLinksets::applyEdit() void LLFloaterPathfindingLinksets::handleApplyEdit(const LLSD &pNotification, const LLSD &pResponse) { - if (LLNotificationsUtil::getSelectedOption(pNotification, pResponse) == 0) - { - doApplyEdit(); - } + if (LLNotificationsUtil::getSelectedOption(pNotification, pResponse) == 0) + { + doApplyEdit(); + } } void LLFloaterPathfindingLinksets::doApplyEdit() -- cgit v1.2.3 From 2b93f44f197930790e7f81f51ffcdaf684b4a221 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 1 Mar 2012 16:04:18 -0800 Subject: BUGFIX Correcting a problem with the object selection code in the pathfinding characters and linksets floaters. The code was not seeing the callback from the object update message of the selection manager. --- indra/newview/llfloaterpathfindinglinksets.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 9b86ecd66a..27047b4fd9 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -53,6 +53,7 @@ #include "llnotificationsutil.h" #include +#include #define XUI_LINKSET_USE_NONE 0 #define XUI_LINKSET_USE_WALKABLE 1 @@ -212,10 +213,20 @@ void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) { LLPathfindingManager::getInstance()->registerAgentStateSignal(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateCB, this, _1)); } + + if (!mSelectionUpdateSlot.connected()) + { + mSelectionUpdateSlot = LLSelectMgr::getInstance()->mUpdateSignal.connect(boost::bind(&LLFloaterPathfindingLinksets::updateControls, this)); + } } void LLFloaterPathfindingLinksets::onClose(bool pAppQuitting) { + if (mSelectionUpdateSlot.connected()) + { + mSelectionUpdateSlot.disconnect(); + } + if (mAgentStateSlot.connected()) { mAgentStateSlot.disconnect(); @@ -307,7 +318,8 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mMessagingState(kMessagingUnknown), mLinksetsListPtr(), mLinksetsSelection(), - mAgentStateSlot() + mAgentStateSlot(), + mSelectionUpdateSlot() { } @@ -1004,7 +1016,7 @@ void LLFloaterPathfindingLinksets::updateEnableStateOnEditFields() bool isEditEnabled = ((numSelectedItems > 0) && LLPathfindingManager::getInstance()->isAllowAlterPermanent()); mShowBeaconCheckBox->setEnabled(numSelectedItems > 0); - mTakeButton->setEnabled(isEditEnabled && tools_visible_take_object()); + mTakeButton->setEnabled(isEditEnabled && visible_take_object()); mTakeCopyButton->setEnabled(isEditEnabled && enable_object_take_copy()); mReturnButton->setEnabled(isEditEnabled && enable_object_return()); mDeleteButton->setEnabled(isEditEnabled && enable_object_delete()); -- cgit v1.2.3 From a33e24413ea74aaad91d9eeaa685d1c523c5d210 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 2 Mar 2012 19:17:16 -0800 Subject: PATH-304,PATH-205: Initial reworking of the navmesh download functionality. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 27047b4fd9..8c4bbea128 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -211,7 +211,7 @@ void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) if (!mAgentStateSlot.connected()) { - LLPathfindingManager::getInstance()->registerAgentStateSignal(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateCB, this, _1)); + LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateCB, this, _1)); } if (!mSelectionUpdateSlot.connected()) -- cgit v1.2.3 From a4e8ef3ad6f0a0d96d345fb3d4cdc1d57015fe6c Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 6 Mar 2012 13:45:24 -0800 Subject: Attempting to set the scroll position back to the original value on refresh. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 27047b4fd9..f17cd3c6b8 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -685,6 +685,7 @@ void LLFloaterPathfindingLinksets::updateScrollList() } } + S32 origScrollPosition = mLinksetsScrollList->getScrollPos(); mLinksetsScrollList->deleteAllItems(); if (mLinksetsListPtr != NULL) @@ -732,6 +733,7 @@ void LLFloaterPathfindingLinksets::updateScrollList() } mLinksetsScrollList->selectMultiple(selectedUUIDs); + mLinksetsScrollList->setScrollPos(origScrollPosition); updateEditFieldValues(); updateControls(); } -- cgit v1.2.3 From 6c9561c882cf0d5bb0cb547852e95daec19f559c Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 6 Mar 2012 15:57:28 -0800 Subject: Storing the slots for the registered signal listeners. Before, this was creating the artifact of crashing the Viewer on the second close of the pathfinding console. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 5ef41f1d3f..af2024021b 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -211,7 +211,7 @@ void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) if (!mAgentStateSlot.connected()) { - LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateCB, this, _1)); + mAgentStateSlot = LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateCB, this, _1)); } if (!mSelectionUpdateSlot.connected()) -- cgit v1.2.3 From d3550dfcd64cfc182fd120338d3e7eb25ac339af Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 19 Mar 2012 16:24:51 -0700 Subject: Adding non-volume status to the pathfinding linkset to restrict non-convex linksets from being set to be a material or exclusion volume. --- indra/newview/llfloaterpathfindinglinksets.cpp | 209 +++++++++++++------------ 1 file changed, 113 insertions(+), 96 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index af2024021b..42a8f4e951 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -259,11 +259,10 @@ void LLFloaterPathfindingLinksets::draw() { const LLScrollListItem *selectedItem = *selectedItemIter; - const std::string &objectName = selectedItem->getColumn(0)->getValue().asString(); - LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); if (viewerObject != NULL) { + const std::string &objectName = selectedItem->getColumn(0)->getValue().asString(); gObjectList.addDebugBeacon(viewerObject->getPositionAgent(), objectName, LLColor4(0.f, 0.f, 1.f, 0.8f), LLColor4(1.f, 1.f, 1.f, 1.f), 6); } } @@ -627,45 +626,7 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues() mEditB->setValue(LLSD(linksetPtr->getWalkabilityCoefficientB())); mEditC->setValue(LLSD(linksetPtr->getWalkabilityCoefficientC())); mEditD->setValue(LLSD(linksetPtr->getWalkabilityCoefficientD())); - - switch (getAllowLinksetUse()) - { - case kAllowLinksetUseAll : - mEditLinksetUseWalkable->setEnabled(TRUE); - mEditLinksetUseStaticObstacle->setEnabled(TRUE); - mEditLinksetUseDynamicObstacle->setEnabled(TRUE); - mEditLinksetUseMaterialVolume->setEnabled(TRUE); - mEditLinksetUseExclusionVolume->setEnabled(TRUE); - mEditLinksetUseDynamicPhantom->setEnabled(TRUE); - break; - case kAllowLinksetUseOnlyNonPhantom : - mEditLinksetUseWalkable->setEnabled(TRUE); - mEditLinksetUseStaticObstacle->setEnabled(TRUE); - mEditLinksetUseDynamicObstacle->setEnabled(TRUE); - mEditLinksetUseMaterialVolume->setEnabled(FALSE); - mEditLinksetUseExclusionVolume->setEnabled(FALSE); - mEditLinksetUseDynamicPhantom->setEnabled(FALSE); - break; - case kAllowLinksetUseOnlyPhantom : - mEditLinksetUseWalkable->setEnabled(FALSE); - mEditLinksetUseStaticObstacle->setEnabled(FALSE); - mEditLinksetUseDynamicObstacle->setEnabled(FALSE); - mEditLinksetUseMaterialVolume->setEnabled(TRUE); - mEditLinksetUseExclusionVolume->setEnabled(TRUE); - mEditLinksetUseDynamicPhantom->setEnabled(TRUE); - break; - case kAllowLinksetUseOnlyTerrain : - mEditLinksetUseWalkable->setEnabled(TRUE); - mEditLinksetUseStaticObstacle->setEnabled(FALSE); - mEditLinksetUseDynamicObstacle->setEnabled(FALSE); - mEditLinksetUseMaterialVolume->setEnabled(FALSE); - mEditLinksetUseExclusionVolume->setEnabled(FALSE); - mEditLinksetUseDynamicPhantom->setEnabled(FALSE); - break; - default : - llassert(0); - break; - } + updateEnableStateOnEditLinksetUse(); } } @@ -785,10 +746,18 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfin { linksetUse += (" " + getString("linkset_is_terrain")); } - else if (!pLinksetPtr->isModifiable()) + else if (!pLinksetPtr->isModifiable() && pLinksetPtr->canBeVolume()) { linksetUse += (" " + getString("linkset_is_restricted_state")); } + else if (pLinksetPtr->isModifiable() && !pLinksetPtr->canBeVolume()) + { + linksetUse += (" " + getString("linkset_is_non_volume_state")); + } + else if (!pLinksetPtr->isModifiable() && !pLinksetPtr->canBeVolume()) + { + linksetUse += (" " + getString("linkset_is_restricted_non_volume_state")); + } columns[4]["value"] = linksetUse; columns[4]["font"] = "SANSSERIF"; @@ -831,68 +800,32 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListElement(const std::s return element; } -LLFloaterPathfindingLinksets::EAllowLinksetsUse LLFloaterPathfindingLinksets::getAllowLinksetUse() const +bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const { - EAllowLinksetsUse allowLinksetUse = kAllowLinksetUseAll; + bool showWarning = false; - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) + if (linksetUse != LLPathfindingLinkset::kUnknown) { - bool isAllLocked = true; - bool isAllPhantom = true; - bool isAllNonPhantom = true; - bool isAllTerrain = true; - - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - (isAllLocked || isAllPhantom || isAllNonPhantom) && (selectedItemIter != selectedItems.end()); ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); - llassert(linksetIter != mLinksetsListPtr->end()); - const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - if (!linksetPtr->isTerrain()) - { - isAllTerrain = false; - } - if (!linksetPtr->isModifiable()) - { - if (linksetPtr->isPhantom()) - { - isAllNonPhantom = false; - } - else - { - isAllPhantom = false; - } - } - else - { - isAllLocked = false; - } - } - - if (isAllTerrain) - { - allowLinksetUse = kAllowLinksetUseOnlyTerrain; - } - else if (isAllLocked) + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) { - if (isAllPhantom && !isAllNonPhantom) - { - allowLinksetUse = kAllowLinksetUseOnlyPhantom; - } - else if (isAllNonPhantom && !isAllPhantom) + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + !showWarning && (selectedItemIter != selectedItems.end()); ++selectedItemIter) { - allowLinksetUse = kAllowLinksetUseOnlyNonPhantom; + const LLScrollListItem *selectedItem = *selectedItemIter; + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); + llassert(linksetIter != mLinksetsListPtr->end()); + const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + showWarning = linksetPtr->isShowUnmodifiablePhantomWarning(linksetUse); } } } - return allowLinksetUse; + return showWarning; } -bool LLFloaterPathfindingLinksets::doShowLinksetUseSetWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const +bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const { bool showWarning = false; @@ -909,7 +842,7 @@ bool LLFloaterPathfindingLinksets::doShowLinksetUseSetWarning(LLPathfindingLinks LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); llassert(linksetIter != mLinksetsListPtr->end()); const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - showWarning = (!linksetPtr->isModifiable() && (linksetPtr->isPhantom() != LLPathfindingLinkset::isPhantom(linksetUse))); + showWarning = linksetPtr->isShowCannotBeVolumeWarning(linksetUse); } } } @@ -1039,17 +972,101 @@ void LLFloaterPathfindingLinksets::updateEnableStateOnEditFields() mApplyEditsButton->setEnabled(isEditEnabled && (getMessagingState() == kMessagingComplete)); } +void LLFloaterPathfindingLinksets::updateEnableStateOnEditLinksetUse() +{ + BOOL useWalkable = FALSE; + BOOL useStaticObstacle = FALSE; + BOOL useDynamicObstacle = FALSE; + BOOL useMaterialVolume = FALSE; + BOOL useExclusionVolume = FALSE; + BOOL useDynamicPhantom = FALSE; + + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + !(useWalkable && useStaticObstacle && useDynamicObstacle && useMaterialVolume && useExclusionVolume && useDynamicPhantom) && (selectedItemIter != selectedItems.end()); + ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); + llassert(linksetIter != mLinksetsListPtr->end()); + const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + + if (linksetPtr->isTerrain()) + { + useWalkable = TRUE; + } + else + { + if (linksetPtr->isModifiable()) + { + useWalkable = TRUE; + useStaticObstacle = TRUE; + useDynamicObstacle = TRUE; + useDynamicPhantom = TRUE; + if (linksetPtr->canBeVolume()) + { + useMaterialVolume = TRUE; + useExclusionVolume = TRUE; + } + } + else if (linksetPtr->isPhantom()) + { + useDynamicPhantom = TRUE; + if (linksetPtr->canBeVolume()) + { + useMaterialVolume = TRUE; + useExclusionVolume = TRUE; + } + } + else + { + useWalkable = TRUE; + useStaticObstacle = TRUE; + useDynamicObstacle = TRUE; + } + } + } + } + + mEditLinksetUseWalkable->setEnabled(useWalkable); + mEditLinksetUseStaticObstacle->setEnabled(useStaticObstacle); + mEditLinksetUseDynamicObstacle->setEnabled(useDynamicObstacle); + mEditLinksetUseMaterialVolume->setEnabled(useMaterialVolume); + mEditLinksetUseExclusionVolume->setEnabled(useExclusionVolume); + mEditLinksetUseDynamicPhantom->setEnabled(useDynamicPhantom); +} + void LLFloaterPathfindingLinksets::applyEdit() { LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); - if (doShowLinksetUseSetWarning(linksetUse)) + bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse); + bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse); + + if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) { LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse); LLSD substitutions; substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse); substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); - LLNotificationsUtil::add("PathfindingLinksets_SetLinksetUseMismatchOnRestricted", substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2)); + + std::string notificationName; + if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning) + { + notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"; + } + else if (showUnmodifiablePhantomWarning) + { + notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted"; + } + else + { + notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume"; + } + LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2)); } else { -- cgit v1.2.3 From 473da43c1bbc20245b3a74c1adc7c92f91d25807 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 27 Mar 2012 19:05:29 -0700 Subject: Refactoring the characters floater code. --- indra/newview/llfloaterpathfindinglinksets.cpp | 98 +++++++++++++------------- 1 file changed, 49 insertions(+), 49 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 42a8f4e951..547db078b1 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -1,29 +1,29 @@ /** - * @file llfloaterpathfindinglinksets.cpp - * @author William Todd Stinson - * @brief "Pathfinding linksets" floater, allowing manipulation of the Havok AI pathfinding settings. - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ +* @file llfloaterpathfindinglinksets.cpp +* @author William Todd Stinson +* @brief "Pathfinding linksets" floater, allowing manipulation of the Havok AI pathfinding settings. +* +* $LicenseInfo:firstyear=2002&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2010, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ #include "llviewerprecompiledheaders.h" #include "llfloater.h" @@ -339,18 +339,18 @@ void LLFloaterPathfindingLinksets::requestGetLinksets() { switch (LLPathfindingManager::getInstance()->requestGetLinksets(boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2))) { - case LLPathfindingManager::kLinksetsRequestStarted : + case LLPathfindingManager::kRequestStarted : setMessagingState(kMessagingGetRequestSent); break; - case LLPathfindingManager::kLinksetsRequestCompleted : + case LLPathfindingManager::kRequestCompleted : clearLinksets(); setMessagingState(kMessagingComplete); break; - case LLPathfindingManager::kLinksetsRequestNotEnabled : + case LLPathfindingManager::kRequestNotEnabled : clearLinksets(); setMessagingState(kMessagingNotEnabled); break; - case LLPathfindingManager::kLinksetsRequestError : + case LLPathfindingManager::kRequestError : setMessagingState(kMessagingGetError); break; default : @@ -368,17 +368,17 @@ void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPt { switch (LLPathfindingManager::getInstance()->requestSetLinksets(pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2))) { - case LLPathfindingManager::kLinksetsRequestStarted : + case LLPathfindingManager::kRequestStarted : setMessagingState(kMessagingSetRequestSent); break; - case LLPathfindingManager::kLinksetsRequestCompleted : + case LLPathfindingManager::kRequestCompleted : setMessagingState(kMessagingComplete); break; - case LLPathfindingManager::kLinksetsRequestNotEnabled : + case LLPathfindingManager::kRequestNotEnabled : clearLinksets(); setMessagingState(kMessagingNotEnabled); break; - case LLPathfindingManager::kLinksetsRequestError : + case LLPathfindingManager::kRequestError : setMessagingState(kMessagingSetError); break; default : @@ -389,17 +389,17 @@ void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPt } } -void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) +void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) { mLinksetsListPtr = pLinksetsListPtr; updateScrollList(); switch (pLinksetsRequestStatus) { - case LLPathfindingManager::kLinksetsRequestCompleted : + case LLPathfindingManager::kRequestCompleted : setMessagingState(kMessagingComplete); break; - case LLPathfindingManager::kLinksetsRequestError : + case LLPathfindingManager::kRequestError : setMessagingState(kMessagingGetError); break; default : @@ -409,7 +409,7 @@ void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::ELink } } -void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::ELinksetsRequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) +void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) { if (mLinksetsListPtr == NULL) { @@ -423,10 +423,10 @@ void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::EL switch (pLinksetsRequestStatus) { - case LLPathfindingManager::kLinksetsRequestCompleted : + case LLPathfindingManager::kRequestCompleted : setMessagingState(kMessagingComplete); break; - case LLPathfindingManager::kLinksetsRequestError : + case LLPathfindingManager::kRequestError : setMessagingState(kMessagingSetError); break; default : @@ -702,21 +702,21 @@ void LLFloaterPathfindingLinksets::updateScrollList() LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfindingLinksetPtr pLinksetPtr, const LLVector3 &pAvatarPosition) const { LLSD columns; - + if (pLinksetPtr->isTerrain()) { columns[0]["column"] = "name"; columns[0]["value"] = getString("linkset_terrain_name"); columns[0]["font"] = "SANSSERIF"; - + columns[1]["column"] = "description"; columns[1]["value"] = getString("linkset_terrain_description"); columns[1]["font"] = "SANSSERIF"; - + columns[2]["column"] = "land_impact"; columns[2]["value"] = getString("linkset_terrain_land_impact"); columns[2]["font"] = "SANSSERIF"; - + columns[3]["column"] = "dist_from_you"; columns[3]["value"] = getString("linkset_terrain_dist_from_you"); columns[3]["font"] = "SANSSERIF"; @@ -726,15 +726,15 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfin columns[0]["column"] = "name"; columns[0]["value"] = pLinksetPtr->getName(); columns[0]["font"] = "SANSSERIF"; - + columns[1]["column"] = "description"; columns[1]["value"] = pLinksetPtr->getDescription(); columns[1]["font"] = "SANSSERIF"; - + columns[2]["column"] = "land_impact"; columns[2]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); columns[2]["font"] = "SANSSERIF"; - + columns[3]["column"] = "dist_from_you"; columns[3]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); columns[3]["font"] = "SANSSERIF"; @@ -787,12 +787,12 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfin LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListElement(const std::string &label, S32 value) const { LLSD columns; - + columns[0]["column"] = "name"; columns[0]["relwidth"] = static_cast(100.0f); columns[0]["value"] = label; columns[0]["font"] = "SANSSERIF"; - + LLSD element; element["value"] = value; element["column"] = columns; @@ -1172,7 +1172,7 @@ void LLFloaterPathfindingLinksets::setEditLinksetUse(LLPathfindingLinkset::ELink LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::convertToLinksetUse(LLSD pXuiValue) const { LLPathfindingLinkset::ELinksetUse linkUse; - + switch (pXuiValue.asInteger()) { case XUI_LINKSET_USE_NONE : -- cgit v1.2.3 From 9d22b22d962321822a6be6a23150e6d5f939cd50 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 5 Apr 2012 15:59:34 -0700 Subject: PATH-482: BUGFIX Automatically reloading the character and linksets floaters on region crossing. --- indra/newview/llfloaterpathfindinglinksets.cpp | 170 +++++++++++++------------ 1 file changed, 91 insertions(+), 79 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 547db078b1..c2df53a31d 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -51,6 +51,7 @@ #include "llpathfindinglinksetlist.h" #include "llpathfindingmanager.h" #include "llnotificationsutil.h" +#include "llenvmanager.h" #include #include @@ -218,10 +219,20 @@ void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) { mSelectionUpdateSlot = LLSelectMgr::getInstance()->mUpdateSignal.connect(boost::bind(&LLFloaterPathfindingLinksets::updateControls, this)); } + + if (!mRegionBoundarySlot.connected()) + { + mRegionBoundarySlot = LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterPathfindingLinksets::onRegionBoundaryCross, this)); + } } void LLFloaterPathfindingLinksets::onClose(bool pAppQuitting) { + if (mRegionBoundarySlot.connected()) + { + mRegionBoundarySlot.disconnect(); + } + if (mSelectionUpdateSlot.connected()) { mSelectionUpdateSlot.disconnect(); @@ -277,16 +288,6 @@ void LLFloaterPathfindingLinksets::openLinksetsEditor() LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); } -LLFloaterPathfindingLinksets::EMessagingState LLFloaterPathfindingLinksets::getMessagingState() const -{ - return mMessagingState; -} - -bool LLFloaterPathfindingLinksets::isMessagingInProgress() const -{ - return ((mMessagingState == kMessagingGetRequestSent) || (mMessagingState == kMessagingSetRequestSent)); -} - LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) : LLFloater(pSeed), mFilterByName(NULL), @@ -315,6 +316,7 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mEditD(NULL), mApplyEditsButton(NULL), mMessagingState(kMessagingUnknown), + mMessagingRequestId(0U), mLinksetsListPtr(), mLinksetsSelection(), mAgentStateSlot(), @@ -326,6 +328,11 @@ LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() { } +LLFloaterPathfindingLinksets::EMessagingState LLFloaterPathfindingLinksets::getMessagingState() const +{ + return mMessagingState; +} + void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingState) { mMessagingState = pMessagingState; @@ -334,22 +341,66 @@ void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingS void LLFloaterPathfindingLinksets::requestGetLinksets() { - llassert(!isMessagingInProgress()); - if (!isMessagingInProgress()) + switch (LLPathfindingManager::getInstance()->requestGetLinksets(++mMessagingRequestId, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2, _3))) + { + case LLPathfindingManager::kRequestStarted : + setMessagingState(kMessagingGetRequestSent); + break; + case LLPathfindingManager::kRequestCompleted : + clearLinksets(); + setMessagingState(kMessagingComplete); + break; + case LLPathfindingManager::kRequestNotEnabled : + clearLinksets(); + setMessagingState(kMessagingNotEnabled); + break; + case LLPathfindingManager::kRequestError : + setMessagingState(kMessagingGetError); + break; + default : + setMessagingState(kMessagingGetError); + llassert(0); + break; + } +} + +void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) +{ + switch (LLPathfindingManager::getInstance()->requestSetLinksets(++mMessagingRequestId, pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2, _3))) + { + case LLPathfindingManager::kRequestStarted : + setMessagingState(kMessagingSetRequestSent); + break; + case LLPathfindingManager::kRequestCompleted : + setMessagingState(kMessagingComplete); + break; + case LLPathfindingManager::kRequestNotEnabled : + clearLinksets(); + setMessagingState(kMessagingNotEnabled); + break; + case LLPathfindingManager::kRequestError : + setMessagingState(kMessagingSetError); + break; + default : + setMessagingState(kMessagingSetError); + llassert(0); + break; + } +} + +void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) +{ + llassert(pRequestId <= mMessagingRequestId); + if (pRequestId == mMessagingRequestId) { - switch (LLPathfindingManager::getInstance()->requestGetLinksets(boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2))) + mLinksetsListPtr = pLinksetsListPtr; + updateScrollList(); + + switch (pLinksetsRequestStatus) { - case LLPathfindingManager::kRequestStarted : - setMessagingState(kMessagingGetRequestSent); - break; case LLPathfindingManager::kRequestCompleted : - clearLinksets(); setMessagingState(kMessagingComplete); break; - case LLPathfindingManager::kRequestNotEnabled : - clearLinksets(); - setMessagingState(kMessagingNotEnabled); - break; case LLPathfindingManager::kRequestError : setMessagingState(kMessagingGetError); break; @@ -361,23 +412,26 @@ void LLFloaterPathfindingLinksets::requestGetLinksets() } } -void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) +void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) { - llassert(!isMessagingInProgress()); - if (!isMessagingInProgress()) + llassert(pRequestId <= mMessagingRequestId); + if (pRequestId == mMessagingRequestId) { - switch (LLPathfindingManager::getInstance()->requestSetLinksets(pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2))) + if (mLinksetsListPtr == NULL) + { + mLinksetsListPtr = pLinksetsListPtr; + } + else + { + mLinksetsListPtr->update(*pLinksetsListPtr); + } + updateScrollList(); + + switch (pLinksetsRequestStatus) { - case LLPathfindingManager::kRequestStarted : - setMessagingState(kMessagingSetRequestSent); - break; case LLPathfindingManager::kRequestCompleted : setMessagingState(kMessagingComplete); break; - case LLPathfindingManager::kRequestNotEnabled : - clearLinksets(); - setMessagingState(kMessagingNotEnabled); - break; case LLPathfindingManager::kRequestError : setMessagingState(kMessagingSetError); break; @@ -389,53 +443,6 @@ void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPt } } -void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) -{ - mLinksetsListPtr = pLinksetsListPtr; - updateScrollList(); - - switch (pLinksetsRequestStatus) - { - case LLPathfindingManager::kRequestCompleted : - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingGetError); - break; - default : - setMessagingState(kMessagingGetError); - llassert(0); - break; - } -} - -void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) -{ - if (mLinksetsListPtr == NULL) - { - mLinksetsListPtr = pLinksetsListPtr; - } - else - { - mLinksetsListPtr->update(*pLinksetsListPtr); - } - updateScrollList(); - - switch (pLinksetsRequestStatus) - { - case LLPathfindingManager::kRequestCompleted : - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingSetError); - break; - default : - setMessagingState(kMessagingSetError); - llassert(0); - break; - } -} - void LLFloaterPathfindingLinksets::onApplyAllFilters() { applyFilters(); @@ -562,6 +569,11 @@ void LLFloaterPathfindingLinksets::onAgentStateCB(LLPathfindingManager::EAgentSt updateControls(); } +void LLFloaterPathfindingLinksets::onRegionBoundaryCross() +{ + requestGetLinksets(); +} + void LLFloaterPathfindingLinksets::applyFilters() { updateScrollList(); -- cgit v1.2.3 From 8d9863f4ef039af4f6af7f41909e212b9101ce0f Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 6 Apr 2012 13:37:11 -0700 Subject: Altering the layout of the pathfinding console based on feedback. --- indra/newview/llfloaterpathfindinglinksets.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index c2df53a31d..9701002d7d 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -864,7 +864,8 @@ bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLink void LLFloaterPathfindingLinksets::updateStatusMessage() { - static const LLColor4 warningColor = LLUIColorTable::instance().getColor("DrYellow"); + static const LLColor4 errorColor = LLUIColorTable::instance().getColor("PathfindingErrorColor"); + static const LLColor4 warningColor = LLUIColorTable::instance().getColor("PathfindingWarningColor"); std::string statusText(""); LLStyle::Params styleParams; @@ -873,20 +874,23 @@ void LLFloaterPathfindingLinksets::updateStatusMessage() { case kMessagingUnknown: statusText = getString("linksets_messaging_initial"); + styleParams.color = errorColor; break; case kMessagingGetRequestSent : statusText = getString("linksets_messaging_get_inprogress"); + styleParams.color = warningColor; break; case kMessagingGetError : statusText = getString("linksets_messaging_get_error"); - styleParams.color = warningColor; + styleParams.color = errorColor; break; case kMessagingSetRequestSent : statusText = getString("linksets_messaging_set_inprogress"); + styleParams.color = warningColor; break; case kMessagingSetError : statusText = getString("linksets_messaging_set_error"); - styleParams.color = warningColor; + styleParams.color = errorColor; break; case kMessagingComplete : if (mLinksetsScrollList->isEmpty()) @@ -913,10 +917,11 @@ void LLFloaterPathfindingLinksets::updateStatusMessage() break; case kMessagingNotEnabled : statusText = getString("linksets_messaging_not_enabled"); - styleParams.color = warningColor; + styleParams.color = errorColor; break; default: statusText = getString("linksets_messaging_initial"); + styleParams.color = errorColor; llassert(0); break; } -- cgit v1.2.3 From cbebd682f7b9b0cff120bc36d9db9bb170dc1b2a Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 25 Apr 2012 13:04:13 -0700 Subject: Removing windows line endings from .h and .cpp files. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2518 ++++++++++++------------ 1 file changed, 1259 insertions(+), 1259 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 9701002d7d..240b5bb741 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -1,1259 +1,1259 @@ -/** -* @file llfloaterpathfindinglinksets.cpp -* @author William Todd Stinson -* @brief "Pathfinding linksets" floater, allowing manipulation of the Havok AI pathfinding settings. -* -* $LicenseInfo:firstyear=2002&license=viewerlgpl$ -* Second Life Viewer Source Code -* Copyright (C) 2010, Linden Research, Inc. -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; -* version 2.1 of the License only. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -* -* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA -* $/LicenseInfo$ -*/ - -#include "llviewerprecompiledheaders.h" -#include "llfloater.h" -#include "llfloaterreg.h" -#include "llfloaterpathfindinglinksets.h" -#include "llsd.h" -#include "lluuid.h" -#include "v3math.h" -#include "lltextvalidate.h" -#include "llagent.h" -#include "lltextbase.h" -#include "lllineeditor.h" -#include "llscrolllistitem.h" -#include "llscrolllistctrl.h" -#include "llcombobox.h" -#include "llcheckboxctrl.h" -#include "llbutton.h" -#include "llresmgr.h" -#include "llviewerregion.h" -#include "llselectmgr.h" -#include "llviewermenu.h" -#include "llviewerobject.h" -#include "llviewerobjectlist.h" -#include "llpathfindinglinkset.h" -#include "llpathfindinglinksetlist.h" -#include "llpathfindingmanager.h" -#include "llnotificationsutil.h" -#include "llenvmanager.h" - -#include -#include - -#define XUI_LINKSET_USE_NONE 0 -#define XUI_LINKSET_USE_WALKABLE 1 -#define XUI_LINKSET_USE_STATIC_OBSTACLE 2 -#define XUI_LINKSET_USE_DYNAMIC_OBSTACLE 3 -#define XUI_LINKSET_USE_MATERIAL_VOLUME 4 -#define XUI_LINKSET_USE_EXCLUSION_VOLUME 5 -#define XUI_LINKSET_USE_DYNAMIC_PHANTOM 6 - -//--------------------------------------------------------------------------- -// LLFloaterPathfindingLinksets -//--------------------------------------------------------------------------- - -BOOL LLFloaterPathfindingLinksets::postBuild() -{ - childSetAction("apply_filters", boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); - childSetAction("clear_filters", boost::bind(&LLFloaterPathfindingLinksets::onClearFiltersClicked, this)); - - mFilterByName = findChild("filter_by_name"); - llassert(mFilterByName != NULL); - mFilterByName->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); - mFilterByName->setSelectAllonFocusReceived(true); - mFilterByName->setCommitOnFocusLost(true); - - mFilterByDescription = findChild("filter_by_description"); - llassert(mFilterByDescription != NULL); - mFilterByDescription->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); - mFilterByDescription->setSelectAllonFocusReceived(true); - mFilterByDescription->setCommitOnFocusLost(true); - - mFilterByLinksetUse = findChild("filter_by_linkset_use"); - llassert(mFilterByLinksetUse != NULL); - mFilterByLinksetUse->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); - - mLinksetsScrollList = findChild("pathfinding_linksets"); - llassert(mLinksetsScrollList != NULL); - mLinksetsScrollList->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onLinksetsSelectionChange, this)); - mLinksetsScrollList->sortByColumnIndex(0, true); - - mLinksetsStatus = findChild("linksets_status"); - llassert(mLinksetsStatus != NULL); - - mRefreshListButton = findChild("refresh_linksets_list"); - llassert(mRefreshListButton != NULL); - mRefreshListButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this)); - - mSelectAllButton = findChild("select_all_linksets"); - llassert(mSelectAllButton != NULL); - mSelectAllButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this)); - - mSelectNoneButton = findChild("select_none_linksets"); - llassert(mSelectNoneButton != NULL); - mSelectNoneButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this)); - - mShowBeaconCheckBox = findChild("show_beacon"); - llassert(mShowBeaconCheckBox != NULL); - - mTakeButton = findChild("take_linksets"); - llassert(mTakeButton != NULL); - mTakeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeClicked, this)); - - mTakeCopyButton = findChild("take_copy_linksets"); - llassert(mTakeCopyButton != NULL); - mTakeCopyButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeCopyClicked, this)); - - mReturnButton = findChild("return_linksets"); - llassert(mReturnButton != NULL); - mReturnButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onReturnClicked, this)); - - mDeleteButton = findChild("delete_linksets"); - llassert(mDeleteButton != NULL); - mDeleteButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onDeleteClicked, this)); - - mTeleportButton = findChild("teleport_me_to_linkset"); - llassert(mTeleportButton != NULL); - mTeleportButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTeleportClicked, this)); - - mEditLinksetUse = findChild("edit_linkset_use"); - llassert(mEditLinksetUse != NULL); - - mEditLinksetUse->clearRows(); - - mEditLinksetUseUnset = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getString("linkset_choose_use"), XUI_LINKSET_USE_NONE)); - llassert(mEditLinksetUseUnset != NULL); - - mEditLinksetUseWalkable = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kWalkable), XUI_LINKSET_USE_WALKABLE)); - llassert(mEditLinksetUseWalkable != NULL); - - mEditLinksetUseStaticObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kStaticObstacle), XUI_LINKSET_USE_STATIC_OBSTACLE)); - llassert(mEditLinksetUseStaticObstacle != NULL); - - mEditLinksetUseDynamicObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kDynamicObstacle), XUI_LINKSET_USE_DYNAMIC_OBSTACLE)); - llassert(mEditLinksetUseDynamicObstacle != NULL); - - mEditLinksetUseMaterialVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kMaterialVolume), XUI_LINKSET_USE_MATERIAL_VOLUME)); - llassert(mEditLinksetUseMaterialVolume != NULL); - - mEditLinksetUseExclusionVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kExclusionVolume), XUI_LINKSET_USE_EXCLUSION_VOLUME)); - llassert(mEditLinksetUseExclusionVolume != NULL); - - mEditLinksetUseDynamicPhantom = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kDynamicPhantom), XUI_LINKSET_USE_DYNAMIC_PHANTOM)); - llassert(mEditLinksetUseDynamicPhantom != NULL); - - mEditLinksetUse->selectFirstItem(); - - mLabelWalkabilityCoefficients = findChild("walkability_coefficients_label"); - llassert(mLabelWalkabilityCoefficients != NULL); - - mLabelEditA = findChild("edit_a_label"); - llassert(mLabelEditA != NULL); - - mEditA = findChild("edit_a_value"); - llassert(mEditA != NULL); - mEditA->setPrevalidate(LLTextValidate::validateNonNegativeS32); - mEditA->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); - - mLabelEditB = findChild("edit_b_label"); - llassert(mLabelEditB != NULL); - - mEditB = findChild("edit_b_value"); - llassert(mEditB != NULL); - mEditB->setPrevalidate(LLTextValidate::validateNonNegativeS32); - mEditB->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); - - mLabelEditC = findChild("edit_c_label"); - llassert(mLabelEditC != NULL); - - mEditC = findChild("edit_c_value"); - llassert(mEditC != NULL); - mEditC->setPrevalidate(LLTextValidate::validateNonNegativeS32); - mEditC->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); - - mLabelEditD = findChild("edit_d_label"); - llassert(mLabelEditD != NULL); - - mEditD = findChild("edit_d_value"); - llassert(mEditD != NULL); - mEditD->setPrevalidate(LLTextValidate::validateNonNegativeS32); - mEditD->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); - - mApplyEditsButton = findChild("apply_edit_values"); - llassert(mApplyEditsButton != NULL); - mApplyEditsButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); - - return LLFloater::postBuild(); -} - -void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) -{ - LLFloater::onOpen(pKey); - - requestGetLinksets(); - selectNoneLinksets(); - mLinksetsScrollList->setCommitOnSelectionChange(true); - - if (!mAgentStateSlot.connected()) - { - mAgentStateSlot = LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateCB, this, _1)); - } - - if (!mSelectionUpdateSlot.connected()) - { - mSelectionUpdateSlot = LLSelectMgr::getInstance()->mUpdateSignal.connect(boost::bind(&LLFloaterPathfindingLinksets::updateControls, this)); - } - - if (!mRegionBoundarySlot.connected()) - { - mRegionBoundarySlot = LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterPathfindingLinksets::onRegionBoundaryCross, this)); - } -} - -void LLFloaterPathfindingLinksets::onClose(bool pAppQuitting) -{ - if (mRegionBoundarySlot.connected()) - { - mRegionBoundarySlot.disconnect(); - } - - if (mSelectionUpdateSlot.connected()) - { - mSelectionUpdateSlot.disconnect(); - } - - if (mAgentStateSlot.connected()) - { - mAgentStateSlot.disconnect(); - } - - mLinksetsScrollList->setCommitOnSelectionChange(false); - selectNoneLinksets(); - if (mLinksetsSelection.notNull()) - { - mLinksetsSelection.clear(); - } - - LLFloater::onClose(pAppQuitting); -} - -void LLFloaterPathfindingLinksets::draw() -{ - if (mShowBeaconCheckBox->get()) - { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) - { - int numSelectedItems = selectedItems.size(); - - std::vector viewerObjects; - viewerObjects.reserve(numSelectedItems); - - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - selectedItemIter != selectedItems.end(); ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - - LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); - if (viewerObject != NULL) - { - const std::string &objectName = selectedItem->getColumn(0)->getValue().asString(); - gObjectList.addDebugBeacon(viewerObject->getPositionAgent(), objectName, LLColor4(0.f, 0.f, 1.f, 0.8f), LLColor4(1.f, 1.f, 1.f, 1.f), 6); - } - } - } - } - - LLFloater::draw(); -} - -void LLFloaterPathfindingLinksets::openLinksetsEditor() -{ - LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); -} - -LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) - : LLFloater(pSeed), - mFilterByName(NULL), - mFilterByDescription(NULL), - mFilterByLinksetUse(NULL), - mLinksetsScrollList(NULL), - mLinksetsStatus(NULL), - mRefreshListButton(NULL), - mSelectAllButton(NULL), - mSelectNoneButton(NULL), - mShowBeaconCheckBox(NULL), - mTakeButton(NULL), - mTakeCopyButton(NULL), - mReturnButton(NULL), - mDeleteButton(NULL), - mTeleportButton(NULL), - mEditLinksetUse(NULL), - mLabelWalkabilityCoefficients(NULL), - mLabelEditA(NULL), - mEditA(NULL), - mLabelEditB(NULL), - mEditB(NULL), - mLabelEditC(NULL), - mEditC(NULL), - mLabelEditD(NULL), - mEditD(NULL), - mApplyEditsButton(NULL), - mMessagingState(kMessagingUnknown), - mMessagingRequestId(0U), - mLinksetsListPtr(), - mLinksetsSelection(), - mAgentStateSlot(), - mSelectionUpdateSlot() -{ -} - -LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() -{ -} - -LLFloaterPathfindingLinksets::EMessagingState LLFloaterPathfindingLinksets::getMessagingState() const -{ - return mMessagingState; -} - -void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingState) -{ - mMessagingState = pMessagingState; - updateControls(); -} - -void LLFloaterPathfindingLinksets::requestGetLinksets() -{ - switch (LLPathfindingManager::getInstance()->requestGetLinksets(++mMessagingRequestId, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2, _3))) - { - case LLPathfindingManager::kRequestStarted : - setMessagingState(kMessagingGetRequestSent); - break; - case LLPathfindingManager::kRequestCompleted : - clearLinksets(); - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestNotEnabled : - clearLinksets(); - setMessagingState(kMessagingNotEnabled); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingGetError); - break; - default : - setMessagingState(kMessagingGetError); - llassert(0); - break; - } -} - -void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) -{ - switch (LLPathfindingManager::getInstance()->requestSetLinksets(++mMessagingRequestId, pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2, _3))) - { - case LLPathfindingManager::kRequestStarted : - setMessagingState(kMessagingSetRequestSent); - break; - case LLPathfindingManager::kRequestCompleted : - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestNotEnabled : - clearLinksets(); - setMessagingState(kMessagingNotEnabled); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingSetError); - break; - default : - setMessagingState(kMessagingSetError); - llassert(0); - break; - } -} - -void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) -{ - llassert(pRequestId <= mMessagingRequestId); - if (pRequestId == mMessagingRequestId) - { - mLinksetsListPtr = pLinksetsListPtr; - updateScrollList(); - - switch (pLinksetsRequestStatus) - { - case LLPathfindingManager::kRequestCompleted : - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingGetError); - break; - default : - setMessagingState(kMessagingGetError); - llassert(0); - break; - } - } -} - -void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) -{ - llassert(pRequestId <= mMessagingRequestId); - if (pRequestId == mMessagingRequestId) - { - if (mLinksetsListPtr == NULL) - { - mLinksetsListPtr = pLinksetsListPtr; - } - else - { - mLinksetsListPtr->update(*pLinksetsListPtr); - } - updateScrollList(); - - switch (pLinksetsRequestStatus) - { - case LLPathfindingManager::kRequestCompleted : - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingSetError); - break; - default : - setMessagingState(kMessagingSetError); - llassert(0); - break; - } - } -} - -void LLFloaterPathfindingLinksets::onApplyAllFilters() -{ - applyFilters(); -} - -void LLFloaterPathfindingLinksets::onClearFiltersClicked() -{ - clearFilters(); -} - -void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() -{ - mLinksetsSelection.clear(); - LLSelectMgr::getInstance()->deselectAll(); - - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) - { - int numSelectedItems = selectedItems.size(); - - std::vectorviewerObjects; - viewerObjects.reserve(numSelectedItems); - - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - selectedItemIter != selectedItems.end(); ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - - LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); - if (viewerObject != NULL) - { - viewerObjects.push_back(viewerObject); - } - } - - if (!viewerObjects.empty()) - { - mLinksetsSelection = LLSelectMgr::getInstance()->selectObjectAndFamily(viewerObjects); - } - } - - updateEditFieldValues(); - updateControls(); -} - -void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() -{ - requestGetLinksets(); -} - -void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() -{ - selectAllLinksets(); -} - -void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() -{ - selectNoneLinksets(); -} - -void LLFloaterPathfindingLinksets::onTakeClicked() -{ - handle_take(); -} - -void LLFloaterPathfindingLinksets::onTakeCopyClicked() -{ - handle_take_copy(); -} - -void LLFloaterPathfindingLinksets::onReturnClicked() -{ - handle_object_return(); -} - -void LLFloaterPathfindingLinksets::onDeleteClicked() -{ - handle_object_delete(); -} - -void LLFloaterPathfindingLinksets::onTeleportClicked() -{ - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - llassert(selectedItems.size() == 1); - if (selectedItems.size() == 1) - { - std::vector::const_reference selectedItemRef = selectedItems.front(); - const LLScrollListItem *selectedItem = selectedItemRef; - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); - const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - const LLVector3 &linksetLocation = linksetPtr->getLocation(); - - LLViewerRegion* region = gAgent.getRegion(); - if (region != NULL) - { - gAgent.teleportRequest(region->getHandle(), linksetLocation, true); - } - } -} - -void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl) -{ - LLLineEditor *pLineEditor = static_cast(pUICtrl); - llassert(pLineEditor != NULL); - - const std::string &valueString = pLineEditor->getText(); - S32 value = static_cast(atoi(valueString.c_str())); - - if ((value < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (value > LLPathfindingLinkset::MAX_WALKABILITY_VALUE)) - { - value = llclamp(value, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE); - pLineEditor->setValue(LLSD(value)); - } -} - -void LLFloaterPathfindingLinksets::onApplyChangesClicked() -{ - applyEdit(); -} - -void LLFloaterPathfindingLinksets::onAgentStateCB(LLPathfindingManager::EAgentState pAgentState) -{ - updateControls(); -} - -void LLFloaterPathfindingLinksets::onRegionBoundaryCross() -{ - requestGetLinksets(); -} - -void LLFloaterPathfindingLinksets::applyFilters() -{ - updateScrollList(); -} - -void LLFloaterPathfindingLinksets::clearFilters() -{ - mFilterByName->clear(); - mFilterByDescription->clear(); - setFilterLinksetUse(LLPathfindingLinkset::kUnknown); - updateScrollList(); -} - -void LLFloaterPathfindingLinksets::selectAllLinksets() -{ - mLinksetsScrollList->selectAll(); -} - -void LLFloaterPathfindingLinksets::selectNoneLinksets() -{ - mLinksetsScrollList->deselectAllItems(); -} - -void LLFloaterPathfindingLinksets::clearLinksets() -{ - if (mLinksetsListPtr != NULL) - { - mLinksetsListPtr->clear(); - } - updateScrollList(); -} - -void LLFloaterPathfindingLinksets::updateControls() -{ - updateStatusMessage(); - updateEnableStateOnListActions(); - updateEnableStateOnEditFields(); -} - -void LLFloaterPathfindingLinksets::updateEditFieldValues() -{ - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - int numSelectedItems = selectedItems.size(); - if (numSelectedItems <= 0) - { - mEditLinksetUse->selectFirstItem(); - mEditA->clear(); - mEditB->clear(); - mEditC->clear(); - mEditD->clear(); - } - else - { - LLScrollListItem *firstItem = selectedItems.front(); - - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(firstItem->getUUID().asString()); - const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); - - setEditLinksetUse(linksetPtr->getLinksetUse()); - mEditA->setValue(LLSD(linksetPtr->getWalkabilityCoefficientA())); - mEditB->setValue(LLSD(linksetPtr->getWalkabilityCoefficientB())); - mEditC->setValue(LLSD(linksetPtr->getWalkabilityCoefficientC())); - mEditD->setValue(LLSD(linksetPtr->getWalkabilityCoefficientD())); - updateEnableStateOnEditLinksetUse(); - } -} - -void LLFloaterPathfindingLinksets::updateScrollList() -{ - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - int numSelectedItems = selectedItems.size(); - uuid_vec_t selectedUUIDs; - if (numSelectedItems > 0) - { - selectedUUIDs.reserve(selectedItems.size()); - for (std::vector::const_iterator itemIter = selectedItems.begin(); - itemIter != selectedItems.end(); ++itemIter) - { - const LLScrollListItem *listItem = *itemIter; - selectedUUIDs.push_back(listItem->getUUID()); - } - } - - S32 origScrollPosition = mLinksetsScrollList->getScrollPos(); - mLinksetsScrollList->deleteAllItems(); - - if (mLinksetsListPtr != NULL) - { - std::string nameFilter = mFilterByName->getText(); - std::string descriptionFilter = mFilterByDescription->getText(); - LLPathfindingLinkset::ELinksetUse linksetUseFilter = getFilterLinksetUse(); - bool isFilteringName = !nameFilter.empty(); - bool isFilteringDescription = !descriptionFilter.empty(); - bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); - - const LLVector3& avatarPosition = gAgent.getPositionAgent(); - - if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) - { - LLStringUtil::toUpper(nameFilter); - LLStringUtil::toUpper(descriptionFilter); - for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); - linksetIter != mLinksetsListPtr->end(); ++linksetIter) - { - const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); - std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName()); - std::string linksetDescription = linksetPtr->getDescription(); - LLStringUtil::toUpper(linksetName); - LLStringUtil::toUpper(linksetDescription); - if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) && - (!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) && - (!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter))) - { - LLSD element = buildLinksetScrollListElement(linksetPtr, avatarPosition); - mLinksetsScrollList->addElement(element); - } - } - } - else - { - for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); - linksetIter != mLinksetsListPtr->end(); ++linksetIter) - { - const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); - LLSD element = buildLinksetScrollListElement(linksetPtr, avatarPosition); - mLinksetsScrollList->addElement(element); - } - } - } - - mLinksetsScrollList->selectMultiple(selectedUUIDs); - mLinksetsScrollList->setScrollPos(origScrollPosition); - updateEditFieldValues(); - updateControls(); -} - -LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfindingLinksetPtr pLinksetPtr, const LLVector3 &pAvatarPosition) const -{ - LLSD columns; - - if (pLinksetPtr->isTerrain()) - { - columns[0]["column"] = "name"; - columns[0]["value"] = getString("linkset_terrain_name"); - columns[0]["font"] = "SANSSERIF"; - - columns[1]["column"] = "description"; - columns[1]["value"] = getString("linkset_terrain_description"); - columns[1]["font"] = "SANSSERIF"; - - columns[2]["column"] = "land_impact"; - columns[2]["value"] = getString("linkset_terrain_land_impact"); - columns[2]["font"] = "SANSSERIF"; - - columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = getString("linkset_terrain_dist_from_you"); - columns[3]["font"] = "SANSSERIF"; - } - else - { - columns[0]["column"] = "name"; - columns[0]["value"] = pLinksetPtr->getName(); - columns[0]["font"] = "SANSSERIF"; - - columns[1]["column"] = "description"; - columns[1]["value"] = pLinksetPtr->getDescription(); - columns[1]["font"] = "SANSSERIF"; - - columns[2]["column"] = "land_impact"; - columns[2]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); - columns[2]["font"] = "SANSSERIF"; - - columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); - columns[3]["font"] = "SANSSERIF"; - } - - columns[4]["column"] = "linkset_use"; - std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse()); - if (pLinksetPtr->isTerrain()) - { - linksetUse += (" " + getString("linkset_is_terrain")); - } - else if (!pLinksetPtr->isModifiable() && pLinksetPtr->canBeVolume()) - { - linksetUse += (" " + getString("linkset_is_restricted_state")); - } - else if (pLinksetPtr->isModifiable() && !pLinksetPtr->canBeVolume()) - { - linksetUse += (" " + getString("linkset_is_non_volume_state")); - } - else if (!pLinksetPtr->isModifiable() && !pLinksetPtr->canBeVolume()) - { - linksetUse += (" " + getString("linkset_is_restricted_non_volume_state")); - } - columns[4]["value"] = linksetUse; - columns[4]["font"] = "SANSSERIF"; - - columns[5]["column"] = "a_percent"; - columns[5]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); - columns[5]["font"] = "SANSSERIF"; - - columns[6]["column"] = "b_percent"; - columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); - columns[6]["font"] = "SANSSERIF"; - - columns[7]["column"] = "c_percent"; - columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); - columns[7]["font"] = "SANSSERIF"; - - columns[8]["column"] = "d_percent"; - columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); - columns[8]["font"] = "SANSSERIF"; - - LLSD element; - element["id"] = pLinksetPtr->getUUID().asString(); - element["column"] = columns; - - return element; -} - -LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListElement(const std::string &label, S32 value) const -{ - LLSD columns; - - columns[0]["column"] = "name"; - columns[0]["relwidth"] = static_cast(100.0f); - columns[0]["value"] = label; - columns[0]["font"] = "SANSSERIF"; - - LLSD element; - element["value"] = value; - element["column"] = columns; - - return element; -} - -bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const -{ - bool showWarning = false; - - if (linksetUse != LLPathfindingLinkset::kUnknown) - { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) - { - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - !showWarning && (selectedItemIter != selectedItems.end()); ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); - llassert(linksetIter != mLinksetsListPtr->end()); - const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - showWarning = linksetPtr->isShowUnmodifiablePhantomWarning(linksetUse); - } - } - } - - return showWarning; -} - -bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const -{ - bool showWarning = false; - - if (linksetUse != LLPathfindingLinkset::kUnknown) - { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) - { - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - !showWarning && (selectedItemIter != selectedItems.end()); ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); - llassert(linksetIter != mLinksetsListPtr->end()); - const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - showWarning = linksetPtr->isShowCannotBeVolumeWarning(linksetUse); - } - } - } - - return showWarning; -} - -void LLFloaterPathfindingLinksets::updateStatusMessage() -{ - static const LLColor4 errorColor = LLUIColorTable::instance().getColor("PathfindingErrorColor"); - static const LLColor4 warningColor = LLUIColorTable::instance().getColor("PathfindingWarningColor"); - - std::string statusText(""); - LLStyle::Params styleParams; - - switch (getMessagingState()) - { - case kMessagingUnknown: - statusText = getString("linksets_messaging_initial"); - styleParams.color = errorColor; - break; - case kMessagingGetRequestSent : - statusText = getString("linksets_messaging_get_inprogress"); - styleParams.color = warningColor; - break; - case kMessagingGetError : - statusText = getString("linksets_messaging_get_error"); - styleParams.color = errorColor; - break; - case kMessagingSetRequestSent : - statusText = getString("linksets_messaging_set_inprogress"); - styleParams.color = warningColor; - break; - case kMessagingSetError : - statusText = getString("linksets_messaging_set_error"); - styleParams.color = errorColor; - break; - case kMessagingComplete : - if (mLinksetsScrollList->isEmpty()) - { - statusText = getString("linksets_messaging_complete_none_found"); - } - else - { - S32 numItems = mLinksetsScrollList->getItemCount(); - S32 numSelectedItems = mLinksetsScrollList->getNumSelected(); - - LLLocale locale(LLStringUtil::getLocale()); - std::string numItemsString; - LLResMgr::getInstance()->getIntegerString(numItemsString, numItems); - - std::string numSelectedItemsString; - LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems); - - LLStringUtil::format_map_t string_args; - string_args["[NUM_SELECTED]"] = numSelectedItemsString; - string_args["[NUM_TOTAL]"] = numItemsString; - statusText = getString("linksets_messaging_complete_available", string_args); - } - break; - case kMessagingNotEnabled : - statusText = getString("linksets_messaging_not_enabled"); - styleParams.color = errorColor; - break; - default: - statusText = getString("linksets_messaging_initial"); - styleParams.color = errorColor; - llassert(0); - break; - } - - mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams); -} - -void LLFloaterPathfindingLinksets::updateEnableStateOnListActions() -{ - switch (getMessagingState()) - { - case kMessagingUnknown: - case kMessagingGetRequestSent : - case kMessagingSetRequestSent : - mRefreshListButton->setEnabled(FALSE); - mSelectAllButton->setEnabled(FALSE); - mSelectNoneButton->setEnabled(FALSE); - break; - case kMessagingGetError : - case kMessagingSetError : - case kMessagingNotEnabled : - mRefreshListButton->setEnabled(TRUE); - mSelectAllButton->setEnabled(FALSE); - mSelectNoneButton->setEnabled(FALSE); - break; - case kMessagingComplete : - { - int numItems = mLinksetsScrollList->getItemCount(); - int numSelectedItems = mLinksetsScrollList->getNumSelected(); - mRefreshListButton->setEnabled(TRUE); - mSelectAllButton->setEnabled(numSelectedItems < numItems); - mSelectNoneButton->setEnabled(numSelectedItems > 0); - } - break; - default: - llassert(0); - break; - } -} - -void LLFloaterPathfindingLinksets::updateEnableStateOnEditFields() -{ - int numSelectedItems = mLinksetsScrollList->getNumSelected(); - bool isEditEnabled = ((numSelectedItems > 0) && LLPathfindingManager::getInstance()->isAllowAlterPermanent()); - - mShowBeaconCheckBox->setEnabled(numSelectedItems > 0); - mTakeButton->setEnabled(isEditEnabled && visible_take_object()); - mTakeCopyButton->setEnabled(isEditEnabled && enable_object_take_copy()); - mReturnButton->setEnabled(isEditEnabled && enable_object_return()); - mDeleteButton->setEnabled(isEditEnabled && enable_object_delete()); - mTeleportButton->setEnabled(numSelectedItems == 1); - - mEditLinksetUse->setEnabled(isEditEnabled); - - mLabelWalkabilityCoefficients->setEnabled(isEditEnabled); - mLabelEditA->setEnabled(isEditEnabled); - mLabelEditB->setEnabled(isEditEnabled); - mLabelEditC->setEnabled(isEditEnabled); - mLabelEditD->setEnabled(isEditEnabled); - mEditA->setEnabled(isEditEnabled); - mEditB->setEnabled(isEditEnabled); - mEditC->setEnabled(isEditEnabled); - mEditD->setEnabled(isEditEnabled); - - mApplyEditsButton->setEnabled(isEditEnabled && (getMessagingState() == kMessagingComplete)); -} - -void LLFloaterPathfindingLinksets::updateEnableStateOnEditLinksetUse() -{ - BOOL useWalkable = FALSE; - BOOL useStaticObstacle = FALSE; - BOOL useDynamicObstacle = FALSE; - BOOL useMaterialVolume = FALSE; - BOOL useExclusionVolume = FALSE; - BOOL useDynamicPhantom = FALSE; - - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) - { - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - !(useWalkable && useStaticObstacle && useDynamicObstacle && useMaterialVolume && useExclusionVolume && useDynamicPhantom) && (selectedItemIter != selectedItems.end()); - ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); - llassert(linksetIter != mLinksetsListPtr->end()); - const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - - if (linksetPtr->isTerrain()) - { - useWalkable = TRUE; - } - else - { - if (linksetPtr->isModifiable()) - { - useWalkable = TRUE; - useStaticObstacle = TRUE; - useDynamicObstacle = TRUE; - useDynamicPhantom = TRUE; - if (linksetPtr->canBeVolume()) - { - useMaterialVolume = TRUE; - useExclusionVolume = TRUE; - } - } - else if (linksetPtr->isPhantom()) - { - useDynamicPhantom = TRUE; - if (linksetPtr->canBeVolume()) - { - useMaterialVolume = TRUE; - useExclusionVolume = TRUE; - } - } - else - { - useWalkable = TRUE; - useStaticObstacle = TRUE; - useDynamicObstacle = TRUE; - } - } - } - } - - mEditLinksetUseWalkable->setEnabled(useWalkable); - mEditLinksetUseStaticObstacle->setEnabled(useStaticObstacle); - mEditLinksetUseDynamicObstacle->setEnabled(useDynamicObstacle); - mEditLinksetUseMaterialVolume->setEnabled(useMaterialVolume); - mEditLinksetUseExclusionVolume->setEnabled(useExclusionVolume); - mEditLinksetUseDynamicPhantom->setEnabled(useDynamicPhantom); -} - -void LLFloaterPathfindingLinksets::applyEdit() -{ - LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); - - bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse); - bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse); - - if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) - { - LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse); - LLSD substitutions; - substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse); - substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); - - std::string notificationName; - if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning) - { - notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"; - } - else if (showUnmodifiablePhantomWarning) - { - notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted"; - } - else - { - notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume"; - } - LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2)); - } - else - { - doApplyEdit(); - } -} - -void LLFloaterPathfindingLinksets::handleApplyEdit(const LLSD &pNotification, const LLSD &pResponse) -{ - if (LLNotificationsUtil::getSelectedOption(pNotification, pResponse) == 0) - { - doApplyEdit(); - } -} - -void LLFloaterPathfindingLinksets::doApplyEdit() -{ - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) - { - LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); - const std::string &aString = mEditA->getText(); - const std::string &bString = mEditB->getText(); - const std::string &cString = mEditC->getText(); - const std::string &dString = mEditD->getText(); - S32 aValue = static_cast(atoi(aString.c_str())); - S32 bValue = static_cast(atoi(bString.c_str())); - S32 cValue = static_cast(atoi(cString.c_str())); - S32 dValue = static_cast(atoi(dString.c_str())); - - LLPathfindingLinksetListPtr editListPtr(new LLPathfindingLinksetList()); - for (std::vector::const_iterator itemIter = selectedItems.begin(); - itemIter != selectedItems.end(); ++itemIter) - { - const LLScrollListItem *listItem = *itemIter; - LLUUID uuid = listItem->getUUID(); - const std::string &uuidString = uuid.asString(); - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::iterator linksetIter = mLinksetsListPtr->find(uuidString); - llassert(linksetIter != mLinksetsListPtr->end()); - LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - editListPtr->insert(std::pair(uuidString, linksetPtr)); - } - - requestSetLinksets(editListPtr, linksetUse, aValue, bValue, cValue, dValue); - } -} - -std::string LLFloaterPathfindingLinksets::getLinksetUseString(LLPathfindingLinkset::ELinksetUse pLinksetUse) const -{ - std::string linksetUse; - - switch (pLinksetUse) - { - case LLPathfindingLinkset::kWalkable : - linksetUse = getString("linkset_use_walkable"); - break; - case LLPathfindingLinkset::kStaticObstacle : - linksetUse = getString("linkset_use_static_obstacle"); - break; - case LLPathfindingLinkset::kDynamicObstacle : - linksetUse = getString("linkset_use_dynamic_obstacle"); - break; - case LLPathfindingLinkset::kMaterialVolume : - linksetUse = getString("linkset_use_material_volume"); - break; - case LLPathfindingLinkset::kExclusionVolume : - linksetUse = getString("linkset_use_exclusion_volume"); - break; - case LLPathfindingLinkset::kDynamicPhantom : - linksetUse = getString("linkset_use_dynamic_phantom"); - break; - case LLPathfindingLinkset::kUnknown : - default : - linksetUse = getString("linkset_use_dynamic_obstacle"); - llassert(0); - break; - } - - return linksetUse; -} - -LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getFilterLinksetUse() const -{ - return convertToLinksetUse(mFilterByLinksetUse->getValue()); -} - -void LLFloaterPathfindingLinksets::setFilterLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse) -{ - mFilterByLinksetUse->setValue(convertToXuiValue(pLinksetUse)); -} - -LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getEditLinksetUse() const -{ - return convertToLinksetUse(mEditLinksetUse->getValue()); -} - -void LLFloaterPathfindingLinksets::setEditLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse) -{ - mEditLinksetUse->setValue(convertToXuiValue(pLinksetUse)); -} - -LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::convertToLinksetUse(LLSD pXuiValue) const -{ - LLPathfindingLinkset::ELinksetUse linkUse; - - switch (pXuiValue.asInteger()) - { - case XUI_LINKSET_USE_NONE : - linkUse = LLPathfindingLinkset::kUnknown; - break; - case XUI_LINKSET_USE_WALKABLE : - linkUse = LLPathfindingLinkset::kWalkable; - break; - case XUI_LINKSET_USE_STATIC_OBSTACLE : - linkUse = LLPathfindingLinkset::kStaticObstacle; - break; - case XUI_LINKSET_USE_DYNAMIC_OBSTACLE : - linkUse = LLPathfindingLinkset::kDynamicObstacle; - break; - case XUI_LINKSET_USE_MATERIAL_VOLUME : - linkUse = LLPathfindingLinkset::kMaterialVolume; - break; - case XUI_LINKSET_USE_EXCLUSION_VOLUME : - linkUse = LLPathfindingLinkset::kExclusionVolume; - break; - case XUI_LINKSET_USE_DYNAMIC_PHANTOM : - linkUse = LLPathfindingLinkset::kDynamicPhantom; - break; - default : - linkUse = LLPathfindingLinkset::kUnknown; - llassert(0); - break; - } - - return linkUse; -} - -LLSD LLFloaterPathfindingLinksets::convertToXuiValue(LLPathfindingLinkset::ELinksetUse pLinksetUse) const -{ - LLSD xuiValue; - - switch (pLinksetUse) - { - case LLPathfindingLinkset::kUnknown : - xuiValue = XUI_LINKSET_USE_NONE; - break; - case LLPathfindingLinkset::kWalkable : - xuiValue = XUI_LINKSET_USE_WALKABLE; - break; - case LLPathfindingLinkset::kStaticObstacle : - xuiValue = XUI_LINKSET_USE_STATIC_OBSTACLE; - break; - case LLPathfindingLinkset::kDynamicObstacle : - xuiValue = XUI_LINKSET_USE_DYNAMIC_OBSTACLE; - break; - case LLPathfindingLinkset::kMaterialVolume : - xuiValue = XUI_LINKSET_USE_MATERIAL_VOLUME; - break; - case LLPathfindingLinkset::kExclusionVolume : - xuiValue = XUI_LINKSET_USE_EXCLUSION_VOLUME; - break; - case LLPathfindingLinkset::kDynamicPhantom : - xuiValue = XUI_LINKSET_USE_DYNAMIC_PHANTOM; - break; - default : - xuiValue = XUI_LINKSET_USE_NONE; - llassert(0); - break; - } - - return xuiValue; -} +/** +* @file llfloaterpathfindinglinksets.cpp +* @author William Todd Stinson +* @brief "Pathfinding linksets" floater, allowing manipulation of the Havok AI pathfinding settings. +* +* $LicenseInfo:firstyear=2002&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2010, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" +#include "llfloater.h" +#include "llfloaterreg.h" +#include "llfloaterpathfindinglinksets.h" +#include "llsd.h" +#include "lluuid.h" +#include "v3math.h" +#include "lltextvalidate.h" +#include "llagent.h" +#include "lltextbase.h" +#include "lllineeditor.h" +#include "llscrolllistitem.h" +#include "llscrolllistctrl.h" +#include "llcombobox.h" +#include "llcheckboxctrl.h" +#include "llbutton.h" +#include "llresmgr.h" +#include "llviewerregion.h" +#include "llselectmgr.h" +#include "llviewermenu.h" +#include "llviewerobject.h" +#include "llviewerobjectlist.h" +#include "llpathfindinglinkset.h" +#include "llpathfindinglinksetlist.h" +#include "llpathfindingmanager.h" +#include "llnotificationsutil.h" +#include "llenvmanager.h" + +#include +#include + +#define XUI_LINKSET_USE_NONE 0 +#define XUI_LINKSET_USE_WALKABLE 1 +#define XUI_LINKSET_USE_STATIC_OBSTACLE 2 +#define XUI_LINKSET_USE_DYNAMIC_OBSTACLE 3 +#define XUI_LINKSET_USE_MATERIAL_VOLUME 4 +#define XUI_LINKSET_USE_EXCLUSION_VOLUME 5 +#define XUI_LINKSET_USE_DYNAMIC_PHANTOM 6 + +//--------------------------------------------------------------------------- +// LLFloaterPathfindingLinksets +//--------------------------------------------------------------------------- + +BOOL LLFloaterPathfindingLinksets::postBuild() +{ + childSetAction("apply_filters", boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); + childSetAction("clear_filters", boost::bind(&LLFloaterPathfindingLinksets::onClearFiltersClicked, this)); + + mFilterByName = findChild("filter_by_name"); + llassert(mFilterByName != NULL); + mFilterByName->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); + mFilterByName->setSelectAllonFocusReceived(true); + mFilterByName->setCommitOnFocusLost(true); + + mFilterByDescription = findChild("filter_by_description"); + llassert(mFilterByDescription != NULL); + mFilterByDescription->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); + mFilterByDescription->setSelectAllonFocusReceived(true); + mFilterByDescription->setCommitOnFocusLost(true); + + mFilterByLinksetUse = findChild("filter_by_linkset_use"); + llassert(mFilterByLinksetUse != NULL); + mFilterByLinksetUse->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); + + mLinksetsScrollList = findChild("pathfinding_linksets"); + llassert(mLinksetsScrollList != NULL); + mLinksetsScrollList->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onLinksetsSelectionChange, this)); + mLinksetsScrollList->sortByColumnIndex(0, true); + + mLinksetsStatus = findChild("linksets_status"); + llassert(mLinksetsStatus != NULL); + + mRefreshListButton = findChild("refresh_linksets_list"); + llassert(mRefreshListButton != NULL); + mRefreshListButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this)); + + mSelectAllButton = findChild("select_all_linksets"); + llassert(mSelectAllButton != NULL); + mSelectAllButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this)); + + mSelectNoneButton = findChild("select_none_linksets"); + llassert(mSelectNoneButton != NULL); + mSelectNoneButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this)); + + mShowBeaconCheckBox = findChild("show_beacon"); + llassert(mShowBeaconCheckBox != NULL); + + mTakeButton = findChild("take_linksets"); + llassert(mTakeButton != NULL); + mTakeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeClicked, this)); + + mTakeCopyButton = findChild("take_copy_linksets"); + llassert(mTakeCopyButton != NULL); + mTakeCopyButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeCopyClicked, this)); + + mReturnButton = findChild("return_linksets"); + llassert(mReturnButton != NULL); + mReturnButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onReturnClicked, this)); + + mDeleteButton = findChild("delete_linksets"); + llassert(mDeleteButton != NULL); + mDeleteButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onDeleteClicked, this)); + + mTeleportButton = findChild("teleport_me_to_linkset"); + llassert(mTeleportButton != NULL); + mTeleportButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTeleportClicked, this)); + + mEditLinksetUse = findChild("edit_linkset_use"); + llassert(mEditLinksetUse != NULL); + + mEditLinksetUse->clearRows(); + + mEditLinksetUseUnset = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getString("linkset_choose_use"), XUI_LINKSET_USE_NONE)); + llassert(mEditLinksetUseUnset != NULL); + + mEditLinksetUseWalkable = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kWalkable), XUI_LINKSET_USE_WALKABLE)); + llassert(mEditLinksetUseWalkable != NULL); + + mEditLinksetUseStaticObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kStaticObstacle), XUI_LINKSET_USE_STATIC_OBSTACLE)); + llassert(mEditLinksetUseStaticObstacle != NULL); + + mEditLinksetUseDynamicObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kDynamicObstacle), XUI_LINKSET_USE_DYNAMIC_OBSTACLE)); + llassert(mEditLinksetUseDynamicObstacle != NULL); + + mEditLinksetUseMaterialVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kMaterialVolume), XUI_LINKSET_USE_MATERIAL_VOLUME)); + llassert(mEditLinksetUseMaterialVolume != NULL); + + mEditLinksetUseExclusionVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kExclusionVolume), XUI_LINKSET_USE_EXCLUSION_VOLUME)); + llassert(mEditLinksetUseExclusionVolume != NULL); + + mEditLinksetUseDynamicPhantom = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kDynamicPhantom), XUI_LINKSET_USE_DYNAMIC_PHANTOM)); + llassert(mEditLinksetUseDynamicPhantom != NULL); + + mEditLinksetUse->selectFirstItem(); + + mLabelWalkabilityCoefficients = findChild("walkability_coefficients_label"); + llassert(mLabelWalkabilityCoefficients != NULL); + + mLabelEditA = findChild("edit_a_label"); + llassert(mLabelEditA != NULL); + + mEditA = findChild("edit_a_value"); + llassert(mEditA != NULL); + mEditA->setPrevalidate(LLTextValidate::validateNonNegativeS32); + mEditA->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); + + mLabelEditB = findChild("edit_b_label"); + llassert(mLabelEditB != NULL); + + mEditB = findChild("edit_b_value"); + llassert(mEditB != NULL); + mEditB->setPrevalidate(LLTextValidate::validateNonNegativeS32); + mEditB->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); + + mLabelEditC = findChild("edit_c_label"); + llassert(mLabelEditC != NULL); + + mEditC = findChild("edit_c_value"); + llassert(mEditC != NULL); + mEditC->setPrevalidate(LLTextValidate::validateNonNegativeS32); + mEditC->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); + + mLabelEditD = findChild("edit_d_label"); + llassert(mLabelEditD != NULL); + + mEditD = findChild("edit_d_value"); + llassert(mEditD != NULL); + mEditD->setPrevalidate(LLTextValidate::validateNonNegativeS32); + mEditD->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1)); + + mApplyEditsButton = findChild("apply_edit_values"); + llassert(mApplyEditsButton != NULL); + mApplyEditsButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); + + return LLFloater::postBuild(); +} + +void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) +{ + LLFloater::onOpen(pKey); + + requestGetLinksets(); + selectNoneLinksets(); + mLinksetsScrollList->setCommitOnSelectionChange(true); + + if (!mAgentStateSlot.connected()) + { + mAgentStateSlot = LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateCB, this, _1)); + } + + if (!mSelectionUpdateSlot.connected()) + { + mSelectionUpdateSlot = LLSelectMgr::getInstance()->mUpdateSignal.connect(boost::bind(&LLFloaterPathfindingLinksets::updateControls, this)); + } + + if (!mRegionBoundarySlot.connected()) + { + mRegionBoundarySlot = LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterPathfindingLinksets::onRegionBoundaryCross, this)); + } +} + +void LLFloaterPathfindingLinksets::onClose(bool pAppQuitting) +{ + if (mRegionBoundarySlot.connected()) + { + mRegionBoundarySlot.disconnect(); + } + + if (mSelectionUpdateSlot.connected()) + { + mSelectionUpdateSlot.disconnect(); + } + + if (mAgentStateSlot.connected()) + { + mAgentStateSlot.disconnect(); + } + + mLinksetsScrollList->setCommitOnSelectionChange(false); + selectNoneLinksets(); + if (mLinksetsSelection.notNull()) + { + mLinksetsSelection.clear(); + } + + LLFloater::onClose(pAppQuitting); +} + +void LLFloaterPathfindingLinksets::draw() +{ + if (mShowBeaconCheckBox->get()) + { + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + int numSelectedItems = selectedItems.size(); + + std::vector viewerObjects; + viewerObjects.reserve(numSelectedItems); + + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + selectedItemIter != selectedItems.end(); ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + + LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); + if (viewerObject != NULL) + { + const std::string &objectName = selectedItem->getColumn(0)->getValue().asString(); + gObjectList.addDebugBeacon(viewerObject->getPositionAgent(), objectName, LLColor4(0.f, 0.f, 1.f, 0.8f), LLColor4(1.f, 1.f, 1.f, 1.f), 6); + } + } + } + } + + LLFloater::draw(); +} + +void LLFloaterPathfindingLinksets::openLinksetsEditor() +{ + LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); +} + +LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) + : LLFloater(pSeed), + mFilterByName(NULL), + mFilterByDescription(NULL), + mFilterByLinksetUse(NULL), + mLinksetsScrollList(NULL), + mLinksetsStatus(NULL), + mRefreshListButton(NULL), + mSelectAllButton(NULL), + mSelectNoneButton(NULL), + mShowBeaconCheckBox(NULL), + mTakeButton(NULL), + mTakeCopyButton(NULL), + mReturnButton(NULL), + mDeleteButton(NULL), + mTeleportButton(NULL), + mEditLinksetUse(NULL), + mLabelWalkabilityCoefficients(NULL), + mLabelEditA(NULL), + mEditA(NULL), + mLabelEditB(NULL), + mEditB(NULL), + mLabelEditC(NULL), + mEditC(NULL), + mLabelEditD(NULL), + mEditD(NULL), + mApplyEditsButton(NULL), + mMessagingState(kMessagingUnknown), + mMessagingRequestId(0U), + mLinksetsListPtr(), + mLinksetsSelection(), + mAgentStateSlot(), + mSelectionUpdateSlot() +{ +} + +LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() +{ +} + +LLFloaterPathfindingLinksets::EMessagingState LLFloaterPathfindingLinksets::getMessagingState() const +{ + return mMessagingState; +} + +void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingState) +{ + mMessagingState = pMessagingState; + updateControls(); +} + +void LLFloaterPathfindingLinksets::requestGetLinksets() +{ + switch (LLPathfindingManager::getInstance()->requestGetLinksets(++mMessagingRequestId, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2, _3))) + { + case LLPathfindingManager::kRequestStarted : + setMessagingState(kMessagingGetRequestSent); + break; + case LLPathfindingManager::kRequestCompleted : + clearLinksets(); + setMessagingState(kMessagingComplete); + break; + case LLPathfindingManager::kRequestNotEnabled : + clearLinksets(); + setMessagingState(kMessagingNotEnabled); + break; + case LLPathfindingManager::kRequestError : + setMessagingState(kMessagingGetError); + break; + default : + setMessagingState(kMessagingGetError); + llassert(0); + break; + } +} + +void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) +{ + switch (LLPathfindingManager::getInstance()->requestSetLinksets(++mMessagingRequestId, pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2, _3))) + { + case LLPathfindingManager::kRequestStarted : + setMessagingState(kMessagingSetRequestSent); + break; + case LLPathfindingManager::kRequestCompleted : + setMessagingState(kMessagingComplete); + break; + case LLPathfindingManager::kRequestNotEnabled : + clearLinksets(); + setMessagingState(kMessagingNotEnabled); + break; + case LLPathfindingManager::kRequestError : + setMessagingState(kMessagingSetError); + break; + default : + setMessagingState(kMessagingSetError); + llassert(0); + break; + } +} + +void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) +{ + llassert(pRequestId <= mMessagingRequestId); + if (pRequestId == mMessagingRequestId) + { + mLinksetsListPtr = pLinksetsListPtr; + updateScrollList(); + + switch (pLinksetsRequestStatus) + { + case LLPathfindingManager::kRequestCompleted : + setMessagingState(kMessagingComplete); + break; + case LLPathfindingManager::kRequestError : + setMessagingState(kMessagingGetError); + break; + default : + setMessagingState(kMessagingGetError); + llassert(0); + break; + } + } +} + +void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) +{ + llassert(pRequestId <= mMessagingRequestId); + if (pRequestId == mMessagingRequestId) + { + if (mLinksetsListPtr == NULL) + { + mLinksetsListPtr = pLinksetsListPtr; + } + else + { + mLinksetsListPtr->update(*pLinksetsListPtr); + } + updateScrollList(); + + switch (pLinksetsRequestStatus) + { + case LLPathfindingManager::kRequestCompleted : + setMessagingState(kMessagingComplete); + break; + case LLPathfindingManager::kRequestError : + setMessagingState(kMessagingSetError); + break; + default : + setMessagingState(kMessagingSetError); + llassert(0); + break; + } + } +} + +void LLFloaterPathfindingLinksets::onApplyAllFilters() +{ + applyFilters(); +} + +void LLFloaterPathfindingLinksets::onClearFiltersClicked() +{ + clearFilters(); +} + +void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() +{ + mLinksetsSelection.clear(); + LLSelectMgr::getInstance()->deselectAll(); + + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + int numSelectedItems = selectedItems.size(); + + std::vectorviewerObjects; + viewerObjects.reserve(numSelectedItems); + + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + selectedItemIter != selectedItems.end(); ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + + LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); + if (viewerObject != NULL) + { + viewerObjects.push_back(viewerObject); + } + } + + if (!viewerObjects.empty()) + { + mLinksetsSelection = LLSelectMgr::getInstance()->selectObjectAndFamily(viewerObjects); + } + } + + updateEditFieldValues(); + updateControls(); +} + +void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() +{ + requestGetLinksets(); +} + +void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() +{ + selectAllLinksets(); +} + +void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() +{ + selectNoneLinksets(); +} + +void LLFloaterPathfindingLinksets::onTakeClicked() +{ + handle_take(); +} + +void LLFloaterPathfindingLinksets::onTakeCopyClicked() +{ + handle_take_copy(); +} + +void LLFloaterPathfindingLinksets::onReturnClicked() +{ + handle_object_return(); +} + +void LLFloaterPathfindingLinksets::onDeleteClicked() +{ + handle_object_delete(); +} + +void LLFloaterPathfindingLinksets::onTeleportClicked() +{ + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + llassert(selectedItems.size() == 1); + if (selectedItems.size() == 1) + { + std::vector::const_reference selectedItemRef = selectedItems.front(); + const LLScrollListItem *selectedItem = selectedItemRef; + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); + const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + const LLVector3 &linksetLocation = linksetPtr->getLocation(); + + LLViewerRegion* region = gAgent.getRegion(); + if (region != NULL) + { + gAgent.teleportRequest(region->getHandle(), linksetLocation, true); + } + } +} + +void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl) +{ + LLLineEditor *pLineEditor = static_cast(pUICtrl); + llassert(pLineEditor != NULL); + + const std::string &valueString = pLineEditor->getText(); + S32 value = static_cast(atoi(valueString.c_str())); + + if ((value < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (value > LLPathfindingLinkset::MAX_WALKABILITY_VALUE)) + { + value = llclamp(value, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE); + pLineEditor->setValue(LLSD(value)); + } +} + +void LLFloaterPathfindingLinksets::onApplyChangesClicked() +{ + applyEdit(); +} + +void LLFloaterPathfindingLinksets::onAgentStateCB(LLPathfindingManager::EAgentState pAgentState) +{ + updateControls(); +} + +void LLFloaterPathfindingLinksets::onRegionBoundaryCross() +{ + requestGetLinksets(); +} + +void LLFloaterPathfindingLinksets::applyFilters() +{ + updateScrollList(); +} + +void LLFloaterPathfindingLinksets::clearFilters() +{ + mFilterByName->clear(); + mFilterByDescription->clear(); + setFilterLinksetUse(LLPathfindingLinkset::kUnknown); + updateScrollList(); +} + +void LLFloaterPathfindingLinksets::selectAllLinksets() +{ + mLinksetsScrollList->selectAll(); +} + +void LLFloaterPathfindingLinksets::selectNoneLinksets() +{ + mLinksetsScrollList->deselectAllItems(); +} + +void LLFloaterPathfindingLinksets::clearLinksets() +{ + if (mLinksetsListPtr != NULL) + { + mLinksetsListPtr->clear(); + } + updateScrollList(); +} + +void LLFloaterPathfindingLinksets::updateControls() +{ + updateStatusMessage(); + updateEnableStateOnListActions(); + updateEnableStateOnEditFields(); +} + +void LLFloaterPathfindingLinksets::updateEditFieldValues() +{ + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + int numSelectedItems = selectedItems.size(); + if (numSelectedItems <= 0) + { + mEditLinksetUse->selectFirstItem(); + mEditA->clear(); + mEditB->clear(); + mEditC->clear(); + mEditD->clear(); + } + else + { + LLScrollListItem *firstItem = selectedItems.front(); + + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(firstItem->getUUID().asString()); + const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); + + setEditLinksetUse(linksetPtr->getLinksetUse()); + mEditA->setValue(LLSD(linksetPtr->getWalkabilityCoefficientA())); + mEditB->setValue(LLSD(linksetPtr->getWalkabilityCoefficientB())); + mEditC->setValue(LLSD(linksetPtr->getWalkabilityCoefficientC())); + mEditD->setValue(LLSD(linksetPtr->getWalkabilityCoefficientD())); + updateEnableStateOnEditLinksetUse(); + } +} + +void LLFloaterPathfindingLinksets::updateScrollList() +{ + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + int numSelectedItems = selectedItems.size(); + uuid_vec_t selectedUUIDs; + if (numSelectedItems > 0) + { + selectedUUIDs.reserve(selectedItems.size()); + for (std::vector::const_iterator itemIter = selectedItems.begin(); + itemIter != selectedItems.end(); ++itemIter) + { + const LLScrollListItem *listItem = *itemIter; + selectedUUIDs.push_back(listItem->getUUID()); + } + } + + S32 origScrollPosition = mLinksetsScrollList->getScrollPos(); + mLinksetsScrollList->deleteAllItems(); + + if (mLinksetsListPtr != NULL) + { + std::string nameFilter = mFilterByName->getText(); + std::string descriptionFilter = mFilterByDescription->getText(); + LLPathfindingLinkset::ELinksetUse linksetUseFilter = getFilterLinksetUse(); + bool isFilteringName = !nameFilter.empty(); + bool isFilteringDescription = !descriptionFilter.empty(); + bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); + + const LLVector3& avatarPosition = gAgent.getPositionAgent(); + + if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) + { + LLStringUtil::toUpper(nameFilter); + LLStringUtil::toUpper(descriptionFilter); + for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); + linksetIter != mLinksetsListPtr->end(); ++linksetIter) + { + const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); + std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName()); + std::string linksetDescription = linksetPtr->getDescription(); + LLStringUtil::toUpper(linksetName); + LLStringUtil::toUpper(linksetDescription); + if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) && + (!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) && + (!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter))) + { + LLSD element = buildLinksetScrollListElement(linksetPtr, avatarPosition); + mLinksetsScrollList->addElement(element); + } + } + } + else + { + for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); + linksetIter != mLinksetsListPtr->end(); ++linksetIter) + { + const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); + LLSD element = buildLinksetScrollListElement(linksetPtr, avatarPosition); + mLinksetsScrollList->addElement(element); + } + } + } + + mLinksetsScrollList->selectMultiple(selectedUUIDs); + mLinksetsScrollList->setScrollPos(origScrollPosition); + updateEditFieldValues(); + updateControls(); +} + +LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfindingLinksetPtr pLinksetPtr, const LLVector3 &pAvatarPosition) const +{ + LLSD columns; + + if (pLinksetPtr->isTerrain()) + { + columns[0]["column"] = "name"; + columns[0]["value"] = getString("linkset_terrain_name"); + columns[0]["font"] = "SANSSERIF"; + + columns[1]["column"] = "description"; + columns[1]["value"] = getString("linkset_terrain_description"); + columns[1]["font"] = "SANSSERIF"; + + columns[2]["column"] = "land_impact"; + columns[2]["value"] = getString("linkset_terrain_land_impact"); + columns[2]["font"] = "SANSSERIF"; + + columns[3]["column"] = "dist_from_you"; + columns[3]["value"] = getString("linkset_terrain_dist_from_you"); + columns[3]["font"] = "SANSSERIF"; + } + else + { + columns[0]["column"] = "name"; + columns[0]["value"] = pLinksetPtr->getName(); + columns[0]["font"] = "SANSSERIF"; + + columns[1]["column"] = "description"; + columns[1]["value"] = pLinksetPtr->getDescription(); + columns[1]["font"] = "SANSSERIF"; + + columns[2]["column"] = "land_impact"; + columns[2]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + columns[2]["font"] = "SANSSERIF"; + + columns[3]["column"] = "dist_from_you"; + columns[3]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); + columns[3]["font"] = "SANSSERIF"; + } + + columns[4]["column"] = "linkset_use"; + std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse()); + if (pLinksetPtr->isTerrain()) + { + linksetUse += (" " + getString("linkset_is_terrain")); + } + else if (!pLinksetPtr->isModifiable() && pLinksetPtr->canBeVolume()) + { + linksetUse += (" " + getString("linkset_is_restricted_state")); + } + else if (pLinksetPtr->isModifiable() && !pLinksetPtr->canBeVolume()) + { + linksetUse += (" " + getString("linkset_is_non_volume_state")); + } + else if (!pLinksetPtr->isModifiable() && !pLinksetPtr->canBeVolume()) + { + linksetUse += (" " + getString("linkset_is_restricted_non_volume_state")); + } + columns[4]["value"] = linksetUse; + columns[4]["font"] = "SANSSERIF"; + + columns[5]["column"] = "a_percent"; + columns[5]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); + columns[5]["font"] = "SANSSERIF"; + + columns[6]["column"] = "b_percent"; + columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); + columns[6]["font"] = "SANSSERIF"; + + columns[7]["column"] = "c_percent"; + columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); + columns[7]["font"] = "SANSSERIF"; + + columns[8]["column"] = "d_percent"; + columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); + columns[8]["font"] = "SANSSERIF"; + + LLSD element; + element["id"] = pLinksetPtr->getUUID().asString(); + element["column"] = columns; + + return element; +} + +LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListElement(const std::string &label, S32 value) const +{ + LLSD columns; + + columns[0]["column"] = "name"; + columns[0]["relwidth"] = static_cast(100.0f); + columns[0]["value"] = label; + columns[0]["font"] = "SANSSERIF"; + + LLSD element; + element["value"] = value; + element["column"] = columns; + + return element; +} + +bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const +{ + bool showWarning = false; + + if (linksetUse != LLPathfindingLinkset::kUnknown) + { + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + !showWarning && (selectedItemIter != selectedItems.end()); ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); + llassert(linksetIter != mLinksetsListPtr->end()); + const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + showWarning = linksetPtr->isShowUnmodifiablePhantomWarning(linksetUse); + } + } + } + + return showWarning; +} + +bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const +{ + bool showWarning = false; + + if (linksetUse != LLPathfindingLinkset::kUnknown) + { + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + !showWarning && (selectedItemIter != selectedItems.end()); ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); + llassert(linksetIter != mLinksetsListPtr->end()); + const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + showWarning = linksetPtr->isShowCannotBeVolumeWarning(linksetUse); + } + } + } + + return showWarning; +} + +void LLFloaterPathfindingLinksets::updateStatusMessage() +{ + static const LLColor4 errorColor = LLUIColorTable::instance().getColor("PathfindingErrorColor"); + static const LLColor4 warningColor = LLUIColorTable::instance().getColor("PathfindingWarningColor"); + + std::string statusText(""); + LLStyle::Params styleParams; + + switch (getMessagingState()) + { + case kMessagingUnknown: + statusText = getString("linksets_messaging_initial"); + styleParams.color = errorColor; + break; + case kMessagingGetRequestSent : + statusText = getString("linksets_messaging_get_inprogress"); + styleParams.color = warningColor; + break; + case kMessagingGetError : + statusText = getString("linksets_messaging_get_error"); + styleParams.color = errorColor; + break; + case kMessagingSetRequestSent : + statusText = getString("linksets_messaging_set_inprogress"); + styleParams.color = warningColor; + break; + case kMessagingSetError : + statusText = getString("linksets_messaging_set_error"); + styleParams.color = errorColor; + break; + case kMessagingComplete : + if (mLinksetsScrollList->isEmpty()) + { + statusText = getString("linksets_messaging_complete_none_found"); + } + else + { + S32 numItems = mLinksetsScrollList->getItemCount(); + S32 numSelectedItems = mLinksetsScrollList->getNumSelected(); + + LLLocale locale(LLStringUtil::getLocale()); + std::string numItemsString; + LLResMgr::getInstance()->getIntegerString(numItemsString, numItems); + + std::string numSelectedItemsString; + LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems); + + LLStringUtil::format_map_t string_args; + string_args["[NUM_SELECTED]"] = numSelectedItemsString; + string_args["[NUM_TOTAL]"] = numItemsString; + statusText = getString("linksets_messaging_complete_available", string_args); + } + break; + case kMessagingNotEnabled : + statusText = getString("linksets_messaging_not_enabled"); + styleParams.color = errorColor; + break; + default: + statusText = getString("linksets_messaging_initial"); + styleParams.color = errorColor; + llassert(0); + break; + } + + mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams); +} + +void LLFloaterPathfindingLinksets::updateEnableStateOnListActions() +{ + switch (getMessagingState()) + { + case kMessagingUnknown: + case kMessagingGetRequestSent : + case kMessagingSetRequestSent : + mRefreshListButton->setEnabled(FALSE); + mSelectAllButton->setEnabled(FALSE); + mSelectNoneButton->setEnabled(FALSE); + break; + case kMessagingGetError : + case kMessagingSetError : + case kMessagingNotEnabled : + mRefreshListButton->setEnabled(TRUE); + mSelectAllButton->setEnabled(FALSE); + mSelectNoneButton->setEnabled(FALSE); + break; + case kMessagingComplete : + { + int numItems = mLinksetsScrollList->getItemCount(); + int numSelectedItems = mLinksetsScrollList->getNumSelected(); + mRefreshListButton->setEnabled(TRUE); + mSelectAllButton->setEnabled(numSelectedItems < numItems); + mSelectNoneButton->setEnabled(numSelectedItems > 0); + } + break; + default: + llassert(0); + break; + } +} + +void LLFloaterPathfindingLinksets::updateEnableStateOnEditFields() +{ + int numSelectedItems = mLinksetsScrollList->getNumSelected(); + bool isEditEnabled = ((numSelectedItems > 0) && LLPathfindingManager::getInstance()->isAllowAlterPermanent()); + + mShowBeaconCheckBox->setEnabled(numSelectedItems > 0); + mTakeButton->setEnabled(isEditEnabled && visible_take_object()); + mTakeCopyButton->setEnabled(isEditEnabled && enable_object_take_copy()); + mReturnButton->setEnabled(isEditEnabled && enable_object_return()); + mDeleteButton->setEnabled(isEditEnabled && enable_object_delete()); + mTeleportButton->setEnabled(numSelectedItems == 1); + + mEditLinksetUse->setEnabled(isEditEnabled); + + mLabelWalkabilityCoefficients->setEnabled(isEditEnabled); + mLabelEditA->setEnabled(isEditEnabled); + mLabelEditB->setEnabled(isEditEnabled); + mLabelEditC->setEnabled(isEditEnabled); + mLabelEditD->setEnabled(isEditEnabled); + mEditA->setEnabled(isEditEnabled); + mEditB->setEnabled(isEditEnabled); + mEditC->setEnabled(isEditEnabled); + mEditD->setEnabled(isEditEnabled); + + mApplyEditsButton->setEnabled(isEditEnabled && (getMessagingState() == kMessagingComplete)); +} + +void LLFloaterPathfindingLinksets::updateEnableStateOnEditLinksetUse() +{ + BOOL useWalkable = FALSE; + BOOL useStaticObstacle = FALSE; + BOOL useDynamicObstacle = FALSE; + BOOL useMaterialVolume = FALSE; + BOOL useExclusionVolume = FALSE; + BOOL useDynamicPhantom = FALSE; + + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); + !(useWalkable && useStaticObstacle && useDynamicObstacle && useMaterialVolume && useExclusionVolume && useDynamicPhantom) && (selectedItemIter != selectedItems.end()); + ++selectedItemIter) + { + const LLScrollListItem *selectedItem = *selectedItemIter; + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); + llassert(linksetIter != mLinksetsListPtr->end()); + const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + + if (linksetPtr->isTerrain()) + { + useWalkable = TRUE; + } + else + { + if (linksetPtr->isModifiable()) + { + useWalkable = TRUE; + useStaticObstacle = TRUE; + useDynamicObstacle = TRUE; + useDynamicPhantom = TRUE; + if (linksetPtr->canBeVolume()) + { + useMaterialVolume = TRUE; + useExclusionVolume = TRUE; + } + } + else if (linksetPtr->isPhantom()) + { + useDynamicPhantom = TRUE; + if (linksetPtr->canBeVolume()) + { + useMaterialVolume = TRUE; + useExclusionVolume = TRUE; + } + } + else + { + useWalkable = TRUE; + useStaticObstacle = TRUE; + useDynamicObstacle = TRUE; + } + } + } + } + + mEditLinksetUseWalkable->setEnabled(useWalkable); + mEditLinksetUseStaticObstacle->setEnabled(useStaticObstacle); + mEditLinksetUseDynamicObstacle->setEnabled(useDynamicObstacle); + mEditLinksetUseMaterialVolume->setEnabled(useMaterialVolume); + mEditLinksetUseExclusionVolume->setEnabled(useExclusionVolume); + mEditLinksetUseDynamicPhantom->setEnabled(useDynamicPhantom); +} + +void LLFloaterPathfindingLinksets::applyEdit() +{ + LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); + + bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse); + bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse); + + if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) + { + LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse); + LLSD substitutions; + substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse); + substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); + + std::string notificationName; + if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning) + { + notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"; + } + else if (showUnmodifiablePhantomWarning) + { + notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted"; + } + else + { + notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume"; + } + LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2)); + } + else + { + doApplyEdit(); + } +} + +void LLFloaterPathfindingLinksets::handleApplyEdit(const LLSD &pNotification, const LLSD &pResponse) +{ + if (LLNotificationsUtil::getSelectedOption(pNotification, pResponse) == 0) + { + doApplyEdit(); + } +} + +void LLFloaterPathfindingLinksets::doApplyEdit() +{ + std::vector selectedItems = mLinksetsScrollList->getAllSelected(); + if (!selectedItems.empty()) + { + LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); + const std::string &aString = mEditA->getText(); + const std::string &bString = mEditB->getText(); + const std::string &cString = mEditC->getText(); + const std::string &dString = mEditD->getText(); + S32 aValue = static_cast(atoi(aString.c_str())); + S32 bValue = static_cast(atoi(bString.c_str())); + S32 cValue = static_cast(atoi(cString.c_str())); + S32 dValue = static_cast(atoi(dString.c_str())); + + LLPathfindingLinksetListPtr editListPtr(new LLPathfindingLinksetList()); + for (std::vector::const_iterator itemIter = selectedItems.begin(); + itemIter != selectedItems.end(); ++itemIter) + { + const LLScrollListItem *listItem = *itemIter; + LLUUID uuid = listItem->getUUID(); + const std::string &uuidString = uuid.asString(); + llassert(mLinksetsListPtr != NULL); + LLPathfindingLinksetList::iterator linksetIter = mLinksetsListPtr->find(uuidString); + llassert(linksetIter != mLinksetsListPtr->end()); + LLPathfindingLinksetPtr linksetPtr = linksetIter->second; + editListPtr->insert(std::pair(uuidString, linksetPtr)); + } + + requestSetLinksets(editListPtr, linksetUse, aValue, bValue, cValue, dValue); + } +} + +std::string LLFloaterPathfindingLinksets::getLinksetUseString(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ + std::string linksetUse; + + switch (pLinksetUse) + { + case LLPathfindingLinkset::kWalkable : + linksetUse = getString("linkset_use_walkable"); + break; + case LLPathfindingLinkset::kStaticObstacle : + linksetUse = getString("linkset_use_static_obstacle"); + break; + case LLPathfindingLinkset::kDynamicObstacle : + linksetUse = getString("linkset_use_dynamic_obstacle"); + break; + case LLPathfindingLinkset::kMaterialVolume : + linksetUse = getString("linkset_use_material_volume"); + break; + case LLPathfindingLinkset::kExclusionVolume : + linksetUse = getString("linkset_use_exclusion_volume"); + break; + case LLPathfindingLinkset::kDynamicPhantom : + linksetUse = getString("linkset_use_dynamic_phantom"); + break; + case LLPathfindingLinkset::kUnknown : + default : + linksetUse = getString("linkset_use_dynamic_obstacle"); + llassert(0); + break; + } + + return linksetUse; +} + +LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getFilterLinksetUse() const +{ + return convertToLinksetUse(mFilterByLinksetUse->getValue()); +} + +void LLFloaterPathfindingLinksets::setFilterLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse) +{ + mFilterByLinksetUse->setValue(convertToXuiValue(pLinksetUse)); +} + +LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getEditLinksetUse() const +{ + return convertToLinksetUse(mEditLinksetUse->getValue()); +} + +void LLFloaterPathfindingLinksets::setEditLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse) +{ + mEditLinksetUse->setValue(convertToXuiValue(pLinksetUse)); +} + +LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::convertToLinksetUse(LLSD pXuiValue) const +{ + LLPathfindingLinkset::ELinksetUse linkUse; + + switch (pXuiValue.asInteger()) + { + case XUI_LINKSET_USE_NONE : + linkUse = LLPathfindingLinkset::kUnknown; + break; + case XUI_LINKSET_USE_WALKABLE : + linkUse = LLPathfindingLinkset::kWalkable; + break; + case XUI_LINKSET_USE_STATIC_OBSTACLE : + linkUse = LLPathfindingLinkset::kStaticObstacle; + break; + case XUI_LINKSET_USE_DYNAMIC_OBSTACLE : + linkUse = LLPathfindingLinkset::kDynamicObstacle; + break; + case XUI_LINKSET_USE_MATERIAL_VOLUME : + linkUse = LLPathfindingLinkset::kMaterialVolume; + break; + case XUI_LINKSET_USE_EXCLUSION_VOLUME : + linkUse = LLPathfindingLinkset::kExclusionVolume; + break; + case XUI_LINKSET_USE_DYNAMIC_PHANTOM : + linkUse = LLPathfindingLinkset::kDynamicPhantom; + break; + default : + linkUse = LLPathfindingLinkset::kUnknown; + llassert(0); + break; + } + + return linkUse; +} + +LLSD LLFloaterPathfindingLinksets::convertToXuiValue(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ + LLSD xuiValue; + + switch (pLinksetUse) + { + case LLPathfindingLinkset::kUnknown : + xuiValue = XUI_LINKSET_USE_NONE; + break; + case LLPathfindingLinkset::kWalkable : + xuiValue = XUI_LINKSET_USE_WALKABLE; + break; + case LLPathfindingLinkset::kStaticObstacle : + xuiValue = XUI_LINKSET_USE_STATIC_OBSTACLE; + break; + case LLPathfindingLinkset::kDynamicObstacle : + xuiValue = XUI_LINKSET_USE_DYNAMIC_OBSTACLE; + break; + case LLPathfindingLinkset::kMaterialVolume : + xuiValue = XUI_LINKSET_USE_MATERIAL_VOLUME; + break; + case LLPathfindingLinkset::kExclusionVolume : + xuiValue = XUI_LINKSET_USE_EXCLUSION_VOLUME; + break; + case LLPathfindingLinkset::kDynamicPhantom : + xuiValue = XUI_LINKSET_USE_DYNAMIC_PHANTOM; + break; + default : + xuiValue = XUI_LINKSET_USE_NONE; + llassert(0); + break; + } + + return xuiValue; +} -- cgit v1.2.3 From 852377c676bc3a8183073e41357499f06f40fb1b Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 1 May 2012 14:22:58 -0700 Subject: Switching the functionality of the linksets and character request handling to no longer return values directly, but rather to report status only through the callbacks. --- indra/newview/llfloaterpathfindinglinksets.cpp | 78 +++++++++----------------- 1 file changed, 27 insertions(+), 51 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 240b5bb741..8313226817 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -341,51 +341,12 @@ void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingS void LLFloaterPathfindingLinksets::requestGetLinksets() { - switch (LLPathfindingManager::getInstance()->requestGetLinksets(++mMessagingRequestId, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2, _3))) - { - case LLPathfindingManager::kRequestStarted : - setMessagingState(kMessagingGetRequestSent); - break; - case LLPathfindingManager::kRequestCompleted : - clearLinksets(); - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestNotEnabled : - clearLinksets(); - setMessagingState(kMessagingNotEnabled); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingGetError); - break; - default : - setMessagingState(kMessagingGetError); - llassert(0); - break; - } + LLPathfindingManager::getInstance()->requestGetLinksets(++mMessagingRequestId, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2, _3)); } void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) { - switch (LLPathfindingManager::getInstance()->requestSetLinksets(++mMessagingRequestId, pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2, _3))) - { - case LLPathfindingManager::kRequestStarted : - setMessagingState(kMessagingSetRequestSent); - break; - case LLPathfindingManager::kRequestCompleted : - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestNotEnabled : - clearLinksets(); - setMessagingState(kMessagingNotEnabled); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingSetError); - break; - default : - setMessagingState(kMessagingSetError); - llassert(0); - break; - } + LLPathfindingManager::getInstance()->requestSetLinksets(++mMessagingRequestId, pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2, _3)); } void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) @@ -398,9 +359,18 @@ void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::reque switch (pLinksetsRequestStatus) { + case LLPathfindingManager::kRequestStarted : + setMessagingState(kMessagingGetRequestSent); + break; case LLPathfindingManager::kRequestCompleted : + mLinksetsListPtr = pLinksetsListPtr; + updateScrollList(); setMessagingState(kMessagingComplete); break; + case LLPathfindingManager::kRequestNotEnabled : + clearLinksets(); + setMessagingState(kMessagingNotEnabled); + break; case LLPathfindingManager::kRequestError : setMessagingState(kMessagingGetError); break; @@ -417,21 +387,27 @@ void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::re llassert(pRequestId <= mMessagingRequestId); if (pRequestId == mMessagingRequestId) { - if (mLinksetsListPtr == NULL) - { - mLinksetsListPtr = pLinksetsListPtr; - } - else - { - mLinksetsListPtr->update(*pLinksetsListPtr); - } - updateScrollList(); - switch (pLinksetsRequestStatus) { + case LLPathfindingManager::kRequestStarted : + setMessagingState(kMessagingSetRequestSent); + break; case LLPathfindingManager::kRequestCompleted : + if (mLinksetsListPtr == NULL) + { + mLinksetsListPtr = pLinksetsListPtr; + } + else + { + mLinksetsListPtr->update(*pLinksetsListPtr); + } + updateScrollList(); setMessagingState(kMessagingComplete); break; + case LLPathfindingManager::kRequestNotEnabled : + clearLinksets(); + setMessagingState(kMessagingNotEnabled); + break; case LLPathfindingManager::kRequestError : setMessagingState(kMessagingSetError); break; -- cgit v1.2.3 From c997d4399a5a677fdfed935b727af8d0e18281dc Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 7 May 2012 15:53:36 -0700 Subject: PATh-621: BUGFIX Fixing an issue where attempting to apply changes from the pathfinding linksets floater with no real data changes causes a viewer crash. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 8313226817..37c501b442 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -397,7 +397,7 @@ void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::re { mLinksetsListPtr = pLinksetsListPtr; } - else + else if (pLinksetsListPtr != NULL) { mLinksetsListPtr->update(*pLinksetsListPtr); } -- cgit v1.2.3 From d4e5e180f82a8d959b88cc3eb1f69a3fff238d6a Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 9 May 2012 18:04:45 -0700 Subject: Adding an owner field to the pathfinding linksets console. Making the scroll list just wide enough for the additional field, but not cleaning up the rest of the floater until Leo has a chance to review. --- indra/newview/llfloaterpathfindinglinksets.cpp | 48 +++++++++++++++----------- 1 file changed, 28 insertions(+), 20 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 37c501b442..746601bdbb 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -701,13 +701,17 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfin columns[1]["value"] = getString("linkset_terrain_description"); columns[1]["font"] = "SANSSERIF"; - columns[2]["column"] = "land_impact"; - columns[2]["value"] = getString("linkset_terrain_land_impact"); + columns[2]["column"] = "owner"; + columns[2]["value"] = getString("linkset_terrain_owner"); columns[2]["font"] = "SANSSERIF"; - columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = getString("linkset_terrain_dist_from_you"); + columns[3]["column"] = "land_impact"; + columns[3]["value"] = getString("linkset_terrain_land_impact"); columns[3]["font"] = "SANSSERIF"; + + columns[4]["column"] = "dist_from_you"; + columns[4]["value"] = getString("linkset_terrain_dist_from_you"); + columns[4]["font"] = "SANSSERIF"; } else { @@ -719,16 +723,20 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfin columns[1]["value"] = pLinksetPtr->getDescription(); columns[1]["font"] = "SANSSERIF"; - columns[2]["column"] = "land_impact"; - columns[2]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + columns[2]["column"] = "owner"; + columns[2]["value"] = (pLinksetPtr->hasOwnerName() ? pLinksetPtr->getOwnerName() : getString("linkset_owner_unknown")); columns[2]["font"] = "SANSSERIF"; - columns[3]["column"] = "dist_from_you"; - columns[3]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); + columns[3]["column"] = "land_impact"; + columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); columns[3]["font"] = "SANSSERIF"; + + columns[4]["column"] = "dist_from_you"; + columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); + columns[4]["font"] = "SANSSERIF"; } - columns[4]["column"] = "linkset_use"; + columns[5]["column"] = "linkset_use"; std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse()); if (pLinksetPtr->isTerrain()) { @@ -746,25 +754,25 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfin { linksetUse += (" " + getString("linkset_is_restricted_non_volume_state")); } - columns[4]["value"] = linksetUse; - columns[4]["font"] = "SANSSERIF"; - - columns[5]["column"] = "a_percent"; - columns[5]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); + columns[5]["value"] = linksetUse; columns[5]["font"] = "SANSSERIF"; - columns[6]["column"] = "b_percent"; - columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); + columns[6]["column"] = "a_percent"; + columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); columns[6]["font"] = "SANSSERIF"; - columns[7]["column"] = "c_percent"; - columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); + columns[7]["column"] = "b_percent"; + columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); columns[7]["font"] = "SANSSERIF"; - columns[8]["column"] = "d_percent"; - columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); + columns[8]["column"] = "c_percent"; + columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); columns[8]["font"] = "SANSSERIF"; + columns[9]["column"] = "d_percent"; + columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); + columns[9]["font"] = "SANSSERIF"; + LLSD element; element["id"] = pLinksetPtr->getUUID().asString(); element["column"] = columns; -- cgit v1.2.3 From 3c2be426e5e905076d00b9492c0e66c8b31caf19 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 30 May 2012 18:47:12 -0700 Subject: First pass at refactoring the pathfinding linksets and pathfinding characters classes to reduce code duplication, as both functionalities were heavily duplicated. --- indra/newview/llfloaterpathfindinglinksets.cpp | 872 ++++++------------------- 1 file changed, 196 insertions(+), 676 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 746601bdbb..7fe22f65cf 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -26,35 +26,34 @@ */ #include "llviewerprecompiledheaders.h" -#include "llfloater.h" -#include "llfloaterreg.h" + #include "llfloaterpathfindinglinksets.h" -#include "llsd.h" -#include "lluuid.h" -#include "v3math.h" -#include "lltextvalidate.h" + +#include + #include "llagent.h" -#include "lltextbase.h" +#include "llbutton.h" +#include "llcheckboxctrl.h" +#include "llcombobox.h" +#include "llfloater.h" +#include "llfloaterreg.h" #include "lllineeditor.h" -#include "llscrolllistitem.h" +#include "llnotificationsutil.h" +#include "llpathfindinglinkset.h" +#include "llpathfindinglinksetlist.h" +#include "llpathfindingmanager.h" #include "llscrolllistctrl.h" -#include "llcombobox.h" -#include "llcheckboxctrl.h" -#include "llbutton.h" -#include "llresmgr.h" -#include "llviewerregion.h" +#include "llscrolllistitem.h" +#include "llsd.h" #include "llselectmgr.h" +#include "lltextbase.h" +#include "lltextvalidate.h" +#include "lluuid.h" #include "llviewermenu.h" #include "llviewerobject.h" #include "llviewerobjectlist.h" -#include "llpathfindinglinkset.h" -#include "llpathfindinglinksetlist.h" -#include "llpathfindingmanager.h" -#include "llnotificationsutil.h" -#include "llenvmanager.h" - -#include -#include +#include "llviewerregion.h" +#include "v3math.h" #define XUI_LINKSET_USE_NONE 0 #define XUI_LINKSET_USE_WALKABLE 1 @@ -68,10 +67,65 @@ // LLFloaterPathfindingLinksets //--------------------------------------------------------------------------- +void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) +{ + LLFloaterPathfindingObjects::onOpen(pKey); + + if (!mAgentStateSlot.connected()) + { + mAgentStateSlot = LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateChange, this, _1)); + } +} + +void LLFloaterPathfindingLinksets::onClose(bool pIsAppQuitting) +{ + if (mAgentStateSlot.connected()) + { + mAgentStateSlot.disconnect(); + } + + LLFloaterPathfindingObjects::onClose(pIsAppQuitting); +} + +void LLFloaterPathfindingLinksets::openLinksetsEditor() +{ + LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); +} + +LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) + : LLFloaterPathfindingObjects(pSeed), + mFilterByName(NULL), + mFilterByDescription(NULL), + mFilterByLinksetUse(NULL), + mEditLinksetUse(NULL), + mEditLinksetUseWalkable(NULL), + mEditLinksetUseStaticObstacle(NULL), + mEditLinksetUseDynamicObstacle(NULL), + mEditLinksetUseMaterialVolume(NULL), + mEditLinksetUseExclusionVolume(NULL), + mEditLinksetUseDynamicPhantom(NULL), + mLabelWalkabilityCoefficients(NULL), + mLabelEditA(NULL), + mEditA(NULL), + mLabelEditB(NULL), + mEditB(NULL), + mLabelEditC(NULL), + mEditC(NULL), + mLabelEditD(NULL), + mEditD(NULL), + mApplyEditsButton(NULL), + mBeaconColor(), + mAgentStateSlot() +{ +} + +LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() +{ +} + BOOL LLFloaterPathfindingLinksets::postBuild() { - childSetAction("apply_filters", boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); - childSetAction("clear_filters", boost::bind(&LLFloaterPathfindingLinksets::onClearFiltersClicked, this)); + mBeaconColor = LLUIColorTable::getInstance()->getColor("PathfindingLinksetBeaconColor"); mFilterByName = findChild("filter_by_name"); llassert(mFilterByName != NULL); @@ -89,73 +143,32 @@ BOOL LLFloaterPathfindingLinksets::postBuild() llassert(mFilterByLinksetUse != NULL); mFilterByLinksetUse->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); - mLinksetsScrollList = findChild("pathfinding_linksets"); - llassert(mLinksetsScrollList != NULL); - mLinksetsScrollList->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onLinksetsSelectionChange, this)); - mLinksetsScrollList->sortByColumnIndex(0, true); - - mLinksetsStatus = findChild("linksets_status"); - llassert(mLinksetsStatus != NULL); - - mRefreshListButton = findChild("refresh_linksets_list"); - llassert(mRefreshListButton != NULL); - mRefreshListButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this)); - - mSelectAllButton = findChild("select_all_linksets"); - llassert(mSelectAllButton != NULL); - mSelectAllButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this)); - - mSelectNoneButton = findChild("select_none_linksets"); - llassert(mSelectNoneButton != NULL); - mSelectNoneButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this)); - - mShowBeaconCheckBox = findChild("show_beacon"); - llassert(mShowBeaconCheckBox != NULL); - - mTakeButton = findChild("take_linksets"); - llassert(mTakeButton != NULL); - mTakeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeClicked, this)); - - mTakeCopyButton = findChild("take_copy_linksets"); - llassert(mTakeCopyButton != NULL); - mTakeCopyButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeCopyClicked, this)); - - mReturnButton = findChild("return_linksets"); - llassert(mReturnButton != NULL); - mReturnButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onReturnClicked, this)); - - mDeleteButton = findChild("delete_linksets"); - llassert(mDeleteButton != NULL); - mDeleteButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onDeleteClicked, this)); - - mTeleportButton = findChild("teleport_me_to_linkset"); - llassert(mTeleportButton != NULL); - mTeleportButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTeleportClicked, this)); + childSetAction("apply_filters", boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this)); + childSetAction("clear_filters", boost::bind(&LLFloaterPathfindingLinksets::onClearFiltersClicked, this)); mEditLinksetUse = findChild("edit_linkset_use"); llassert(mEditLinksetUse != NULL); - mEditLinksetUse->clearRows(); - mEditLinksetUseUnset = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getString("linkset_choose_use"), XUI_LINKSET_USE_NONE)); + mEditLinksetUseUnset = mEditLinksetUse->addElement(buildLinksetUseScrollListData(getString("linkset_choose_use"), XUI_LINKSET_USE_NONE)); llassert(mEditLinksetUseUnset != NULL); - mEditLinksetUseWalkable = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kWalkable), XUI_LINKSET_USE_WALKABLE)); + mEditLinksetUseWalkable = mEditLinksetUse->addElement(buildLinksetUseScrollListData(getLinksetUseString(LLPathfindingLinkset::kWalkable), XUI_LINKSET_USE_WALKABLE)); llassert(mEditLinksetUseWalkable != NULL); - mEditLinksetUseStaticObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kStaticObstacle), XUI_LINKSET_USE_STATIC_OBSTACLE)); + mEditLinksetUseStaticObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListData(getLinksetUseString(LLPathfindingLinkset::kStaticObstacle), XUI_LINKSET_USE_STATIC_OBSTACLE)); llassert(mEditLinksetUseStaticObstacle != NULL); - mEditLinksetUseDynamicObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kDynamicObstacle), XUI_LINKSET_USE_DYNAMIC_OBSTACLE)); + mEditLinksetUseDynamicObstacle = mEditLinksetUse->addElement(buildLinksetUseScrollListData(getLinksetUseString(LLPathfindingLinkset::kDynamicObstacle), XUI_LINKSET_USE_DYNAMIC_OBSTACLE)); llassert(mEditLinksetUseDynamicObstacle != NULL); - mEditLinksetUseMaterialVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kMaterialVolume), XUI_LINKSET_USE_MATERIAL_VOLUME)); + mEditLinksetUseMaterialVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListData(getLinksetUseString(LLPathfindingLinkset::kMaterialVolume), XUI_LINKSET_USE_MATERIAL_VOLUME)); llassert(mEditLinksetUseMaterialVolume != NULL); - mEditLinksetUseExclusionVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kExclusionVolume), XUI_LINKSET_USE_EXCLUSION_VOLUME)); + mEditLinksetUseExclusionVolume = mEditLinksetUse->addElement(buildLinksetUseScrollListData(getLinksetUseString(LLPathfindingLinkset::kExclusionVolume), XUI_LINKSET_USE_EXCLUSION_VOLUME)); llassert(mEditLinksetUseExclusionVolume != NULL); - mEditLinksetUseDynamicPhantom = mEditLinksetUse->addElement(buildLinksetUseScrollListElement(getLinksetUseString(LLPathfindingLinkset::kDynamicPhantom), XUI_LINKSET_USE_DYNAMIC_PHANTOM)); + mEditLinksetUseDynamicPhantom = mEditLinksetUse->addElement(buildLinksetUseScrollListData(getLinksetUseString(LLPathfindingLinkset::kDynamicPhantom), XUI_LINKSET_USE_DYNAMIC_PHANTOM)); llassert(mEditLinksetUseDynamicPhantom != NULL); mEditLinksetUse->selectFirstItem(); @@ -199,325 +212,106 @@ BOOL LLFloaterPathfindingLinksets::postBuild() llassert(mApplyEditsButton != NULL); mApplyEditsButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this)); - return LLFloater::postBuild(); + return LLFloaterPathfindingObjects::postBuild(); } -void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) +void LLFloaterPathfindingLinksets::requestGetObjects() { - LLFloater::onOpen(pKey); - - requestGetLinksets(); - selectNoneLinksets(); - mLinksetsScrollList->setCommitOnSelectionChange(true); - - if (!mAgentStateSlot.connected()) - { - mAgentStateSlot = LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateCB, this, _1)); - } - - if (!mSelectionUpdateSlot.connected()) - { - mSelectionUpdateSlot = LLSelectMgr::getInstance()->mUpdateSignal.connect(boost::bind(&LLFloaterPathfindingLinksets::updateControls, this)); - } - - if (!mRegionBoundarySlot.connected()) - { - mRegionBoundarySlot = LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterPathfindingLinksets::onRegionBoundaryCross, this)); - } + LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3)); } -void LLFloaterPathfindingLinksets::onClose(bool pAppQuitting) +LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) const { - if (mRegionBoundarySlot.connected()) - { - mRegionBoundarySlot.disconnect(); - } - - if (mSelectionUpdateSlot.connected()) - { - mSelectionUpdateSlot.disconnect(); - } - - if (mAgentStateSlot.connected()) - { - mAgentStateSlot.disconnect(); - } + llassert(pObjectListPtr != NULL); + llassert(!pObjectListPtr->isEmpty()); - mLinksetsScrollList->setCommitOnSelectionChange(false); - selectNoneLinksets(); - if (mLinksetsSelection.notNull()) - { - mLinksetsSelection.clear(); - } + std::string nameFilter = mFilterByName->getText(); + std::string descriptionFilter = mFilterByDescription->getText(); + LLPathfindingLinkset::ELinksetUse linksetUseFilter = getFilterLinksetUse(); + bool isFilteringName = !nameFilter.empty(); + bool isFilteringDescription = !descriptionFilter.empty(); + bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); - LLFloater::onClose(pAppQuitting); -} + LLSD scrollListData; + const LLVector3& avatarPosition = gAgent.getPositionAgent(); -void LLFloaterPathfindingLinksets::draw() -{ - if (mShowBeaconCheckBox->get()) + if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) + LLStringUtil::toUpper(nameFilter); + LLStringUtil::toUpper(descriptionFilter); + for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter) { - int numSelectedItems = selectedItems.size(); - - std::vector viewerObjects; - viewerObjects.reserve(numSelectedItems); - - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - selectedItemIter != selectedItems.end(); ++selectedItemIter) + const LLPathfindingLinkset *linksetPtr = dynamic_cast(objectIter->second.get()); + std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName()); + std::string linksetDescription = linksetPtr->getDescription(); + LLStringUtil::toUpper(linksetName); + LLStringUtil::toUpper(linksetDescription); + if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) && + (!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) && + (!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter))) { - const LLScrollListItem *selectedItem = *selectedItemIter; - - LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); - if (viewerObject != NULL) - { - const std::string &objectName = selectedItem->getColumn(0)->getValue().asString(); - gObjectList.addDebugBeacon(viewerObject->getPositionAgent(), objectName, LLColor4(0.f, 0.f, 1.f, 0.8f), LLColor4(1.f, 1.f, 1.f, 1.f), 6); - } + LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); + scrollListData.append(element); } } } - - LLFloater::draw(); -} - -void LLFloaterPathfindingLinksets::openLinksetsEditor() -{ - LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); -} - -LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) - : LLFloater(pSeed), - mFilterByName(NULL), - mFilterByDescription(NULL), - mFilterByLinksetUse(NULL), - mLinksetsScrollList(NULL), - mLinksetsStatus(NULL), - mRefreshListButton(NULL), - mSelectAllButton(NULL), - mSelectNoneButton(NULL), - mShowBeaconCheckBox(NULL), - mTakeButton(NULL), - mTakeCopyButton(NULL), - mReturnButton(NULL), - mDeleteButton(NULL), - mTeleportButton(NULL), - mEditLinksetUse(NULL), - mLabelWalkabilityCoefficients(NULL), - mLabelEditA(NULL), - mEditA(NULL), - mLabelEditB(NULL), - mEditB(NULL), - mLabelEditC(NULL), - mEditC(NULL), - mLabelEditD(NULL), - mEditD(NULL), - mApplyEditsButton(NULL), - mMessagingState(kMessagingUnknown), - mMessagingRequestId(0U), - mLinksetsListPtr(), - mLinksetsSelection(), - mAgentStateSlot(), - mSelectionUpdateSlot() -{ -} - -LLFloaterPathfindingLinksets::~LLFloaterPathfindingLinksets() -{ -} - -LLFloaterPathfindingLinksets::EMessagingState LLFloaterPathfindingLinksets::getMessagingState() const -{ - return mMessagingState; -} - -void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingState) -{ - mMessagingState = pMessagingState; - updateControls(); -} - -void LLFloaterPathfindingLinksets::requestGetLinksets() -{ - LLPathfindingManager::getInstance()->requestGetLinksets(++mMessagingRequestId, boost::bind(&LLFloaterPathfindingLinksets::handleNewLinksets, this, _1, _2, _3)); -} - -void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingLinksetListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) -{ - LLPathfindingManager::getInstance()->requestSetLinksets(++mMessagingRequestId, pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateLinksets, this, _1, _2, _3)); -} - -void LLFloaterPathfindingLinksets::handleNewLinksets(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) -{ - llassert(pRequestId <= mMessagingRequestId); - if (pRequestId == mMessagingRequestId) - { - mLinksetsListPtr = pLinksetsListPtr; - updateScrollList(); - - switch (pLinksetsRequestStatus) - { - case LLPathfindingManager::kRequestStarted : - setMessagingState(kMessagingGetRequestSent); - break; - case LLPathfindingManager::kRequestCompleted : - mLinksetsListPtr = pLinksetsListPtr; - updateScrollList(); - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestNotEnabled : - clearLinksets(); - setMessagingState(kMessagingNotEnabled); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingGetError); - break; - default : - setMessagingState(kMessagingGetError); - llassert(0); - break; - } - } -} - -void LLFloaterPathfindingLinksets::handleUpdateLinksets(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pLinksetsRequestStatus, LLPathfindingLinksetListPtr pLinksetsListPtr) -{ - llassert(pRequestId <= mMessagingRequestId); - if (pRequestId == mMessagingRequestId) + else { - switch (pLinksetsRequestStatus) + for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter) { - case LLPathfindingManager::kRequestStarted : - setMessagingState(kMessagingSetRequestSent); - break; - case LLPathfindingManager::kRequestCompleted : - if (mLinksetsListPtr == NULL) - { - mLinksetsListPtr = pLinksetsListPtr; - } - else if (pLinksetsListPtr != NULL) - { - mLinksetsListPtr->update(*pLinksetsListPtr); - } - updateScrollList(); - setMessagingState(kMessagingComplete); - break; - case LLPathfindingManager::kRequestNotEnabled : - clearLinksets(); - setMessagingState(kMessagingNotEnabled); - break; - case LLPathfindingManager::kRequestError : - setMessagingState(kMessagingSetError); - break; - default : - setMessagingState(kMessagingSetError); - llassert(0); - break; + const LLPathfindingLinkset *linksetPtr = dynamic_cast(objectIter->second.get()); + LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); + scrollListData.append(element); } } -} -void LLFloaterPathfindingLinksets::onApplyAllFilters() -{ - applyFilters(); + return scrollListData; } -void LLFloaterPathfindingLinksets::onClearFiltersClicked() +void LLFloaterPathfindingLinksets::updateControls() { - clearFilters(); + LLFloaterPathfindingObjects::updateControls(); + updateStateOnEditFields(); + updateStateOnEditLinksetUse(); } -void LLFloaterPathfindingLinksets::onLinksetsSelectionChange() +void LLFloaterPathfindingLinksets::updateSelection() { - mLinksetsSelection.clear(); - LLSelectMgr::getInstance()->deselectAll(); - - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) - { - int numSelectedItems = selectedItems.size(); - - std::vectorviewerObjects; - viewerObjects.reserve(numSelectedItems); - - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - selectedItemIter != selectedItems.end(); ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - - LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); - if (viewerObject != NULL) - { - viewerObjects.push_back(viewerObject); - } - } - - if (!viewerObjects.empty()) - { - mLinksetsSelection = LLSelectMgr::getInstance()->selectObjectAndFamily(viewerObjects); - } - } - + LLFloaterPathfindingObjects::updateSelection(); updateEditFieldValues(); - updateControls(); -} - -void LLFloaterPathfindingLinksets::onRefreshLinksetsClicked() -{ - requestGetLinksets(); -} - -void LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked() -{ - selectAllLinksets(); + updateStateOnEditFields(); + updateStateOnEditLinksetUse(); } -void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked() +S32 LLFloaterPathfindingLinksets::getNameColumnIndex() const { - selectNoneLinksets(); + return 0; } -void LLFloaterPathfindingLinksets::onTakeClicked() +const LLColor4 &LLFloaterPathfindingLinksets::getBeaconColor() const { - handle_take(); + return mBeaconColor; } -void LLFloaterPathfindingLinksets::onTakeCopyClicked() +LLPathfindingObjectListPtr LLFloaterPathfindingLinksets::getEmptyObjectList() const { - handle_take_copy(); + LLPathfindingObjectListPtr objectListPtr(new LLPathfindingLinksetList()); + return objectListPtr; } -void LLFloaterPathfindingLinksets::onReturnClicked() +void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingObjectListPtr pLinksetList, LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) { - handle_object_return(); + LLPathfindingManager::getInstance()->requestSetLinksets(getNewRequestId(), pLinksetList, pLinksetUse, pA, pB, pC, pD, boost::bind(&LLFloaterPathfindingLinksets::handleUpdateObjectList, this, _1, _2, _3)); } -void LLFloaterPathfindingLinksets::onDeleteClicked() +void LLFloaterPathfindingLinksets::onApplyAllFilters() { - handle_object_delete(); + applyFilters(); } -void LLFloaterPathfindingLinksets::onTeleportClicked() +void LLFloaterPathfindingLinksets::onClearFiltersClicked() { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - llassert(selectedItems.size() == 1); - if (selectedItems.size() == 1) - { - std::vector::const_reference selectedItemRef = selectedItems.front(); - const LLScrollListItem *selectedItem = selectedItemRef; - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); - const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - const LLVector3 &linksetLocation = linksetPtr->getLocation(); - - LLViewerRegion* region = gAgent.getRegion(); - if (region != NULL) - { - gAgent.teleportRequest(region->getHandle(), linksetLocation, true); - } - } + clearFilters(); } void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl) @@ -526,12 +320,19 @@ void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUI llassert(pLineEditor != NULL); const std::string &valueString = pLineEditor->getText(); - S32 value = static_cast(atoi(valueString.c_str())); + S32 value; - if ((value < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (value > LLPathfindingLinkset::MAX_WALKABILITY_VALUE)) + if (LLStringUtil::convertToS32(valueString, value)) { - value = llclamp(value, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE); - pLineEditor->setValue(LLSD(value)); + if ((value < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (value > LLPathfindingLinkset::MAX_WALKABILITY_VALUE)) + { + value = llclamp(value, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE); + pLineEditor->setValue(LLSD(value)); + } + } + else + { + pLineEditor->setValue(LLSD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE)); } } @@ -540,19 +341,14 @@ void LLFloaterPathfindingLinksets::onApplyChangesClicked() applyEdit(); } -void LLFloaterPathfindingLinksets::onAgentStateCB(LLPathfindingManager::EAgentState pAgentState) +void LLFloaterPathfindingLinksets::onAgentStateChange(LLPathfindingManager::EAgentState pAgentState) { updateControls(); } -void LLFloaterPathfindingLinksets::onRegionBoundaryCross() -{ - requestGetLinksets(); -} - void LLFloaterPathfindingLinksets::applyFilters() { - updateScrollList(); + rebuildObjectsScrollList(); } void LLFloaterPathfindingLinksets::clearFilters() @@ -560,40 +356,13 @@ void LLFloaterPathfindingLinksets::clearFilters() mFilterByName->clear(); mFilterByDescription->clear(); setFilterLinksetUse(LLPathfindingLinkset::kUnknown); - updateScrollList(); -} - -void LLFloaterPathfindingLinksets::selectAllLinksets() -{ - mLinksetsScrollList->selectAll(); -} - -void LLFloaterPathfindingLinksets::selectNoneLinksets() -{ - mLinksetsScrollList->deselectAllItems(); -} - -void LLFloaterPathfindingLinksets::clearLinksets() -{ - if (mLinksetsListPtr != NULL) - { - mLinksetsListPtr->clear(); - } - updateScrollList(); -} - -void LLFloaterPathfindingLinksets::updateControls() -{ - updateStatusMessage(); - updateEnableStateOnListActions(); - updateEnableStateOnEditFields(); + rebuildObjectsScrollList(); } void LLFloaterPathfindingLinksets::updateEditFieldValues() { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - int numSelectedItems = selectedItems.size(); - if (numSelectedItems <= 0) + int numSelectedObjects = getNumSelectedObjects(); + if (numSelectedObjects <= 0) { mEditLinksetUse->selectFirstItem(); mEditA->clear(); @@ -603,92 +372,22 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues() } else { - LLScrollListItem *firstItem = selectedItems.front(); - - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(firstItem->getUUID().asString()); - const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); - - setEditLinksetUse(linksetPtr->getLinksetUse()); - mEditA->setValue(LLSD(linksetPtr->getWalkabilityCoefficientA())); - mEditB->setValue(LLSD(linksetPtr->getWalkabilityCoefficientB())); - mEditC->setValue(LLSD(linksetPtr->getWalkabilityCoefficientC())); - mEditD->setValue(LLSD(linksetPtr->getWalkabilityCoefficientD())); - updateEnableStateOnEditLinksetUse(); - } -} - -void LLFloaterPathfindingLinksets::updateScrollList() -{ - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - int numSelectedItems = selectedItems.size(); - uuid_vec_t selectedUUIDs; - if (numSelectedItems > 0) - { - selectedUUIDs.reserve(selectedItems.size()); - for (std::vector::const_iterator itemIter = selectedItems.begin(); - itemIter != selectedItems.end(); ++itemIter) - { - const LLScrollListItem *listItem = *itemIter; - selectedUUIDs.push_back(listItem->getUUID()); - } - } - - S32 origScrollPosition = mLinksetsScrollList->getScrollPos(); - mLinksetsScrollList->deleteAllItems(); - - if (mLinksetsListPtr != NULL) - { - std::string nameFilter = mFilterByName->getText(); - std::string descriptionFilter = mFilterByDescription->getText(); - LLPathfindingLinkset::ELinksetUse linksetUseFilter = getFilterLinksetUse(); - bool isFilteringName = !nameFilter.empty(); - bool isFilteringDescription = !descriptionFilter.empty(); - bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); + LLPathfindingObjectPtr firstSelectedObjectPtr = getFirstSelectedObject(); + llassert(firstSelectedObjectPtr != NULL); - const LLVector3& avatarPosition = gAgent.getPositionAgent(); + const LLPathfindingLinkset *linkset = dynamic_cast(firstSelectedObjectPtr.get()); - if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) - { - LLStringUtil::toUpper(nameFilter); - LLStringUtil::toUpper(descriptionFilter); - for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); - linksetIter != mLinksetsListPtr->end(); ++linksetIter) - { - const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); - std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName()); - std::string linksetDescription = linksetPtr->getDescription(); - LLStringUtil::toUpper(linksetName); - LLStringUtil::toUpper(linksetDescription); - if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) && - (!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) && - (!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter))) - { - LLSD element = buildLinksetScrollListElement(linksetPtr, avatarPosition); - mLinksetsScrollList->addElement(element); - } - } - } - else - { - for (LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->begin(); - linksetIter != mLinksetsListPtr->end(); ++linksetIter) - { - const LLPathfindingLinksetPtr linksetPtr(linksetIter->second); - LLSD element = buildLinksetScrollListElement(linksetPtr, avatarPosition); - mLinksetsScrollList->addElement(element); - } - } + setEditLinksetUse(linkset->getLinksetUse()); + mEditA->setValue(LLSD(linkset->getWalkabilityCoefficientA())); + mEditB->setValue(LLSD(linkset->getWalkabilityCoefficientB())); + mEditC->setValue(LLSD(linkset->getWalkabilityCoefficientC())); + mEditD->setValue(LLSD(linkset->getWalkabilityCoefficientD())); } - - mLinksetsScrollList->selectMultiple(selectedUUIDs); - mLinksetsScrollList->setScrollPos(origScrollPosition); - updateEditFieldValues(); - updateControls(); } -LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfindingLinksetPtr pLinksetPtr, const LLVector3 &pAvatarPosition) const +LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const { + llassert(pLinksetPtr != NULL); LLSD columns; if (pLinksetPtr->isTerrain()) @@ -780,184 +479,61 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListElement(const LLPathfin return element; } -LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListElement(const std::string &label, S32 value) const +LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const { LLSD columns; columns[0]["column"] = "name"; columns[0]["relwidth"] = static_cast(100.0f); - columns[0]["value"] = label; + columns[0]["value"] = pLabel; columns[0]["font"] = "SANSSERIF"; LLSD element; - element["value"] = value; + element["value"] = pValue; element["column"] = columns; return element; } -bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const +bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const { - bool showWarning = false; + bool isShowWarning = false; - if (linksetUse != LLPathfindingLinkset::kUnknown) + if (pLinksetUse != LLPathfindingLinkset::kUnknown) { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) + LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); + if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) { - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - !showWarning && (selectedItemIter != selectedItems.end()); ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); - llassert(linksetIter != mLinksetsListPtr->end()); - const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - showWarning = linksetPtr->isShowUnmodifiablePhantomWarning(linksetUse); - } - } - } - - return showWarning; -} - -bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse linksetUse) const -{ - bool showWarning = false; - - if (linksetUse != LLPathfindingLinkset::kUnknown) - { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) - { - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - !showWarning && (selectedItemIter != selectedItems.end()); ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); - llassert(linksetIter != mLinksetsListPtr->end()); - const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - showWarning = linksetPtr->isShowCannotBeVolumeWarning(linksetUse); - } + const LLPathfindingLinksetList *linksetList = dynamic_cast(selectedObjects.get()); + isShowWarning = linksetList->isShowUnmodifiablePhantomWarning(pLinksetUse); } } - return showWarning; + return isShowWarning; } -void LLFloaterPathfindingLinksets::updateStatusMessage() +bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const { - static const LLColor4 errorColor = LLUIColorTable::instance().getColor("PathfindingErrorColor"); - static const LLColor4 warningColor = LLUIColorTable::instance().getColor("PathfindingWarningColor"); - - std::string statusText(""); - LLStyle::Params styleParams; + bool isShowWarning = false; - switch (getMessagingState()) + if (pLinksetUse != LLPathfindingLinkset::kUnknown) { - case kMessagingUnknown: - statusText = getString("linksets_messaging_initial"); - styleParams.color = errorColor; - break; - case kMessagingGetRequestSent : - statusText = getString("linksets_messaging_get_inprogress"); - styleParams.color = warningColor; - break; - case kMessagingGetError : - statusText = getString("linksets_messaging_get_error"); - styleParams.color = errorColor; - break; - case kMessagingSetRequestSent : - statusText = getString("linksets_messaging_set_inprogress"); - styleParams.color = warningColor; - break; - case kMessagingSetError : - statusText = getString("linksets_messaging_set_error"); - styleParams.color = errorColor; - break; - case kMessagingComplete : - if (mLinksetsScrollList->isEmpty()) - { - statusText = getString("linksets_messaging_complete_none_found"); - } - else + LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); + if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) { - S32 numItems = mLinksetsScrollList->getItemCount(); - S32 numSelectedItems = mLinksetsScrollList->getNumSelected(); - - LLLocale locale(LLStringUtil::getLocale()); - std::string numItemsString; - LLResMgr::getInstance()->getIntegerString(numItemsString, numItems); - - std::string numSelectedItemsString; - LLResMgr::getInstance()->getIntegerString(numSelectedItemsString, numSelectedItems); - - LLStringUtil::format_map_t string_args; - string_args["[NUM_SELECTED]"] = numSelectedItemsString; - string_args["[NUM_TOTAL]"] = numItemsString; - statusText = getString("linksets_messaging_complete_available", string_args); + const LLPathfindingLinksetList *linksetList = dynamic_cast(selectedObjects.get()); + isShowWarning = linksetList->isShowCannotBeVolumeWarning(pLinksetUse); } - break; - case kMessagingNotEnabled : - statusText = getString("linksets_messaging_not_enabled"); - styleParams.color = errorColor; - break; - default: - statusText = getString("linksets_messaging_initial"); - styleParams.color = errorColor; - llassert(0); - break; } - mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams); + return isShowWarning; } -void LLFloaterPathfindingLinksets::updateEnableStateOnListActions() +void LLFloaterPathfindingLinksets::updateStateOnEditFields() { - switch (getMessagingState()) - { - case kMessagingUnknown: - case kMessagingGetRequestSent : - case kMessagingSetRequestSent : - mRefreshListButton->setEnabled(FALSE); - mSelectAllButton->setEnabled(FALSE); - mSelectNoneButton->setEnabled(FALSE); - break; - case kMessagingGetError : - case kMessagingSetError : - case kMessagingNotEnabled : - mRefreshListButton->setEnabled(TRUE); - mSelectAllButton->setEnabled(FALSE); - mSelectNoneButton->setEnabled(FALSE); - break; - case kMessagingComplete : - { - int numItems = mLinksetsScrollList->getItemCount(); - int numSelectedItems = mLinksetsScrollList->getNumSelected(); - mRefreshListButton->setEnabled(TRUE); - mSelectAllButton->setEnabled(numSelectedItems < numItems); - mSelectNoneButton->setEnabled(numSelectedItems > 0); - } - break; - default: - llassert(0); - break; - } -} - -void LLFloaterPathfindingLinksets::updateEnableStateOnEditFields() -{ - int numSelectedItems = mLinksetsScrollList->getNumSelected(); + int numSelectedItems = getNumSelectedObjects(); bool isEditEnabled = ((numSelectedItems > 0) && LLPathfindingManager::getInstance()->isAllowAlterPermanent()); - mShowBeaconCheckBox->setEnabled(numSelectedItems > 0); - mTakeButton->setEnabled(isEditEnabled && visible_take_object()); - mTakeCopyButton->setEnabled(isEditEnabled && enable_object_take_copy()); - mReturnButton->setEnabled(isEditEnabled && enable_object_return()); - mDeleteButton->setEnabled(isEditEnabled && enable_object_delete()); - mTeleportButton->setEnabled(numSelectedItems == 1); - mEditLinksetUse->setEnabled(isEditEnabled); mLabelWalkabilityCoefficients->setEnabled(isEditEnabled); @@ -973,7 +549,7 @@ void LLFloaterPathfindingLinksets::updateEnableStateOnEditFields() mApplyEditsButton->setEnabled(isEditEnabled && (getMessagingState() == kMessagingComplete)); } -void LLFloaterPathfindingLinksets::updateEnableStateOnEditLinksetUse() +void LLFloaterPathfindingLinksets::updateStateOnEditLinksetUse() { BOOL useWalkable = FALSE; BOOL useStaticObstacle = FALSE; @@ -982,54 +558,11 @@ void LLFloaterPathfindingLinksets::updateEnableStateOnEditLinksetUse() BOOL useExclusionVolume = FALSE; BOOL useDynamicPhantom = FALSE; - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) + LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); + if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) { - for (std::vector::const_iterator selectedItemIter = selectedItems.begin(); - !(useWalkable && useStaticObstacle && useDynamicObstacle && useMaterialVolume && useExclusionVolume && useDynamicPhantom) && (selectedItemIter != selectedItems.end()); - ++selectedItemIter) - { - const LLScrollListItem *selectedItem = *selectedItemIter; - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::const_iterator linksetIter = mLinksetsListPtr->find(selectedItem->getUUID().asString()); - llassert(linksetIter != mLinksetsListPtr->end()); - const LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - - if (linksetPtr->isTerrain()) - { - useWalkable = TRUE; - } - else - { - if (linksetPtr->isModifiable()) - { - useWalkable = TRUE; - useStaticObstacle = TRUE; - useDynamicObstacle = TRUE; - useDynamicPhantom = TRUE; - if (linksetPtr->canBeVolume()) - { - useMaterialVolume = TRUE; - useExclusionVolume = TRUE; - } - } - else if (linksetPtr->isPhantom()) - { - useDynamicPhantom = TRUE; - if (linksetPtr->canBeVolume()) - { - useMaterialVolume = TRUE; - useExclusionVolume = TRUE; - } - } - else - { - useWalkable = TRUE; - useStaticObstacle = TRUE; - useDynamicObstacle = TRUE; - } - } - } + const LLPathfindingLinksetList *linksetList = dynamic_cast(selectedObjects.get()); + linksetList->determinePossibleStates(useWalkable, useStaticObstacle, useDynamicObstacle, useMaterialVolume, useExclusionVolume, useDynamicPhantom); } mEditLinksetUseWalkable->setEnabled(useWalkable); @@ -1085,8 +618,8 @@ void LLFloaterPathfindingLinksets::handleApplyEdit(const LLSD &pNotification, co void LLFloaterPathfindingLinksets::doApplyEdit() { - std::vector selectedItems = mLinksetsScrollList->getAllSelected(); - if (!selectedItems.empty()) + LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); + if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) { LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); const std::string &aString = mEditA->getText(); @@ -1098,21 +631,8 @@ void LLFloaterPathfindingLinksets::doApplyEdit() S32 cValue = static_cast(atoi(cString.c_str())); S32 dValue = static_cast(atoi(dString.c_str())); - LLPathfindingLinksetListPtr editListPtr(new LLPathfindingLinksetList()); - for (std::vector::const_iterator itemIter = selectedItems.begin(); - itemIter != selectedItems.end(); ++itemIter) - { - const LLScrollListItem *listItem = *itemIter; - LLUUID uuid = listItem->getUUID(); - const std::string &uuidString = uuid.asString(); - llassert(mLinksetsListPtr != NULL); - LLPathfindingLinksetList::iterator linksetIter = mLinksetsListPtr->find(uuidString); - llassert(linksetIter != mLinksetsListPtr->end()); - LLPathfindingLinksetPtr linksetPtr = linksetIter->second; - editListPtr->insert(std::pair(uuidString, linksetPtr)); - } - requestSetLinksets(editListPtr, linksetUse, aValue, bValue, cValue, dValue); + requestSetLinksets(selectedObjects, linksetUse, aValue, bValue, cValue, dValue); } } -- cgit v1.2.3 From 3352a1eac15f752535b636866eeb966ec3900c62 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 30 May 2012 19:39:08 -0700 Subject: Cleaning up some unreferenced headers and classes definitions from previous refactoring. --- indra/newview/llfloaterpathfindinglinksets.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 7fe22f65cf..36f54ffae1 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -33,27 +33,20 @@ #include "llagent.h" #include "llbutton.h" -#include "llcheckboxctrl.h" #include "llcombobox.h" -#include "llfloater.h" #include "llfloaterreg.h" #include "lllineeditor.h" #include "llnotificationsutil.h" #include "llpathfindinglinkset.h" #include "llpathfindinglinksetlist.h" #include "llpathfindingmanager.h" -#include "llscrolllistctrl.h" #include "llscrolllistitem.h" #include "llsd.h" -#include "llselectmgr.h" #include "lltextbase.h" #include "lltextvalidate.h" -#include "lluuid.h" -#include "llviewermenu.h" -#include "llviewerobject.h" -#include "llviewerobjectlist.h" -#include "llviewerregion.h" +#include "lluicolortable.h" #include "v3math.h" +#include "v4color.h" #define XUI_LINKSET_USE_NONE 0 #define XUI_LINKSET_USE_WALKABLE 1 -- cgit v1.2.3 From 41bcd567646190cda86ec3ee77041bd84193c377 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 31 May 2012 17:25:41 -0700 Subject: A bit more class clean-up for the LLFloaterPathfindingObjects. --- indra/newview/llfloaterpathfindinglinksets.cpp | 7 ------- 1 file changed, 7 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 36f54ffae1..d53f4db5c2 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -264,13 +264,6 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath void LLFloaterPathfindingLinksets::updateControls() { LLFloaterPathfindingObjects::updateControls(); - updateStateOnEditFields(); - updateStateOnEditLinksetUse(); -} - -void LLFloaterPathfindingLinksets::updateSelection() -{ - LLFloaterPathfindingObjects::updateSelection(); updateEditFieldValues(); updateStateOnEditFields(); updateStateOnEditLinksetUse(); -- cgit v1.2.3 From ea23285f8b728bf52c8490610c610f4abd2d6957 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 4 Jun 2012 14:36:43 -0700 Subject: Ensuring that the scroll list is rebuilt after any missing avatar names are loaded into cache. --- indra/newview/llfloaterpathfindinglinksets.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index d53f4db5c2..bb1bcd0cb8 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -213,7 +213,7 @@ void LLFloaterPathfindingLinksets::requestGetObjects() LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3)); } -LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) const +LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) { llassert(pObjectListPtr != NULL); llassert(!pObjectListPtr->isEmpty()); @@ -245,6 +245,11 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath { LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); scrollListData.append(element); + + if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) + { + rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); + } } } } @@ -255,6 +260,11 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath const LLPathfindingLinkset *linksetPtr = dynamic_cast(objectIter->second.get()); LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); scrollListData.append(element); + + if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) + { + rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); + } } } @@ -409,7 +419,9 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin columns[1]["font"] = "SANSSERIF"; columns[2]["column"] = "owner"; - columns[2]["value"] = (pLinksetPtr->hasOwnerName() ? pLinksetPtr->getOwnerName() : getString("linkset_owner_unknown")); + columns[2]["value"] = (pLinksetPtr->hasOwner() ? + (pLinksetPtr->hasOwnerName() ? pLinksetPtr->getOwnerName() : getString("linkset_owner_loading")) : + getString("linkset_owner_unknown")); columns[2]["font"] = "SANSSERIF"; columns[3]["column"] = "land_impact"; -- cgit v1.2.3 From a48ee0e86ade940014cb5f58b8ab6f4517789455 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 5 Jun 2012 18:32:19 -0700 Subject: BUGFIX: Correcting an assert behavior where the LLSD returned from calls to convertObjectsIntoScrollListData() should be required to be an array type. --- indra/newview/llfloaterpathfindinglinksets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index bb1bcd0cb8..1d7f165ad9 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -225,7 +225,7 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath bool isFilteringDescription = !descriptionFilter.empty(); bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); - LLSD scrollListData; + LLSD scrollListData = LLSD::emptyArray(); const LLVector3& avatarPosition = gAgent.getPositionAgent(); if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) -- cgit v1.2.3 From ff7223fafef58d9f8025e97fee87cf7911d93ccf Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Mon, 11 Jun 2012 14:45:59 -0700 Subject: PATH-706: Removing enforcement on frozen/unfrozen state from the linksets floater. Also, removing handlers for agent state change. --- indra/newview/llfloaterpathfindinglinksets.cpp | 30 ++------------------------ 1 file changed, 2 insertions(+), 28 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 1d7f165ad9..8488ee1aa3 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -60,26 +60,6 @@ // LLFloaterPathfindingLinksets //--------------------------------------------------------------------------- -void LLFloaterPathfindingLinksets::onOpen(const LLSD& pKey) -{ - LLFloaterPathfindingObjects::onOpen(pKey); - - if (!mAgentStateSlot.connected()) - { - mAgentStateSlot = LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingLinksets::onAgentStateChange, this, _1)); - } -} - -void LLFloaterPathfindingLinksets::onClose(bool pIsAppQuitting) -{ - if (mAgentStateSlot.connected()) - { - mAgentStateSlot.disconnect(); - } - - LLFloaterPathfindingObjects::onClose(pIsAppQuitting); -} - void LLFloaterPathfindingLinksets::openLinksetsEditor() { LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets"); @@ -107,8 +87,7 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mLabelEditD(NULL), mEditD(NULL), mApplyEditsButton(NULL), - mBeaconColor(), - mAgentStateSlot() + mBeaconColor() { } @@ -337,11 +316,6 @@ void LLFloaterPathfindingLinksets::onApplyChangesClicked() applyEdit(); } -void LLFloaterPathfindingLinksets::onAgentStateChange(LLPathfindingManager::EAgentState pAgentState) -{ - updateControls(); -} - void LLFloaterPathfindingLinksets::applyFilters() { rebuildObjectsScrollList(); @@ -530,7 +504,7 @@ bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLink void LLFloaterPathfindingLinksets::updateStateOnEditFields() { int numSelectedItems = getNumSelectedObjects(); - bool isEditEnabled = ((numSelectedItems > 0) && LLPathfindingManager::getInstance()->isAllowAlterPermanent()); + bool isEditEnabled = (numSelectedItems > 0); mEditLinksetUse->setEnabled(isEditEnabled); -- cgit v1.2.3 From e78266e9378bdd19ea4a8f7833cf39e59d2faecc Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 15 Jun 2012 12:45:41 -0700 Subject: BUGFIX: Correcting a behavior where moving the cursor over a selected object inappropriately called updateControls(). Fix was to break the updateControl() functionality into two separate handlers updateControlsOnScrollListChange() and updateControlsOnInWorldSelectionChange(). --- indra/newview/llfloaterpathfindinglinksets.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 1d7f165ad9..de1a23a025 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -271,9 +271,9 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath return scrollListData; } -void LLFloaterPathfindingLinksets::updateControls() +void LLFloaterPathfindingLinksets::updateControlsOnScrollListChange() { - LLFloaterPathfindingObjects::updateControls(); + LLFloaterPathfindingObjects::updateControlsOnScrollListChange(); updateEditFieldValues(); updateStateOnEditFields(); updateStateOnEditLinksetUse(); @@ -339,7 +339,7 @@ void LLFloaterPathfindingLinksets::onApplyChangesClicked() void LLFloaterPathfindingLinksets::onAgentStateChange(LLPathfindingManager::EAgentState pAgentState) { - updateControls(); + updateControlsOnScrollListChange(); } void LLFloaterPathfindingLinksets::applyFilters() -- cgit v1.2.3 From 328322436c046bf229de83041b29ebe5ce7c4029 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 22 Jun 2012 16:12:32 -0700 Subject: 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. --- indra/newview/llfloaterpathfindinglinksets.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') 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("pathfinding_linksets"); + linksetsFloater->showFloaterWithSelectionObjects(); } LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) -- cgit v1.2.3 From 78910cf3016fc55eaf8214640b348df0f8bcdeda Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 26 Jun 2012 18:04:19 -0700 Subject: Updating the header licensing comments. --- indra/newview/llfloaterpathfindinglinksets.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index ae814b0087..ae83bcfaee 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -1,30 +1,31 @@ /** * @file llfloaterpathfindinglinksets.cpp -* @author William Todd Stinson -* @brief "Pathfinding linksets" floater, allowing manipulation of the Havok AI pathfinding settings. +* @brief "Pathfinding linksets" floater, allowing manipulation of the linksets on the current region. +* @author Stinson@lindenlab.com * -* $LicenseInfo:firstyear=2002&license=viewerlgpl$ +* $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code -* Copyright (C) 2010, Linden Research, Inc. -* +* Copyright (C) 2012, Linden Research, Inc. +* * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. -* +* * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. -* +* * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -* +* * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ + #include "llviewerprecompiledheaders.h" #include "llfloaterpathfindinglinksets.h" -- cgit v1.2.3 From 685a672b74550ca0dbf8a816257c84c9c44fd34d Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 28 Jun 2012 15:37:55 -0700 Subject: Cleaning up new files in preparation for merge into viewer-release. --- indra/newview/llfloaterpathfindinglinksets.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index ae83bcfaee..15490ff87e 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -30,11 +30,14 @@ #include "llfloaterpathfindinglinksets.h" +#include + #include #include "llagent.h" #include "llbutton.h" #include "llcombobox.h" +#include "llfloaterpathfindingobjects.h" #include "llfloaterreg.h" #include "lllineeditor.h" #include "llnotificationsutil.h" @@ -46,6 +49,7 @@ #include "lltextbase.h" #include "lltextvalidate.h" #include "lluicolortable.h" +#include "lluictrl.h" #include "v3math.h" #include "v4color.h" -- cgit v1.2.3 From fcc810c67d251247c1c4f26dfe1dcde0450d7ad5 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 28 Jun 2012 16:09:11 -0700 Subject: Ensuring that the linksets filters are cleared before attempting to select an object from right-click in-world menu. --- indra/newview/llfloaterpathfindinglinksets.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 15490ff87e..d6a08eeb23 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -68,6 +68,7 @@ void LLFloaterPathfindingLinksets::openLinksetsWithSelectedObjects() { LLFloaterPathfindingLinksets *linksetsFloater = LLFloaterReg::getTypedInstance("pathfinding_linksets"); + linksetsFloater->clearFilters(); linksetsFloater->showFloaterWithSelectionObjects(); } @@ -287,12 +288,13 @@ void LLFloaterPathfindingLinksets::requestSetLinksets(LLPathfindingObjectListPtr void LLFloaterPathfindingLinksets::onApplyAllFilters() { - applyFilters(); + rebuildObjectsScrollList(); } void LLFloaterPathfindingLinksets::onClearFiltersClicked() { clearFilters(); + rebuildObjectsScrollList(); } void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl) @@ -322,17 +324,11 @@ void LLFloaterPathfindingLinksets::onApplyChangesClicked() applyEdit(); } -void LLFloaterPathfindingLinksets::applyFilters() -{ - rebuildObjectsScrollList(); -} - void LLFloaterPathfindingLinksets::clearFilters() { mFilterByName->clear(); mFilterByDescription->clear(); setFilterLinksetUse(LLPathfindingLinkset::kUnknown); - rebuildObjectsScrollList(); } void LLFloaterPathfindingLinksets::updateEditFieldValues() -- cgit v1.2.3 From 9366a7775c811b8f2e0ac24872d7d744ff2b54c5 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Fri, 29 Jun 2012 17:36:40 -0700 Subject: PATH-797: BUGFIX Altering how the rows are being added to the scrolllist widget to avoid a regression that occurred after merging from viewer-release recently caused the time to load a large number of elements to increase substainally. --- indra/newview/llfloaterpathfindinglinksets.cpp | 15 --------------- 1 file changed, 15 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index d6a08eeb23..9516b4b0c1 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -366,47 +366,37 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin { columns[0]["column"] = "name"; columns[0]["value"] = getString("linkset_terrain_name"); - columns[0]["font"] = "SANSSERIF"; columns[1]["column"] = "description"; columns[1]["value"] = getString("linkset_terrain_description"); - columns[1]["font"] = "SANSSERIF"; columns[2]["column"] = "owner"; columns[2]["value"] = getString("linkset_terrain_owner"); - columns[2]["font"] = "SANSSERIF"; columns[3]["column"] = "land_impact"; columns[3]["value"] = getString("linkset_terrain_land_impact"); - columns[3]["font"] = "SANSSERIF"; columns[4]["column"] = "dist_from_you"; columns[4]["value"] = getString("linkset_terrain_dist_from_you"); - columns[4]["font"] = "SANSSERIF"; } else { columns[0]["column"] = "name"; columns[0]["value"] = pLinksetPtr->getName(); - columns[0]["font"] = "SANSSERIF"; columns[1]["column"] = "description"; columns[1]["value"] = pLinksetPtr->getDescription(); - columns[1]["font"] = "SANSSERIF"; columns[2]["column"] = "owner"; columns[2]["value"] = (pLinksetPtr->hasOwner() ? (pLinksetPtr->hasOwnerName() ? pLinksetPtr->getOwnerName() : getString("linkset_owner_loading")) : getString("linkset_owner_unknown")); - columns[2]["font"] = "SANSSERIF"; columns[3]["column"] = "land_impact"; columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); - columns[3]["font"] = "SANSSERIF"; columns[4]["column"] = "dist_from_you"; columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); - columns[4]["font"] = "SANSSERIF"; } columns[5]["column"] = "linkset_use"; @@ -428,23 +418,18 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin linksetUse += (" " + getString("linkset_is_restricted_non_volume_state")); } columns[5]["value"] = linksetUse; - columns[5]["font"] = "SANSSERIF"; columns[6]["column"] = "a_percent"; columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); - columns[6]["font"] = "SANSSERIF"; columns[7]["column"] = "b_percent"; columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); - columns[7]["font"] = "SANSSERIF"; columns[8]["column"] = "c_percent"; columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); - columns[8]["font"] = "SANSSERIF"; columns[9]["column"] = "d_percent"; columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); - columns[9]["font"] = "SANSSERIF"; LLSD element; element["id"] = pLinksetPtr->getUUID().asString(); -- cgit v1.2.3 From 241a446224013f76fee83e786568862068b60309 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 10 Jul 2012 12:30:15 -0700 Subject: Adding the example use type labels to the pathfinding linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 9516b4b0c1..bb0ac8f4b9 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -86,12 +86,16 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed) mEditLinksetUseDynamicPhantom(NULL), mLabelWalkabilityCoefficients(NULL), mLabelEditA(NULL), + mLabelSuggestedUseA(NULL), mEditA(NULL), mLabelEditB(NULL), + mLabelSuggestedUseB(NULL), mEditB(NULL), mLabelEditC(NULL), + mLabelSuggestedUseC(NULL), mEditC(NULL), mLabelEditD(NULL), + mLabelSuggestedUseD(NULL), mEditD(NULL), mApplyEditsButton(NULL), mBeaconColor() @@ -158,6 +162,9 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLabelEditA = findChild("edit_a_label"); llassert(mLabelEditA != NULL); + mLabelSuggestedUseA = findChild("suggested_use_a_label"); + llassert(mLabelSuggestedUseA != NULL); + mEditA = findChild("edit_a_value"); llassert(mEditA != NULL); mEditA->setPrevalidate(LLTextValidate::validateNonNegativeS32); @@ -166,6 +173,9 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLabelEditB = findChild("edit_b_label"); llassert(mLabelEditB != NULL); + mLabelSuggestedUseB = findChild("suggested_use_b_label"); + llassert(mLabelSuggestedUseB != NULL); + mEditB = findChild("edit_b_value"); llassert(mEditB != NULL); mEditB->setPrevalidate(LLTextValidate::validateNonNegativeS32); @@ -174,6 +184,9 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLabelEditC = findChild("edit_c_label"); llassert(mLabelEditC != NULL); + mLabelSuggestedUseC = findChild("suggested_use_c_label"); + llassert(mLabelSuggestedUseC != NULL); + mEditC = findChild("edit_c_value"); llassert(mEditC != NULL); mEditC->setPrevalidate(LLTextValidate::validateNonNegativeS32); @@ -182,6 +195,9 @@ BOOL LLFloaterPathfindingLinksets::postBuild() mLabelEditD = findChild("edit_d_label"); llassert(mLabelEditD != NULL); + mLabelSuggestedUseD = findChild("suggested_use_d_label"); + llassert(mLabelSuggestedUseD != NULL); + mEditD = findChild("edit_d_value"); llassert(mEditD != NULL); mEditD->setPrevalidate(LLTextValidate::validateNonNegativeS32); @@ -500,6 +516,10 @@ void LLFloaterPathfindingLinksets::updateStateOnEditFields() mLabelEditB->setEnabled(isEditEnabled); mLabelEditC->setEnabled(isEditEnabled); mLabelEditD->setEnabled(isEditEnabled); + mLabelSuggestedUseA->setEnabled(isEditEnabled); + mLabelSuggestedUseB->setEnabled(isEditEnabled); + mLabelSuggestedUseC->setEnabled(isEditEnabled); + mLabelSuggestedUseD->setEnabled(isEditEnabled); mEditA->setEnabled(isEditEnabled); mEditB->setEnabled(isEditEnabled); mEditC->setEnabled(isEditEnabled); -- cgit v1.2.3 From 5cc36ff2285aeed2617e71c7cb7060c825dbd203 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Thu, 12 Jul 2012 18:40:51 -0700 Subject: Cleaning up some runtime output warning messages about invalid XUI syntax. --- indra/newview/llfloaterpathfindinglinksets.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index bb0ac8f4b9..ecb68a786a 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -459,7 +459,6 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListData(const std::stri LLSD columns; columns[0]["column"] = "name"; - columns[0]["relwidth"] = static_cast(100.0f); columns[0]["value"] = pLabel; columns[0]["font"] = "SANSSERIF"; -- cgit v1.2.3 From b8cca9c6e66fa761fa104645effb1b672a8a99ae Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 24 Jul 2012 17:50:24 -0700 Subject: Adding a group identifier to the group objects in the pathfinding linksets and characters floaters. --- indra/newview/llfloaterpathfindinglinksets.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index ecb68a786a..877bd0822d 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -404,9 +404,13 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin columns[1]["value"] = pLinksetPtr->getDescription(); columns[2]["column"] = "owner"; - columns[2]["value"] = (pLinksetPtr->hasOwner() ? - (pLinksetPtr->hasOwnerName() ? pLinksetPtr->getOwnerName() : getString("linkset_owner_loading")) : - getString("linkset_owner_unknown")); + columns[2]["value"] = (pLinksetPtr->hasOwner() + ? (pLinksetPtr->hasOwnerName() + ? (pLinksetPtr->isGroupOwned() + ? (pLinksetPtr->getOwnerName() + " " + getString("linkset_owner_group")) + : pLinksetPtr->getOwnerName()) + : getString("linkset_owner_loading")) + : getString("linkset_owner_unknown")); columns[3]["column"] = "land_impact"; columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); -- cgit v1.2.3 From 683a96a5f1e9111d62710fe621d52192d34079ed Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 14 Aug 2012 14:54:29 -0700 Subject: PATH-849: Refactoring the behavior after loading the owner name of a pathfinding object into the avatar name cache so that each object can simply update its respective row in the scroll list rather than rebuilding from scratch after all names are loaded. --- indra/newview/llfloaterpathfindinglinksets.cpp | 42 ++++++++++---------------- 1 file changed, 16 insertions(+), 26 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 877bd0822d..dd28f82db1 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -215,7 +215,7 @@ void LLFloaterPathfindingLinksets::requestGetObjects() LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3)); } -LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingLinksets::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr) { llassert(pObjectListPtr != NULL); llassert(!pObjectListPtr->isEmpty()); @@ -227,7 +227,6 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath bool isFilteringDescription = !descriptionFilter.empty(); bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); - LLSD scrollListData = LLSD::emptyArray(); const LLVector3& avatarPosition = gAgent.getPositionAgent(); if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) @@ -236,22 +235,21 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath LLStringUtil::toUpper(descriptionFilter); for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter) { - const LLPathfindingLinkset *linksetPtr = dynamic_cast(objectIter->second.get()); + const LLPathfindingObjectPtr objectPtr = objectIter->second; + const LLPathfindingLinkset *linksetPtr = dynamic_cast(objectPtr.get()); + llassert(linksetPtr != NULL); + std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName()); std::string linksetDescription = linksetPtr->getDescription(); LLStringUtil::toUpper(linksetName); LLStringUtil::toUpper(linksetDescription); + if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) && (!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) && (!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter))) { - LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); - scrollListData.append(element); - - if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) - { - rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); - } + LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); + addObjectToScrollList(objectPtr, scrollListItemData); } } } @@ -259,18 +257,14 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath { for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin(); objectIter != pObjectListPtr->end(); ++objectIter) { - const LLPathfindingLinkset *linksetPtr = dynamic_cast(objectIter->second.get()); - LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); - scrollListData.append(element); + const LLPathfindingObjectPtr objectPtr = objectIter->second; + const LLPathfindingLinkset *linksetPtr = dynamic_cast(objectPtr.get()); + llassert(linksetPtr != NULL); - if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) - { - rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); - } + LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); + addObjectToScrollList(objectPtr, scrollListItemData); } } - - return scrollListData; } void LLFloaterPathfindingLinksets::updateControlsOnScrollListChange() @@ -373,10 +367,10 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues() } } -LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const +LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const { llassert(pLinksetPtr != NULL); - LLSD columns; + LLSD columns = LLSD::emptyArray(); if (pLinksetPtr->isTerrain()) { @@ -451,11 +445,7 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin columns[9]["column"] = "d_percent"; columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); - LLSD element; - element["id"] = pLinksetPtr->getUUID().asString(); - element["column"] = columns; - - return element; + return columns; } LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const -- cgit v1.2.3 From fddaf38f892aa608f9db9c034f6c583d638b6fcf Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 14 Aug 2012 16:04:12 -0700 Subject: PATH-849: Group objects were losing their [group] identifier following the last commit. This should fix that issue. --- indra/newview/llfloaterpathfindinglinksets.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index dd28f82db1..4d3b7fca91 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -280,6 +280,22 @@ S32 LLFloaterPathfindingLinksets::getNameColumnIndex() const return 0; } +S32 LLFloaterPathfindingLinksets::getOwnerNameColumnIndex() const +{ + return 2; +} + +std::string LLFloaterPathfindingLinksets::getOwnerName(const LLPathfindingObject *pObject) const +{ + return (pObject->hasOwner() + ? (pObject->hasOwnerName() + ? (pObject->isGroupOwned() + ? (pObject->getOwnerName() + " " + getString("linkset_owner_group")) + : pObject->getOwnerName()) + : getString("linkset_owner_loading")) + : getString("linkset_owner_unknown")); +} + const LLColor4 &LLFloaterPathfindingLinksets::getBeaconColor() const { return mBeaconColor; @@ -398,13 +414,7 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfi columns[1]["value"] = pLinksetPtr->getDescription(); columns[2]["column"] = "owner"; - columns[2]["value"] = (pLinksetPtr->hasOwner() - ? (pLinksetPtr->hasOwnerName() - ? (pLinksetPtr->isGroupOwned() - ? (pLinksetPtr->getOwnerName() + " " + getString("linkset_owner_group")) - : pLinksetPtr->getOwnerName()) - : getString("linkset_owner_loading")) - : getString("linkset_owner_unknown")); + columns[2]["value"] = getOwnerName(pLinksetPtr); columns[3]["column"] = "land_impact"; columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); -- cgit v1.2.3 From 0517f5f487550f0616bc2ca062f94c3ccf63374e Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 14 Aug 2012 16:39:43 -0700 Subject: PATH-854: Adding support to display whether linksets are scripted or not in the pathfinding linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 46 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 18 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 4d3b7fca91..651be274d9 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -399,11 +399,14 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfi columns[2]["column"] = "owner"; columns[2]["value"] = getString("linkset_terrain_owner"); - columns[3]["column"] = "land_impact"; - columns[3]["value"] = getString("linkset_terrain_land_impact"); + columns[3]["column"] = "scripted"; + columns[3]["value"] = getString("linkset_terrain_scripted"); - columns[4]["column"] = "dist_from_you"; - columns[4]["value"] = getString("linkset_terrain_dist_from_you"); + columns[4]["column"] = "land_impact"; + columns[4]["value"] = getString("linkset_terrain_land_impact"); + + columns[5]["column"] = "dist_from_you"; + columns[5]["value"] = getString("linkset_terrain_dist_from_you"); } else { @@ -416,14 +419,21 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfi columns[2]["column"] = "owner"; columns[2]["value"] = getOwnerName(pLinksetPtr); - columns[3]["column"] = "land_impact"; - columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + columns[3]["column"] = "scripted"; + columns[3]["value"] = (pLinksetPtr->hasIsScripted() + ? (pLinksetPtr->isScripted() + ? getString("linkset_is_scripted") + : getString("linkset_is_not_scripted")) + : getString("linkset_is_unknown_scripted")); + + columns[4]["column"] = "land_impact"; + columns[4]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); - columns[4]["column"] = "dist_from_you"; - columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); + columns[5]["column"] = "dist_from_you"; + columns[5]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); } - columns[5]["column"] = "linkset_use"; + columns[6]["column"] = "linkset_use"; std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse()); if (pLinksetPtr->isTerrain()) { @@ -441,19 +451,19 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfi { linksetUse += (" " + getString("linkset_is_restricted_non_volume_state")); } - columns[5]["value"] = linksetUse; + columns[6]["value"] = linksetUse; - columns[6]["column"] = "a_percent"; - columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); + columns[7]["column"] = "a_percent"; + columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); - columns[7]["column"] = "b_percent"; - columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); + columns[8]["column"] = "b_percent"; + columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); - columns[8]["column"] = "c_percent"; - columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); + columns[9]["column"] = "c_percent"; + columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); - columns[9]["column"] = "d_percent"; - columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); + columns[10]["column"] = "d_percent"; + columns[10]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); return columns; } -- cgit v1.2.3 From 2e338ef2efcfa2f1812506201d1ff5d61a13310f Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Tue, 14 Aug 2012 17:58:26 -0700 Subject: PATH-856: Adding a new notification to indicate when the user will be toggling the phantom flag of a linkset through the Pathfinding Linksets floater. --- indra/newview/llfloaterpathfindinglinksets.cpp | 45 +++++++++++++++++++++----- 1 file changed, 37 insertions(+), 8 deletions(-) (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp') diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 651be274d9..0fe0e151fb 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -500,6 +500,23 @@ bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindin return isShowWarning; } +bool LLFloaterPathfindingLinksets::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ + bool isShowWarning = false; + + if (pLinksetUse != LLPathfindingLinkset::kUnknown) + { + LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); + if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) + { + const LLPathfindingLinksetList *linksetList = dynamic_cast(selectedObjects.get()); + isShowWarning = linksetList->isShowPhantomToggleWarning(pLinksetUse); + } + } + + return isShowWarning; +} + bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const { bool isShowWarning = false; @@ -569,29 +586,41 @@ void LLFloaterPathfindingLinksets::applyEdit() { LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); + bool showPhantomToggleWarning = isShowPhantomToggleWarning(linksetUse); bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse); bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse); - if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) + if (showPhantomToggleWarning || showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) { LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse); LLSD substitutions; substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse); substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); - std::string notificationName; - if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning) + // Build one of the following notifications names + // - PathfindingLinksets_WarnOnPhantom + // - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted + // - PathfindingLinksets_WarnOnPhantom_MismatchOnVolume + // - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume + // - PathfindingLinksets_MismatchOnRestricted + // - PathfindingLinksets_MismatchOnVolume + // - PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume + + std::string notificationName = "PathfindingLinksets"; + + if (showPhantomToggleWarning) { - notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"; + notificationName += "_WarnOnPhantom"; } - else if (showUnmodifiablePhantomWarning) + if (showUnmodifiablePhantomWarning) { - notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted"; + notificationName += "_MismatchOnRestricted"; } - else + if (showCannotBeVolumeWarning) { - notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume"; + notificationName += "_MismatchOnVolume"; } + LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2)); } else -- cgit v1.2.3