diff options
| -rw-r--r-- | indra/newview/llfloaterpathfindinglinksets.cpp | 258 | ||||
| -rw-r--r-- | indra/newview/llfloaterpathfindinglinksets.h | 38 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml | 88 | 
3 files changed, 268 insertions, 116 deletions
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<LLCheckBoxCtrl>("filter_by_fixed");
 -	llassert(mFilterByFixed != NULL);
 -	mFilterByFixed->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
 -
  	mFilterByWalkable = findChild<LLCheckBoxCtrl>("filter_by_walkable");
  	llassert(mFilterByWalkable != NULL);
  	mFilterByWalkable->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
 -	mEditFixed = findChild<LLCheckBoxCtrl>("edit_fixed_value");
 -	llassert(mEditFixed != NULL);
 +	mFilterByObstacle = findChild<LLCheckBoxCtrl>("filter_by_obstacle");
 +	llassert(mFilterByObstacle != NULL);
 +	mFilterByObstacle->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
 -	mEditWalkable = findChild<LLCheckBoxCtrl>("edit_walkable_value");
 -	llassert(mEditWalkable != NULL);
 +	mFilterByIgnored = findChild<LLCheckBoxCtrl>("filter_by_ignored");
 +	llassert(mFilterByIgnored != NULL);
 +	mFilterByIgnored->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
 -	mEditPhantom = findChild<LLCheckBoxCtrl>("edit_phantom_value");
 -	llassert(mEditPhantom != NULL);
 +	mEditPathState = findChild<LLRadioGroup>("edit_path_state");
 +	llassert(mEditPathState != NULL);
  	mLabelWalkabilityCoefficients = findChild<LLTextBase>("walkability_coefficients_label");
  	llassert(mLabelWalkabilityCoefficients != NULL);
 @@ -629,6 +693,9 @@ BOOL LLFloaterPathfindingLinksets::postBuild()  	llassert(mEditD != NULL);
  	mEditD->setPrevalidate(LLTextValidate::validatePositiveS32);
 +	mEditPhantom = findChild<LLCheckBoxCtrl>("edit_phantom_value");
 +	llassert(mEditPhantom != NULL);
 +
  	mApplyEdits = findChild<LLButton>("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<LLScrollListItem*> 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<LLScrollListItem*> 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<S32>(atoi(bString.c_str()));
  		S32 cValue = static_cast<S32>(atoi(cString.c_str()));
  		S32 dValue = static_cast<S32>(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<F32>(aValue) / 100.0f;
  		LLSD b = static_cast<F32>(bValue) / 100.0f;
  		LLSD c = static_cast<F32>(cValue) / 100.0f;
  		LLSD d = static_cast<F32>(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
  //---------------------------------------------------------------------------
 diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index 81218dd8f2..02d90accf1 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -37,11 +37,19 @@ class LLTextBase;  class LLScrollListCtrl;
  class LLLineEditor;
  class LLCheckBoxCtrl;
 +class LLRadioGroup;
  class LLButton;
  class PathfindingLinkset
  {
  public:
 +	typedef enum
 +	{
 +		kWalkable,
 +		kObstacle,
 +		kIgnored
 +	} EPathState;
 +
  	PathfindingLinkset(const std::string &pUUID, const LLSD &pNavMeshItem);
  	PathfindingLinkset(const PathfindingLinkset& pOther);
  	virtual ~PathfindingLinkset();
 @@ -54,11 +62,13 @@ public:  	U32                getLandImpact() const;
  	const LLVector3&   getPositionAgent() const;
 -	BOOL               isFixed() const;
 -	void               setFixed(BOOL pIsFixed);
 +	EPathState         getPathState() const;
 +	void               setPathState(EPathState pPathState);
 +	static BOOL        isPermanent(EPathState pPathState);
 +	static BOOL        isWalkable(EPathState pPathState);
 +	BOOL               isPermanent() const;
  	BOOL               isWalkable() const;
 -	void               setWalkable(BOOL pIsWalkable);
  	BOOL               isPhantom() const;
  	void               setPhantom(BOOL pIsPhantom);
 @@ -83,7 +93,7 @@ private:  	std::string mDescription;
  	U32         mLandImpact;
  	LLVector3   mLocation;
 -	BOOL        mIsFixed;
 +	BOOL        mIsPermanent;
  	BOOL        mIsWalkable;
  	BOOL        mIsPhantom;
  	S32         mA;
 @@ -136,10 +146,12 @@ public:  	const std::string& getNameFilter() const;
  	void               setDescriptionFilter(const std::string& pDescriptionFilter);
  	const std::string& getDescriptionFilter() const;
 -	void               setFixedFilter(BOOL pFixedFilter);
 -	BOOL               isFixedFilter() 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:
 @@ -151,8 +163,9 @@ private:  	bool         mIsFiltersDirty;
  	FilterString mNameFilter;
  	FilterString mDescriptionFilter;
 -	BOOL         mIsFixedFilter;
  	BOOL         mIsWalkableFilter;
 +	BOOL         mIsObstacleFilter;
 +	BOOL         mIsIgnoredFilter;
  	void applyFilters();
  	BOOL doesMatchFilters(const PathfindingLinkset& pLinkset) const;
 @@ -194,11 +207,10 @@ private:  	LLTextBase          *mLinksetsStatus;
  	LLLineEditor        *mFilterByName;
  	LLLineEditor        *mFilterByDescription;
 -	LLCheckBoxCtrl      *mFilterByFixed;
  	LLCheckBoxCtrl      *mFilterByWalkable;
 -	LLCheckBoxCtrl      *mEditFixed;
 -	LLCheckBoxCtrl      *mEditWalkable;
 -	LLCheckBoxCtrl      *mEditPhantom;
 +	LLCheckBoxCtrl      *mFilterByObstacle;
 +	LLCheckBoxCtrl      *mFilterByIgnored;
 +	LLRadioGroup        *mEditPathState;
  	LLTextBase          *mLabelWalkabilityCoefficients;
  	LLTextBase          *mLabelEditA;
  	LLTextBase          *mLabelEditB;
 @@ -208,6 +220,7 @@ private:  	LLLineEditor        *mEditB;
  	LLLineEditor        *mEditC;
  	LLLineEditor        *mEditD;
 +	LLCheckBoxCtrl      *mEditPhantom;
  	LLButton            *mApplyEdits;
  	// Does its own instance management, so clients not allowed
 @@ -247,6 +260,9 @@ private:  	void updateEditFields();
  	void applyEditFields();
  	void setEnableEditFields(BOOL pEnabled);
 +
 +	PathfindingLinkset::EPathState getPathState() const;
 +	void                           setPathState(PathfindingLinkset::EPathState pPathState);
  };
  #endif // LL_LLFLOATERPATHFINDINGLINKSETS_H
 diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml index 6f14315ead..a808a1f08f 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml @@ -36,8 +36,8 @@        layout="topleft"        left="20"        top="16" -      width="90"> -    Filter list by: +      width="67"> +    Filter by:    </text>    <text        height="13" @@ -48,10 +48,10 @@        length="1"        follows="left|top"        layout="topleft" -      left="109" +      left="87"        top="16" -      width="94"> -    Portion of name +      width="62"> +    Name    </text>    <line_editor        border_style="line" @@ -59,11 +59,11 @@        follows="top|left"        height="20"        layout="topleft" -      left_delta="93" +      left_delta="62"        top="11"        max_length_bytes="10"        name="filter_by_name" -      width="115" /> +      width="105" />    <text        height="13"        word_wrap="false" @@ -73,10 +73,10 @@        length="1"        follows="left|top"        layout="topleft" -      left="336" +      left="273"        top="16" -      width="132"> -    Portion of description +      width="88"> +    Description    </text>    <line_editor        border_style="line" @@ -84,26 +84,37 @@        follows="top|left"        height="20"        layout="topleft" -      left_delta="131" +      left_delta="88"        top="11"        max_length_bytes="10"        name="filter_by_description" -      width="115" /> +      width="106" />    <check_box        height="19" -      label="Fixed" +      initial_value="1" +      label="Walkable"        layout="topleft" -      left="591" +      left="481"        top="14" -      name="filter_by_fixed" +      name="filter_by_walkable"        width="90" />    <check_box        height="19" -      label="Walkable" +      initial_value="1" +      label="Obstacle"        layout="topleft" -      left="671" +      left="577"        top="14" -      name="filter_by_walkable" +      name="filter_by_obstacle" +      width="90" /> +  <check_box +      height="19" +      initial_value="1" +      label="Ignored" +      layout="topleft" +      left="674" +      top="14" +      name="filter_by_ignored"        width="90" />    <button        follows="right|top" @@ -242,21 +253,34 @@        width="910">      Select row(s) to edit attributes of linkset(s).  If a linkset is deleted or returned to inventory, attributes assigned to it will be lost.    </text> -  <check_box -      height="19" -      label="Fixed" -      layout="topleft" -      name="edit_fixed_value" -      top_pad="10" -      width="90" /> -  <check_box -      height="19" -      label="Walkable" +  <radio_group +      follows="top|left" +      height="55" +      value="1"        layout="topleft" -      name="edit_walkable_value" -      top_pad="5" -      left="38" -      width="90" /> +      left_delta="0" +      name="edit_path_state" +      top_delta="21" +      width="138"> +    <radio_item +        label="Walkable" +        layout="topleft" +        height="13" +        name="edit_pathing_state_walkable" +        value="1"/> +    <radio_item +        label="Obstacle" +        layout="topleft" +        height="13" +        name="edit_pathing_state_obstacle" +        value="2"/> +    <radio_item +        label="Ignored" +        layout="topleft" +        height="13" +        name="edit_pathing_state_ignored" +        value="3"/> +  </radio_group>    <text        height="13"        word_wrap="false"  | 
