From a17dee79f04e21f414d59ed1d5566160dda8fa08 Mon Sep 17 00:00:00 2001 From: Todd Stinson Date: Wed, 15 Feb 2012 15:26:32 -0800 Subject: PATH-297: Basic freeze/unfreeze button switching for UI buttons. Also, adding ability to detect whether region is enabled for pathfinding. --- indra/newview/llfloaterpathfindingbasic.cpp | 83 +++++++++++++++++++++- indra/newview/llfloaterpathfindingbasic.h | 15 +++- .../default/xui/en/floater_pathfinding_basic.xml | 25 ++++++- 3 files changed, 116 insertions(+), 7 deletions(-) diff --git a/indra/newview/llfloaterpathfindingbasic.cpp b/indra/newview/llfloaterpathfindingbasic.cpp index a875cae883..a1c333989e 100644 --- a/indra/newview/llfloaterpathfindingbasic.cpp +++ b/indra/newview/llfloaterpathfindingbasic.cpp @@ -30,6 +30,9 @@ #include "llsd.h" #include "llagent.h" +#include "lltextbase.h" +#include "llbutton.h" +#include "llviewerregion.h" //--------------------------------------------------------------------------- // LLFloaterPathfindingBasic @@ -37,15 +40,40 @@ BOOL LLFloaterPathfindingBasic::postBuild() { - childSetAction("enter_unfrozen_mode", boost::bind(&LLFloaterPathfindingBasic::onUnfreezeClicked, this)); - childSetAction("enter_frozen_mode", boost::bind(&LLFloaterPathfindingBasic::onFreezeClicked, this)); + mRegionNotEnabledText = findChild("disabled_warning_label"); + llassert(mRegionNotEnabledText != NULL); + + mUnfreezeLabel = findChild("unfreeze_label"); + llassert(mUnfreezeLabel != NULL); + + mUnfreezeButton = findChild("enter_unfrozen_mode"); + llassert(mUnfreezeButton != NULL); + mUnfreezeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingBasic::onUnfreezeClicked, this)); + + mFreezeLabel = findChild("freeze_label"); + llassert(mFreezeLabel != NULL); + + mFreezeButton = findChild("enter_frozen_mode"); + llassert(mFreezeButton != NULL); + mFreezeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingBasic::onFreezeClicked, this)); + + updateOnFrozenState(); return LLFloater::postBuild(); } +void LLFloaterPathfindingBasic::onOpen(const LLSD& key) +{ +} LLFloaterPathfindingBasic::LLFloaterPathfindingBasic(const LLSD& pSeed) - : LLFloater(pSeed) + : LLFloater(pSeed), + mRegionNotEnabledText(NULL), + mUnfreezeLabel(NULL), + mUnfreezeButton(NULL), + mFreezeLabel(NULL), + mFreezeButton(NULL), + mIsRegionFrozenXXX(true) { } @@ -53,12 +81,61 @@ LLFloaterPathfindingBasic::~LLFloaterPathfindingBasic() { } +std::string LLFloaterPathfindingBasic::getCapabilityURL() const +{ + std::string capURL(""); + + LLViewerRegion *region = gAgent.getRegion(); + if (region != NULL) + { + capURL = region->getCapability("RetrieveNavMeshSrc"); + } + + return capURL; +} + +void LLFloaterPathfindingBasic::updateOnFrozenState() +{ + std::string capURL = getCapabilityURL(); + + if (capURL.empty()) + { + mRegionNotEnabledText->setVisible(TRUE); + mUnfreezeLabel->setEnabled(FALSE); + mUnfreezeButton->setEnabled(FALSE); + mFreezeLabel->setEnabled(FALSE); + mFreezeButton->setEnabled(FALSE); + } + else + { + mRegionNotEnabledText->setVisible(FALSE); + if (mIsRegionFrozenXXX) + { + mUnfreezeLabel->setEnabled(TRUE); + mUnfreezeButton->setEnabled(TRUE); + mFreezeLabel->setEnabled(FALSE); + mFreezeButton->setEnabled(FALSE); + } + else + { + mUnfreezeLabel->setEnabled(FALSE); + mUnfreezeButton->setEnabled(FALSE); + mFreezeLabel->setEnabled(TRUE); + mFreezeButton->setEnabled(TRUE); + } + } +} + void LLFloaterPathfindingBasic::onUnfreezeClicked() { + mIsRegionFrozenXXX = false; + updateOnFrozenState(); llwarns << "functionality has not yet been implemented to set unfrozen state" << llendl; } void LLFloaterPathfindingBasic::onFreezeClicked() { + mIsRegionFrozenXXX = true; + updateOnFrozenState(); llwarns << "functionality has not yet been implemented to set frozen state" << llendl; } diff --git a/indra/newview/llfloaterpathfindingbasic.h b/indra/newview/llfloaterpathfindingbasic.h index 888d06c521..cd51964339 100644 --- a/indra/newview/llfloaterpathfindingbasic.h +++ b/indra/newview/llfloaterpathfindingbasic.h @@ -32,6 +32,8 @@ #include "llhandle.h" class LLSD; +class LLTextBase; +class LLButton; class LLFloaterPathfindingBasic : public LLFloater @@ -39,8 +41,8 @@ class LLFloaterPathfindingBasic friend class LLFloaterReg; public: - virtual BOOL postBuild(); + virtual void onOpen(const LLSD& key); protected: @@ -52,6 +54,17 @@ private: void onUnfreezeClicked(); void onFreezeClicked(); + + std::string getCapabilityURL() const; + + void updateOnFrozenState(); + + LLTextBase *mRegionNotEnabledText; + LLTextBase *mUnfreezeLabel; + LLButton *mUnfreezeButton; + LLTextBase *mFreezeLabel; + LLButton *mFreezeButton; + bool mIsRegionFrozenXXX; // XXX stinson : Feb 15, 2012 : I think this will be unneeded with the service }; #endif // LL_LLFLOATERPATHFINDINGBASIC_H diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_basic.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_basic.xml index e21b6c842f..36c7f11f5d 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_basic.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_basic.xml @@ -2,7 +2,7 @@ + + This region is not enabled for pathfinding. + - Permit object / terrain changes: + Allow object / terrain changes: