summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llaccountingcostmanager.cpp14
-rw-r--r--indra/newview/llaccountingcostmanager.h4
-rw-r--r--indra/newview/llfloaterobjectweights.cpp124
-rw-r--r--indra/newview/llfloaterobjectweights.h36
-rw-r--r--indra/newview/llfloatertools.cpp113
-rw-r--r--indra/newview/llfloatertools.h4
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_model_preview.xml312
-rw-r--r--indra/newview/skins/default/xui/en/floater_object_weights.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml10
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
10 files changed, 342 insertions, 281 deletions
diff --git a/indra/newview/llaccountingcostmanager.cpp b/indra/newview/llaccountingcostmanager.cpp
index 0669bdfffa..3717344aef 100644
--- a/indra/newview/llaccountingcostmanager.cpp
+++ b/indra/newview/llaccountingcostmanager.cpp
@@ -41,8 +41,13 @@ public:
: mObjectIDs( objectIDs ),
mObserverHandle( observer_handle )
{
+ LLAccountingCostObserver* observer = mObserverHandle.get();
+ if (observer)
+ {
+ mTransactionID = observer->getTransactionID();
+ }
}
-
+
void clearPendingRequests ( void )
{
for ( LLSD::array_iterator iter = mObjectIDs.beginArray(); iter != mObjectIDs.endArray(); ++iter )
@@ -57,7 +62,7 @@ public:
clearPendingRequests();
LLAccountingCostObserver* observer = mObserverHandle.get();
- if (observer)
+ if (observer && observer->getTransactionID() == mTransactionID)
{
observer->setErrorStatus(statusNum, reason);
}
@@ -86,7 +91,7 @@ public:
SelectionCost selectionCost( /*transactionID,*/ physicsCost, networkCost, simulationCost );
LLAccountingCostObserver* observer = mObserverHandle.get();
- if (observer)
+ if (observer && observer->getTransactionID() == mTransactionID)
{
observer->onWeightsUpdate(selectionCost);
}
@@ -99,6 +104,9 @@ private:
//List of posted objects
LLSD mObjectIDs;
+ // Current request ID
+ LLUUID mTransactionID;
+
// Cost update observer handle
LLHandle<LLAccountingCostObserver> mObserverHandle;
};
diff --git a/indra/newview/llaccountingcostmanager.h b/indra/newview/llaccountingcostmanager.h
index cccdc2e2d9..0bca1f54ef 100644
--- a/indra/newview/llaccountingcostmanager.h
+++ b/indra/newview/llaccountingcostmanager.h
@@ -40,9 +40,13 @@ public:
virtual void onWeightsUpdate(const SelectionCost& selection_cost) = 0;
virtual void setErrorStatus(U32 status, const std::string& reason) = 0;
const LLHandle<LLAccountingCostObserver>& getObserverHandle() const { return mObserverHandle; }
+ const LLUUID& getTransactionID() { return mTransactionID; }
protected:
+ virtual void generateTransactionID() = 0;
+
LLRootHandle<LLAccountingCostObserver> mObserverHandle;
+ LLUUID mTransactionID;
};
//===============================================================================
class LLAccountingCostManager : public LLSingleton<LLAccountingCostManager>
diff --git a/indra/newview/llfloaterobjectweights.cpp b/indra/newview/llfloaterobjectweights.cpp
index 7ad34431fb..0862cd2897 100644
--- a/indra/newview/llfloaterobjectweights.cpp
+++ b/indra/newview/llfloaterobjectweights.cpp
@@ -33,68 +33,36 @@
#include "lltextbox.h"
#include "llagent.h"
-#include "llselectmgr.h"
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
-/**
- * struct LLCrossParcelFunctor
- *
- * A functor that checks whether a bounding box for all
- * selected objects crosses a region or parcel bounds.
- */
-struct LLCrossParcelFunctor : public LLSelectedObjectFunctor
+// virtual
+bool LLCrossParcelFunctor::apply(LLViewerObject* obj)
{
- /*virtual*/ bool apply(LLViewerObject* obj)
- {
- // Add the root object box.
- mBoundingBox.addBBoxAgent(LLBBox(obj->getPositionRegion(), obj->getRotationRegion(), obj->getScale() * -0.5f, obj->getScale() * 0.5f).getAxisAligned());
+ // Add the root object box.
+ mBoundingBox.addBBoxAgent(LLBBox(obj->getPositionRegion(), obj->getRotationRegion(), obj->getScale() * -0.5f, obj->getScale() * 0.5f).getAxisAligned());
- // Extend the bounding box across all the children.
- LLViewerObject::const_child_list_t children = obj->getChildren();
- for (LLViewerObject::const_child_list_t::const_iterator iter = children.begin();
- iter != children.end(); iter++)
- {
- LLViewerObject* child = *iter;
- mBoundingBox.addBBoxAgent(LLBBox(child->getPositionRegion(), child->getRotationRegion(), child->getScale() * -0.5f, child->getScale() * 0.5f).getAxisAligned());
- }
-
- bool result = false;
-
- LLViewerRegion* region = obj->getRegion();
- if (region)
- {
- std::vector<LLBBox> boxes;
- boxes.push_back(mBoundingBox);
- result = region->objectsCrossParcel(boxes);
- }
-
- return result;
+ // Extend the bounding box across all the children.
+ LLViewerObject::const_child_list_t children = obj->getChildren();
+ for (LLViewerObject::const_child_list_t::const_iterator iter = children.begin();
+ iter != children.end(); iter++)
+ {
+ LLViewerObject* child = *iter;
+ mBoundingBox.addBBoxAgent(LLBBox(child->getPositionRegion(), child->getRotationRegion(), child->getScale() * -0.5f, child->getScale() * 0.5f).getAxisAligned());
}
-private:
- LLBBox mBoundingBox;
-};
+ bool result = false;
-/**
- * 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()
+ LLViewerRegion* region = obj->getRegion();
+ if (region)
{
- LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance<LLFloaterObjectWeights>("object_weights");
- if(object_weights_floater)
- {
- object_weights_floater->updateLandImpacts();
- }
+ std::vector<LLBBox> boxes;
+ boxes.push_back(mBoundingBox);
+ result = region->objectsCrossParcel(boxes);
}
-};
+ return result;
+}
LLFloaterObjectWeights::LLFloaterObjectWeights(const LLSD& key)
: LLFloater(key),
@@ -107,22 +75,12 @@ LLFloaterObjectWeights::LLFloaterObjectWeights(const LLSD& key)
mSelectedOnLand(NULL),
mRezzedOnLand(NULL),
mRemainingCapacity(NULL),
- mTotalCapacity(NULL),
- mLandImpactsObserver(NULL)
+ mTotalCapacity(NULL)
{
- mLandImpactsObserver = new LLLandImpactsObserver();
- LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver);
}
LLFloaterObjectWeights::~LLFloaterObjectWeights()
{
- mObjectSelection = NULL;
- mParcelSelection = NULL;
-
- mSelectMgrConnection.disconnect();
-
- LLViewerParcelMgr::getInstance()->removeObserver(mLandImpactsObserver);
- delete mLandImpactsObserver;
}
// virtual
@@ -147,21 +105,8 @@ BOOL LLFloaterObjectWeights::postBuild()
// virtual
void LLFloaterObjectWeights::onOpen(const LLSD& key)
{
- 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;
+ updateLandImpacts(LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel());
}
// virtual
@@ -190,9 +135,8 @@ void LLFloaterObjectWeights::setErrorStatus(U32 status, const std::string& reaso
toggleWeightsLoadingIndicators(false);
}
-void LLFloaterObjectWeights::updateLandImpacts()
+void LLFloaterObjectWeights::updateLandImpacts(const LLParcel* parcel)
{
- LLParcel *parcel = mParcelSelection->getParcel();
if (!parcel || LLSelectMgr::getInstance()->getSelection()->isEmpty())
{
updateIfNothingSelected();
@@ -241,21 +185,6 @@ void LLFloaterObjectWeights::refresh()
toggleLandImpactsLoadingIndicators(false);
}
- else
- {
- LLViewerObject* selected_object = mObjectSelection->getFirstObject();
- if (selected_object)
- {
- // Select a parcel at the currently selected object's position.
- LLViewerParcelMgr::getInstance()->selectParcelAt(selected_object->getPositionGlobal());
-
- toggleLandImpactsLoadingIndicators(true);
- }
- else
- {
- llwarns << "Failed to get selected object" << llendl;
- }
- }
LLViewerRegion* region = gAgent.getRegion();
if (region && region->capabilitiesReceived())
@@ -269,6 +198,9 @@ void LLFloaterObjectWeights::refresh()
std::string url = region->getCapability("ResourceCostSelected");
if (!url.empty())
{
+ // Update the transaction id before the new fetch request
+ generateTransactionID();
+
LLAccountingCostManager::getInstance()->fetchCosts(Roots, url, getObserverHandle());
toggleWeightsLoadingIndicators(true);
}
@@ -280,6 +212,12 @@ void LLFloaterObjectWeights::refresh()
}
}
+// virtual
+void LLFloaterObjectWeights::generateTransactionID()
+{
+ mTransactionID.generate();
+}
+
void LLFloaterObjectWeights::toggleWeightsLoadingIndicators(bool visible)
{
childSetVisible("download_loading_indicator", visible);
diff --git a/indra/newview/llfloaterobjectweights.h b/indra/newview/llfloaterobjectweights.h
index 50d028909e..9a244573be 100644
--- a/indra/newview/llfloaterobjectweights.h
+++ b/indra/newview/llfloaterobjectweights.h
@@ -30,35 +30,46 @@
#include "llfloater.h"
#include "llaccountingcostmanager.h"
+#include "llselectmgr.h"
-class LLLandImpactsObserver;
-class LLObjectSelection;
-class LLParcelSelection;
+class LLParcel;
class LLTextBox;
+/**
+ * struct LLCrossParcelFunctor
+ *
+ * A functor that checks whether a bounding box for all
+ * selected objects crosses a region or parcel bounds.
+ */
+struct LLCrossParcelFunctor : public LLSelectedObjectFunctor
+{
+ /*virtual*/ bool apply(LLViewerObject* obj);
+
+private:
+ LLBBox mBoundingBox;
+};
+
+
class LLFloaterObjectWeights : public LLFloater, LLAccountingCostObserver
{
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);
/*virtual*/ void onWeightsUpdate(const SelectionCost& selection_cost);
/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
- void updateLandImpacts();
+ void updateLandImpacts(const LLParcel* parcel);
+ void refresh();
private:
- void refresh();
+ /*virtual*/ void generateTransactionID();
void toggleWeightsLoadingIndicators(bool visible);
void toggleLandImpactsLoadingIndicators(bool visible);
@@ -77,13 +88,6 @@ 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/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 48aeeafcfd..1008b4a6e4 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -41,6 +41,7 @@
#include "llfloaterbuildoptions.h"
#include "llfloatermediasettings.h"
#include "llfloateropenobject.h"
+#include "llfloaterobjectweights.h"
#include "llfloaterreg.h"
#include "llfocusmgr.h"
#include "llmediaentry.h"
@@ -54,6 +55,7 @@
#include "llpanelobject.h"
#include "llpanelvolume.h"
#include "llpanelpermissions.h"
+#include "llparcel.h"
#include "llradiogroup.h"
#include "llresmgr.h"
#include "llselectmgr.h"
@@ -117,6 +119,24 @@ void commit_radio_group_edit(LLUICtrl* ctrl);
void commit_radio_group_land(LLUICtrl* ctrl);
void commit_slider_zoom(LLUICtrl *ctrl);
+/**
+ * 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()
+ {
+ LLFloaterTools* tools_floater = LLFloaterReg::getTypedInstance<LLFloaterTools>("build");
+ if(tools_floater)
+ {
+ tools_floater->updateLandImpacts();
+ }
+ }
+};
//static
void* LLFloaterTools::createPanelPermissions(void* data)
@@ -344,6 +364,9 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mCostTextBorder(NULL),
mTabLand(NULL),
+
+ mLandImpactsObserver(NULL),
+
mDirty(TRUE),
mNeedMediaTitle(TRUE)
{
@@ -375,12 +398,17 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mCommitCallbackRegistrar.add("BuildTool.LinkObjects", boost::bind(&LLSelectMgr::linkObjects, LLSelectMgr::getInstance()));
mCommitCallbackRegistrar.add("BuildTool.UnlinkObjects", boost::bind(&LLSelectMgr::unlinkObjects, LLSelectMgr::getInstance()));
+ mLandImpactsObserver = new LLLandImpactsObserver();
+ LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver);
}
LLFloaterTools::~LLFloaterTools()
{
// children automatically deleted
gFloaterTools = NULL;
+
+ LLViewerParcelMgr::getInstance()->removeObserver(mLandImpactsObserver);
+ delete mLandImpactsObserver;
}
void LLFloaterTools::setStatusText(const std::string& text)
@@ -449,45 +477,44 @@ void LLFloaterTools::refresh()
else
#endif
{
- F32 link_phys_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetPhysicsCost();
F32 link_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetCost();
- S32 prim_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
S32 link_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
- LLStringUtil::format_map_t selection_args;
- selection_args["OBJ_COUNT"] = llformat("%.1d", link_count);
- selection_args["PRIM_COUNT"] = llformat("%.1d", prim_count);
-
- std::ostringstream selection_info;
-
- bool show_mesh_cost = gMeshRepo.meshRezEnabled();
-
- if (show_mesh_cost)
+ LLCrossParcelFunctor func;
+ if (LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, true))
{
- LLStringUtil::format_map_t prim_equiv_args;
- prim_equiv_args["SEL_WEIGHT"] = llformat("%.1d", (S32)link_cost);
- selection_args["PE_STRING"] = getString("status_selectprimequiv", prim_equiv_args);
+ // Selection crosses parcel bounds.
+ // We don't display remaining land capacity in this case.
+ const LLStringExplicit empty_str("");
+ childSetTextArg("remaining_capacity", "[CAPACITY_STRING]", empty_str);
}
else
{
- selection_args["PE_STRING"] = "";
+ LLViewerObject* selected_object = mObjectSelection->getFirstObject();
+ if (selected_object)
+ {
+ // Select a parcel at the currently selected object's position.
+ LLViewerParcelMgr::getInstance()->selectParcelAt(selected_object->getPositionGlobal());
+ }
+ else
+ {
+ llwarns << "Failed to get selected object" << llendl;
+ }
}
- selection_info << getString("status_selectcount", selection_args);
-
-
- selection_info << ",";
+ LLStringUtil::format_map_t selection_args;
+ selection_args["OBJ_COUNT"] = llformat("%.1d", link_count);
+ selection_args["LAND_IMPACT"] = llformat("%.1d", (S32)link_cost);
- S32 render_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectRenderCost();
+ std::ostringstream selection_info;
- childSetTextArg("selection_weight", "[PHYS_WEIGHT]", llformat("%.1f", link_phys_cost));
- childSetTextArg("selection_weight", "[DISP_WEIGHT]", llformat("%.1d", render_cost));
+ selection_info << getString("status_selectcount", selection_args);
getChild<LLTextBox>("selection_count")->setText(selection_info.str());
bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty();
childSetVisible("selection_count", have_selection);
- childSetVisible("selection_weight", have_selection);
+ childSetVisible("remaining_capacity", have_selection);
childSetVisible("selection_empty", !have_selection);
}
@@ -500,6 +527,13 @@ void LLFloaterTools::refresh()
refreshMedia();
mPanelContents->refresh();
mPanelLandInfo->refresh();
+
+ // Refresh the advanced weights floater
+ LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance<LLFloaterObjectWeights>("object_weights");
+ if(object_weights_floater && object_weights_floater->getVisible())
+ {
+ object_weights_floater->refresh();
+ }
}
void LLFloaterTools::draw()
@@ -758,7 +792,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty();
getChildView("selection_count")->setVisible(!land_visible && have_selection);
- getChildView("selection_weight")->setVisible(!land_visible && have_selection);
+ getChildView("remaining_capacity")->setVisible(!land_visible && have_selection);
getChildView("selection_empty")->setVisible(!land_visible && !have_selection);
mTab->setVisible(!land_visible);
@@ -1086,6 +1120,37 @@ bool LLFloaterTools::selectedMediaEditable()
return selected_Media_editable;
}
+void LLFloaterTools::updateLandImpacts()
+{
+ LLParcel *parcel = mParcelSelection->getParcel();
+ if (!parcel)
+ {
+ return;
+ }
+
+ S32 rezzed_prims = parcel->getSimWidePrimCount();
+ S32 total_capacity = parcel->getSimWideMaxPrimCapacity();
+
+ std::string remaining_capacity_str = "";
+
+ bool show_mesh_cost = gMeshRepo.meshRezEnabled();
+ if (show_mesh_cost)
+ {
+ LLStringUtil::format_map_t remaining_capacity_args;
+ remaining_capacity_args["LAND_CAPACITY"] = llformat("%d", total_capacity - rezzed_prims);
+ remaining_capacity_str = getString("status_remaining_capacity", remaining_capacity_args);
+ }
+
+ childSetTextArg("remaining_capacity", "[CAPACITY_STRING]", remaining_capacity_str);
+
+ // Update land impacts info in the weights floater
+ LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance<LLFloaterObjectWeights>("object_weights");
+ if(object_weights_floater)
+ {
+ object_weights_floater->updateLandImpacts(parcel);
+ }
+}
+
void LLFloaterTools::getMediaState()
{
LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection();
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index 8c4cb721d3..63ed9dc82b 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -47,6 +47,7 @@ class LLMediaCtrl;
class LLTool;
class LLParcelSelection;
class LLObjectSelection;
+class LLLandImpactsObserver;
typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle;
@@ -103,6 +104,7 @@ public:
void updateMediaTitle();
void navigateToTitleMedia( const std::string url );
bool selectedMediaEditable();
+ void updateLandImpacts();
private:
void refresh();
@@ -180,6 +182,8 @@ public:
LLTabContainer* mTabLand;
+ LLLandImpactsObserver* mLandImpactsObserver;
+
LLParcelSelectionHandle mParcelSelection;
LLObjectSelectionHandle mObjectSelection;
diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml
index 259d2e70b6..52e70f3b6d 100755
--- a/indra/newview/skins/default/xui/en/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml
@@ -28,135 +28,6 @@
<string name="tbd">TBD</string>
- <text left="15" bottom="25" follows="top|left" height="15" name="name_label">
- Name:
- </text>
- <line_editor bottom_delta="20" follows="top|left|right" height="19" max_length_bytes="64"
- name="description_form" prevalidate_callback="ascii" width="290" />
-
- <text bottom_delta="20" left="15" follows="left|top" height="15" name="model_category_label" text_color="White">
- What does this model represent?
- </text>
- <combo_box top_pad="1" follows="left|top" height="23"
- name="model_category_combo" width="200">
- <combo_box.drop_down_button
- label_color="White"/>
- <combo_item name="Choose one" label="Choose One..." value="MUT_Unspecified"/>
- <combo_item name="Avatar shape" label="Avatar shape" value="MUT_AvatarShape"/>
- <combo_item name="Avatar attachment" label="Avatar attachment" value="MUT_AvatarAttachment"/>
- <combo_item name="Building Component" label="Building Component" value="MUT_BuildingComponent"/>
- <combo_item name="Moving object (vehicle, animal)" label="Moving object (vehicle, animal)" value="MUT_MovingObject"/>
- <combo_item name="Large, non moving etc" label="Large, non moving etc" value="MUT_LargeStationary"/>
- <combo_item name="Smaller, non-moving etc" label="Smaller, non-moving etc" value="MUT_SmallStationary"/>
- <combo_item name="Not really any of these" label="Not really any of these" value="MUT_Other"/>
- </combo_box>
-
- <text bottom_delta="20" left="15" follows="left|top" height="15" name="lod_label">
- Preview:
- </text>
- <combo_box bottom_delta="20" follows="left|top" height="18"
- name="preview_lod_combo" width="240" tool_tip="LOD to view in preview render">
- <combo_item name="high">
- Level of Detail: High
- </combo_item>
- <combo_item name="medium">
- Level of Detail: Medium
- </combo_item>
- <combo_item name="low">
- Level of Detail: Low
- </combo_item>
- <combo_item name="lowest">
- Level of Detail: Lowest
- </combo_item>
- </combo_box>
-
- <menu_button follows="top|left"
- image_hover_unselected="Toolbar_Left_Over"
- image_overlay="OptionsMenu_Off"
- image_selected="Toolbar_Left_Selected"
- image_unselected="Toolbar_Left_Off"
- layout="topleft"
- left_pad="5"
- name="options_gear_btn"
- width="31"
- height="25"/>
- <!-- Placeholder panel for 3D preview render -->
- <panel
- name="preview_panel"
- left="15"
- bevel_style="none"
- border_style="line"
- border="true"
- width="290"
- height="290"
- follows="all"/>
-
- <text
- font="SansSerif"
- bottom_delta="15"
- left_delta="0"
- name="warning_title"
- text_color="Yellow"
- visible="false">
- WARNING:
- </text>
- <text
- text_color="White"
- height="40"
- width="290"
- top_delta="15"
- left_delta="0"
- name="warning_message"
- parse_urls="true"
- wrap="true"
- visible="false">
- You will not be able to complete the final upload of this model to the Second Life servers. [[VURL] Find out how] to get enabled for mesh model uploads.</text>
-
- <text
- height="26"
- top_pad="5"
- left_delta="0"
- name="weights_text_left"
- width="80"
- word_wrap="true"
- >
-Download:
-Physics:
- </text>
- <text
- height="26"
- top_delta="0"
- left_pad="0"
- name="weights_left"
- width="70"
- word_wrap="true"
- >
-[ST]
-[PH]
- </text>
- <text
- height="26"
- top_delta="0"
- left_pad="0"
- name="weights_text_right"
- width="80"
- word_wrap="true"
- >
-Server:
-Prim equivs:
- </text>
- <text
- height="26"
- top_delta="0"
- left_pad="0"
- name="weights_right"
- width="70"
- word_wrap="true"
- >
-[SIM]
-[EQ]
- </text>
-
<!--
<text
height="65"
@@ -189,10 +60,18 @@ L$ [MODEL]
</text>
-->
+<panel
+ follows="all"
+ height="515"
+ layout="topleft"
+ left="3"
+ name="left_panel"
+ top="0"
+ width="305">
<tab_container
- follows="right|top|bottom"
+ follows="all"
top="15"
- left="310"
+ left="0"
height="470"
width="300"
name="import_tab"
@@ -552,14 +431,171 @@ L$ [MODEL]
>
Upload fee: L$ [FEE]
</text>
+ </panel>
+
+<panel
+ follows="all"
+ height="515"
+ layout="topleft"
+ left_pad="1"
+ name="right_panel"
+ top="0"
+ width="310">
+
+ <text left="15" bottom="25" follows="top|left" height="15" name="name_label">
+ Name:
+ </text>
+ <line_editor bottom_delta="20" follows="top|left|right" height="19" max_length_bytes="64"
+ name="description_form" prevalidate_callback="ascii" width="290" />
+
+ <text bottom_delta="20" left="15" follows="left|top" height="15" name="model_category_label" text_color="White">
+ What does this model represent?
+ </text>
+ <combo_box top_pad="1" follows="left|top" height="23"
+ name="model_category_combo" width="200">
+ <combo_box.drop_down_button
+ label_color="White"/>
+ <combo_item name="Choose one" label="Choose One..." value="MUT_Unspecified"/>
+ <combo_item name="Avatar shape" label="Avatar shape" value="MUT_AvatarShape"/>
+ <combo_item name="Avatar attachment" label="Avatar attachment" value="MUT_AvatarAttachment"/>
+ <combo_item name="Building Component" label="Building Component" value="MUT_BuildingComponent"/>
+ <combo_item name="Moving object (vehicle, animal)" label="Moving object (vehicle, animal)" value="MUT_MovingObject"/>
+ <combo_item name="Large, non moving etc" label="Large, non moving etc" value="MUT_LargeStationary"/>
+ <combo_item name="Smaller, non-moving etc" label="Smaller, non-moving etc" value="MUT_SmallStationary"/>
+ <combo_item name="Not really any of these" label="Not really any of these" value="MUT_Other"/>
+ </combo_box>
+
+ <text bottom_delta="20" left="15" follows="left|top" height="15" name="lod_label">
+ Preview:
+ </text>
+ <combo_box bottom_delta="20" follows="left|top" height="18"
+ name="preview_lod_combo" width="240" tool_tip="LOD to view in preview render">
+ <combo_item name="high">
+ Level of Detail: High
+ </combo_item>
+ <combo_item name="medium">
+ Level of Detail: Medium
+ </combo_item>
+ <combo_item name="low">
+ Level of Detail: Low
+ </combo_item>
+ <combo_item name="lowest">
+ Level of Detail: Lowest
+ </combo_item>
+ </combo_box>
+
+ <menu_button follows="top|left"
+ image_hover_unselected="Toolbar_Left_Over"
+ image_overlay="OptionsMenu_Off"
+ image_selected="Toolbar_Left_Selected"
+ image_unselected="Toolbar_Left_Off"
+ layout="topleft"
+ left_pad="5"
+ name="options_gear_btn"
+ width="31"
+ height="25"/>
+ <!-- Placeholder panel for 3D preview render -->
+ <!--<panel
+ name="preview_panel"
+ left="15"
+ bevel_style="none"
+ border_style="line"
+ border="true"
+ width="290"
+ height="290"
+ follows="all"/>-->
+
+ <text
+ font="SansSerif"
+ bottom_delta="305"
+ left="15"
+ name="warning_title"
+ text_color="Yellow"
+ visible="true">
+ WARNING:
+ </text>
+ <text
+ text_color="White"
+ height="40"
+ width="290"
+ top_delta="15"
+ left_delta="0"
+ name="warning_message"
+ parse_urls="true"
+ wrap="true"
+ visible="true">
+ You will not be able to complete the final upload of this model to the Second Life servers. [[VURL] Find out how] to get enabled for mesh model uploads.</text>
+
+ <text
+ height="26"
+ top_pad="5"
+ left_delta="0"
+ name="weights_text_left"
+ width="80"
+ word_wrap="true"
+ >
+Download:
+Physics:
+ </text>
+ <text
+ height="26"
+ top_delta="0"
+ left_pad="0"
+ name="weights_left"
+ width="70"
+ word_wrap="true"
+ >
+[ST]
+[PH]
+ </text>
+ <text
+ height="26"
+ top_delta="0"
+ left_pad="0"
+ name="weights_text_right"
+ width="80"
+ word_wrap="true"
+ >
+Server:
+Prim equivs:
+ </text>
+ <text
+ height="26"
+ top_delta="0"
+ left_pad="0"
+ name="weights_right"
+ width="70"
+ word_wrap="true"
+ >
+[SIM]
+[EQ]
+ </text>
+</panel>
+
+<panel
+ follows="bottom|left|right"
+ height="33"
+ layout="topleft"
+ left="0"
+ name="bottom_buttons_panel"
+ top_pad="1"
+ width="610">
+ <button top="3" left="10" follows="bottom|left" height="20" label="Set to defaults" width="100" name="reset_btn" tool_tip="Set to defaults"/>
+ <button top="3" left="310" follows="bottom|right" height="20" label="Calculate weights &amp; fee" width="150" name="calculate_btn" tool_tip="Calculate weights &amp; fee"/>
+ <button top="3" left_delta="0" follows="bottom|right" height="20" label="Upload" width="80" name="ok_btn" tool_tip="Upload to simulator" visible="false"/>
+ <button top="3" right="-10" follows="right|bottom" height="20" width="80" label="Cancel" name="cancel_btn"/>
+</panel>
- <button bottom="540" left="10" follows="bottom|left" height="20" label="Set to defaults"
- width="100" name="reset_btn" tool_tip="Set to defaults"/>
- <button left="310" follows="bottom|right" height="20" label="Calculate weights &amp; fee"
- width="150" name="calculate_btn" tool_tip="Calculate weights &amp; fee" top_delta="0"/>
- <button bottom="540" left="310" follows="bottom|right" height="20" label="Upload"
- width="80" name="ok_btn" tool_tip="Upload to simulator" visible="false"/>
- <button right="-10" follows="right|bottom" height="20" width="80" label="Cancel" name="cancel_btn" top_delta="0"/>
+<panel
+ name="preview_panel"
+ left="320"
+ top="131"
+ bevel_style="none"
+ border_style="line"
+ border="true"
+ width="290"
+ height="290"
+ follows="all"/>
<!--
<button bottom_delta="0" left="10" width="120" name="auto fill" label="Generate LOD" tool_tip="Automatically generate levels of detail"/>
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 a73db3af32..eb283a1043 100644
--- a/indra/newview/skins/default/xui/en/floater_object_weights.xml
+++ b/indra/newview/skins/default/xui/en/floater_object_weights.xml
@@ -3,7 +3,7 @@
can_close="true"
can_tear_off="false"
height="315"
- help_topic="objects_weight_floater"
+ help_topic="object_weights"
layout="topleft"
name="object_weights"
save_rect="true"
@@ -337,6 +337,6 @@
left="10"
name="help_SLURL"
top_pad="10"
- value="[secondlife:///www.secondlife.com What is all this?...]"
+ value="[secondlife:///app/help/object_weights What is all this?...]"
width="180" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 03d6c84266..9b02f7d273 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -48,11 +48,11 @@
</floater.string>
<floater.string
name="status_selectcount">
- [OBJ_COUNT] objects ( [PRIM_COUNT] prims[PE_STRING] ) selected
+ [OBJ_COUNT] objects selected, land impact [LAND_IMPACT]
</floater.string>
<floater.string
- name="status_selectprimequiv">
- , [SEL_WEIGHT] prim equivs
+ name="status_remaining_capacity">
+ Remaining capacity [LAND_CAPACITY].
</floater.string>
<button
follows="left|top"
@@ -738,11 +738,11 @@
font="SansSerifSmall"
layout="topleft"
left="10"
- name="selection_weight"
+ name="remaining_capacity"
top_pad="0"
visible="false"
width="280">
- Physics weight [PHYS_WEIGHT], Render Cost [DISP_WEIGHT]. [secondlife:///app/openfloater/object_weights More info]
+ [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights More info]
</text>
<!-- <text -->
<!-- text_color="LtGray_50" -->
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index f80028ec0c..d7dcc05179 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3633,5 +3633,7 @@ Try enclosing path to the editor with double quotes.
<string name="Surface">Surface</string>
<string name="Solid">Solid</string>
<string name="Wrap">Wrap</string>
+ <string name="Preview">Preview</string>
+ <string name="Normal">Normal</string>
</strings>