summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseth_productengine <none@none>2011-08-02 00:16:13 +0300
committerseth_productengine <none@none>2011-08-02 00:16:13 +0300
commit1b7b319ae22ac7598b7b3d75ccbec75263450e07 (patch)
tree9a3e656c90635062cf5f2d7c11c1bb0a24efff7a
parent6c7653c65bd3f9907bcd4a8a54e4e5c1d172d15e (diff)
SH-2170 WIP Object and land data added to new weights floater.
The data is updated upon object selection change. The land data is displayed for the land containing the primary selected object. Loading indicators added for land impacts.
-rw-r--r--indra/newview/llfloaterobjectweights.cpp135
-rw-r--r--indra/newview/llfloaterobjectweights.h22
-rw-r--r--indra/newview/skins/default/xui/en/floater_object_weights.xml38
3 files changed, 183 insertions, 12 deletions
diff --git a/indra/newview/llfloaterobjectweights.cpp b/indra/newview/llfloaterobjectweights.cpp
index 93aa8dcf08..80a753757e 100644
--- a/indra/newview/llfloaterobjectweights.cpp
+++ b/indra/newview/llfloaterobjectweights.cpp
@@ -27,8 +27,34 @@
#include "llfloaterobjectweights.h"
+#include "llparcel.h"
+
+#include "llfloaterreg.h"
#include "lltextbox.h"
+#include "llselectmgr.h"
+#include "llviewerparcelmgr.h"
+
+/**
+ * Class LLLandImpactsObserver
+ *
+ * An observer class to monitor parcel selection and update
+ * the land impacts data from a parcel containing the selected object.
+ */
+class LLLandImpactsObserver : public LLParcelObserver
+{
+public:
+ virtual void changed()
+ {
+ LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance<LLFloaterObjectWeights>("object_weights");
+ if(object_weights_floater)
+ {
+ object_weights_floater->updateLandImpacts();
+ }
+ }
+};
+
+
LLFloaterObjectWeights::LLFloaterObjectWeights(const LLSD& key)
: LLFloater(key),
mSelectedObjects(NULL),
@@ -40,12 +66,22 @@ LLFloaterObjectWeights::LLFloaterObjectWeights(const LLSD& key)
mSelectedOnLand(NULL),
mRezzedOnLand(NULL),
mRemainingCapacity(NULL),
- mTotalCapacity(NULL)
+ mTotalCapacity(NULL),
+ mLandImpactsObserver(NULL)
{
+ mLandImpactsObserver = new LLLandImpactsObserver();
+ LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver);
}
LLFloaterObjectWeights::~LLFloaterObjectWeights()
{
+ mObjectSelection = NULL;
+ mParcelSelection = NULL;
+
+ mSelectMgrConnection.disconnect();
+
+ LLViewerParcelMgr::getInstance()->removeObserver(mLandImpactsObserver);
+ delete mLandImpactsObserver;
}
// virtual
@@ -59,10 +95,10 @@ BOOL LLFloaterObjectWeights::postBuild()
mSelectedServerWeight = getChild<LLTextBox>("server");
mSelectedDisplayWeight = getChild<LLTextBox>("display");
- mSelectedOnLand = getChild<LLTextBox>("used_download_weight");
- mRezzedOnLand = getChild<LLTextBox>("used_download_weight");
- mRemainingCapacity = getChild<LLTextBox>("used_download_weight");
- mTotalCapacity = getChild<LLTextBox>("used_download_weight");
+ mSelectedOnLand = getChild<LLTextBox>("selected");
+ mRezzedOnLand = getChild<LLTextBox>("rezzed_on_land");
+ mRemainingCapacity = getChild<LLTextBox>("remaining_capacity");
+ mTotalCapacity = getChild<LLTextBox>("total_capacity");
return TRUE;
}
@@ -70,15 +106,94 @@ BOOL LLFloaterObjectWeights::postBuild()
// virtual
void LLFloaterObjectWeights::onOpen(const LLSD& key)
{
- updateIfNothingSelected();
+ mSelectMgrConnection = LLSelectMgr::instance().mUpdateSignal.connect(boost::bind(&LLFloaterObjectWeights::refresh, this));
+
+ mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
+ mParcelSelection = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection();
+
+ refresh();
+}
+
+// virtual
+void LLFloaterObjectWeights::onClose(bool app_quitting)
+{
+ mSelectMgrConnection.disconnect();
+
+ mObjectSelection = NULL;
+ mParcelSelection = NULL;
}
-void LLFloaterObjectWeights::toggleLoadingIndicators(bool visible)
+void LLFloaterObjectWeights::updateLandImpacts()
+{
+ LLParcel *parcel = mParcelSelection->getParcel();
+ if (!parcel || LLSelectMgr::getInstance()->getSelection()->isEmpty())
+ {
+ updateIfNothingSelected();
+ }
+ else
+ {
+ S32 selected_prims = parcel->getSelectedPrimCount();
+ S32 rezzed_prims = parcel->getSimWidePrimCount();
+ S32 total_capacity = parcel->getSimWideMaxPrimCapacity();
+
+ mSelectedOnLand->setText(llformat("%d", selected_prims));
+ mRezzedOnLand->setText(llformat("%d", rezzed_prims));
+ mRemainingCapacity->setText(llformat("%d", total_capacity - rezzed_prims));
+ mTotalCapacity->setText(llformat("%d", total_capacity));
+
+ toggleLandImpactsLoadingIndicators(false);
+ }
+}
+
+void LLFloaterObjectWeights::refresh()
+{
+ if (LLSelectMgr::getInstance()->getSelection()->isEmpty())
+ {
+ updateIfNothingSelected();
+ }
+ else
+ {
+ S32 prim_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
+ S32 link_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
+
+ mSelectedObjects->setText(llformat("%d", link_count));
+ mSelectedPrims->setText(llformat("%d", prim_count));
+
+ LLViewerObject* selected_object = mObjectSelection->getPrimaryObject();
+ if (selected_object)
+ {
+ // Select a parcel at the currently selected object's position.
+ LLViewerParcelMgr::getInstance()->selectParcelAt(selected_object->getPositionGlobal());
+
+ toggleLandImpactsLoadingIndicators(true);
+ }
+ }
+}
+
+void LLFloaterObjectWeights::toggleWeightsLoadingIndicators(bool visible)
{
childSetVisible("download_loading_indicator", visible);
childSetVisible("physics_loading_indicator", visible);
childSetVisible("server_loading_indicator", visible);
childSetVisible("display_loading_indicator", visible);
+
+ mSelectedDownloadWeight->setVisible(!visible);
+ mSelectedPhysicsWeight->setVisible(!visible);
+ mSelectedServerWeight->setVisible(!visible);
+ mSelectedDisplayWeight->setVisible(!visible);
+}
+
+void LLFloaterObjectWeights::toggleLandImpactsLoadingIndicators(bool visible)
+{
+ childSetVisible("selected_loading_indicator", visible);
+ childSetVisible("rezzed_on_land_loading_indicator", visible);
+ childSetVisible("remaining_capacity_loading_indicator", visible);
+ childSetVisible("total_capacity_loading_indicator", visible);
+
+ mSelectedOnLand->setVisible(!visible);
+ mRezzedOnLand->setVisible(!visible);
+ mRemainingCapacity->setVisible(!visible);
+ mTotalCapacity->setVisible(!visible);
}
void LLFloaterObjectWeights::updateIfNothingSelected()
@@ -94,6 +209,10 @@ void LLFloaterObjectWeights::updateIfNothingSelected()
mSelectedDisplayWeight->setText(text);
mSelectedOnLand->setText(text);
+ mRezzedOnLand->setText(text);
+ mRemainingCapacity->setText(text);
+ mTotalCapacity->setText(text);
- toggleLoadingIndicators(false);
+ toggleWeightsLoadingIndicators(false);
+ toggleLandImpactsLoadingIndicators(false);
}
diff --git a/indra/newview/llfloaterobjectweights.h b/indra/newview/llfloaterobjectweights.h
index 10e35ad7a7..82743a8aa7 100644
--- a/indra/newview/llfloaterobjectweights.h
+++ b/indra/newview/llfloaterobjectweights.h
@@ -29,6 +29,9 @@
#include "llfloater.h"
+class LLLandImpactsObserver;
+class LLObjectSelection;
+class LLParcelSelection;
class LLTextBox;
class LLFloaterObjectWeights : public LLFloater
@@ -36,15 +39,25 @@ class LLFloaterObjectWeights : public LLFloater
public:
LOG_CLASS(LLFloaterObjectWeights);
+ typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle;
+ typedef LLSafeHandle<LLParcelSelection> LLParcelSelectionHandle;
+
LLFloaterObjectWeights(const LLSD& key);
~LLFloaterObjectWeights();
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+
+ void updateLandImpacts();
private:
- void toggleLoadingIndicators(bool visible);
+ void refresh();
+
+ void toggleWeightsLoadingIndicators(bool visible);
+ void toggleLandImpactsLoadingIndicators(bool visible);
+
void updateIfNothingSelected();
LLTextBox *mSelectedObjects;
@@ -59,6 +72,13 @@ private:
LLTextBox *mRezzedOnLand;
LLTextBox *mRemainingCapacity;
LLTextBox *mTotalCapacity;
+
+ LLLandImpactsObserver *mLandImpactsObserver;
+
+ LLObjectSelectionHandle mObjectSelection;
+ LLParcelSelectionHandle mParcelSelection;
+
+ boost::signals2::connection mSelectMgrConnection;
};
#endif //LL_LLFLOATEROBJECTWEIGHTS_H
diff --git a/indra/newview/skins/default/xui/en/floater_object_weights.xml b/indra/newview/skins/default/xui/en/floater_object_weights.xml
index f377386679..a73db3af32 100644
--- a/indra/newview/skins/default/xui/en/floater_object_weights.xml
+++ b/indra/newview/skins/default/xui/en/floater_object_weights.xml
@@ -222,6 +222,14 @@
top_pad="3"
value="--"
width="40" />
+ <loading_indicator
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="34"
+ name="selected_loading_indicator"
+ top_delta="0"
+ width="16" />
<text
follows="left|top"
height="16"
@@ -241,6 +249,14 @@
top_pad="3"
value="--"
width="40" />
+ <loading_indicator
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="34"
+ name="rezzed_on_land_loading_indicator"
+ top_delta="0"
+ width="16" />
<text
follows="left|top"
height="16"
@@ -260,12 +276,20 @@
top_pad="3"
value="--"
width="40" />
+ <loading_indicator
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="34"
+ name="remaining_capacity_loading_indicator"
+ top_delta="0"
+ width="16" />
<text
follows="left|top"
height="16"
layout="topleft"
left_pad="10"
- name="remaining_capacity"
+ name="remaining_capacity_label"
top_delta="0"
value="Remaining capacity"
width="130" />
@@ -279,12 +303,20 @@
top_pad="3"
value="--"
width="40" />
+ <loading_indicator
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="34"
+ name="total_capacity_loading_indicator"
+ top_delta="0"
+ width="16" />
<text
follows="left|top"
height="16"
layout="topleft"
left_pad="10"
- name="total_capacity"
+ name="total_capacity_label"
top_delta="0"
value="Total capacity"
width="130" />
@@ -303,7 +335,7 @@
height="16"
layout="topleft"
left="10"
- name="total_capacity"
+ name="help_SLURL"
top_pad="10"
value="[secondlife:///www.secondlife.com What is all this?...]"
width="180" />