Meeting Request: Pick up LL's changes to land impact (Also introduces Land Impact floater)

Small change to lltextbox allowing us to use value attribute with <text/>'s YAY!!

Cleaned up in llfloatertools as well to better diff.
This commit is contained in:
Inusaito Sayori
2014-05-23 06:19:43 -04:00
parent 2ce3f2c131
commit 828941a204
20 changed files with 1112 additions and 102 deletions

View File

@@ -395,8 +395,14 @@ void LLTextBox::initFromXML(LLXMLNodePtr node, LLView* parent)
LLFontGL* font = LLView::selectFont(node);
if(font)
mFontGL = font;
setText(node->getTextContents());
if (node->hasAttribute("value"))
{
std::string text;
node->getAttributeString("value", text);
setText(text);
}
else setText(node->getTextContents());
LLFontGL::HAlign halign = LLView::selectFontHAlign(node);
setHAlign(halign);

View File

@@ -240,6 +240,7 @@ set(viewer_SOURCE_FILES
llfloaternamedesc.cpp
llfloaternotificationsconsole.cpp
llfloaterobjectiminfo.cpp
llfloaterobjectweights.cpp
llfloateropenobject.cpp
llfloateroutbox.cpp
llfloaterparcel.cpp
@@ -762,6 +763,7 @@ set(viewer_HEADER_FILES
llfloaternamedesc.h
llfloaternotificationsconsole.h
llfloaterobjectiminfo.h
llfloaterobjectweights.h
llfloateropenobject.h
llfloateroutbox.h
llfloaterparcel.h

View File

@@ -41,9 +41,15 @@ LLAccountingCostManager::LLAccountingCostManager()
class LLAccountingCostResponder : public LLHTTPClient::ResponderWithResult
{
public:
LLAccountingCostResponder( const LLSD& objectIDs )
: mObjectIDs( objectIDs )
LLAccountingCostResponder( const LLSD& objectIDs, const LLHandle<LLAccountingCostObserver>& observer_handle )
: mObjectIDs( objectIDs ),
mObserverHandle( observer_handle )
{
LLAccountingCostObserver* observer = mObserverHandle.get();
if (observer)
{
mTransactionID = observer->getTransactionID();
}
}
void clearPendingRequests ( void )
@@ -54,19 +60,24 @@ public:
}
}
/*virtual*/ void error( U32 statusNum, const std::string& reason )
void error( U32 statusNum, const std::string& reason )
{
llwarns << "Transport error "<<reason<<llendl;
llwarns << "Transport error [status:" << statusNum << "]: " << reason << llendl;
clearPendingRequests();
LLAccountingCostObserver* observer = mObserverHandle.get();
if (observer && observer->getTransactionID() == mTransactionID)
{
observer->setErrorStatus(statusNum, reason);
}
}
/*virtual*/ void result( const LLSD& content )
void result( const LLSD& content )
{
//Check for error
if ( !content.isMap() || content.has("error") )
{
llwarns << "Error on fetched data"<< llendl;
clearPendingRequests();
}
else if (content.has("selected"))
{
@@ -74,15 +85,17 @@ public:
F32 networkCost = 0.0f;
F32 simulationCost = 0.0f;
//LLTransactionID transactionID;
//transactionID = content["selected"][i]["local_id"].asUUID();
physicsCost = content["selected"]["physics"].asReal();
networkCost = content["selected"]["streaming"].asReal();
simulationCost = content["selected"]["simulation"].asReal();
SelectionCost selectionCost( /*transactionID,*/ physicsCost, networkCost, simulationCost );
LLAccountingCostObserver* observer = mObserverHandle.get();
if (observer && observer->getTransactionID() == mTransactionID)
{
observer->onWeightsUpdate(selectionCost);
}
}
clearPendingRequests();
@@ -94,10 +107,17 @@ public:
private:
//List of posted objects
LLSD mObjectIDs;
};
// Current request ID
LLUUID mTransactionID;
// Cost update observer handle
LLHandle<LLAccountingCostObserver> mObserverHandle;
};
//===============================================================================
void LLAccountingCostManager::fetchCosts( eSelectionType selectionType, const std::string& url )
void LLAccountingCostManager::fetchCosts( eSelectionType selectionType,
const std::string& url,
const LLHandle<LLAccountingCostObserver>& observer_handle )
{
// Invoking system must have already determined capability availability
if ( !url.empty() )
@@ -144,7 +164,7 @@ void LLAccountingCostManager::fetchCosts( eSelectionType selectionType, const st
LLSD dataToPost = LLSD::emptyMap();
dataToPost[keystr.c_str()] = objectList;
LLHTTPClient::post( url, dataToPost, new LLAccountingCostResponder( objectList ));
LLHTTPClient::post( url, dataToPost, new LLAccountingCostResponder( objectList, observer_handle ));
}
}
else

View File

@@ -27,8 +27,28 @@
#ifndef LL_ACCOUNTINGQUOTAMANAGER_H
#define LL_ACCOUNTINGQUOTAMANAGER_H
//===============================================================================
#include "llhandle.h"
#include "llaccountingcost.h"
//===============================================================================
// An interface class for panels which display the parcel accounting information.
class LLAccountingCostObserver
{
public:
LLAccountingCostObserver() { mObserverHandle.bind(this); }
virtual ~LLAccountingCostObserver() {}
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>
{
public:
@@ -37,7 +57,8 @@ public:
//Store an object that will be eventually fetched
void addObject( const LLUUID& objectID );
//Request quotas for object list
void fetchCosts( eSelectionType selectionType, const std::string& url );
void fetchCosts( eSelectionType selectionType, const std::string& url,
const LLHandle<LLAccountingCostObserver>& observer_handle );
//Delete a specific object from the pending list
void removePendingObject( const LLUUID& objectID );

View File

@@ -0,0 +1,276 @@
/**
* @file llfloaterobjectweights.cpp
* @brief Object weights advanced view floater
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2011, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llfloaterobjectweights.h"
#include "llparcel.h"
#include "lltextbox.h"
#include "lluictrlfactory.h"
#include "llagent.h"
#include "llfloatertools.h" // Singu Note: For placement beside the tools floater when it is opened.
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
// virtual
bool LLCrossParcelFunctor::apply(LLViewerObject* obj)
{
// 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;
}
LLFloaterObjectWeights::LLFloaterObjectWeights(const LLSD& key)
: LLFloater(key),
mSelectedObjects(NULL),
mSelectedPrims(NULL),
mSelectedDownloadWeight(NULL),
mSelectedPhysicsWeight(NULL),
mSelectedServerWeight(NULL),
mSelectedDisplayWeight(NULL),
mSelectedOnLand(NULL),
mRezzedOnLand(NULL),
mRemainingCapacity(NULL),
mTotalCapacity(NULL)
{
//buildFromFile("floater_tools.xml");
LLUICtrlFactory::getInstance()->buildFloater(this,"floater_object_weights.xml", NULL, false);
}
LLFloaterObjectWeights::~LLFloaterObjectWeights()
{
}
// virtual
BOOL LLFloaterObjectWeights::postBuild()
{
mSelectedObjects = getChild<LLTextBox>("objects");
mSelectedPrims = getChild<LLTextBox>("prims");
mSelectedDownloadWeight = getChild<LLTextBox>("download");
mSelectedPhysicsWeight = getChild<LLTextBox>("physics");
mSelectedServerWeight = getChild<LLTextBox>("server");
mSelectedDisplayWeight = getChild<LLTextBox>("display");
mSelectedOnLand = getChild<LLTextBox>("selected");
mRezzedOnLand = getChild<LLTextBox>("rezzed_on_land");
mRemainingCapacity = getChild<LLTextBox>("remaining_capacity");
mTotalCapacity = getChild<LLTextBox>("total_capacity");
return TRUE;
}
// virtual
void LLFloaterObjectWeights::onOpen()
{
const LLRect& tools_rect = gFloaterTools->getRect();
setOrigin(tools_rect.mRight, tools_rect.mTop - getRect().getHeight());
refresh();
updateLandImpacts(LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel());
}
// virtual
void LLFloaterObjectWeights::onWeightsUpdate(const SelectionCost& selection_cost)
{
mSelectedDownloadWeight->setText(llformat("%.1f", selection_cost.mNetworkCost));
mSelectedPhysicsWeight->setText(llformat("%.1f", selection_cost.mPhysicsCost));
mSelectedServerWeight->setText(llformat("%.1f", selection_cost.mSimulationCost));
S32 render_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectRenderCost();
mSelectedDisplayWeight->setText(llformat("%d", render_cost));
toggleWeightsLoadingIndicators(false);
}
//virtual
void LLFloaterObjectWeights::setErrorStatus(U32 status, const std::string& reason)
{
const std::string text = getString("nothing_selected");
mSelectedDownloadWeight->setText(text);
mSelectedPhysicsWeight->setText(text);
mSelectedServerWeight->setText(text);
mSelectedDisplayWeight->setText(text);
toggleWeightsLoadingIndicators(false);
}
void LLFloaterObjectWeights::updateLandImpacts(const LLParcel* parcel)
{
if (!parcel || LLSelectMgr::getInstance()->getSelection()->isEmpty())
{
updateIfNothingSelected();
}
else
{
S32 rezzed_prims = parcel->getSimWidePrimCount();
S32 total_capacity = parcel->getSimWideMaxPrimCapacity();
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()
{
LLSelectMgr* sel_mgr = LLSelectMgr::getInstance();
if (sel_mgr->getSelection()->isEmpty())
{
updateIfNothingSelected();
}
else
{
S32 prim_count = sel_mgr->getSelection()->getObjectCount();
S32 link_count = sel_mgr->getSelection()->getRootObjectCount();
F32 prim_equiv = sel_mgr->getSelection()->getSelectedLinksetCost();
mSelectedObjects->setText(llformat("%d", link_count));
mSelectedPrims->setText(llformat("%d", prim_count));
mSelectedOnLand->setText(llformat("%.1d", (S32)prim_equiv));
LLCrossParcelFunctor func;
if (sel_mgr->getSelection()->applyToRootObjects(&func, true))
{
// Some of the selected objects cross parcel bounds.
// We don't display object weights and land impacts in this case.
const std::string text = getString("nothing_selected");
mRezzedOnLand->setText(text);
mRemainingCapacity->setText(text);
mTotalCapacity->setText(text);
toggleLandImpactsLoadingIndicators(false);
}
LLViewerRegion* region = gAgent.getRegion();
if (region && region->capabilitiesReceived())
{
for (LLObjectSelection::valid_root_iterator iter = sel_mgr->getSelection()->valid_root_begin();
iter != sel_mgr->getSelection()->valid_root_end(); ++iter)
{
LLAccountingCostManager::getInstance()->addObject((*iter)->getObject()->getID());
}
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);
}
}
else
{
//LL_WARNS() << "Failed to get region capabilities" << LL_ENDL;
llwarns << "Failed to get region capabilities" << llendl;
}
}
}
// virtual
void LLFloaterObjectWeights::generateTransactionID()
{
mTransactionID.generate();
}
void LLFloaterObjectWeights::toggleWeightsLoadingIndicators(bool visible)
{
/* Singu TODO: LLLoadingIndicator
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)
{
/* Singu TODO: LLLoadingIndicator
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()
{
const std::string text = getString("nothing_selected");
mSelectedObjects->setText(text);
mSelectedPrims->setText(text);
mSelectedDownloadWeight->setText(text);
mSelectedPhysicsWeight->setText(text);
mSelectedServerWeight->setText(text);
mSelectedDisplayWeight->setText(text);
mSelectedOnLand->setText(text);
mRezzedOnLand->setText(text);
mRemainingCapacity->setText(text);
mTotalCapacity->setText(text);
toggleWeightsLoadingIndicators(false);
toggleLandImpactsLoadingIndicators(false);
}

View File

@@ -0,0 +1,94 @@
/**
* @file llfloaterobjectweights.h
* @brief Object weights advanced view floater
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2011, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_LLFLOATEROBJECTWEIGHTS_H
#define LL_LLFLOATEROBJECTWEIGHTS_H
#include "llfloater.h"
#include "llaccountingcostmanager.h"
#include "llselectmgr.h"
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 LLFloaterSingleton<LLFloaterObjectWeights>
{
public:
LOG_CLASS(LLFloaterObjectWeights);
LLFloaterObjectWeights(const LLSD& key);
~LLFloaterObjectWeights();
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen();
/*virtual*/ void onWeightsUpdate(const SelectionCost& selection_cost);
/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
void updateLandImpacts(const LLParcel* parcel);
void refresh();
private:
/*virtual*/ void generateTransactionID();
void toggleWeightsLoadingIndicators(bool visible);
void toggleLandImpactsLoadingIndicators(bool visible);
void updateIfNothingSelected();
LLTextBox *mSelectedObjects;
LLTextBox *mSelectedPrims;
LLTextBox *mSelectedDownloadWeight;
LLTextBox *mSelectedPhysicsWeight;
LLTextBox *mSelectedServerWeight;
LLTextBox *mSelectedDisplayWeight;
LLTextBox *mSelectedOnLand;
LLTextBox *mRezzedOnLand;
LLTextBox *mRemainingCapacity;
LLTextBox *mTotalCapacity;
};
#endif //LL_LLFLOATEROBJECTWEIGHTS_H

View File

@@ -47,6 +47,7 @@
#include "llfloaterbuildoptions.h"
#include "llfloatermediasettings.h"
#include "llfloateropenobject.h"
#include "llfloaterobjectweights.h"
#include "llfocusmgr.h"
#include "llmediaentry.h"
#include "llmediactrl.h"
@@ -99,7 +100,6 @@
// Globals
LLFloaterTools *gFloaterTools = NULL;
const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] =
{
std::string("General"), // PANEL_GENERAL,
@@ -124,10 +124,27 @@ void commit_radio_group_focus(LLUICtrl* ctrl);
void commit_radio_group_move(LLUICtrl* ctrl);
void commit_radio_group_edit(LLUICtrl* ctrl);
void commit_radio_group_land(LLUICtrl* ctrl);
void commit_slider_zoom(LLUICtrl *ctrl);
void commit_select_tool(LLUICtrl *ctrl, void *data);
/**
* 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 = gFloaterTools;
if(tools_floater)
{
tools_floater->updateLandImpacts();
}
}
};
//static
void* LLFloaterTools::createPanelPermissions(void* data)
@@ -249,13 +266,13 @@ BOOL LLFloaterTools::postBuild()
mRadioStretch = getChild<LLCheckBoxCtrl>("radio stretch");
mRadioSelectFace = getChild<LLCheckBoxCtrl>("radio select face");
mRadioAlign = getChild<LLCheckBoxCtrl>("radio align");
mBtnGridOptions = getChild<LLButton>("Options...");
mTitleMedia = getChild<LLMediaCtrl>("title_media");
mCheckSelectIndividual = getChild<LLCheckBoxCtrl>("checkbox edit linked parts");
getChild<LLUICtrl>("checkbox edit linked parts")->setValue((BOOL)gSavedSettings.getBOOL("EditLinkedParts"));
mCheckSnapToGrid = getChild<LLCheckBoxCtrl>("checkbox snap to grid");
getChild<LLUICtrl>("checkbox snap to grid")->setValue((BOOL)gSavedSettings.getBOOL("SnapEnabled"));
mBtnGridOptions = getChild<LLButton>("Options...");
mCheckStretchUniform = getChild<LLCheckBoxCtrl>("checkbox uniform");
getChild<LLUICtrl>("checkbox uniform")->setValue((BOOL)gSavedSettings.getBOOL("ScaleUniform"));
mCheckStretchTexture = getChild<LLCheckBoxCtrl>("checkbox stretch textures");
@@ -267,6 +284,7 @@ BOOL LLFloaterTools::postBuild()
mCheckShowHighlight = getChild<LLCheckBoxCtrl>("checkbox show highlight");
mCheckActualRoot = getChild<LLCheckBoxCtrl>("checkbox actual root");
//
// Create Buttons
//
@@ -283,7 +301,7 @@ BOOL LLFloaterTools::postBuild()
}
}
if ((mComboTreesGrass = findChild<LLComboBox>("trees_grass")))
childSetCommitCallback("trees_grass", onSelectTreesGrass, (void*)0);
mComboTreesGrass->setCommitCallback(boost::bind(&LLFloaterTools::onSelectTreesGrass, this));
mCheckCopySelection = getChild<LLCheckBoxCtrl>("checkbox copy selection");
getChild<LLUICtrl>("checkbox copy selection")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopySelection"));
mCheckSticky = getChild<LLCheckBoxCtrl>("checkbox sticky");
@@ -303,7 +321,6 @@ BOOL LLFloaterTools::postBuild()
mSliderDozerSize = getChild<LLSlider>("slider brush size");
getChild<LLUICtrl>("slider brush size")->setValue(gSavedSettings.getF32("LandBrushSize"));
mSliderDozerForce = getChild<LLSlider>("slider force");
// the setting stores the actual force multiplier, but the slider is logarithmic, so we convert here
getChild<LLUICtrl>("slider force")->setValue(log10(gSavedSettings.getF32("LandBrushForce")));
@@ -404,6 +421,8 @@ LLFloaterTools::LLFloaterTools()
mPanelFace(NULL),
mPanelLandInfo(NULL),
mLandImpactsObserver(NULL),
mDirty(TRUE),
mNeedMediaTitle(TRUE)
{
@@ -434,12 +453,24 @@ LLFloaterTools::LLFloaterTools()
mCommitCallbackRegistrar.add("BuildTool.DeleteMedia", boost::bind(&LLFloaterTools::onClickBtnDeleteMedia,this));
mCommitCallbackRegistrar.add("BuildTool.EditMedia", boost::bind(&LLFloaterTools::onClickBtnEditMedia,this));
mLandImpactsObserver = new LLLandImpactsObserver();
LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver);
LLUICtrlFactory::getInstance()->buildFloater(this,"floater_tools.xml",&factory_map,FALSE);
if (LLTextBox* text = findChild<LLTextBox>("selection_count"))
{
text->setClickedCallback(boost::bind(LLFloaterObjectWeights::toggleInstance, LLSD()));
text->setColor(gSavedSettings.getColor4("HTMLLinkColor"));
}
}
LLFloaterTools::~LLFloaterTools()
{
// children automatically deleted
gFloaterTools = NULL;
LLViewerParcelMgr::getInstance()->removeObserver(mLandImpactsObserver);
delete mLandImpactsObserver;
}
void LLFloaterTools::setStatusText(const std::string& text)
@@ -480,62 +511,114 @@ void LLFloaterTools::refresh()
// Refresh object and prim count labels
LLLocale locale(LLLocale::USER_LOCALE);
// Added in Link Num value -HgB
S32 object_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
S32 prim_count = LLSelectMgr::getInstance()->getEditSelection()->getObjectCount();
std::string value_string;
std::string desc_string;
if ((gSavedSettings.getBOOL("EditLinkedParts"))&&(prim_count == 1)) //Selecting a single prim in "Edit Linked" mode, show link number
#if 0
if (!gMeshRepo.meshRezEnabled())
{
desc_string = "Link number:";
std::string obj_count_string;
LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount());
getChild<LLUICtrl>("selection_count")->setTextArg("[OBJ_COUNT]", obj_count_string);
std::string prim_count_string;
LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount());
getChild<LLUICtrl>("selection_count")->setTextArg("[PRIM_COUNT]", prim_count_string);
LLViewerObject* selected = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
if (selected && selected->getRootEdit())
// calculate selection rendering cost
if (sShowObjectCost)
{
LLViewerObject::child_list_t children = selected->getRootEdit()->getChildren();
if (children.empty())
std::string prim_cost_string;
S32 render_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectRenderCost();
LLResMgr::getInstance()->getIntegerString(prim_cost_string, render_cost);
getChild<LLUICtrl>("RenderingCost")->setTextArg("[COUNT]", prim_cost_string);
}
// disable the object and prim counts if nothing selected
bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty();
getChildView("obj_count")->setEnabled(have_selection);
getChildView("prim_count")->setEnabled(have_selection);
getChildView("RenderingCost")->setEnabled(have_selection && sShowObjectCost);
}
else
#endif
{
F32 link_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetCost();
S32 link_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
// Added in Link Num value -HgB
S32 prim_count = LLSelectMgr::getInstance()->getEditSelection()->getObjectCount();
std::string value_string;
if ((prim_count == 1) && gSavedSettings.getBOOL("EditLinkedParts")) //Selecting a single prim in "Edit Linked" mode, show link number
{
childSetTextArg("link_num_obj_count", "[DESC]", std::string("Link number:"));
LLViewerObject* selected = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
if (selected && selected->getRootEdit())
{
value_string = "0"; // An unlinked prim is "link 0".
}
else
{
children.push_front(selected->getRootEdit()); // need root in the list too
S32 index = 0;
for (LLViewerObject::child_list_t::iterator iter = children.begin(); iter != children.end(); ++iter)
LLViewerObject::child_list_t children = selected->getRootEdit()->getChildren();
if (children.empty())
{
index++;
if ((*iter)->isSelected())
value_string = "0"; // An unlinked prim is "link 0".
}
else
{
children.push_front(selected->getRootEdit()); // need root in the list too
S32 index = 0;
for (LLViewerObject::child_list_t::iterator iter = children.begin(); iter != children.end(); ++iter, ++index)
{
LLResMgr::getInstance()->getIntegerString(value_string, index);
break;
if ((*iter)->isSelected())
{
LLResMgr::getInstance()->getIntegerString(value_string, index);
break;
}
}
}
}
}
}
else
{
desc_string = "Selected objects:";
LLResMgr::getInstance()->getIntegerString(value_string, object_count);
}
childSetTextArg("link_num_obj_count", "[DESC]", desc_string);
childSetTextArg("link_num_obj_count", "[NUM]", value_string);
else
{
childSetTextArg("link_num_obj_count", "[DESC]", std::string("Selected objects:"));
LLResMgr::getInstance()->getIntegerString(value_string, link_count);
}
childSetTextArg("link_num_obj_count", "[NUM]", value_string);
LLStringUtil::format_map_t selection_args;
selection_args["COUNT"] = llformat("%.1d", (S32)prim_count);
if(gMeshRepo.meshRezEnabled())
{
F32 link_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectCost();
LLStringUtil::format_map_t prim_equiv_args;
prim_equiv_args["SEL_WEIGHT"] = llformat("%.0f", link_cost);
selection_args["PE_STRING"] = getString("status_selectprimequiv", prim_equiv_args);
/* Singu Note: We're not using this yet because we have no place to put it
LLCrossParcelFunctor func;
if (LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, true))
{
// 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
*/
{
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
{
//LL_WARNS() << "Failed to get selected object" << LL_ENDL;
}
}
LLStringUtil::format_map_t selection_args;
selection_args["OBJ_COUNT"] = llformat("%.1d", prim_count);
selection_args["LAND_IMPACT"] = llformat("%.1d", (S32)link_cost);
std::ostringstream selection_info;
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("remaining_capacity", have_selection);
childSetVisible("selection_empty", !have_selection);
}
else
{
selection_args["PE_STRING"] = "";
}
std::string prim_count_string = getString("status_selectcount",selection_args);
childSetText("prim_count", prim_count_string);
// Refresh child tabs
mPanelPermissions->refresh();
@@ -546,6 +629,12 @@ void LLFloaterTools::refresh()
refreshMedia();
mPanelContents->refresh();
mPanelLandInfo->refresh();
// Refresh the advanced weights floater
if (LLFloaterObjectWeights::instanceVisible())
{
LLFloaterObjectWeights::getInstance()->refresh();
}
}
void LLFloaterTools::draw()
@@ -606,8 +695,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
mRadioZoom ->setVisible( focus_visible );
mRadioOrbit ->setVisible( focus_visible );
mRadioPan ->setVisible( focus_visible );
childSetVisible("slider zoom", focus_visible);
childSetEnabled("slider zoom", gCameraBtnZoom);
getChildView("slider zoom")->setVisible(focus_visible);
getChildView("slider zoom")->setEnabled(gCameraBtnZoom);
mRadioZoom ->set(!gCameraBtnOrbit &&
!gCameraBtnPan &&
@@ -625,7 +714,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
(mask == (MASK_PAN | MASK_ALT)) );
// multiply by correction factor because volume sliders go [0, 0.5]
childSetValue( "slider zoom", gAgentCamera.getCameraZoomFraction() * 0.5f);
getChild<LLUICtrl>("slider zoom")->setValue(gAgentCamera.getCameraZoomFraction() * 0.5f);
// Move buttons
BOOL move_visible = (tool == LLToolGrab::getInstance());
@@ -699,7 +788,6 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
case SELECT_TYPE_HUD:
mComboGridMode->add(getString("grid_screen_text"));
mComboGridMode->add(getString("grid_local_text"));
//mComboGridMode->add(getString("grid_reference_text"));
break;
case SELECT_TYPE_WORLD:
mComboGridMode->add(getString("grid_world_text"));
@@ -772,10 +860,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
if (mBtnLand) mBtnLand ->setToggleState( land_visible );
// mRadioEditLand ->set( tool == LLToolBrushLand::getInstance() );
if (mRadioSelectLand) mRadioSelectLand->set( tool == LLToolSelectLand::getInstance() );
// mRadioEditLand ->setVisible( land_visible );
if (mRadioSelectLand) mRadioSelectLand->setVisible( land_visible );
S32 dozer_mode = gSavedSettings.getS32("RadioLandBrushAction");
@@ -810,6 +896,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
mRadioDozerRevert ->set( tool == LLToolBrushLand::getInstance() && dozer_mode == 5);
mRadioDozerRevert ->setVisible( land_visible );
}
if (mBtnApplyToSelection)
{
mBtnApplyToSelection->setVisible( land_visible );
@@ -826,9 +913,14 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
mSliderDozerForce ->setVisible( land_visible );
getChildView("Strength:")->setVisible( land_visible);
}
childSetVisible("link_num_obj_count", !land_visible);
childSetVisible("prim_count", !land_visible);
bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty();
getChildView("link_num_obj_count")->setVisible(!land_visible && have_selection);
getChildView("selection_count")->setVisible(!land_visible && have_selection);
//getChildView("remaining_capacity")->setVisible(!land_visible && have_selection);
getChildView("selection_empty")->setVisible(!land_visible && !have_selection);
static const LLCachedControl<bool> mini("LiruMiniBuildFloater");
mTab->setVisible(!mini && !land_visible);
getChildView("mini_button")->setVisible(!land_visible);
@@ -909,9 +1001,12 @@ void LLFloaterTools::onClose(bool app_quitting)
// gMenuBarView->setItemVisible(std::string("Tools"), FALSE);
// gMenuBarView->arrange();
if(LLFloaterMediaSettings::instanceExists())
LLFloaterMediaSettings::getInstance()->close();
// hide the advanced object weights floater
LLFloaterObjectWeights::hideInstance();
}
void LLFloaterTools::showPanel(EInfoPanel panel)
@@ -922,7 +1017,6 @@ void LLFloaterTools::showPanel(EInfoPanel panel)
void click_popup_info(void*)
{
// gBuildView->setPropertiesPanelOpen(TRUE);
}
void click_popup_done(void*)
@@ -1094,7 +1188,6 @@ void commit_grid_mode(LLUICtrl *ctrl)
void LLFloaterTools::onClickGridOptions()
{
//LLFloaterTools* floaterp = (LLFloaterTools*)data;
LLFloaterBuildOptions::show(NULL);
// RN: this makes grid options dependent on build tools window
//floaterp->addDependentFloater(LLFloaterBuildOptions::getInstance(), FALSE);
@@ -1176,6 +1269,39 @@ bool LLFloaterTools::selectedMediaEditable()
return selected_Media_editable;
}
void LLFloaterTools::updateLandImpacts()
{
LLParcel *parcel = mParcelSelection->getParcel();
if (!parcel)
{
return;
}
/* Singu Note: We're not using this yet because we have no place to put it
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
if (LLFloaterObjectWeights::instanceVisible())
{
LLFloaterObjectWeights::getInstance()->updateLandImpacts(parcel);
}
}
void LLFloaterTools::getMediaState()
{
LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection();
@@ -1962,10 +2088,9 @@ void LLFloaterTools::updateMediaSettings()
mMediaSettings[ base_key + std::string( LLPanelContents::TENTATIVE_SUFFIX ) ] = ! identical;
}
// static
void LLFloaterTools::onSelectTreesGrass(LLUICtrl*, void*)
void LLFloaterTools::onSelectTreesGrass()
{
const std::string &selected = gFloaterTools->mComboTreesGrass->getValue();
const std::string& selected = mComboTreesGrass->getValue();
LLPCode pcode = LLToolPlacer::getObjectType();
if (pcode == LL_PCODE_LEGACY_TREE)
{

View File

@@ -53,6 +53,7 @@ class LLMediaCtrl;
class LLTool;
class LLParcelSelection;
class LLObjectSelection;
class LLLandImpactsObserver;
typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle;
@@ -110,6 +111,7 @@ public:
void updateMediaTitle();
void navigateToTitleMedia( const std::string url );
bool selectedMediaEditable();
void updateLandImpacts();
LLPanelFace* getPanelFace() { return mPanelFace; }
@@ -178,7 +180,6 @@ public:
LLCheckBoxCtrl *mCheckCopyRotates;
// Land buttons
// LLCheckBoxCtrl *mRadioEditLand;
LLCheckBoxCtrl *mRadioSelectLand;
LLCheckBoxCtrl *mRadioDozerFlatten;
@@ -202,18 +203,21 @@ public:
LLPanelFace *mPanelFace;
LLPanelLandInfo *mPanelLandInfo;
LLLandImpactsObserver* mLandImpactsObserver;
LLParcelSelectionHandle mParcelSelection;
LLObjectSelectionHandle mObjectSelection;
LLMediaCtrl *mTitleMedia;
bool mNeedMediaTitle;
private:
BOOL mDirty;
std::map<std::string, std::string> mStatusText;
void onSelectTreesGrass();
void updateTreeGrassCombo(bool visible);
static void onSelectTreesGrass(LLUICtrl*, void*);
protected:
LLSD mMediaSettings;
};

View File

@@ -1737,7 +1737,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
capabilityNames.append("RemoteParcelRequest");
capabilityNames.append("RenderMaterials");
capabilityNames.append("RequestTextureDownload");
//capabilityNames.append("ResourceCostSelected"); //Object weights (llfloaterobjectweights.cpp)
capabilityNames.append("ResourceCostSelected");
capabilityNames.append("RetrieveNavMeshSrc");
capabilityNames.append("SearchStatRequest");
capabilityNames.append("SearchStatTracking");

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="object_weights" title="Erweitert">
<floater.string name="nothing_selected" value="--"/>
<text name="selected_text" value="AUSGEWÄHLT"/>
<text name="objects" value="--"/>
<text name="objects_label" value="Objekte"/>
<text name="prims" value="--"/>
<text name="prims_label" value="Primitive"/>
<text name="weights_of_selected_text" value="GEWICHT DER AUSGEWÄHLTEN"/>
<text name="download" value="--"/>
<text name="download_label" value="Herunterladen"/>
<text name="physics" value="--"/>
<text name="physics_label" value="Physik"/>
<text name="server" value="--"/>
<text name="server_label" value="Server"/>
<text name="display" value="--"/>
<text name="display_label" value="Anzeige"/>
<text name="land_impacts_text" value="AUSWIRKUNGEN AUF LAND"/>
<text name="selected" value="--"/>
<text name="selected_label" value="Ausgewählt"/>
<text name="rezzed_on_land" value="--"/>
<text name="rezzed_on_land_label" value="Auf Land gerezzt"/>
<text name="remaining_capacity" value="--"/>
<text name="remaining_capacity_label" value="Verbleibende Kapazität"/>
<text name="total_capacity" value="--"/>
<text name="total_capacity_label" value="Gesamtkapazität"/>
<text name="help_SLURL" value="[secondlife:///app/help/object_weights Was ist das?...]"/>
</floater>

View File

@@ -452,6 +452,5 @@
<string name="grid_world_text">Welt</string>
<string name="grid_reference_text">Referenz</string>
<string name="grid_attachment_text">Anhänge</string>
<string name="status_selectprimequiv">, Kosten: [SEL_WEIGHT]</string>
<string name="status_selectcount">Prims: [COUNT][PE_STRING]</string>
<string name="status_selectcount">Prims: [OBJ_COUNT], Kosten: [LAND_IMPACT]</string>
</floater>

View File

@@ -0,0 +1,326 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
can_close="true"
can_tear_off="false"
height="290"
help_topic="object_weights"
name="object_weights"
save_rect="true"
single_instance="true"
title="Advanced Object Weights"
width="200">
<floater.string
name="nothing_selected"
value="--"/>
<text
follows="left|top"
height="16"
left="10"
name="selected_text"
font-style="BOLD"
bottom="-36"
value="SELECTED"
width="180" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="objects"
bottom_delta="-19"
value="--"
width="40" />
<text
follows="left|top"
height="16"
left_delta="50"
name="objects_label"
bottom_delta="0"
value="Objects"
width="130" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="prims"
bottom_delta="-19"
value="--"
width="40" />
<text
follows="left|top"
height="16"
left_delta="50"
name="prims_label"
bottom_delta="0"
value="Prims"
width="130" />
<view_border
bevel_style="none"
follows="top|left"
height="0"
left="10"
name="selected_text_border"
bottom_delta="-6"
width="180"/>
<text
follows="left|top"
height="16"
left="10"
name="weights_of_selected_text"
font-style="BOLD"
bottom_delta="-22"
value="WEIGHTS OF SELECTED"
width="180" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="download"
bottom_delta="-19"
value="--"
width="40" />
<!-- Singu TODO: loading_indicators.
<loading_indicator
follows="left|top"
height="16"
left="34"
name="download_loading_indicator"
bottom_delta="0"
width="16" />
-->
<text
follows="left|top"
height="16"
left_delta="50"
name="download_label"
bottom_delta="0"
value="Download"
width="130" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="physics"
bottom_delta="-19"
value="--"
width="40" />
<!-- Singu TODO: loading_indicators.
<loading_indicator
follows="left|top"
height="16"
left="34"
name="physics_loading_indicator"
bottom_delta="0"
width="16" />
-->
<text
follows="left|top"
height="16"
left_delta="50"
name="physics_label"
bottom_delta="0"
value="Physics"
width="130" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="server"
bottom_delta="-19"
value="--"
width="40" />
<!-- Singu TODO: loading_indicators.
<loading_indicator
follows="left|top"
height="16"
left="34"
name="server_loading_indicator"
bottom_delta="0"
width="16" />
-->
<text
follows="left|top"
height="16"
left_delta="50"
name="server_label"
bottom_delta="0"
value="Server"
width="130" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="display"
bottom_delta="-19"
value="--"
width="40" />
<!-- Singu TODO: loading_indicators.
<loading_indicator
follows="left|top"
height="16"
left="34"
name="display_loading_indicator"
bottom_delta="0"
width="16" />
-->
<text
follows="left|top"
height="16"
left_delta="50"
name="display_label"
bottom_delta="0"
value="Display"
width="130" />
<view_border
bevel_style="none"
follows="top|left"
height="0"
left="10"
name="weights_text_border"
bottom_delta="-6"
width="180"/>
<text
follows="left|top"
height="16"
left="10"
name="land_impacts_text"
font-style="BOLD"
bottom_delta="-24"
value="LAND IMPACTS"
width="180" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="selected"
bottom_delta="-19"
value="--"
width="40" />
<!-- Singu TODO: loading_indicators.
<loading_indicator
follows="left|top"
height="16"
left="34"
name="selected_loading_indicator"
bottom_delta="0"
width="16" />
-->
<text
follows="left|top"
height="16"
left_delta="50"
name="selected_label"
bottom_delta="0"
value="Selected"
width="130" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="rezzed_on_land"
bottom_delta="-19"
value="--"
width="40" />
<!-- Singu TODO: loading_indicators.
<loading_indicator
follows="left|top"
height="16"
left="34"
name="rezzed_on_land_loading_indicator"
bottom_delta="0"
width="16" />
-->
<text
follows="left|top"
height="16"
left_delta="50"
name="rezzed_on_land_label"
bottom_delta="0"
value="Rezzed on land"
width="130" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="remaining_capacity"
bottom_delta="-19"
value="--"
width="40" />
<!-- Singu TODO: loading_indicators.
<loading_indicator
follows="left|top"
height="16"
layout="topleft"
left="34"
name="remaining_capacity_loading_indicator"
bottom_delta="0"
width="16" />
-->
<text
follows="left|top"
height="16"
left_delta="50"
name="remaining_capacity_label"
bottom_delta="0"
value="Remaining capacity"
width="130" />
<text
follows="left|top"
halign="right"
height="16"
left="10"
name="total_capacity"
bottom_delta="-19"
value="--"
width="40" />
<!-- Singu TODO: loading_indicators.
<loading_indicator
follows="left|top"
height="16"
left="34"
name="total_capacity_loading_indicator"
bottom_delta="0"
width="16" />
-->
<text
follows="left|top"
height="16"
left_delta="50"
name="total_capacity_label"
bottom_delta="0"
value="Total capacity"
width="130" />
<!-- Singu TODO: Help stuffs
Singu Note: Add 25 to the height of this floater when uncommenting
<view_border
bevel_style="none"
follows="top|left"
height="0"
left="10"
name="land_impacts_text_border"
bottom_delta="-6"
width="180"/>
<text
follows="left|top"
height="16"
left="10"
name="help_SLURL"
bottom_delta="-24"
value="[secondlife:///app/help/object_weights What is all this?...]"
width="180" />
-->
</floater>

View File

@@ -5,6 +5,13 @@
name="toolbox floater" rect_control="ToolboxRect" sound_flags="0" title=""
short_title="Build" width="272">
<floater.string name="status_selectcount">
Primitives: [OBJ_COUNT], LI: [LAND_IMPACT]
</floater.string>
<floater.string
name="status_remaining_capacity">
Remaining capacity [LAND_CAPACITY].
</floater.string>
<!-- Main floater tabs -->
<button bottom="-34" follows="left|top" font="SansSerif" halign="center" height="32"
@@ -401,10 +408,13 @@
mouse_opaque="true" name="link_num_obj_count" v_pad="0" width="143">
[DESC] [NUM]
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-170" left="118" drop_shadow_visible="true" follows="left|top"
halign="right" height="16" mouse_opaque="true" name="selection_empty" width="143">Nothing selected.</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-170" left="118" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16"
mouse_opaque="true" name="prim_count" v_pad="0" width="143"/>
font="SansSerifSmall" halign="right" height="16" font-style="UNDERLINE"
mouse_opaque="true" name="selection_count" v_pad="0" width="143"/>
<!-- Sub-tabs -->
@@ -1477,10 +1487,4 @@
<string name="grid_attachment_text">
Attachment
</string>
<string name="status_selectprimequiv">
, Cost: [SEL_WEIGHT]
</string>
<string name="status_selectcount">
Primitives: [COUNT][PE_STRING]
</string>
</floater>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="object_weights" title="Avanzadas">
<floater.string name="nothing_selected" value="--"/>
<text name="selected_text" value="SELECCIONADOS"/>
<text name="objects" value="--"/>
<text name="objects_label" value="Objetos"/>
<text name="prims" value="--"/>
<text name="prims_label" value="Primitivas"/>
<text name="weights_of_selected_text" value="PESOS DE SELECCIONADOS"/>
<text name="download" value="--"/>
<text name="download_label" value="Descargar"/>
<text name="physics" value="--"/>
<text name="physics_label" value="Física"/>
<text name="server" value="--"/>
<text name="server_label" value="Servidor"/>
<text name="display" value="--"/>
<text name="display_label" value="Mostrar"/>
<text name="land_impacts_text" value="IMPACTOS EN EL TERRENO"/>
<text name="selected" value="--"/>
<text name="selected_label" value="Seleccionados"/>
<text name="rezzed_on_land" value="--"/>
<text name="rezzed_on_land_label" value="Colocados en el terreno"/>
<text name="remaining_capacity" value="--"/>
<text name="remaining_capacity_label" value="Capacidad restante"/>
<text name="total_capacity" value="--"/>
<text name="total_capacity_label" value="Capacidad total"/>
<text name="help_SLURL" value="[secondlife:///app/help/object_weights ¿Qué es todo esto?...]"/>
</floater>

View File

@@ -106,7 +106,6 @@
<text name="link_num_obj_count">
[DESC] [NUM]
</text>
<text name="prim_count"/>
<!-- Sub-tabs -->
@@ -645,10 +644,7 @@ name="button abandon land"/>
<string name="grid_attachment_text">
Añadido
</string>
<string name="status_selectprimequiv">
, Peso: [SEL_WEIGHT]
</string>
<string name="status_selectcount">
Primitivas: [COUNT][PE_STRING]
Primitivas: [OBJ_COUNT], Peso: [LAND_IMPACT]
</string>
</floater>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="object_weights" title="Avanc<6E><63>">
<floater.string name="nothing_selected" value="--"/>
<text name="selected_text" value="SÉLECTION"/>
<text name="objects" value="--"/>
<text name="objects_label" value="Objets"/>
<text name="prims" value="--"/>
<text name="prims_label" value="Prims"/>
<text name="weights_of_selected_text" value="POIDS DE LA SÉLECTION"/>
<text name="download" value="--"/>
<text name="download_label" value="Téléchargement"/>
<text name="physics" value="--"/>
<text name="physics_label" value="Physique"/>
<text name="server" value="--"/>
<text name="server_label" value="Serveur"/>
<text name="display" value="--"/>
<text name="display_label" value="Affichage"/>
<text name="land_impacts_text" value="IMPACTS SUR LE TERRAIN"/>
<text name="selected" value="--"/>
<text name="selected_label" value="Sélection"/>
<text name="rezzed_on_land" value="--"/>
<text name="rezzed_on_land_label" value="Rezzés sur le terrain"/>
<text name="remaining_capacity" value="--"/>
<text name="remaining_capacity_label" value="Capacité restante"/>
<text name="total_capacity" value="--"/>
<text name="total_capacity_label" value="Capacité totale"/>
<text name="help_SLURL" value="[secondlife:///app/help/object_weights De quoi s&apos;agit-il ?...]"/>
</floater>

View File

@@ -96,9 +96,6 @@
<text name="Strength:">
Force
</text>
<text name="prim_count">
Prims : [COUNT]
</text>
<!-- Sub-tabs -->

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="object_weights" title="Avanzate">
<floater.string name="nothing_selected" value="--"/>
<text name="selected_text" value="SELEZIONATI"/>
<text name="objects" value="--"/>
<text name="objects_label" value="Oggetti"/>
<text name="prims" value="--"/>
<text name="prims_label" value="Prim"/>
<text name="weights_of_selected_text" value="PESO ELEMENTI SELEZIONATI"/>
<text name="download" value="--"/>
<text name="download_label" value="Scarica"/>
<text name="physics" value="--"/>
<text name="physics_label" value="Fisica"/>
<text name="server" value="--"/>
<text name="server_label" value="Server"/>
<text name="display" value="--"/>
<text name="display_label" value="Visualizzazione"/>
<text name="land_impacts_text" value="IMPATTO TERRENO"/>
<text name="selected" value="--"/>
<text name="selected_label" value="Selezionati"/>
<text name="rezzed_on_land" value="--"/>
<text name="rezzed_on_land_label" value="Rezzati sul terreno"/>
<text name="remaining_capacity" value="--"/>
<text name="remaining_capacity_label" value="Capacità restante"/>
<text name="total_capacity" value="--"/>
<text name="total_capacity_label" value="Capacità totale"/>
<text name="help_SLURL" value="[secondlife:///app/help/object_weights Di cosa si tratta?...]"/>
</floater>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="object_weights" title="Avan<61><6E>ado">
<floater.string name="nothing_selected" value="--"/>
<text name="selected_text" value="SELECIONADO"/>
<text name="objects" value="--"/>
<text name="objects_label" value="Objetos"/>
<text name="prims" value="--"/>
<text name="prims_label" value="Prims"/>
<text name="weights_of_selected_text" value="PESOS DOS SELECIONADOS"/>
<text name="download" value="--"/>
<text name="download_label" value="Baixar"/>
<text name="physics" value="--"/>
<text name="physics_label" value="Físico"/>
<text name="server" value="--"/>
<text name="server_label" value="Servidor"/>
<text name="display" value="--"/>
<text name="display_label" value="Visualização"/>
<text name="land_impacts_text" value="IMPACTOS NO TERRENO"/>
<text name="selected" value="--"/>
<text name="selected_label" value="Selecionado"/>
<text name="rezzed_on_land" value="--"/>
<text name="rezzed_on_land_label" value="Resolução no terreno"/>
<text name="remaining_capacity" value="--"/>
<text name="remaining_capacity_label" value="Capacidade restante"/>
<text name="total_capacity" value="--"/>
<text name="total_capacity_label" value="Capacidade total"/>
<text name="help_SLURL" value="[secondlife:///app/help/object_weights What is all this?...]"/>
</floater>

View File

@@ -648,6 +648,6 @@
Anexo
</string>
<string name="status_selectcount">
primitivas: [COUNT][PE_STRING]
primitivas: [COUNT], LI: [LAND_IMPACT]
</string>
</floater>