summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorWilliam Todd Stinson <stinson@lindenlab.com>2012-08-30 17:52:31 -0700
committerWilliam Todd Stinson <stinson@lindenlab.com>2012-08-30 17:52:31 -0700
commitf28b993f5ea98f753da410c659e0635c50efb7b1 (patch)
tree7d47ac09e84f8fb1b93d629e5b7f85c14c3a555f /indra/newview
parent3e6e976d6b756c81ccadf6ccda89c2fc5a90666b (diff)
Enabling toggle of the Put button based on the in-world object selection.
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llfloaterstinson.cpp24
-rw-r--r--indra/newview/llfloaterstinson.h2
2 files changed, 25 insertions, 1 deletions
diff --git a/indra/newview/llfloaterstinson.cpp b/indra/newview/llfloaterstinson.cpp
index 697f110821..ff8fc18112 100644
--- a/indra/newview/llfloaterstinson.cpp
+++ b/indra/newview/llfloaterstinson.cpp
@@ -138,11 +138,21 @@ void LLFloaterStinson::onOpen(const LLSD& pKey)
mTeleportFailedConnection = LLViewerParcelMgr::getInstance()->setTeleportFailedCallback(boost::bind(&LLFloaterStinson::onRegionCross, this));
}
+ if (!mSelectionUpdateConnection.connected())
+ {
+ mSelectionUpdateConnection = LLSelectMgr::getInstance()->mUpdateSignal.connect(boost::bind(&LLFloaterStinson::onInWorldSelectionChange, this));
+ }
+
checkRegionMaterialStatus();
}
void LLFloaterStinson::onClose(bool pIsAppQuitting)
{
+ if (mSelectionUpdateConnection.connected())
+ {
+ mSelectionUpdateConnection.disconnect();
+ }
+
if (mTeleportFailedConnection.connected())
{
mTeleportFailedConnection.disconnect();
@@ -165,7 +175,8 @@ LLFloaterStinson::LLFloaterStinson(const LLSD& pParams)
mWarningColor(),
mErrorColor(),
mRegionCrossConnection(),
- mTeleportFailedConnection()
+ mTeleportFailedConnection(),
+ mSelectionUpdateConnection()
{
}
@@ -188,6 +199,11 @@ void LLFloaterStinson::onRegionCross()
checkRegionMaterialStatus();
}
+void LLFloaterStinson::onInWorldSelectionChange()
+{
+ updateControls();
+}
+
void LLFloaterStinson::onDeferredCheckRegionMaterialStatus(LLUUID regionId)
{
checkRegionMaterialStatus(regionId);
@@ -487,6 +503,9 @@ void LLFloaterStinson::updateStatusMessage()
void LLFloaterStinson::updateControls()
{
+ LLObjectSelectionHandle selectionHandle = LLSelectMgr::getInstance()->getEditSelection();
+ bool isPutEnabled = (selectionHandle->valid_begin() != selectionHandle->valid_end());
+
switch (getState())
{
case kNoRegion :
@@ -494,14 +513,17 @@ void LLFloaterStinson::updateControls()
case kRequestStarted :
case kNotEnabled :
mGetButton->setEnabled(FALSE);
+ mPutButton->setEnabled(FALSE);
break;
case kReady :
case kRequestCompleted :
case kError :
mGetButton->setEnabled(TRUE);
+ mPutButton->setEnabled(isPutEnabled);
break;
default :
mGetButton->setEnabled(TRUE);
+ mPutButton->setEnabled(isPutEnabled);
llassert(0);
break;
}
diff --git a/indra/newview/llfloaterstinson.h b/indra/newview/llfloaterstinson.h
index 1aeb6bbd23..1a4c511deb 100644
--- a/indra/newview/llfloaterstinson.h
+++ b/indra/newview/llfloaterstinson.h
@@ -66,6 +66,7 @@ private:
void onGetClicked();
void onPutClicked();
void onRegionCross();
+ void onInWorldSelectionChange();
void onDeferredCheckRegionMaterialStatus(LLUUID regionId);
void onDeferredRequestGetMaterials(LLUUID regionId);
void onDeferredRequestPutMaterials(LLUUID regionId);
@@ -99,6 +100,7 @@ private:
boost::signals2::connection mRegionCrossConnection;
boost::signals2::connection mTeleportFailedConnection;
+ boost::signals2::connection mSelectionUpdateConnection;
};