summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llfilteredpathfindinglinksets.cpp59
-rw-r--r--indra/newview/llfilteredpathfindinglinksets.h22
-rw-r--r--indra/newview/llfloaterpathfindinglinksets.cpp337
-rw-r--r--indra/newview/llfloaterpathfindinglinksets.h54
-rw-r--r--indra/newview/llpathfindinglinkset.cpp165
-rw-r--r--indra/newview/llpathfindinglinkset.h61
-rw-r--r--indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml864
7 files changed, 872 insertions, 690 deletions
diff --git a/indra/newview/llfilteredpathfindinglinksets.cpp b/indra/newview/llfilteredpathfindinglinksets.cpp
index aaff2bcc68..b76d95737c 100644
--- a/indra/newview/llfilteredpathfindinglinksets.cpp
+++ b/indra/newview/llfilteredpathfindinglinksets.cpp
@@ -116,9 +116,7 @@ LLFilteredPathfindingLinksets::LLFilteredPathfindingLinksets()
mIsFiltersDirty(false),
mNameFilter(),
mDescriptionFilter(),
- mIsWalkableFilter(true),
- mIsObstacleFilter(true),
- mIsIgnoredFilter(true)
+ mLinksetUseFilter(LLPathfindingLinkset::kUnknown)
{
}
@@ -128,9 +126,7 @@ LLFilteredPathfindingLinksets::LLFilteredPathfindingLinksets(const LLSD& pLinkse
mIsFiltersDirty(false),
mNameFilter(),
mDescriptionFilter(),
- mIsWalkableFilter(true),
- mIsObstacleFilter(true),
- mIsIgnoredFilter(true)
+ mLinksetUseFilter(LLPathfindingLinkset::kUnknown)
{
setPathfindingLinksets(pLinksetItems);
}
@@ -141,9 +137,7 @@ LLFilteredPathfindingLinksets::LLFilteredPathfindingLinksets(const LLFilteredPat
mIsFiltersDirty(pOther.mIsFiltersDirty),
mNameFilter(pOther.mNameFilter),
mDescriptionFilter(pOther.mDescriptionFilter),
- mIsWalkableFilter(pOther.mIsWalkableFilter),
- mIsObstacleFilter(pOther.mIsObstacleFilter),
- mIsIgnoredFilter(pOther.mIsIgnoredFilter)
+ mLinksetUseFilter(pOther.mLinksetUseFilter)
{
}
@@ -219,7 +213,8 @@ const LLFilteredPathfindingLinksets::PathfindingLinksetMap& LLFilteredPathfindin
BOOL LLFilteredPathfindingLinksets::isFiltersActive() const
{
- return (mNameFilter.isActive() || mDescriptionFilter.isActive() || !mIsWalkableFilter || !mIsObstacleFilter || !mIsIgnoredFilter);
+ return (mNameFilter.isActive() || mDescriptionFilter.isActive() ||
+ (mLinksetUseFilter != LLPathfindingLinkset::kUnknown));
}
void LLFilteredPathfindingLinksets::setNameFilter(const std::string& pNameFilter)
@@ -242,46 +237,22 @@ const std::string& LLFilteredPathfindingLinksets::getDescriptionFilter() const
return mDescriptionFilter.get();
}
-void LLFilteredPathfindingLinksets::setWalkableFilter(BOOL pWalkableFilter)
+void LLFilteredPathfindingLinksets::setLinksetUseFilter(LLPathfindingLinkset::ELinksetUse pLinksetUse)
{
- mIsFiltersDirty = (mIsFiltersDirty || (mIsWalkableFilter == pWalkableFilter));
- mIsWalkableFilter = pWalkableFilter;
+ mIsFiltersDirty = (mIsFiltersDirty || (mLinksetUseFilter == pLinksetUse));
+ mLinksetUseFilter = pLinksetUse;
}
-BOOL LLFilteredPathfindingLinksets::isWalkableFilter() const
+LLPathfindingLinkset::ELinksetUse LLFilteredPathfindingLinksets::getLinksetUseFilter() 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;
+ return mLinksetUseFilter;
}
void LLFilteredPathfindingLinksets::clearFilters()
{
mNameFilter.clear();
mDescriptionFilter.clear();
- mIsWalkableFilter = true;
- mIsObstacleFilter = true;
- mIsIgnoredFilter = true;
+ mLinksetUseFilter = LLPathfindingLinkset::kUnknown;
mIsFiltersDirty = false;
}
@@ -305,9 +276,7 @@ void LLFilteredPathfindingLinksets::applyFilters()
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())));
+ return (((mLinksetUseFilter == LLPathfindingLinkset::kUnknown) || (mLinksetUseFilter == pLinkset.getLinksetUse())) &&
+ (!mNameFilter.isActive() || mNameFilter.doesMatch(pLinkset.getName())) &&
+ (!mDescriptionFilter.isActive() || mDescriptionFilter.doesMatch(pLinkset.getDescription())));
}
diff --git a/indra/newview/llfilteredpathfindinglinksets.h b/indra/newview/llfilteredpathfindinglinksets.h
index de9b3a5e15..388818c32b 100644
--- a/indra/newview/llfilteredpathfindinglinksets.h
+++ b/indra/newview/llfilteredpathfindinglinksets.h
@@ -30,9 +30,9 @@
#include <string>
#include <map>
+#include "llpathfindinglinkset.h"
class LLSD;
-class LLPathfindingLinkset;
class FilterString
{
@@ -80,14 +80,8 @@ public:
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 setLinksetUseFilter(LLPathfindingLinkset::ELinksetUse pLinksetUse);
+ LLPathfindingLinkset::ELinksetUse getLinksetUseFilter() const;
void clearFilters();
@@ -97,12 +91,10 @@ private:
PathfindingLinksetMap mAllLinksets;
PathfindingLinksetMap mFilteredLinksets;
- bool mIsFiltersDirty;
- FilterString mNameFilter;
- FilterString mDescriptionFilter;
- BOOL mIsWalkableFilter;
- BOOL mIsObstacleFilter;
- BOOL mIsIgnoredFilter;
+ bool mIsFiltersDirty;
+ FilterString mNameFilter;
+ FilterString mDescriptionFilter;
+ LLPathfindingLinkset::ELinksetUse mLinksetUseFilter;
void applyFilters();
BOOL doesMatchFilters(const LLPathfindingLinkset& pLinkset) const;
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<LLLineEditor>("filter_by_name");
+ llassert(mFilterByName != NULL);
+ mFilterByName->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this));
+ mFilterByName->setSelectAllonFocusReceived(true);
+ mFilterByName->setCommitOnFocusLost(true);
+
+ mFilterByDescription = findChild<LLLineEditor>("filter_by_description");
+ llassert(mFilterByDescription != NULL);
+ mFilterByDescription->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this));
+ mFilterByDescription->setSelectAllonFocusReceived(true);
+ mFilterByDescription->setCommitOnFocusLost(true);
+
+ mFilterByLinksetUse = findChild<LLComboBox>("filter_by_linkset_use");
+ llassert(mFilterByLinksetUse != NULL);
+ mFilterByLinksetUse->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this));
mLinksetsScrollList = findChild<LLScrollListCtrl>("pathfinding_linksets");
llassert(mLinksetsScrollList != NULL);
@@ -115,41 +131,40 @@ BOOL LLFloaterPathfindingLinksets::postBuild()
mLinksetsStatus = findChild<LLTextBase>("linksets_status");
llassert(mLinksetsStatus != NULL);
- mFilterByName = findChild<LLLineEditor>("filter_by_name");
- llassert(mFilterByName != NULL);
- mFilterByName->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
- mFilterByName->setSelectAllonFocusReceived(true);
- mFilterByName->setCommitOnFocusLost(true);
+ mRefreshListButton = findChild<LLButton>("refresh_linksets_list");
+ llassert(mRefreshListButton != NULL);
+ mRefreshListButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this));
- mFilterByDescription = findChild<LLLineEditor>("filter_by_description");
- llassert(mFilterByDescription != NULL);
- mFilterByDescription->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
- mFilterByDescription->setSelectAllonFocusReceived(true);
- mFilterByDescription->setCommitOnFocusLost(true);
+ mSelectAllButton = findChild<LLButton>("select_all_linksets");
+ llassert(mSelectAllButton != NULL);
+ mSelectAllButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this));
- mFilterByWalkable = findChild<LLCheckBoxCtrl>("filter_by_walkable");
- llassert(mFilterByWalkable != NULL);
- mFilterByWalkable->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
+ mSelectNoneButton = findChild<LLButton>("select_none_linksets");
+ llassert(mSelectNoneButton != NULL);
+ mSelectNoneButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this));
- mFilterByObstacle = findChild<LLCheckBoxCtrl>("filter_by_obstacle");
- llassert(mFilterByObstacle != NULL);
- mFilterByObstacle->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
+ mTakeButton = findChild<LLButton>("take_linksets");
+ llassert(mTakeButton != NULL);
+ mTakeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeClicked, this));
- mFilterByIgnored = findChild<LLCheckBoxCtrl>("filter_by_ignored");
- llassert(mFilterByIgnored != NULL);
- mFilterByIgnored->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
+ mTakeCopyButton = findChild<LLButton>("take_copy_linksets");
+ llassert(mTakeCopyButton != NULL);
+ mTakeCopyButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeCopyClicked, this));
- mEditPathState = findChild<LLRadioGroup>("edit_path_state");
- llassert(mEditPathState != NULL);
+ mReturnButton = findChild<LLButton>("return_linksets");
+ llassert(mReturnButton != NULL);
+ mReturnButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onReturnClicked, this));
- mEditPathStateWalkable = findChild<LLUICtrl>("edit_pathing_state_walkable");
- llassert(mEditPathStateWalkable != NULL);
+ mDeleteButton = findChild<LLButton>("delete_linksets");
+ llassert(mDeleteButton != NULL);
+ mDeleteButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onDeleteClicked, this));
- mEditPathStateObstacle = findChild<LLUICtrl>("edit_pathing_state_obstacle");
- llassert(mEditPathStateObstacle != NULL);
+ mTeleportButton = findChild<LLButton>("teleport_me_to_linkset");
+ llassert(mTeleportButton != NULL);
+ mTeleportButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTeleportClicked, this));
- mEditPathStateIgnored = findChild<LLUICtrl>("edit_pathing_state_ignored");
- llassert(mEditPathStateIgnored != NULL);
+ mEditLinksetUse = findChild<LLComboBox>("edit_linkset_use");
+ llassert(mEditLinksetUse != NULL);
mLabelWalkabilityCoefficients = findChild<LLTextBase>("walkability_coefficients_label");
llassert(mLabelWalkabilityCoefficients != NULL);
@@ -157,37 +172,34 @@ BOOL LLFloaterPathfindingLinksets::postBuild()
mLabelEditA = findChild<LLTextBase>("edit_a_label");
llassert(mLabelEditA != NULL);
- mLabelEditB = findChild<LLTextBase>("edit_b_label");
- llassert(mLabelEditB != NULL);
-
- mLabelEditC = findChild<LLTextBase>("edit_c_label");
- llassert(mLabelEditC != NULL);
-
- mLabelEditD = findChild<LLTextBase>("edit_d_label");
- llassert(mLabelEditD != NULL);
-
mEditA = findChild<LLLineEditor>("edit_a_value");
llassert(mEditA != NULL);
mEditA->setPrevalidate(LLTextValidate::validatePositiveS32);
+ mLabelEditB = findChild<LLTextBase>("edit_b_label");
+ llassert(mLabelEditB != NULL);
+
mEditB = findChild<LLLineEditor>("edit_b_value");
llassert(mEditB != NULL);
mEditB->setPrevalidate(LLTextValidate::validatePositiveS32);
+ mLabelEditC = findChild<LLTextBase>("edit_c_label");
+ llassert(mLabelEditC != NULL);
+
mEditC = findChild<LLLineEditor>("edit_c_value");
llassert(mEditC != NULL);
mEditC->setPrevalidate(LLTextValidate::validatePositiveS32);
+ mLabelEditD = findChild<LLTextBase>("edit_d_label");
+ llassert(mLabelEditD != NULL);
+
mEditD = findChild<LLLineEditor>("edit_d_value");
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));
+ mApplyEditsButton = findChild<LLButton>("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<LLScrollListItem*> 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<LLScrollListItem*> 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<S32>(atoi(bString.c_str()));
S32 cValue = static_cast<S32>(atoi(cString.c_str()));
S32 dValue = static_cast<S32>(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;
}
//---------------------------------------------------------------------------
diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h
index ce266b1706..229b5daa77 100644
--- a/indra/newview/llfloaterpathfindinglinksets.h
+++ b/indra/newview/llfloaterpathfindinglinksets.h
@@ -38,8 +38,7 @@ class LLSD;
class LLTextBase;
class LLScrollListCtrl;
class LLLineEditor;
-class LLCheckBoxCtrl;
-class LLRadioGroup;
+class LLComboBox;
class LLButton;
class LLFloaterPathfindingLinksets
@@ -78,30 +77,32 @@ protected:
private:
LLRootHandle<LLFloaterPathfindingLinksets> mSelfHandle;
- 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;
+ LLComboBox *mFilterByLinksetUse;
+ LLScrollListCtrl *mLinksetsScrollList;
+ LLTextBase *mLinksetsStatus;
+ LLButton *mRefreshListButton;
+ LLButton *mSelectAllButton;
+ LLButton *mSelectNoneButton;
+ LLButton *mTakeButton;
+ LLButton *mTakeCopyButton;
+ LLButton *mReturnButton;
+ LLButton *mDeleteButton;
+ LLButton *mTeleportButton;
+ LLComboBox *mEditLinksetUse;
LLTextBase *mLabelWalkabilityCoefficients;
LLTextBase *mLabelEditA;
- LLTextBase *mLabelEditB;
- LLTextBase *mLabelEditC;
- LLTextBase *mLabelEditD;
LLLineEditor *mEditA;
+ LLTextBase *mLabelEditB;
LLLineEditor *mEditB;
+ LLTextBase *mLabelEditC;
LLLineEditor *mEditC;
+ LLTextBase *mLabelEditD;
LLLineEditor *mEditD;
- LLCheckBoxCtrl *mEditPhantom;
- LLButton *mApplyEdits;
+ LLButton *mApplyEditsButton;
+ LLFilteredPathfindingLinksets mPathfindingLinksets;
+ EMessagingState mMessagingState;
// Does its own instance management, so clients not allowed
// to allocate or destroy.
@@ -120,12 +121,17 @@ private:
void setMessagingState(EMessagingState pMessagingState);
- void onApplyFiltersClicked();
+ void onApplyAllFilters();
void onClearFiltersClicked();
void onLinksetsSelectionChange();
void onRefreshLinksetsClicked();
void onSelectAllLinksetsClicked();
void onSelectNoneLinksetsClicked();
+ void onTakeClicked();
+ void onTakeCopyClicked();
+ void onReturnClicked();
+ void onDeleteClicked();
+ void onTeleportClicked();
void onApplyChangesClicked();
void applyFilters();
@@ -141,8 +147,14 @@ private:
void applyEditFields();
void setEnableEditFields(BOOL pEnabled);
- LLPathfindingLinkset::EPathState getPathState() const;
- void setPathState(LLPathfindingLinkset::EPathState pPathState);
+ LLPathfindingLinkset::ELinksetUse getFilterLinksetUse() const;
+ void setFilterLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse);
+
+ LLPathfindingLinkset::ELinksetUse getEditLinksetUse() const;
+ void setEditLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse);
+
+ LLPathfindingLinkset::ELinksetUse convertToLinksetUse(LLSD pXuiValue) const;
+ LLSD convertToXuiValue(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;
};
#endif // LL_LLFLOATERPATHFINDINGLINKSETS_H
diff --git a/indra/newview/llpathfindinglinkset.cpp b/indra/newview/llpathfindinglinkset.cpp
index daa308f862..48f8ceaa8a 100644
--- a/indra/newview/llpathfindinglinkset.cpp
+++ b/indra/newview/llpathfindinglinkset.cpp
@@ -56,8 +56,7 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&
mDescription(),
mLandImpact(0U),
mLocation(),
- mPathState(kIgnored),
- mIsPhantom(false),
+ mLinksetUse(kUnknown),
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
mIsWalkabilityCoefficientsF32(false),
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
@@ -79,6 +78,10 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&
llassert(pLinksetItem.get(LINKSET_LAND_IMPACT_FIELD).asInteger() >= 0);
mLandImpact = pLinksetItem.get(LINKSET_LAND_IMPACT_FIELD).asInteger();
+ llassert(pLinksetItem.has(LINKSET_PHANTOM_FIELD));
+ llassert(pLinksetItem.get(LINKSET_PHANTOM_FIELD).isBoolean());
+ bool isPhantom = pLinksetItem.get(LINKSET_PHANTOM_FIELD).asBoolean();
+
llassert(pLinksetItem.has(LINKSET_PERMANENT_FIELD));
llassert(pLinksetItem.get(LINKSET_PERMANENT_FIELD).isBoolean());
bool isPermanent = pLinksetItem.get(LINKSET_PERMANENT_FIELD).asBoolean();
@@ -87,11 +90,7 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&
llassert(pLinksetItem.get(LINKSET_WALKABLE_FIELD).isBoolean());
bool isWalkable = pLinksetItem.get(LINKSET_WALKABLE_FIELD).asBoolean();
- mPathState = getPathState(isPermanent, isWalkable);
-
- llassert(pLinksetItem.has(LINKSET_PHANTOM_FIELD));
- llassert(pLinksetItem.get(LINKSET_PHANTOM_FIELD).isBoolean());
- mIsPhantom = pLinksetItem.get(LINKSET_PHANTOM_FIELD).asBoolean();
+ mLinksetUse = getLinksetUse(isPhantom, isPermanent, isWalkable);
llassert(pLinksetItem.has(LINKSET_WALKABILITY_A_FIELD));
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
@@ -175,8 +174,7 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLPathfindingLinkset& pOther)
mDescription(pOther.mDescription),
mLandImpact(pOther.mLandImpact),
mLocation(pOther.mLocation),
- mPathState(pOther.mPathState),
- mIsPhantom(pOther.mIsPhantom),
+ mLinksetUse(pOther.mLinksetUse),
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
mIsWalkabilityCoefficientsF32(pOther.mIsWalkabilityCoefficientsF32),
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
@@ -198,8 +196,7 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse
mDescription = pOther.mDescription;
mLandImpact = pOther.mLandImpact;
mLocation = pOther.mLocation;
- mPathState = pOther.mPathState;
- mIsPhantom = pOther.mIsPhantom;
+ mLinksetUse = pOther.mLinksetUse;
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
mIsWalkabilityCoefficientsF32 = pOther.mIsWalkabilityCoefficientsF32;
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
@@ -211,56 +208,6 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse
return *this;
}
-
-LLPathfindingLinkset::EPathState LLPathfindingLinkset::getPathState(bool pIsPermanent, bool pIsWalkable)
-{
- return (pIsPermanent ? (pIsWalkable ? kWalkable : kObstacle) : kIgnored);
-}
-
-BOOL LLPathfindingLinkset::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 LLPathfindingLinkset::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 LLPathfindingLinkset::setWalkabilityCoefficientA(S32 pA)
{
mWalkabilityCoefficientA = llclamp(pA, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE);
@@ -281,14 +228,16 @@ void LLPathfindingLinkset::setWalkabilityCoefficientD(S32 pD)
mWalkabilityCoefficientD = llclamp(pD, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE);
}
-LLSD LLPathfindingLinkset::encodeAlteredFields(EPathState pPathState, S32 pA, S32 pB, S32 pC, S32 pD, BOOL pIsPhantom) const
+LLSD LLPathfindingLinkset::encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const
{
LLSD itemData;
- if (mPathState != pPathState)
+ if (mLinksetUse != pLinksetUse)
{
- itemData[LINKSET_PERMANENT_FIELD] = static_cast<bool>(LLPathfindingLinkset::isPermanent(pPathState));
- itemData[LINKSET_WALKABLE_FIELD] = static_cast<bool>(LLPathfindingLinkset::isWalkable(pPathState));
+ llassert(pLinksetUse != kUnknown);
+ itemData[LINKSET_PHANTOM_FIELD] = static_cast<bool>(LLPathfindingLinkset::isPhantom(pLinksetUse));
+ itemData[LINKSET_PERMANENT_FIELD] = static_cast<bool>(LLPathfindingLinkset::isPermanent(pLinksetUse));
+ itemData[LINKSET_WALKABLE_FIELD] = static_cast<bool>(LLPathfindingLinkset::isWalkable(pLinksetUse));
}
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
if (mIsWalkabilityCoefficientsF32)
@@ -347,10 +296,90 @@ LLSD LLPathfindingLinkset::encodeAlteredFields(EPathState pPathState, S32 pA, S3
itemData[LINKSET_WALKABILITY_D_FIELD] = llclamp(pD, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE);
}
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
- if (mIsPhantom != pIsPhantom)
+
+ return itemData;
+}
+
+LLPathfindingLinkset::ELinksetUse LLPathfindingLinkset::getLinksetUse(bool pIsPhantom, bool pIsPermanent, bool pIsWalkable)
+{
+ return (pIsPhantom ? (pIsPermanent ? (pIsWalkable ? kMaterialVolume : kExclusionVolume) : kDynamicPhantom) :
+ (pIsPermanent ? (pIsWalkable ? kWalkable : kStaticObstacle) : kDynamicObstacle));
+}
+
+BOOL LLPathfindingLinkset::isPhantom(ELinksetUse pLinksetUse)
+{
+ BOOL retVal;
+
+ switch (pLinksetUse)
{
- itemData[LINKSET_PHANTOM_FIELD] = static_cast<bool>(pIsPhantom);
+ case kWalkable :
+ case kStaticObstacle :
+ case kDynamicObstacle :
+ retVal = false;
+ break;
+ case kMaterialVolume :
+ case kExclusionVolume :
+ case kDynamicPhantom :
+ retVal = true;
+ break;
+ case kUnknown :
+ default :
+ retVal = false;
+ llassert(0);
+ break;
}
- return itemData;
+ return retVal;
+}
+
+BOOL LLPathfindingLinkset::isPermanent(ELinksetUse pLinksetUse)
+{
+ BOOL retVal;
+
+ switch (pLinksetUse)
+ {
+ case kWalkable :
+ case kStaticObstacle :
+ case kMaterialVolume :
+ case kExclusionVolume :
+ retVal = true;
+ break;
+ case kDynamicObstacle :
+ case kDynamicPhantom :
+ retVal = false;
+ break;
+ case kUnknown :
+ default :
+ retVal = false;
+ llassert(0);
+ break;
+ }
+
+ return retVal;
+}
+
+BOOL LLPathfindingLinkset::isWalkable(ELinksetUse pLinksetUse)
+{
+ BOOL retVal;
+
+ switch (pLinksetUse)
+ {
+ case kWalkable :
+ case kMaterialVolume :
+ retVal = true;
+ break;
+ case kStaticObstacle :
+ case kDynamicObstacle :
+ case kExclusionVolume :
+ case kDynamicPhantom :
+ retVal = false;
+ break;
+ case kUnknown :
+ default :
+ retVal = false;
+ llassert(0);
+ break;
+ }
+
+ return retVal;
}
diff --git a/indra/newview/llpathfindinglinkset.h b/indra/newview/llpathfindinglinkset.h
index d4e58874eb..58d72b1430 100644
--- a/indra/newview/llpathfindinglinkset.h
+++ b/indra/newview/llpathfindinglinkset.h
@@ -42,10 +42,14 @@ class LLPathfindingLinkset
public:
typedef enum
{
+ kUnknown,
kWalkable,
- kObstacle,
- kIgnored
- } EPathState;
+ kStaticObstacle,
+ kDynamicObstacle,
+ kMaterialVolume,
+ kExclusionVolume,
+ kDynamicPhantom
+ } ELinksetUse;
LLPathfindingLinkset(const std::string &pUUID, const LLSD &pLinksetItem);
LLPathfindingLinkset(const LLPathfindingLinkset& pOther);
@@ -53,21 +57,14 @@ public:
LLPathfindingLinkset& operator = (const LLPathfindingLinkset& pOther);
- inline const LLUUID& getUUID() const {return mUUID;};
- inline const std::string& getName() const {return mName;};
- inline const std::string& getDescription() const {return mDescription;};
- inline U32 getLandImpact() const {return mLandImpact;};
- inline const LLVector3& getLocation() const {return mLocation;};
+ inline const LLUUID& getUUID() const {return mUUID;};
+ inline const std::string& getName() const {return mName;};
+ inline const std::string& getDescription() const {return mDescription;};
+ inline U32 getLandImpact() const {return mLandImpact;};
+ inline const LLVector3& getLocation() const {return mLocation;};
- inline EPathState getPathState() const {return mPathState;};
- inline void setPathState(EPathState pPathState) {mPathState = pPathState;};
-
- static EPathState getPathState(bool pIsPermanent, bool pIsWalkable);
- static BOOL isPermanent(EPathState pPathState);
- static BOOL isWalkable(EPathState pPathState);
-
- inline BOOL isPhantom() const {return mIsPhantom;};
- inline void setPhantom(BOOL pIsPhantom) {mIsPhantom = pIsPhantom;};
+ inline ELinksetUse getLinksetUse() const {return mLinksetUse;};
+ inline void setLinksetUse(ELinksetUse pLinksetUse) {mLinksetUse = pLinksetUse;};
inline S32 getWalkabilityCoefficientA() const {return mWalkabilityCoefficientA;};
void setWalkabilityCoefficientA(S32 pA);
@@ -81,28 +78,32 @@ public:
inline S32 getWalkabilityCoefficientD() const {return mWalkabilityCoefficientD;};
void setWalkabilityCoefficientD(S32 pD);
- LLSD encodeAlteredFields(EPathState pPathState, S32 pA, S32 pB, S32 pC, S32 pD, BOOL pIsPhantom) const;
+ LLSD encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;
protected:
private:
+ static ELinksetUse getLinksetUse(bool pIsPhantom, bool pIsPermanent, bool pIsWalkable);
+ static BOOL isPhantom(ELinksetUse pLinksetUse);
+ static BOOL isPermanent(ELinksetUse pLinksetUse);
+ static BOOL isWalkable(ELinksetUse pLinksetUse);
+
static const S32 MIN_WALKABILITY_VALUE;
static const S32 MAX_WALKABILITY_VALUE;
- LLUUID mUUID;
- std::string mName;
- std::string mDescription;
- U32 mLandImpact;
- LLVector3 mLocation;
- EPathState mPathState;
- BOOL mIsPhantom;
+ LLUUID mUUID;
+ std::string mName;
+ std::string mDescription;
+ U32 mLandImpact;
+ LLVector3 mLocation;
+ ELinksetUse mLinksetUse;
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
- BOOL mIsWalkabilityCoefficientsF32;
+ BOOL mIsWalkabilityCoefficientsF32;
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
- S32 mWalkabilityCoefficientA;
- S32 mWalkabilityCoefficientB;
- S32 mWalkabilityCoefficientC;
- S32 mWalkabilityCoefficientD;
+ S32 mWalkabilityCoefficientA;
+ S32 mWalkabilityCoefficientB;
+ S32 mWalkabilityCoefficientC;
+ S32 mWalkabilityCoefficientD;
};
#endif // LL_LLPATHFINDINGLINKSET_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 ec720b55ca..badade9661 100644
--- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml
+++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml
@@ -3,9 +3,9 @@
open_positioning="cascading"
can_resize="true"
can_tear_off="false"
- height="330"
+ height="382"
width="950"
- min_height="330"
+ min_height="382"
min_width="950"
layout="topleft"
name="floater_pathfinding_linksets"
@@ -27,401 +27,503 @@
<floater.string name="linksets_messaging_complete_none_found">No pathfinding linksets</floater.string>
<floater.string name="linksets_messaging_complete_available">[NUM_SELECTED] linksets selected out of [NUM_TOTAL]</floater.string>
<floater.string name="linksets_messaging_service_not_available">Required capability is not available in current region</floater.string>
- <floater.string name="linkset_path_state_walkable">Walkable</floater.string>
- <floater.string name="linkset_path_state_obstacle">Obstacle</floater.string>
- <floater.string name="linkset_path_state_ignored">Ignored</floater.string>
- <floater.string name="linkset_is_phantom">Phantom</floater.string>
- <floater.string name="linkset_is_not_phantom">--</floater.string>
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- length="1"
- follows="left|top"
- layout="topleft"
- left="20"
- top="16"
- width="67">
- Filter by:
- </text>
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- length="1"
- follows="left|top"
- layout="topleft"
- left="87"
- top="16"
- width="62">
- Name
- </text>
- <line_editor
- border_style="line"
- border_thickness="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_delta="62"
- top="11"
- max_length_bytes="10"
- name="filter_by_name"
- width="105" />
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- length="1"
- follows="left|top"
- layout="topleft"
- left="273"
- top="16"
- width="88">
- Description
- </text>
- <line_editor
- border_style="line"
- border_thickness="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_delta="88"
- top="11"
- max_length_bytes="10"
- name="filter_by_description"
- width="106" />
- <check_box
- height="19"
- follows="left|top"
- initial_value="true"
- label="Walkable"
- layout="topleft"
- left="481"
- top="14"
- name="filter_by_walkable"
- width="90" />
- <check_box
- height="19"
- follows="left|top"
- initial_value="true"
- label="Obstacle"
- layout="topleft"
- left="577"
- top="14"
- name="filter_by_obstacle"
- width="90" />
- <check_box
- height="19"
- follows="left|top"
- initial_value="true"
- label="Ignored"
- layout="topleft"
- left="674"
- top="14"
- name="filter_by_ignored"
- width="90" />
- <button
- follows="right|top"
- height="21"
- label="Apply"
- layout="topleft"
- name="apply_filters"
- top="11"
- left="769"
- width="73"/>
- <button
- follows="right|top"
- height="21"
- label="Clear"
+ <floater.string name="linkset_use_walkable">Walkable</floater.string>
+ <floater.string name="linkset_use_static_obstacle">Static obstacle</floater.string>
+ <floater.string name="linkset_use_dynamic_obstacle">Dynamic obstacle</floater.string>
+ <floater.string name="linkset_use_material_volume">Material volume</floater.string>
+ <floater.string name="linkset_use_exclusion_volume">Exclusion volume</floater.string>
+ <floater.string name="linkset_use_dynamic_phantom">Dynamic phantom</floater.string>
+ <panel
+ border="false"
+ bevel_style="none"
+ follows="left|top|right|bottom"
layout="topleft"
- name="clear_filters"
- top="11"
- left="851"
- width="73"/>
- <scroll_list
- column_padding="0"
- draw_heading="true"
- follows="all"
- height="135"
+ height="226"
+ width="950">
+ <text
+ height="13"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ length="1"
+ follows="left|top"
+ layout="topleft"
+ left="20"
+ top_pad="14"
+ width="67">
+ Filter by:
+ </text>
+ <text
+ height="13"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ length="1"
+ follows="left|top"
+ layout="topleft"
+ left_pad="0"
+ width="62">
+ Name
+ </text>
+ <line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ top_pad="-18"
+ max_length_bytes="10"
+ name="filter_by_name"
+ width="105" />
+ <text
+ height="13"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ length="1"
+ follows="left|top"
+ layout="topleft"
+ left_pad="22"
+ top_pad="-15"
+ width="88">
+ Description
+ </text>
+ <line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ top_pad="-17"
+ max_length_bytes="10"
+ name="filter_by_description"
+ width="145" />
+ <combo_box
+ height="20"
+ layout="topleft"
+ follows="left|top"
+ name="filter_by_linkset_use"
+ left_pad="32"
+ top_pad="-20"
+ width="199">
+ <combo_box.item
+ label="Filter by linkset use..."
+ name="filter_by_linkset_use_none"
+ value="0" />
+ <combo_box.item
+ label="Walkable"
+ name="filter_by_linkset_use_walkable"
+ value="1" />
+ <combo_box.item
+ label="Static obstacle"
+ name="filter_by_linkset_use_static_obstacle"
+ value="2" />
+ <combo_box.item
+ label="Dynamic obstacle"
+ name="filter_by_linkset_use_dynamic_obstacle"
+ value="3" />
+ <combo_box.item
+ label="Material volume"
+ name="filter_by_linkset_use_material_volume"
+ value="4" />
+ <combo_box.item
+ label="Exclusion volume"
+ name="filter_by_linkset_use_exclusion_volume"
+ value="5" />
+ <combo_box.item
+ label="Dynamic phantom"
+ name="filter_by_linkset_use_dynamic_phantom"
+ value="6" />
+ </combo_box>
+ <button
+ follows="right|top"
+ height="21"
+ label="Apply"
+ layout="topleft"
+ name="apply_filters"
+ top_pad="-21"
+ left_pad="31"
+ width="73"/>
+ <button
+ follows="right|top"
+ height="21"
+ label="Clear"
+ layout="topleft"
+ name="clear_filters"
+ top_pad="-21"
+ left_pad="8"
+ width="73"/>
+ <scroll_list
+ column_padding="0"
+ draw_heading="true"
+ follows="all"
+ height="135"
+ layout="topleft"
+ left="18"
+ top_pad="15"
+ multi_select="true"
+ name="pathfinding_linksets"
+ width="910">
+ <scroll_list.columns
+ label="Name (root prim)"
+ name="name"
+ dynamic_width="true" />
+ <scroll_list.columns
+ label="Description (root prim)"
+ name="description"
+ width="192" />
+ <scroll_list.columns
+ label="Land impact"
+ name="land_impact"
+ width="88" />
+ <scroll_list.columns
+ label="Dist from you"
+ name="dist_from_you"
+ width="97" />
+ <scroll_list.columns
+ label="Linkset use"
+ name="linkset_use"
+ width="210" />
+ <scroll_list.columns
+ label="A %"
+ name="a_percent"
+ width="41" />
+ <scroll_list.columns
+ label="B %"
+ name="b_percent"
+ width="41" />
+ <scroll_list.columns
+ label="C %"
+ name="c_percent"
+ width="41" />
+ <scroll_list.columns
+ label="D %"
+ name="d_percent"
+ width="41" />
+ </scroll_list>
+ <text
+ height="13"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ length="1"
+ follows="left|bottom"
+ layout="topleft"
+ name="linksets_status"
+ top_pad="17"
+ width="549">
+ Linksets:
+ </text>
+ <button
+ follows="right|bottom"
+ height="21"
+ label="Refresh list"
+ layout="topleft"
+ name="refresh_linksets_list"
+ top_pad="-16"
+ left_pad="0"
+ width="115"/>
+ <button
+ follows="right|bottom"
+ height="21"
+ label="Select all"
+ layout="topleft"
+ name="select_all_linksets"
+ top_pad="-21"
+ left_pad="8"
+ width="115"/>
+ <button
+ follows="right|bottom"
+ height="21"
+ label="Select none"
+ layout="topleft"
+ name="select_none_linksets"
+ top_pad="-21"
+ left_pad="8"
+ width="115"/>
+ </panel>
+ <view_border
+ bevel_style="none"
+ follows="left|bottom|right"
+ height="0"
layout="topleft"
+ name="horiz_separator"
+ top_pad="0"
left="18"
- top="48"
- multi_select="true"
- name="pathfinding_linksets"
- width="910">
- <scroll_list.columns
- label="Name (root prim)"
- name="name"
- dynamic_width="true" />
- <scroll_list.columns
- label="Description (root prim)"
- name="description"
- width="212" />
- <scroll_list.columns
- label="Land impact"
- name="land_impact"
- width="95" />
- <scroll_list.columns
- label="Dist from you"
- name="dist_from_you"
- width="97" />
- <scroll_list.columns
- label="State"
- name="path_state"
- width="74" />
- <scroll_list.columns
- label="Phantom"
- name="is_phantom"
- width="74" />
- <scroll_list.columns
- label="A %"
- name="a_percent"
- width="41" />
- <scroll_list.columns
- label="B %"
- name="b_percent"
- width="41" />
- <scroll_list.columns
- label="C %"
- name="c_percent"
- width="41" />
- <scroll_list.columns
- label="D %"
- name="d_percent"
- width="41" />
- </scroll_list>
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- length="1"
- follows="left|bottom"
- layout="topleft"
- name="linksets_status"
- top="200"
- width="500">
- Linksets:
- </text>
- <button
- follows="right|bottom"
- height="21"
- label="Refresh list"
- layout="topleft"
- name="refresh_linksets_list"
- top="200"
- left="568"
- width="115"/>
- <button
- follows="right|bottom"
- height="21"
- label="Select all"
- layout="topleft"
- name="select_all_linksets"
- top="200"
- left="690"
- width="115"/>
- <button
- follows="right|bottom"
- height="21"
- label="Select none"
+ width="912"/>
+ <panel
+ border="false"
+ bevel_style="none"
+ follows="left|right|bottom"
layout="topleft"
- name="select_none_linksets"
- top="200"
- left="812"
- width="115"/>
+ left="0"
+ height="67"
+ width="950">
+ <text
+ height="13"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ length="1"
+ left="18"
+ follows="left|bottom|right"
+ layout="topleft"
+ top_pad="8"
+ width="912">
+ Actions on selected linksets (If a linkset is removed from the world, its attributes will be lost):
+ </text>
+ <button
+ follows="left|bottom"
+ height="21"
+ label="Take"
+ layout="topleft"
+ name="take_linksets"
+ top_pad="12"
+ left="18"
+ width="95"/>
+ <button
+ follows="left|bottom"
+ height="21"
+ label="Take copy"
+ layout="topleft"
+ name="take_copy_linksets"
+ top_pad="-21"
+ left_pad="6"
+ width="95"/>
+ <button
+ follows="left|bottom"
+ height="21"
+ label="Return"
+ layout="topleft"
+ name="return_linksets"
+ top_pad="-21"
+ left_pad="6"
+ width="95"/>
+ <button
+ follows="left|bottom"
+ height="21"
+ label="Delete"
+ layout="topleft"
+ name="delete_linksets"
+ top_pad="-21"
+ left_pad="6"
+ width="95"/>
+ <button
+ follows="left|bottom"
+ height="21"
+ label="Teleport me to it"
+ layout="topleft"
+ name="teleport_me_to_linkset"
+ top_pad="-21"
+ left_pad="6"
+ width="160"/>
+ </panel>
<view_border
bevel_style="none"
follows="left|bottom|right"
height="0"
layout="topleft"
name="horiz_separator"
- top="230"
- left="20"
+ top_pad="0"
+ left="18"
width="912"/>
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- length="1"
- follows="left|bottom"
- layout="topleft"
- top_pad="12"
- 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>
- <radio_group
- follows="left|bottom"
- height="55"
- value="1"
+ <panel
+ border="false"
+ bevel_style="none"
+ follows="left|right|bottom"
layout="topleft"
- left_delta="0"
- name="edit_path_state"
- top_delta="21"
- width="138">
- <radio_item
- label="Walkable"
+ left="0"
+ height="75"
+ width="950">
+ <text
+ height="13"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ length="1"
+ follows="left|bottom"
+ layout="topleft"
+ left="18"
+ top_pad="8"
+ width="912">
+ Edit attributes of selected linksets
+ </text>
+ <combo_box
+ height="20"
layout="topleft"
+ follows="left|top"
+ name="edit_linkset_use"
+ left="18"
+ top_pad="17"
+ width="199">
+ <combo_box.item
+ label="Choose linkset use..."
+ name="edit_linkset_use_none"
+ value="0" />
+ <combo_box.item
+ label="Walkable"
+ name="edit_linkset_use_walkable"
+ value="1" />
+ <combo_box.item
+ label="Static obstacle"
+ name="edit_linkset_use_static_obstacle"
+ value="2" />
+ <combo_box.item
+ label="Dynamic obstacle"
+ name="edit_linkset_use_dynamic_obstacle"
+ value="3" />
+ <combo_box.item
+ label="Material volume"
+ name="edit_linkset_use_material_volume"
+ value="4" />
+ <combo_box.item
+ label="Exclusion volume"
+ name="edit_linkset_use_exclusion_volume"
+ value="5" />
+ <combo_box.item
+ label="Dynamic phantom"
+ name="edit_linkset_use_dynamic_phantom"
+ value="6" />
+ </combo_box>
+ <text
height="13"
- name="edit_pathing_state_walkable"
- value="1"/>
- <radio_item
- label="Obstacle"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ text_readonly_color="LabelDisabledColor"
+ name="walkability_coefficients_label"
+ length="1"
+ follows="left|bottom"
layout="topleft"
+ left_pad="36"
+ top_pad="-17"
+ width="110">
+ Walkability:
+ </text>
+ <text
height="13"
- name="edit_pathing_state_obstacle"
- value="2"/>
- <radio_item
- label="Ignored"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ text_readonly_color="LabelDisabledColor"
+ name="edit_a_label"
+ length="1"
+ follows="left|bottom"
layout="topleft"
+ left_pad="0"
+ width="18">
+ A
+ </text>
+ <line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|bottom"
+ height="21"
+ layout="topleft"
+ left_pad="0"
+ top_pad="-19"
+ max_length_chars="3"
+ name="edit_a_value"
+ width="45" />
+ <text
height="13"
- name="edit_pathing_state_ignored"
- value="3"/>
- </radio_group>
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- text_readonly_color="LabelDisabledColor"
- name="walkability_coefficients_label"
- length="1"
- follows="left|bottom"
- layout="topleft"
- left="159"
- top="271"
- width="200">
- Walkability coefficients
- </text>
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- text_readonly_color="LabelDisabledColor"
- name="edit_a_label"
- length="1"
- follows="left|bottom"
- layout="topleft"
- top_pad="12"
- width="90">
- A
- </text>
- <line_editor
- border_style="line"
- border_thickness="1"
- follows="left|bottom"
- height="20"
- layout="topleft"
- left_delta="14"
- max_length_chars="3"
- name="edit_a_value"
- width="45" />
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- text_readonly_color="LabelDisabledColor"
- name="edit_b_label"
- length="1"
- follows="left|bottom"
- layout="topleft"
- left="248"
- top_pad="-13"
- width="90">
- B
- </text>
- <line_editor
- border_style="line"
- border_thickness="1"
- follows="left|bottom"
- height="20"
- layout="topleft"
- left_delta="14"
- max_length_chars="3"
- name="edit_b_value"
- width="45" />
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- text_readonly_color="LabelDisabledColor"
- name="edit_c_label"
- length="1"
- follows="left|bottom"
- layout="topleft"
- left="337"
- top_pad="-13"
- width="90">
- C
- </text>
- <line_editor
- border_style="line"
- border_thickness="1"
- follows="left|bottom"
- height="20"
- layout="topleft"
- left_delta="14"
- max_length_chars="3"
- name="edit_c_value"
- width="45" />
- <text
- height="13"
- word_wrap="false"
- use_ellipses="false"
- type="string"
- text_color="LabelTextColor"
- text_readonly_color="LabelDisabledColor"
- name="edit_d_label"
- length="1"
- follows="left|bottom"
- layout="topleft"
- left="426"
- top_pad="-13"
- width="90">
- D
- </text>
- <line_editor
- border_style="line"
- border_thickness="1"
- follows="left|bottom"
- height="20"
- layout="topleft"
- left_delta="14"
- max_length_chars="3"
- name="edit_d_value"
- width="45" />
- <check_box
- follows="left|bottom"
- height="19"
- label="Phantom"
- layout="topleft"
- name="edit_phantom_value"
- top="271"
- left="559"
- width="90" />
- <button
- follows="right|bottom"
- height="21"
- label="Apply changes"
- layout="topleft"
- name="apply_edit_values"
- top="270"
- left="735"
- width="134"/>
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ text_readonly_color="LabelDisabledColor"
+ name="edit_b_label"
+ length="1"
+ follows="left|bottom"
+ layout="topleft"
+ left_pad="44"
+ top_pad="-15"
+ width="18">
+ B
+ </text>
+ <line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|bottom"
+ height="21"
+ layout="topleft"
+ left_pad="0"
+ top_pad="-19"
+ max_length_chars="3"
+ name="edit_b_value"
+ width="45" />
+ <text
+ height="13"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ text_readonly_color="LabelDisabledColor"
+ name="edit_c_label"
+ length="1"
+ follows="left|bottom"
+ layout="topleft"
+ left_pad="44"
+ top_pad="-15"
+ width="18">
+ C
+ </text>
+ <line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|bottom"
+ height="21"
+ layout="topleft"
+ left_pad="0"
+ top_pad="-19"
+ max_length_chars="3"
+ name="edit_c_value"
+ width="45" />
+ <text
+ height="13"
+ word_wrap="false"
+ use_ellipses="false"
+ type="string"
+ text_color="LabelTextColor"
+ text_readonly_color="LabelDisabledColor"
+ name="edit_d_label"
+ length="1"
+ follows="left|bottom"
+ layout="topleft"
+ left_pad="44"
+ top_pad="-15"
+ width="18">
+ D
+ </text>
+ <line_editor
+ border_style="line"
+ border_thickness="1"
+ follows="left|bottom"
+ height="21"
+ layout="topleft"
+ left_pad="0"
+ top_pad="-19"
+ max_length_chars="3"
+ name="edit_d_value"
+ width="45" />
+ <button
+ follows="right|bottom"
+ height="21"
+ label="Apply changes"
+ layout="topleft"
+ name="apply_edit_values"
+ top_pad="-21"
+ left_pad="40"
+ width="140"/>
+ </panel>
</floater>