diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 194c7d35bbff89a9a7db0c77b97d9891e1372fed..2e4c537942c3775b0e6f57ee040cecf9b9249756 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -162,6 +162,7 @@ set(viewer_SOURCE_FILES llfavoritesbar.cpp llfeaturemanager.cpp llfilepicker.cpp + llfilteredpathfindinglinksets.cpp llfilteredwearablelist.cpp llfirstuse.cpp llflexibleobject.cpp @@ -415,7 +416,7 @@ set(viewer_SOURCE_FILES llparcelselection.cpp llparticipantlist.cpp llpatchvertexarray.cpp - llpathfindinglinksets.cpp + llpathfindinglinkset.cpp llphysicsmotion.cpp llphysicsshapebuilderutil.cpp llplacesinventorybridge.cpp @@ -722,6 +723,7 @@ set(viewer_HEADER_FILES llfavoritesbar.h llfeaturemanager.h llfilepicker.h + llfilteredpathfindinglinksets.h llfilteredwearablelist.h llfirstuse.h llflexibleobject.h @@ -964,7 +966,7 @@ set(viewer_HEADER_FILES llparcelselection.h llparticipantlist.h llpatchvertexarray.h - llpathfindinglinksets.h + llpathfindinglinkset.h llphysicsmotion.h llphysicsshapebuilderutil.h llplacesinventorybridge.h diff --git a/indra/newview/llfilteredpathfindinglinksets.cpp b/indra/newview/llfilteredpathfindinglinksets.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c956a5752b0c8857b4553a2c00c0b1b2d9576ace --- /dev/null +++ b/indra/newview/llfilteredpathfindinglinksets.cpp @@ -0,0 +1,313 @@ +/** + * @file llfilteredpathfindinglinksets.h + * @author William Todd Stinson + * @brief Class to implement the filtering of a set of pathfinding linksets + * + * $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 <string> +#include <map> + +#include "llsd.h" +#include "lluuid.h" +#include "llpathfindinglinkset.h" +#include "llfilteredpathfindinglinksets.h" + +//--------------------------------------------------------------------------- +// 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 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; +} + +//--------------------------------------------------------------------------- +// LLFilteredPathfindingLinksets +//--------------------------------------------------------------------------- + +LLFilteredPathfindingLinksets::LLFilteredPathfindingLinksets() + : mAllLinksets(), + mFilteredLinksets(), + mIsFiltersDirty(false), + mNameFilter(), + mDescriptionFilter(), + mIsWalkableFilter(true), + mIsObstacleFilter(true), + mIsIgnoredFilter(true) +{ +} + +LLFilteredPathfindingLinksets::LLFilteredPathfindingLinksets(const LLSD& pNavMeshData) + : mAllLinksets(), + mFilteredLinksets(), + mIsFiltersDirty(false), + mNameFilter(), + mDescriptionFilter(), + mIsWalkableFilter(true), + mIsObstacleFilter(true), + mIsIgnoredFilter(true) +{ + setPathfindingLinksets(pNavMeshData); +} + +LLFilteredPathfindingLinksets::LLFilteredPathfindingLinksets(const LLFilteredPathfindingLinksets& 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) +{ +} + +LLFilteredPathfindingLinksets::~LLFilteredPathfindingLinksets() +{ + clearPathfindingLinksets(); +} + +void LLFilteredPathfindingLinksets::setPathfindingLinksets(const LLSD& pNavMeshData) +{ + clearPathfindingLinksets(); + + 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<std::string, LLPathfindingLinkset>(uuid, linkset)); + } + + mIsFiltersDirty = true; +} + +void LLFilteredPathfindingLinksets::updatePathfindingLinksets(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<std::string, LLPathfindingLinkset>(uuid, linkset)); + } + else + { + linksetIter->second = linkset; + } + } + + mIsFiltersDirty = true; +} + +void LLFilteredPathfindingLinksets::clearPathfindingLinksets() +{ + mAllLinksets.clear(); + mFilteredLinksets.clear(); + mIsFiltersDirty = false; +} + +const LLFilteredPathfindingLinksets::PathfindingLinksetMap& LLFilteredPathfindingLinksets::getAllLinksets() const +{ + return mAllLinksets; +} + +const LLFilteredPathfindingLinksets::PathfindingLinksetMap& LLFilteredPathfindingLinksets::getFilteredLinksets() +{ + if (!isFiltersActive()) + { + return mAllLinksets; + } + else + { + applyFilters(); + return mFilteredLinksets; + } +} + +BOOL LLFilteredPathfindingLinksets::isFiltersActive() const +{ + return (mNameFilter.isActive() || mDescriptionFilter.isActive() || !mIsWalkableFilter || !mIsObstacleFilter || !mIsIgnoredFilter); +} + +void LLFilteredPathfindingLinksets::setNameFilter(const std::string& pNameFilter) +{ + mIsFiltersDirty = (mNameFilter.set(pNameFilter) || mIsFiltersDirty); +} + +const std::string& LLFilteredPathfindingLinksets::getNameFilter() const +{ + return mNameFilter.get(); +} + +void LLFilteredPathfindingLinksets::setDescriptionFilter(const std::string& pDescriptionFilter) +{ + mIsFiltersDirty = (mDescriptionFilter.set(pDescriptionFilter) || mIsFiltersDirty); +} + +const std::string& LLFilteredPathfindingLinksets::getDescriptionFilter() const +{ + return mDescriptionFilter.get(); +} + +void LLFilteredPathfindingLinksets::setWalkableFilter(BOOL pWalkableFilter) +{ + mIsFiltersDirty = (mIsFiltersDirty || (mIsWalkableFilter == pWalkableFilter)); + mIsWalkableFilter = pWalkableFilter; +} + +BOOL LLFilteredPathfindingLinksets::isWalkableFilter() const +{ + return mIsWalkableFilter; +} + +void LLFilteredPathfindingLinksets::setObstacleFilter(BOOL pObstacleFilter) +{ + mIsFiltersDirty = (mIsFiltersDirty || (mIsObstacleFilter == pObstacleFilter)); + mIsObstacleFilter = pObstacleFilter; +} + +BOOL LLFilteredPathfindingLinksets::isObstacleFilter() const +{ + return mIsObstacleFilter; +} + +void LLFilteredPathfindingLinksets::setIgnoredFilter(BOOL pIgnoredFilter) +{ + mIsFiltersDirty = (mIsFiltersDirty || (mIsIgnoredFilter == pIgnoredFilter)); + mIsIgnoredFilter = pIgnoredFilter; +} + +BOOL LLFilteredPathfindingLinksets::isIgnoredFilter() const +{ + return mIsIgnoredFilter; +} + +void LLFilteredPathfindingLinksets::clearFilters() +{ + mNameFilter.clear(); + mDescriptionFilter.clear(); + mIsWalkableFilter = true; + mIsObstacleFilter = true; + mIsIgnoredFilter = true; + mIsFiltersDirty = false; +} + +void LLFilteredPathfindingLinksets::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<std::string, LLPathfindingLinkset>(uuid, linkset)); + } + } + + mIsFiltersDirty = false; +} + +BOOL LLFilteredPathfindingLinksets::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()))); +} diff --git a/indra/newview/llfilteredpathfindinglinksets.h b/indra/newview/llfilteredpathfindinglinksets.h new file mode 100644 index 0000000000000000000000000000000000000000..afd2b2b01d2cb123df85a952b07edd7f1cba5765 --- /dev/null +++ b/indra/newview/llfilteredpathfindinglinksets.h @@ -0,0 +1,111 @@ +/** + * @file llfilteredpathfindinglinksets.h + * @author William Todd Stinson + * @brief Class to implement the filtering of a set of pathfinding linksets + * + * $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$ + */ + +#ifndef LL_FILTEREDPATHFINDINGLINKSETS_H +#define LL_FILTEREDPATHFINDINGLINKSETS_H + +#include <string> +#include <map> + +class LLSD; +class LLPathfindingLinkset; + +class FilterString +{ +public: + FilterString(); + FilterString(const std::string& pFilter); + virtual ~FilterString(); + + const std::string& get() const; + bool set(const std::string& pFilter); + void clear(); + + bool isActive() const; + bool doesMatch(const std::string& pTestString) const; + +protected: + +private: + std::string mFilter; + std::string mUpperFilter; +}; + +class LLFilteredPathfindingLinksets +{ +public: + typedef std::map<std::string, LLPathfindingLinkset> PathfindingLinksetMap; + + LLFilteredPathfindingLinksets(); + LLFilteredPathfindingLinksets(const LLSD& pNavMeshData); + LLFilteredPathfindingLinksets(const LLFilteredPathfindingLinksets& pOther); + virtual ~LLFilteredPathfindingLinksets(); + + void setPathfindingLinksets(const LLSD& pNavMeshData); + void updatePathfindingLinksets(const LLSD& pNavMeshData); + void clearPathfindingLinksets(); + + const PathfindingLinksetMap& getAllLinksets() const; + const PathfindingLinksetMap& getFilteredLinksets(); + + BOOL isFiltersActive() const; + + void setNameFilter(const std::string& pNameFilter); + const std::string& getNameFilter() const; + + void setDescriptionFilter(const std::string& pDescriptionFilter); + const std::string& getDescriptionFilter() const; + + void setWalkableFilter(BOOL pWalkableFilter); + BOOL isWalkableFilter() const; + + void setObstacleFilter(BOOL pObstacleFilter); + BOOL isObstacleFilter() const; + + void setIgnoredFilter(BOOL pIgnoredFilter); + BOOL isIgnoredFilter() const; + + void clearFilters(); + +protected: + +private: + PathfindingLinksetMap mAllLinksets; + PathfindingLinksetMap mFilteredLinksets; + + bool mIsFiltersDirty; + FilterString mNameFilter; + FilterString mDescriptionFilter; + BOOL mIsWalkableFilter; + BOOL mIsObstacleFilter; + BOOL mIsIgnoredFilter; + + void applyFilters(); + BOOL doesMatchFilters(const LLPathfindingLinkset& pLinkset) const; +}; + +#endif // LL_FILTEREDPATHFINDINGLINKSETS_H diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 433e3c986654924029a32e5eba5d6cb8d14eac4e..e2846d36f3286632df32893bc8967eac81473472 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 @@ class NavMeshDataPutResponder : public LLHTTPClient::Responder 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<std::string, LLPathfindingLinkset>(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<std::string, LLPathfindingLinkset>(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<std::string, LLPathfindingLinkset>(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<S32>(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<LLScrollListItem*>::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); diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index 739e52ccef4a1715ffd6a2204f86d0b95b2fbd71..bb379871603ee3969ae9ef92763624f5b0446c05 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -32,7 +32,8 @@ #include "v3math.h" #include "llfloater.h" #include "lluuid.h" -#include "llpathfindinglinksets.h" +#include "llpathfindinglinkset.h" +#include "llfilteredpathfindinglinksets.h" class LLTextBase; class LLScrollListCtrl; @@ -41,75 +42,6 @@ class LLCheckBoxCtrl; class LLRadioGroup; class LLButton; -class FilterString -{ -public: - FilterString(); - FilterString(const std::string& pFilter); - FilterString(const FilterString& pOther); - virtual ~FilterString(); - - const std::string& get() const; - bool set(const std::string& pFilter); - void clear(); - - bool isActive() const; - bool doesMatch(const std::string& pTestString) const; - -protected: - -private: - std::string mFilter; - std::string mUpperFilter; -}; - -class PathfindingLinksets -{ -public: - typedef std::map<std::string, LLPathfindingLinkset> PathfindingLinksetMap; - - PathfindingLinksets(); - PathfindingLinksets(const LLSD& pNavMeshData); - PathfindingLinksets(const PathfindingLinksets& pOther); - virtual ~PathfindingLinksets(); - - void setNavMeshData(const LLSD& pNavMeshData); - void updateNavMeshData(const LLSD& pNavMeshData); - void clearLinksets(); - - const PathfindingLinksetMap& getAllLinksets() const; - const PathfindingLinksetMap& getFilteredLinksets(); - - BOOL isFiltersActive() const; - void setNameFilter(const std::string& pNameFilter); - const std::string& getNameFilter() const; - void setDescriptionFilter(const std::string& pDescriptionFilter); - const std::string& getDescriptionFilter() const; - void setWalkableFilter(BOOL pWalkableFilter); - BOOL isWalkableFilter() const; - void setObstacleFilter(BOOL pObstacleFilter); - BOOL isObstacleFilter() const; - void setIgnoredFilter(BOOL pIgnoredFilter); - BOOL isIgnoredFilter() const; - void clearFilters(); - -protected: - -private: - PathfindingLinksetMap mAllLinksets; - PathfindingLinksetMap mFilteredLinksets; - - bool mIsFiltersDirty; - FilterString mNameFilter; - FilterString mDescriptionFilter; - BOOL mIsWalkableFilter; - BOOL mIsObstacleFilter; - BOOL mIsIgnoredFilter; - - void applyFilters(); - BOOL doesMatchFilters(const LLPathfindingLinkset& pLinkset) const; -}; - class LLFloaterPathfindingLinksets : public LLFloater { @@ -144,30 +76,30 @@ class LLFloaterPathfindingLinksets protected: private: - PathfindingLinksets mPathfindingLinksets; - EMessagingState mMessagingState; - LLScrollListCtrl *mLinksetsScrollList; - LLTextBase *mLinksetsStatus; - LLLineEditor *mFilterByName; - LLLineEditor *mFilterByDescription; - LLCheckBoxCtrl *mFilterByWalkable; - LLCheckBoxCtrl *mFilterByObstacle; - LLCheckBoxCtrl *mFilterByIgnored; - LLRadioGroup *mEditPathState; - LLUICtrl *mEditPathStateWalkable; - LLUICtrl *mEditPathStateObstacle; - LLUICtrl *mEditPathStateIgnored; - LLTextBase *mLabelWalkabilityCoefficients; - LLTextBase *mLabelEditA; - LLTextBase *mLabelEditB; - LLTextBase *mLabelEditC; - LLTextBase *mLabelEditD; - LLLineEditor *mEditA; - LLLineEditor *mEditB; - LLLineEditor *mEditC; - LLLineEditor *mEditD; - LLCheckBoxCtrl *mEditPhantom; - LLButton *mApplyEdits; + LLFilteredPathfindingLinksets mPathfindingLinksets; + EMessagingState mMessagingState; + LLScrollListCtrl *mLinksetsScrollList; + LLTextBase *mLinksetsStatus; + LLLineEditor *mFilterByName; + LLLineEditor *mFilterByDescription; + LLCheckBoxCtrl *mFilterByWalkable; + LLCheckBoxCtrl *mFilterByObstacle; + LLCheckBoxCtrl *mFilterByIgnored; + LLRadioGroup *mEditPathState; + LLUICtrl *mEditPathStateWalkable; + LLUICtrl *mEditPathStateObstacle; + LLUICtrl *mEditPathStateIgnored; + LLTextBase *mLabelWalkabilityCoefficients; + LLTextBase *mLabelEditA; + LLTextBase *mLabelEditB; + LLTextBase *mLabelEditC; + LLTextBase *mLabelEditD; + LLLineEditor *mEditA; + LLLineEditor *mEditB; + LLLineEditor *mEditC; + LLLineEditor *mEditD; + LLCheckBoxCtrl *mEditPhantom; + LLButton *mApplyEdits; // Does its own instance management, so clients not allowed // to allocate or destroy. diff --git a/indra/newview/llpathfindinglinksets.cpp b/indra/newview/llpathfindinglinkset.cpp similarity index 96% rename from indra/newview/llpathfindinglinksets.cpp rename to indra/newview/llpathfindinglinkset.cpp index 57623e0e43006564fc6cce56c89f217beb03e9b8..bfe851d8ee67fd3f0827248c8d273c563af96c4b 100644 --- a/indra/newview/llpathfindinglinksets.cpp +++ b/indra/newview/llpathfindinglinkset.cpp @@ -26,7 +26,7 @@ */ #include "llviewerprecompiledheaders.h" -#include "llpathfindinglinksets.h" +#include "llpathfindinglinkset.h" #include "llsd.h" #include "v3math.h" #include "lluuid.h" diff --git a/indra/newview/llpathfindinglinksets.h b/indra/newview/llpathfindinglinkset.h similarity index 94% rename from indra/newview/llpathfindinglinksets.h rename to indra/newview/llpathfindinglinkset.h index e632be5257bb3ab383d0cf1cb170dab071312b86..c6165907d014da7d03709c7e7b3c5c9248ac2885 100644 --- a/indra/newview/llpathfindinglinksets.h +++ b/indra/newview/llpathfindinglinkset.h @@ -1,5 +1,5 @@ /** - * @file llpathfindinglinksets.h + * @file llpathfindinglinkset.h * @author William Todd Stinson * @brief Definition of a pathfinding linkset that contains various properties required for havok pathfinding. * @@ -25,8 +25,8 @@ * $/LicenseInfo$ */ -#ifndef LL_LLPATHFINDINGLINKSETS_H -#define LL_LLPATHFINDINGLINKSETS_H +#ifndef LL_LLPATHFINDINGLINKSET_H +#define LL_LLPATHFINDINGLINKSET_H #include "v3math.h" #include "lluuid.h" @@ -105,4 +105,4 @@ class LLPathfindingLinkset S32 mWalkabilityCoefficientD; }; -#endif // LL_LLFLOATERPATHFINDINGLINKSETS_H +#endif // LL_LLPATHFINDINGLINKSET_H