summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorTofu Buzzard <no-email>2011-02-28 13:01:40 -0800
committerTofu Buzzard <no-email>2011-02-28 13:01:40 -0800
commit858a544dc97b340f0cd2ad21c677f8683935c1fa (patch)
treef18df2b305522d1ed888690012df45b4cc5bf52d /indra/newview
parent41dc7188ea0b5a1031e82ef8a1b3861107b16216 (diff)
parent10f14598243ef93f8990f9a1473334ef918f9cf7 (diff)
merge
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llavatarlist.cpp35
-rw-r--r--indra/newview/llavatarlist.h2
-rwxr-xr-xindra/newview/llfloatermodelpreview.cpp84
-rw-r--r--indra/newview/llfloatermodelpreview.h13
-rw-r--r--indra/newview/llrecentpeople.cpp58
-rw-r--r--indra/newview/llrecentpeople.h33
-rw-r--r--indra/newview/llvoicechannel.cpp24
-rw-r--r--indra/newview/llvoicechannel.h7
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_hardware_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_pick.xml10
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml19
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml36
14 files changed, 279 insertions, 54 deletions
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index ff7dfccc0a..771419f60a 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -240,6 +240,9 @@ void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_i
LLAvalineListItem* item = new LLAvalineListItem(/*hide_number=*/false);
item->setAvatarId(item_id, session_id, true, false);
item->setName(item_name);
+ item->showLastInteractionTime(mShowLastInteractionTime);
+ item->showSpeakingIndicator(mShowSpeakingIndicator);
+ item->setOnline(false);
addItem(item, item_id);
mIDs.push_back(item_id);
@@ -286,9 +289,18 @@ void LLAvatarList::refresh()
{
// *NOTE: If you change the UI to show a different string,
// be sure to change the filter code below.
- addNewItem(buddy_id,
- av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName,
- LLAvatarTracker::instance().isBuddyOnline(buddy_id));
+ if (LLRecentPeople::instance().isAvalineCaller(buddy_id))
+ {
+ const LLSD& call_data = LLRecentPeople::instance().getData(buddy_id);
+ addAvalineItem(buddy_id, call_data["session_id"].asUUID(), call_data["call_number"].asString());
+ }
+ else
+ {
+ addNewItem(buddy_id,
+ av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName,
+ LLAvatarTracker::instance().isBuddyOnline(buddy_id));
+ }
+
modified = true;
nadded++;
}
@@ -440,7 +452,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask);
- if ( mContextMenu )
+ if ( mContextMenu && !isAvalineItemSelected())
{
uuid_vec_t selected_uuids;
getSelectedUUIDs(selected_uuids);
@@ -449,6 +461,21 @@ BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)
return handled;
}
+bool LLAvatarList::isAvalineItemSelected()
+{
+ std::vector<LLPanel*> selected_items;
+ getSelectedItems(selected_items);
+ std::vector<LLPanel*>::iterator it = selected_items.begin();
+
+ for(; it != selected_items.end(); ++it)
+ {
+ if (dynamic_cast<LLAvalineListItem*>(*it))
+ return true;
+ }
+
+ return false;
+}
+
void LLAvatarList::setVisible(BOOL visible)
{
if ( visible == FALSE && mContextMenu )
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index cacbcf7244..4814a88a79 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -112,6 +112,8 @@ protected:
private:
+ bool isAvalineItemSelected();
+
bool mIgnoreOnlineStatus;
bool mShowLastInteractionTime;
bool mDirty;
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index ef7d1425c7..e33ce055f6 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -174,7 +174,6 @@ std::string lod_label_name[NUM_LOD+1] =
"I went off the end of the lod_label_name array. Me so smart."
};
-
bool validate_face(const LLVolumeFace& face)
{
for (U32 i = 0; i < face.mNumIndices; ++i)
@@ -1675,10 +1674,42 @@ void LLModelLoader::run()
processElement(scene);
+ handlePivotPoint( root );
+
doOnIdleOneTime(boost::bind(&LLModelPreview::loadModelCallback,mPreview,mLod));
}
}
+void LLModelLoader::handlePivotPoint( daeElement* pRoot )
+{
+ //Import an optional pivot point - a pivot point is just a node in the visual scene named "AssetPivot"
+ //If no assetpivot is found then the asset will use the SL default
+ daeElement* pScene = pRoot->getDescendant("visual_scene");
+ if ( pScene )
+ {
+ daeTArray< daeSmartRef<daeElement> > children = pScene->getChildren();
+ S32 childCount = children.getCount();
+ for (S32 i = 0; i < childCount; ++i)
+ {
+ domNode* pNode = daeSafeCast<domNode>(children[i]);
+ if ( pNode && isNodeAPivotPoint( pNode ) )
+ {
+ LLMatrix4 workingTransform;
+ daeSIDResolver nodeResolver( pNode, "./translate" );
+ domTranslate* pTranslate = daeSafeCast<domTranslate>( nodeResolver.getElement() );
+ //Translation via SID was successful
+ //todo#extract via element as well
+ if ( pTranslate )
+ {
+ extractTranslation( pTranslate, workingTransform );
+ mPreview->setModelPivot( workingTransform.getTranslation() );
+ mPreview->setHasPivot( true );
+ }
+ }
+ }
+ }
+}
+
bool LLModelLoader::doesJointArrayContainACompleteRig( const std::vector<std::string> &jointListFromModel )
{
std::deque<std::string> :: const_iterator masterJointIt = mMasterJointList.begin();
@@ -1754,6 +1785,25 @@ bool LLModelLoader::isNodeAJoint( domNode* pNode )
return false;
}
+bool LLModelLoader::isNodeAPivotPoint( domNode* pNode )
+{
+ bool result = false;
+
+ if ( pNode && pNode->getName() )
+ {
+ std::string name = pNode->getName();
+ if ( name == "AssetPivot" )
+ {
+ result = true;
+ }
+ else
+ {
+ result = false;
+ }
+ }
+ return result;
+}
+
void LLModelLoader::extractTranslation( domTranslate* pTranslate, LLMatrix4& transform )
{
domFloat3 jointTrans = pTranslate->getValue();
@@ -2185,6 +2235,9 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)
mFMP = fmp;
+ mHasPivot = false;
+ mModelPivot = LLVector3( 0.0f, 0.0f, 0.0f );
+
glodInit();
}
@@ -2292,6 +2345,28 @@ void LLFloaterModelPreview::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost,
childSetTextArg("physics cost", "[COST]", llformat("%.3f", physics_cost));
}
+void LLModelPreview::alterModelsPivot( void )
+{
+ for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter)
+ {
+ if ( *iter )
+ {
+ (*iter)->offsetMesh( mModelPivot );
+ }
+ }
+
+ for ( int i=0;i<LLModel::NUM_LODS;++i )
+ {
+ for (LLModelLoader::model_list::iterator iter = mModel[i].begin(); iter != mModel[i].end(); ++iter)
+ {
+ if ( *iter )
+ {
+ (*iter)->offsetMesh( mModelPivot );
+ }
+ }
+ }
+}
+
void LLModelPreview::rebuildUploadData()
{
assert_main_thread();
@@ -2347,6 +2422,7 @@ void LLModelPreview::rebuildUploadData()
LLModelInstance instance = *model_iter;
LLModel* base_model = instance.mModel;
+
if (base_model)
{
base_model->mRequestedLabel = requested_name;
@@ -3441,6 +3517,7 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
U32 vertex_count = 0;
U32 mesh_count = 0;
+
LLModelLoader::model_list* model = NULL;
if (lod < 0 || lod > 4)
@@ -4129,6 +4206,11 @@ void LLFloaterModelPreview::onUpload(void* user_data)
LLFloaterModelPreview* mp = (LLFloaterModelPreview*) user_data;
+ if ( mp && mp->mModelPreview->mHasPivot )
+ {
+ mp->mModelPreview->alterModelsPivot();
+ }
+
mp->mModelPreview->rebuildUploadData();
gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale,
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index e1c520134b..8a01f7db2c 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -114,6 +114,9 @@ public:
bool doesJointArrayContainACompleteRig( const std::vector<std::string> &modelJointList );
bool checkForCompleteRig( const std::vector<std::string> &jointListFromModel );
+ void handlePivotPoint( daeElement* pRoot );
+ bool isNodeAPivotPoint( domNode* pNode );
+
void setLoadState( U32 state ) { mState = state; }
U32 getLoadState( void ) { return mState; }
@@ -279,7 +282,7 @@ public:
void loadModelCallback(S32 lod);
void genLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false);
void generateNormals();
-
+ void alterModelsPivot( void );
void clearMaterials();
U32 calcResourceCost();
void rebuildUploadData();
@@ -287,7 +290,10 @@ public:
void updateStatusMessages();
void clearGLODGroup();
void onLODParamCommit(bool enforce_tri_limit);
-
+ const bool getModelPivot( void ) const { return mHasPivot; }
+ void setHasPivot( bool val ) { mHasPivot = val; }
+ void setModelPivot( const LLVector3& pivot ) { mModelPivot = pivot; }
+
static void textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata );
boost::signals2::connection setDetailsCallback( const details_signal_t::slot_type& cb ){ return mDetailsSignal.connect(cb); }
@@ -347,6 +353,9 @@ public:
details_signal_t mDetailsSignal;
model_loaded_signal_t mModelLoadedSignal;
+
+ LLVector3 mModelPivot;
+ bool mHasPivot;
};
diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp
index 959fd51bbf..7689cd1a52 100644
--- a/indra/newview/llrecentpeople.cpp
+++ b/indra/newview/llrecentpeople.cpp
@@ -33,7 +33,7 @@
using namespace LLOldEvents;
-bool LLRecentPeople::add(const LLUUID& id)
+bool LLRecentPeople::add(const LLUUID& id, const LLSD& userdata)
{
if (id == gAgent.getID())
return false;
@@ -42,10 +42,16 @@ bool LLRecentPeople::add(const LLUUID& id)
if (is_not_group_id)
{
- LLDate date_added = LLDate::now();
+ // For each avaline call the id of caller is different even if
+ // the phone number is the same.
+ // To avoid duplication of avaline list items in the recent list
+ // of panel People, deleting id's with similar phone number.
+ const LLUUID& caller_id = getIDByPhoneNumber(userdata);
+ if (caller_id.notNull())
+ mPeople.erase(caller_id);
- //[] instead of insert to replace existing id->date with new date value
- mPeople[id] = date_added;
+ //[] instead of insert to replace existing id->llsd["date"] with new date value
+ mPeople[id] = userdata;
mChangedSignal();
}
@@ -64,15 +70,55 @@ void LLRecentPeople::get(uuid_vec_t& result) const
result.push_back((*pos).first);
}
-const LLDate& LLRecentPeople::getDate(const LLUUID& id) const
+const LLDate LLRecentPeople::getDate(const LLUUID& id) const
{
recent_people_t::const_iterator it = mPeople.find(id);
- if (it!= mPeople.end()) return (*it).second;
+ if (it!= mPeople.end()) return it->second["date"].asDate();
static LLDate no_date = LLDate();
return no_date;
}
+const LLSD& LLRecentPeople::getData(const LLUUID& id) const
+{
+ recent_people_t::const_iterator it = mPeople.find(id);
+
+ if (it != mPeople.end())
+ return it->second;
+
+ static LLSD no_data = LLSD();
+ return no_data;
+}
+
+bool LLRecentPeople::isAvalineCaller(const LLUUID& id) const
+{
+ recent_people_t::const_iterator it = mPeople.find(id);
+
+ if (it != mPeople.end())
+ {
+ const LLSD& user = it->second;
+ return user["avaline_call"].asBoolean();
+ }
+
+ return false;
+}
+
+const LLUUID& LLRecentPeople::getIDByPhoneNumber(const LLSD& userdata)
+{
+ if (!userdata["avaline_call"].asBoolean())
+ return LLUUID::null;
+
+ for (recent_people_t::const_iterator it = mPeople.begin(); it != mPeople.end(); ++it)
+ {
+ const LLSD& user_info = it->second;
+
+ if (user_info["call_number"].asString() == userdata["call_number"].asString())
+ return it->first;
+ }
+
+ return LLUUID::null;
+}
+
// virtual
bool LLRecentPeople::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h
index 852a92ff80..d0d6376867 100644
--- a/indra/newview/llrecentpeople.h
+++ b/indra/newview/llrecentpeople.h
@@ -58,9 +58,15 @@ public:
* Add specified avatar to the list if it's not there already.
*
* @param id avatar to add.
+ *
+ * @param userdata additional information about last interaction party.
+ * For example when last interaction party is not an avatar
+ * but an avaline caller, additional info (such as phone
+ * number, session id and etc.) should be added.
+ *
* @return false if the avatar is in the list already, true otherwise
*/
- bool add(const LLUUID& id);
+ bool add(const LLUUID& id, const LLSD& userdata = LLSD().with("date", LLDate::now()));
/**
* @param id avatar to search.
@@ -75,7 +81,25 @@ public:
*/
void get(uuid_vec_t& result) const;
- const LLDate& getDate(const LLUUID& id) const;
+ /**
+ * Returns last interaction time with specified participant
+ *
+ */
+ const LLDate getDate(const LLUUID& id) const;
+
+ /**
+ * Returns data about specified participant
+ *
+ * @param id identifier of specific participant
+ */
+ const LLSD& getData(const LLUUID& id) const;
+
+ /**
+ * Checks whether specific participant is an avaline caller
+ *
+ * @param id identifier of specific participant
+ */
+ bool isAvalineCaller(const LLUUID& id) const;
/**
* Set callback to be called when the list changed.
@@ -92,7 +116,10 @@ public:
/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
private:
- typedef std::map<LLUUID, LLDate> recent_people_t;
+
+ const LLUUID& getIDByPhoneNumber(const LLSD& userdata);
+
+ typedef std::map<LLUUID, LLSD> recent_people_t;
recent_people_t mPeople;
signal_t mChangedSignal;
};
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index b692093fb9..a71539266d 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -853,7 +853,7 @@ void LLVoiceChannelP2P::activate()
}
// Add the party to the list of people with which we've recently interacted.
- LLRecentPeople::instance().add(mOtherUserID);
+ addToTheRecentPeopleList();
//Default mic is ON on initiating/joining P2P calls
if (!LLVoiceClient::getInstance()->getUserPTTState() && LLVoiceClient::getInstance()->getPTTIsToggle())
@@ -938,3 +938,25 @@ void LLVoiceChannelP2P::setState(EState state)
LLVoiceChannel::setState(state);
}
+
+void LLVoiceChannelP2P::addToTheRecentPeopleList()
+{
+ bool avaline_call = LLIMModel::getInstance()->findIMSession(mSessionID)->isAvalineSessionType();
+
+ if (avaline_call)
+ {
+ LLSD call_data;
+ std::string call_number = LLVoiceChannel::getSessionName();
+
+ call_data["avaline_call"] = true;
+ call_data["session_id"] = mSessionID;
+ call_data["call_number"] = call_number;
+ call_data["date"] = LLDate::now();
+
+ LLRecentPeople::instance().add(mOtherUserID, call_data);
+ }
+ else
+ {
+ LLRecentPeople::instance().add(mOtherUserID);
+ }
+}
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 7cef3c13d1..b8597ee5cb 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -191,6 +191,13 @@ protected:
virtual void setState(EState state);
private:
+
+ /**
+ * Add the caller to the list of people with which we've recently interacted
+ *
+ **/
+ void addToTheRecentPeopleList();
+
std::string mSessionHandle;
LLUUID mOtherUserID;
BOOL mReceivedCall;
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 937a97797d..acab7498fb 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -2078,7 +2078,7 @@ Only large parcels can be listed in search.
layout="topleft"
left_pad="10"
name="remove_allowed"
- right="-1"
+ right="-10"
width="100" />
</panel>
<panel
@@ -2128,7 +2128,7 @@ Only large parcels can be listed in search.
layout="topleft"
left_pad="10"
name="remove_banned"
- right="-1"
+ right="-10"
width="100" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
index 0ea42f9757..a97c697b24 100644
--- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
@@ -96,7 +96,7 @@
left="10"
max_val="2"
name="gamma"
- top_pad="7"
+ top_pad="11"
width="262" />
<text
type="string"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index a028e3ab9f..82dfb445da 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -183,17 +183,17 @@
left="8"
name="bottom_panel"
top_pad="5"
- width="303">
+ width="315">
<layout_stack
follows="bottom|left|right"
height="23"
layout="topleft"
name="layout_stack1"
- left="2"
+ left="0"
orientation="horizontal"
top_pad="0"
- width="303">
+ width="313">
<layout_panel
follows="bottom|left|right"
@@ -223,7 +223,7 @@
name="layout_panel1"
user_resize="false"
auto_resize="true"
- width="150">
+ width="146">
<button
follows="bottom|left|right"
height="23"
@@ -232,7 +232,7 @@
name="cancel_btn"
top="0"
left="1"
- width="149" />
+ width="145" />
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index 88c82313dd..26efe783f8 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -76,7 +76,7 @@
left="0"
orientation="horizontal"
top="0"
- width="313">
+ width="308">
<layout_panel
follows="bottom|left|right"
height="23"
@@ -120,7 +120,7 @@
name="wear_btn_lp"
user_resize="false"
auto_resize="true"
- width="152">
+ width="147">
<button
follows="bottom|left|right"
height="23"
@@ -129,7 +129,7 @@
name="wear_btn"
left="0"
top="0"
- width="152" />
+ width="147" />
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index d9c357f277..f423dbb91c 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -176,7 +176,7 @@ background_visible="true"
left="0"
orientation="horizontal"
top="0"
- width="120">
+ width="113">
<layout_panel
follows="bottom|left|right"
@@ -214,7 +214,10 @@ background_visible="true"
<menu_button
follows="bottom|left|right"
height="23"
- label="▼"
+ image_disabled="ComboButton_Off"
+ image_unselected="ComboButton_Off"
+ image_pressed="ComboButton_Off"
+ image_pressed_selected="ComboButton_Off"
layout="topleft"
mouse_opaque="false"
name="overflow_btn"
@@ -236,7 +239,7 @@ background_visible="true"
left="0"
orientation="horizontal"
top="0"
- width="120">
+ width="110">
<layout_panel
follows="bottom|left|right"
height="23"
@@ -246,7 +249,7 @@ background_visible="true"
name="profile_btn_lp"
user_resize="false"
auto_resize="true"
- width="112">
+ width="102">
<button
follows="bottom|left|right"
height="23"
@@ -257,7 +260,7 @@ background_visible="true"
left="1"
tool_tip="Show place profile"
top="0"
- width="111" />
+ width="101" />
</layout_panel>
</layout_stack>
@@ -272,7 +275,7 @@ background_visible="true"
left="0"
orientation="horizontal"
top="0"
- width="120">
+ width="112">
<layout_panel
follows="bottom|left|right"
height="23"
@@ -283,7 +286,7 @@ background_visible="true"
top="0"
user_resize="false"
auto_resize="true"
- width="61">
+ width="51">
<button
follows="bottom|left|right"
height="23"
@@ -293,7 +296,7 @@ background_visible="true"
name="close_btn"
left="1"
top="0"
- width="60" />
+ width="50" />
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index f3c6895cee..8997c1a6d7 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -37,7 +37,7 @@
name="button_panel"
left="9"
top_pad="-2"
- width="313">
+ width="308">
<layout_stack
follows="bottom|left|right"
height="23"
@@ -47,7 +47,7 @@
left="0"
orientation="horizontal"
top="0"
- width="313">
+ width="308">
<layout_panel
follows="bottom|left|right"
height="23"
@@ -57,7 +57,7 @@
name="info_btn_lp"
user_resize="false"
auto_resize="true"
- width="103">
+ width="101">
<button
enabled="true"
follows="bottom|left|right"
@@ -68,62 +68,62 @@
name="info_btn"
tool_tip="Show object profile"
top="0"
- width="102" />
+ width="100" />
</layout_panel>
<layout_panel
follows="bottom|left|right"
height="23"
layout="bottomleft"
- left_pad="3"
+ left_pad="1"
mouse_opaque="false"
name="share_btn_lp"
user_resize="false"
auto_resize="true"
- width="102">
+ width="100">
<button
enabled="true"
follows="bottom|left|right"
height="23"
label="Share"
layout="topleft"
- left="0"
+ left="1"
name="share_btn"
tool_tip="Share an inventory item"
top="0"
- width="102" />
+ width="99" />
</layout_panel>
<layout_panel
follows="bottom|left|right"
height="23"
layout="bottomleft"
- left_pad="3"
+ left_pad="1"
mouse_opaque="false"
name="shop_btn_lp"
user_resize="false"
auto_resize="true"
- width="102">
+ width="100">
<button
enabled="true"
follows="bottom|left|right"
height="23"
label="Shop"
layout="topleft"
- left="0"
+ left="1"
name="shop_btn"
tool_tip="Open Marketplace webpage"
top="0"
- width="102" />
+ width="99" />
<button
enabled="false"
follows="bottom|left|right"
height="23"
label="Wear"
layout="topleft"
- left="0"
+ left="1"
name="wear_btn"
tool_tip="Wear seleceted outfit"
top="0"
- width="102" />
+ width="99" />
<button
enabled="false"
follows="bottom|left|right"
@@ -131,20 +131,20 @@
label="Play"
layout="topleft"
name="play_btn"
- left="0"
+ left="1"
top="0"
- width="102" />
+ width="99" />
<button
enabled="false"
follows="bottom|left|right"
height="23"
label="Teleport"
layout="topleft"
- left="0"
+ left="1"
name="teleport_btn"
tool_tip="Teleport to the selected area"
top="0"
- width="102" />
+ width="99" />
</layout_panel>
</layout_stack>
</panel>