diff options
author | Todd Stinson <stinson@lindenlab.com> | 2012-02-16 14:55:21 -0800 |
---|---|---|
committer | Todd Stinson <stinson@lindenlab.com> | 2012-02-16 14:55:21 -0800 |
commit | e156e9ed03fd16af36e2b28823f07658f4d9b0c8 (patch) | |
tree | 0b5f7ca3cc5e44bcc3165f662abea99e9bcfbe6b | |
parent | 70f8225a30c80d26ca349a8f63fa8f5189ae4f2b (diff) |
PATH-292: First pass at implementing the new design of the linksets floater.
-rw-r--r-- | indra/newview/llfilteredpathfindinglinksets.cpp | 59 | ||||
-rw-r--r-- | indra/newview/llfilteredpathfindinglinksets.h | 22 | ||||
-rw-r--r-- | indra/newview/llfloaterpathfindinglinksets.cpp | 337 | ||||
-rw-r--r-- | indra/newview/llfloaterpathfindinglinksets.h | 54 | ||||
-rw-r--r-- | indra/newview/llpathfindinglinkset.cpp | 165 | ||||
-rw-r--r-- | indra/newview/llpathfindinglinkset.h | 61 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml | 864 |
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> |