PATH-225: Adding ability to filter and edit linksets using the pathing state values of walkable, obstacle, or ignored.

meow-7.2.2
Todd Stinson 2012-01-19 17:51:46 -08:00
parent 755ba8652b
commit 53175f835e
3 changed files with 270 additions and 118 deletions

View File

@ -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,14 +217,64 @@ 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::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::isPermanent() const
{
return mIsPermanent;
}
BOOL PathfindingLinkset::isWalkable() const
@ -227,11 +282,6 @@ BOOL PathfindingLinkset::isWalkable() const
return mIsWalkable;
}
void PathfindingLinkset::setWalkable(BOOL pIsWalkable)
{
mIsWalkable = pIsWalkable;
}
BOOL PathfindingLinkset::isPhantom() const
{
return mIsPhantom;
@ -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,17 +545,6 @@ 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));
@ -514,12 +556,35 @@ 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();
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
//---------------------------------------------------------------------------

View File

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

View File

@ -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"
<radio_group
follows="top|left"
height="55"
value="1"
layout="topleft"
name="edit_fixed_value"
top_pad="10"
width="90" />
<check_box
height="19"
label="Walkable"
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"