From 7e4394dbcd2f39a428a0afebf27b73c6fe1d3185 Mon Sep 17 00:00:00 2001
From: Erica <erica@lindenlab.com>
Date: Thu, 29 Oct 2009 11:58:45 -0700
Subject: Added dummy icons for Tattoo and Alpha textures, pushed Lis'
 preferences changes for EXT-1927

---
 indra/newview/llinventorybridge.cpp                | 264 ++++++++++-----------
 indra/newview/skins/default/textures/textures.xml  |   2 +
 .../default/xui/en/panel_preferences_advanced.xml  | 105 +++++---
 3 files changed, 203 insertions(+), 168 deletions(-)

diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 3aa35d98f8..59f70ea1bd 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1,11 +1,11 @@
-/** 
+/**
  * @file llinventorybridge.cpp
  * @brief Implementation of the Inventory-Folder-View-Bridge classes.
  *
  * $LicenseInfo:firstyear=2001&license=viewergpl$
- * 
+ *
  * Copyright (c) 2001-2009, Linden Research, Inc.
- * 
+ *
  * Second Life Viewer Source Code
  * The source code in this file ("Source Code") is provided by Linden Lab
  * to you under the terms of the GNU General Public License, version 2.0
@@ -13,17 +13,17 @@
  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
+ *
  * There are special exceptions to the terms and conditions of the GPL as
  * it is applied to this Source Code. View the full text of the exception
  * in the file doc/FLOSS-exception.txt in this software distribution, or
  * online at
  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
+ *
  * By copying, modifying or distributing this software, you acknowledge
  * that you have read and understood your obligations described above,
  * and agree to abide by those obligations.
- * 
+ *
  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  * COMPLETENESS OR PERFORMANCE.
@@ -83,7 +83,7 @@
 #include "llvoavatar.h"
 #include "llwearable.h"
 #include "llwearablelist.h"
-#include "llviewermessage.h" 
+#include "llviewermessage.h"
 #include "llviewerregion.h"
 #include "llvoavatarself.h"
 #include "lltabcontainer.h"
@@ -147,8 +147,8 @@ std::string ICON_NAME[ICON_NAME_COUNT] =
 	"Inv_Undershirt",
 	"Inv_Underpants",
 	"Inv_Skirt",
-	"inv_item_alpha.tga",
-	"inv_item_tattoo.tga",
+	"Inv_Alpha",
+	"Inv_Tattoo",
 
 	"Inv_Animation",
 	"Inv_Gesture",
@@ -237,7 +237,7 @@ void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string&
 	{
 		return;
 	}
-	
+
 	LLInventoryModel::item_array_t item_array = model->collectLinkedItems(item_id);
 	for (LLInventoryModel::item_array_t::iterator iter = item_array.begin();
 		 iter != item_array.end();
@@ -245,7 +245,7 @@ void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string&
 	{
 		LLViewerInventoryItem *linked_item = (*iter);
 		if (linked_item->getUUID() == item_id) continue;
-		
+
 		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(linked_item);
 		new_item->rename(new_name);
 		new_item->updateServer(FALSE);
@@ -290,7 +290,7 @@ void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batc
 	S32 count = batch.count();
 	S32 i,j;
 	for(i = 0; i < count; ++i)
-	{	
+	{
 		bridge = (LLInvFVBridge*)(batch.get(i));
 		if(!bridge || !bridge->isItemRemovable()) continue;
 		item = (LLViewerInventoryItem*)model->getItem(bridge->getUUID());
@@ -303,7 +303,7 @@ void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batc
 		}
 	}
 	for(i = 0; i < count; ++i)
-	{		
+	{
 		bridge = (LLInvFVBridge*)(batch.get(i));
 		if(!bridge || !bridge->isItemRemovable()) continue;
 		cat = (LLViewerInventoryCategory*)model->getCategory(bridge->getUUID());
@@ -506,7 +506,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const
 	return TRUE;
 }
 
-void hideContextEntries(LLMenuGL& menu, 
+void hideContextEntries(LLMenuGL& menu,
 						const std::vector<std::string> &entries_to_show,
 						const std::vector<std::string> &disabled_entries)
 {
@@ -523,8 +523,8 @@ void hideContextEntries(LLMenuGL& menu,
 		{
 			hideContextEntries(*branchp->getBranch(), entries_to_show, disabled_entries);
 		}
-		
-		
+
+
 		bool found = false;
 		std::vector<std::string>::const_iterator itor2;
 		for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2)
@@ -552,8 +552,8 @@ void hideContextEntries(LLMenuGL& menu,
 }
 
 // Helper for commonly-used entries
-void LLInvFVBridge::getClipboardEntries(bool show_asset_id, 
-										std::vector<std::string> &items, 
+void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
+										std::vector<std::string> &items,
 										std::vector<std::string> &disabled_items, U32 flags)
 {
 	items.push_back(std::string("Rename"));
@@ -565,7 +565,7 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
 	if (show_asset_id)
 	{
 		items.push_back(std::string("Copy Asset UUID"));
-		if ( (! ( isItemPermissive() || gAgent.isGodlike() ) ) 
+		if ( (! ( isItemPermissive() || gAgent.isGodlike() ) )
 			  || (flags & FIRST_SELECTED_ITEM) == 0)
 		{
 			disabled_items.push_back(std::string("Copy Asset UUID"));
@@ -638,7 +638,7 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
 		{
 			return FALSE;
 		}
-		
+
 		*id = obj->getUUID();
 		//object_ids.put(obj->getUUID());
 
@@ -808,7 +808,7 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
 			}
 			new_listener = new LLLandmarkBridge(inventory, uuid, flags);
 			break;
-		
+
 		case LLAssetType::AT_CALLINGCARD:
 			if(!(inv_type == LLInventoryType::IT_CALLINGCARD))
 			{
@@ -1100,7 +1100,7 @@ PermissionMask LLItemBridge::getPermissionMask() const
 {
 	LLViewerInventoryItem* item = getItem();
 	PermissionMask perm_mask = 0;
-	if(item) 
+	if(item)
 	{
 		BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
 		BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID());
@@ -1126,9 +1126,9 @@ const std::string& LLItemBridge::getDisplayName() const
 
 void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)
 {
-	if(item) 
+	if(item)
 	{
-		name.assign(item->getName());			
+		name.assign(item->getName());
 	}
 	else
 	{
@@ -1137,9 +1137,9 @@ void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)
 }
 
 LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const
-{ 
+{
 	U8 font = LLFontGL::NORMAL;
-	
+
 	if( gAgentWearables.isWearingItem( mUUID ) )
 	{
 		// llinfos << "BOLD" << llendl;
@@ -1165,7 +1165,7 @@ std::string LLItemBridge::getLabelSuffix() const
 	static std::string BROKEN_LINK = LLTrans::getString("broken_link");
 	std::string suffix;
 	LLInventoryItem* item = getItem();
-	if(item) 
+	if(item)
 	{
 		// it's a bit confusing to put nocopy/nomod/etc on calling cards.
 		if(LLAssetType::AT_CALLINGCARD != item->getType()
@@ -1294,9 +1294,9 @@ BOOL LLItemBridge::isItemCopyable() const
 		{
 			return FALSE;
 		}
-		
+
 		// All items can be copied, not all can be pasted.
-		// The only time an item can't be copied is if it's a link 
+		// The only time an item can't be copied is if it's a link
 		// return (item->getPermissions().allowCopyBy(gAgent.getID()));
 		if (item->getIsLinkType())
 		{
@@ -1348,7 +1348,7 @@ BOOL LLItemBridge::isItemPermissive() const
 LLFolderBridge* LLFolderBridge::sSelf=NULL;
 
 // Can be moved to another folder
-BOOL LLFolderBridge::isItemMovable() const 
+BOOL LLFolderBridge::isItemMovable() const
 {
 	LLInventoryObject* obj = getInventoryObject();
 	if(obj)
@@ -1367,7 +1367,7 @@ void LLFolderBridge::selectItem()
 BOOL LLFolderBridge::isItemRemovable()
 {
 	LLInventoryModel* model = getInventoryModel();
-	if(!model) 
+	if(!model)
 	{
 		return FALSE;
 	}
@@ -1478,7 +1478,7 @@ BOOL LLFolderBridge::isClipboardPasteable() const
 		LLInventoryClipboard::instance().retrieve(objects);
 		const LLViewerInventoryCategory *current_cat = getCategory();
 
-		// Search for the direct descendent of current Friends subfolder among all pasted items, 
+		// Search for the direct descendent of current Friends subfolder among all pasted items,
 		// and return false if is found.
 		for(S32 i = objects.count() - 1; i >= 0; --i)
 		{
@@ -1500,7 +1500,7 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const
 	{
 		return FALSE;
 	}
-	
+
 	const LLInventoryModel* model = getInventoryModel();
 	if (!model)
 	{
@@ -1523,7 +1523,7 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const
 			{
 				const LLUUID &cat_id = cat->getUUID();
 				// Don't allow recursive pasting
-				if ((cat_id == current_cat_id) || 
+				if ((cat_id == current_cat_id) ||
 					model->isObjectDescendentOf(current_cat_id, cat_id))
 				{
 					return FALSE;
@@ -1549,7 +1549,7 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const
 BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 											BOOL drop)
 {
-	// This should never happen, but if an inventory item is incorrectly parented, 
+	// This should never happen, but if an inventory item is incorrectly parented,
 	// the UI will get confused and pass in a NULL.
 	if(!inv_cat) return FALSE;
 
@@ -1611,7 +1611,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 					break;
 				}
 			}
-			
+
 			if( is_movable )
 			{
 				if( move_is_into_trash )
@@ -1642,7 +1642,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 			}
 		}
 
-		
+
 		accept =	is_movable
 					&& (mUUID != cat_id)								// Can't move a folder into itself
 					&& (mUUID != inv_cat->getParentUUID())				// Avoid moves that would change nothing
@@ -1663,7 +1663,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 				}
 			}
 			// if target is an outfit or current outfit folder we use link
-			if (move_is_into_current_outfit || move_is_into_outfit) 
+			if (move_is_into_current_outfit || move_is_into_outfit)
 			{
 #if SUPPORT_ENSEMBLES
 				// BAP - should skip if dup.
@@ -1686,7 +1686,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 			}
 			else
 			{
-				
+
 				// Reparent the folder and restamp children if it's moving
 				// into trash.
 				LLInvFVBridge::changeCategoryParent(
@@ -1723,7 +1723,7 @@ void warn_move_inventory(LLViewerObject* object, LLMoveInv* move_inv)
 
 // Move/copy all inventory items from the Contents folder of an in-world
 // object to the agent's inventory, inside a given category.
-BOOL move_inv_category_world_to_agent(const LLUUID& object_id, 
+BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
 									  const LLUUID& category_id,
 									  BOOL drop,
 									  void (*callback)(S32, void*),
@@ -1750,7 +1750,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
 		llinfos << "Object contents not found for drop." << llendl;
 		return FALSE;
 	}
-	
+
 	BOOL accept = TRUE;
 	BOOL is_move = FALSE;
 
@@ -1836,7 +1836,7 @@ bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat,
 	{
 		LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe?
 		// BAP remove AT_NONE support after ensembles are fully working?
-		return (linked_category && 
+		return (linked_category &&
 				((linked_category->getPreferredType() == LLAssetType::AT_NONE) ||
 				 (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType()))));
 	}
@@ -1878,7 +1878,7 @@ public:
 		gInventory.removeObserver(this);
 		delete this;
 	}
-	
+
 
 protected:
 	LLUUID mCatID;
@@ -1973,7 +1973,7 @@ void LLRightClickInventoryFetchDescendentsObserver::done()
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLInventoryWearObserver
 //
-// Observer for "copy and wear" operation to support knowing 
+// Observer for "copy and wear" operation to support knowing
 // when the all of the contents have been added to inventory.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 class LLInventoryCopyAndWearObserver : public LLInventoryObserver
@@ -1995,7 +1995,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
 {
 	if((mask & (LLInventoryObserver::ADD)) != 0)
 	{
-		if (!mFolderAdded) 
+		if (!mFolderAdded)
 		{
 			const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
 
@@ -2003,7 +2003,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
 			std::set<LLUUID>::const_iterator id_end = changed_items.end();
 			for (;id_it != id_end; ++id_it)
 			{
-				if ((*id_it) == mCatID) 
+				if ((*id_it) == mCatID)
 				{
 					mFolderAdded = TRUE;
 					break;
@@ -2011,7 +2011,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
 			}
 		}
 
-		if (mFolderAdded) 
+		if (mFolderAdded)
 		{
 			LLViewerInventoryCategory* category = gInventory.getCategory(mCatID);
 
@@ -2029,7 +2029,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
 					LLAppearanceManager::wearInventoryCategory(category, FALSE, TRUE);
 					delete this;
 				}
-			}		
+			}
 		}
 
 	}
@@ -2091,12 +2091,12 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model
 		if(!model) return;
 		LLViewerInventoryCategory* cat = getCategory();
 		if(!cat) return;
-		
+
 		remove_inventory_category_from_avatar ( cat );
 		return;
-	}	
+	}
 	else if ("purge" == action)
-	{		
+	{
 		purgeItem(model, mUUID);
 		return;
 	}
@@ -2270,7 +2270,7 @@ void LLFolderBridge::pasteFromClipboard()
 			{
 				if(LLInventoryClipboard::instance().isCutMode())
 				{
-					// move_inventory_item() is not enough, 
+					// move_inventory_item() is not enough,
 					//we have to update inventory locally too
 					changeItemParent(model, dynamic_cast<LLViewerInventoryItem*>(item), parent_id, FALSE);
 				}
@@ -2347,7 +2347,7 @@ void LLFolderBridge::folderOptionsMenu()
 	// BAP change once we're no longer treating regular categories as ensembles.
 	const bool is_ensemble = category && (type == LLAssetType::AT_NONE ||
 										  LLAssetType::lookupIsEnsembleCategoryType(type));
-	
+
 	// calling card related functionality for folders.
 
 	// Only enable calling-card related options for non-default folders.
@@ -2361,7 +2361,7 @@ void LLFolderBridge::folderOptionsMenu()
 			mItems.push_back(std::string("IM All Contacts In Folder"));
 		}
 	}
-	
+
 	// wearables related functionality for folders.
 	//is_wearable
 	LLFindWearables is_wearable;
@@ -2416,7 +2416,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
 
 	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point)
-	mDisabledItems.clear(); //adding code to clear out disabled members from previous 
+	mDisabledItems.clear(); //adding code to clear out disabled members from previous
 	if (lost_and_found_id == mUUID)
 	  {
 		// This is the lost+found folder.
@@ -2458,13 +2458,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			mItems.push_back(std::string("New Clothes"));
 			mItems.push_back(std::string("New Body Parts"));
 			mItems.push_back(std::string("Change Type"));
-			
+
 			LLViewerInventoryCategory *cat = getCategory();
 			if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()))
 			{
 				mDisabledItems.push_back(std::string("Change Type"));
 			}
-			
+
 			getClipboardEntries(false, mItems, mDisabledItems, flags);
 		}
 		else
@@ -2479,24 +2479,24 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 
 		//Added by spatters to force inventory pull on right-click to display folder options correctly. 07-17-06
 		mCallingCards = mWearables = FALSE;
-		
+
 		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
 		if (checkFolderForContentsOfType(model, is_callingcard))
 		{
 			mCallingCards=TRUE;
 		}
-		
+
 		LLFindWearables is_wearable;
 		LLIsType is_object( LLAssetType::AT_OBJECT );
 		LLIsType is_gesture( LLAssetType::AT_GESTURE );
-		
+
 		if (checkFolderForContentsOfType(model, is_wearable)  ||
 			checkFolderForContentsOfType(model, is_object) ||
 			checkFolderForContentsOfType(model, is_gesture) )
 		{
 			mWearables=TRUE;
 		}
-		
+
 		mMenu = &menu;
 		sSelf = this;
 		LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE);
@@ -2709,7 +2709,7 @@ void LLFolderBridge::modifyOutfit(BOOL append)
 	if(!model) return;
 	LLViewerInventoryCategory* cat = getCategory();
 	if(!cat) return;
-	
+
 	// BAP - was:
 	// wear_inventory_category_on_avatar( cat, append );
 	LLAppearanceManager::wearInventoryCategory( cat, FALSE, append );
@@ -2735,8 +2735,8 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
 		}
 
 		two_uuids_list_t::iterator move_it;
-		for (move_it = move_inv->mMoveList.begin(); 
-			move_it != move_inv->mMoveList.end(); 
+		for (move_it = move_inv->mMoveList.begin();
+			move_it != move_inv->mMoveList.end();
 			++move_it)
 		{
 			object->moveInventory(move_it->first, move_it->second);
@@ -2845,7 +2845,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 		LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT);
 		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
 		BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT);
-		
+
 		if(is_movable && move_is_into_trash)
 		{
 			switch(inv_item->getType())
@@ -2873,7 +2873,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			is_movable = ! LLFriendCardsManager::instance()
 				.isObjDirectDescendentOfCategory (inv_item, getCategory());
 		}
- 
+
 		LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE);
 
 		// we can move item inside a folder only if this folder is Favorites. See EXT-719
@@ -2979,7 +2979,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 		if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
 			&& perm.allowTransferTo(gAgent.getID())))
 //		   || gAgent.isGodlike())
-			
+
 		{
 			accept = TRUE;
 		}
@@ -3010,7 +3010,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 				LLNotifications::instance().forceResponse(params, 0);
 			}
 		}
-		
+
 	}
 	else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
 	{
@@ -3063,11 +3063,11 @@ LLUIImagePtr LLTextureBridge::getIcon() const
 {
 	return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE);
 }
-	
+
 void LLTextureBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -3086,7 +3086,7 @@ LLUIImagePtr LLSoundBridge::getIcon() const
 void LLSoundBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -3155,7 +3155,7 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 // +=================================================+
 
 LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) :
-LLItemBridge(inventory, uuid) 
+LLItemBridge(inventory, uuid)
 {
 	mVisited = FALSE;
 	if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED)
@@ -3244,7 +3244,7 @@ void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* mod
 			LLSideTray::getInstance()->showPanel("panel_places", key);
 		}
 	}
-	else 
+	else
 	{
 		LLItemBridge::performAction(folder, model, action);
 	}
@@ -3268,7 +3268,7 @@ static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportFro
 void LLLandmarkBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -3376,7 +3376,7 @@ std::string LLCallingCardBridge::getLabelSuffix() const
 void LLCallingCardBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -3515,7 +3515,7 @@ BOOL LLCallingCardBridge::removeItem()
 		LLAvatarActions::removeFriendDialog(getItem()->getCreatorUUID());
 		return FALSE;
 	}
-	else 
+	else
 	{
 		return LLItemBridge::removeItem();
 	}
@@ -3532,7 +3532,7 @@ LLUIImagePtr LLNotecardBridge::getIcon() const
 void LLNotecardBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -3614,7 +3614,7 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode
 void LLGestureBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -3716,7 +3716,7 @@ void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* mo
 			LLPreviewAnim::e_activation_type activate = LLPreviewAnim::NONE;
 			if ("playworld" == action) activate = LLPreviewAnim::PLAY;
 			if ("playlocal" == action) activate = LLPreviewAnim::AUDITION;
-			
+
 			LLPreviewAnim* preview = LLFloaterReg::showTypedInstance<LLPreviewAnim>("preview_anim", LLSD(mUUID));
 			if (preview)
 			{
@@ -3733,7 +3733,7 @@ void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* mo
 void LLAnimationBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -3841,7 +3841,7 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model
 void LLObjectBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -3853,7 +3853,7 @@ void LLObjectBridge::openItem()
 }
 
 LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const
-{ 
+{
 	U8 font = LLFontGL::NORMAL;
 
 	LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
@@ -3867,7 +3867,7 @@ LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const
 	{
 		font |= LLFontGL::ITALIC;
 	}
-	
+
 	return (LLFontGL::StyleFlags)font;
 }
 
@@ -3878,7 +3878,7 @@ std::string LLObjectBridge::getLabelSuffix() const
 	{
 		std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
 		LLStringUtil::toLower(attachment_point_name);
-		
+
 		LLStringUtil::format_map_t args;
 		args["[ATTACHMENT_POINT]"] =  attachment_point_name.c_str();
 		return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args);
@@ -3925,7 +3925,7 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach
 bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response)
 {
 	LLVOAvatar *avatarp = gAgent.getAvatarObject();
-		
+
 	if (!avatarp->canAttachMoreObjects())
 	{
 		LLSD args;
@@ -3938,7 +3938,7 @@ bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& respon
 	if (option == 0/*YES*/)
 	{
 		LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID());
-		
+
 		if (itemp)
 		{
 			LLMessageSystem* msg = gMessageSystem;
@@ -3999,7 +3999,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			{
 				return;
 			}
-			
+
 			if( avatarp->isWearingAttachment( mUUID ) )
 			{
 				items.push_back(std::string("Detach From Yourself"));
@@ -4023,13 +4023,13 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 				LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE);
 				LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE);
 				LLVOAvatar *avatarp = gAgent.getAvatarObject();
-				if (attach_menu 
-					&& (attach_menu->getChildCount() == 0) 
-					&& attach_hud_menu 
-					&& (attach_hud_menu->getChildCount() == 0) 
+				if (attach_menu
+					&& (attach_menu->getChildCount() == 0)
+					&& attach_hud_menu
+					&& (attach_hud_menu->getChildCount() == 0)
 					&& avatarp)
 				{
-					for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); 
+					for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();
 						 iter != avatarp->mAttachmentPoints.end(); )
 					{
 						LLVOAvatar::attachment_map_t::iterator curiter = iter++;
@@ -4110,7 +4110,7 @@ LLUIImagePtr LLLSLTextBridge::getIcon() const
 void LLLSLTextBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -4146,7 +4146,7 @@ void wear_add_inventory_item_on_avatar( LLInventoryItem* item )
 	{
 		lldebugs << "wear_add_inventory_item_on_avatar( " << item->getName()
 				 << " )" << llendl;
-			
+
 		LLWearableList::instance().getAsset(item->getAssetUUID(),
 							   item->getName(),
 							   item->getType(),
@@ -4160,8 +4160,8 @@ void remove_inventory_category_from_avatar( LLInventoryCategory* category )
 	if(!category) return;
 	lldebugs << "remove_inventory_category_from_avatar( " << category->getName()
 			 << " )" << llendl;
-			 
-	
+
+
 	if( gFloaterCustomize )
 	{
 		gFloaterCustomize->askToSaveIfDirty(
@@ -4236,8 +4236,8 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_
 				}
 			}
 		}
-		
-		
+
+
 		if (obj_count > 0)
 		{
 			for(i = 0; i  < obj_count; ++i)
@@ -4332,7 +4332,7 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod
 		{
 			LLViewerInventoryItem* item = getItem();
 			if (item)
-			{	
+			{
 				LLWearableList::instance().getAsset(item->getAssetUUID(),
 													item->getName(),
 													item->getType(),
@@ -4347,7 +4347,7 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod
 void LLWearableBridge::openItem()
 {
 	LLViewerInventoryItem* item = getItem();
-	
+
 	if (item)
 	{
 		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
@@ -4431,7 +4431,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		getClipboardEntries(true, items, disabled_items, flags);
 
 		items.push_back(std::string("Wearable Separator"));
-		
+
 		items.push_back(std::string("Wearable Wear"));
 		items.push_back(std::string("Wearable Add"));
 		items.push_back(std::string("Wearable Edit"));
@@ -4462,7 +4462,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 						disabled_items.push_back(std::string("Wearable Add"));
 					}
 					else
-					{	
+					{
 						disabled_items.push_back(std::string("Take Off"));
 					}
 					break;
@@ -4501,7 +4501,7 @@ void LLWearableBridge::wearOnAvatar()
 {
 	// Don't wear anything until initial wearables are loaded, can
 	// destroy clothing items.
-	if (!gAgentWearables.areWearablesLoaded()) 
+	if (!gAgentWearables.areWearablesLoaded())
 	{
 		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
 		return;
@@ -4532,7 +4532,7 @@ void LLWearableBridge::wearAddOnAvatar()
 {
 	// Don't wear anything until initial wearables are loaded, can
 	// destroy clothing items.
-	if (!gAgentWearables.areWearablesLoaded()) 
+	if (!gAgentWearables.areWearablesLoaded())
 	{
 		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
 		return;
@@ -4620,7 +4620,7 @@ BOOL LLWearableBridge::canEditOnAvatar(void* user_data)
 	return (gAgentWearables.isWearingItem(self->mUUID));
 }
 
-// static 
+// static
 void LLWearableBridge::onEditOnAvatar(void* user_data)
 {
 	LLWearableBridge* self = (LLWearableBridge*)user_data;
@@ -4658,7 +4658,7 @@ BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data)
 	return FALSE;
 }
 
-// static 
+// static
 void LLWearableBridge::onRemoveFromAvatar(void* user_data)
 {
 	LLWearableBridge* self = (LLWearableBridge*)user_data;
@@ -4689,7 +4689,7 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
 		if( gAgentWearables.isWearingItem( item_id ) )
 		{
 			EWearableType type = wearable->getType();
-	
+
 			if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&&
 				//!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) )
 			{
@@ -4733,7 +4733,7 @@ LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_
 	case LLAssetType::AT_LANDMARK:
 		action = new LLLandmarkBridgeAction(uuid,model);
 		break;
-		
+
 	case LLAssetType::AT_CALLINGCARD:
 		action = new LLCallingCardBridgeAction(uuid,model);
 		break;
@@ -4770,7 +4770,7 @@ LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_
 	return action;
 }
 
-//static 
+//static
 void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,
 								   const LLUUID& uuid,LLInventoryModel* model)
 {
@@ -4782,7 +4782,7 @@ void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,
 	}
 }
 
-//static 
+//static
 void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)
 {
 	LLAssetType::EType asset_type = model->getItem(uuid)->getType();
@@ -4801,8 +4801,8 @@ LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const
 	return NULL;
 }
 
-//virtual 
-void	LLTextureBridgeAction::doIt() 
+//virtual
+void	LLTextureBridgeAction::doIt()
 {
 	if (getItem())
 	{
@@ -4813,20 +4813,20 @@ void	LLTextureBridgeAction::doIt()
 }
 
 //virtual
-void	LLSoundBridgeAction::doIt() 
+void	LLSoundBridgeAction::doIt()
 {
 	LLViewerInventoryItem* item = getItem();
 	if(item)
 	{
 		LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES);
 	}
-	
+
 	LLInvFVBridgeAction::doIt();
 }
 
 
-//virtual 
-void	LLLandmarkBridgeAction::doIt() 
+//virtual
+void	LLLandmarkBridgeAction::doIt()
 {
 	LLViewerInventoryItem* item = getItem();
 	if( item )
@@ -4842,8 +4842,8 @@ void	LLLandmarkBridgeAction::doIt()
 }
 
 
-//virtual 
-void	LLCallingCardBridgeAction::doIt() 
+//virtual
+void	LLCallingCardBridgeAction::doIt()
 {
 	LLViewerInventoryItem* item = getItem();
 	if(item && item->getCreatorUUID().notNull())
@@ -4854,9 +4854,9 @@ void	LLCallingCardBridgeAction::doIt()
 	LLInvFVBridgeAction::doIt();
 }
 
-//virtual 
-void	
-LLNotecardBridgeAction::doIt() 
+//virtual
+void
+LLNotecardBridgeAction::doIt()
 {
 	LLViewerInventoryItem* item = getItem();
 	if (item)
@@ -4867,8 +4867,8 @@ LLNotecardBridgeAction::doIt()
 	LLInvFVBridgeAction::doIt();
 }
 
-//virtual 
-void	LLGestureBridgeAction::doIt() 
+//virtual
+void	LLGestureBridgeAction::doIt()
 {
 	LLViewerInventoryItem* item = getItem();
 	if (item)
@@ -4880,8 +4880,8 @@ void	LLGestureBridgeAction::doIt()
 	LLInvFVBridgeAction::doIt();
 }
 
-//virtual 
-void	LLAnimationBridgeAction::doIt() 
+//virtual
+void	LLAnimationBridgeAction::doIt()
 {
 	LLViewerInventoryItem* item = getItem();
 	if (item)
@@ -4893,7 +4893,7 @@ void	LLAnimationBridgeAction::doIt()
 }
 
 
-//virtual 
+//virtual
 void	LLObjectBridgeAction::doIt()
 {
 	LLFloaterReg::showInstance("properties", mUUID);
@@ -4902,8 +4902,8 @@ void	LLObjectBridgeAction::doIt()
 }
 
 
-//virtual 
-void	LLLSLTextBridgeAction::doIt() 
+//virtual
+void	LLLSLTextBridgeAction::doIt()
 {
 	LLViewerInventoryItem* item = getItem();
 	if (item)
@@ -4933,7 +4933,7 @@ void LLWearableBridgeAction::wearOnAvatar()
 {
 	// Don't wear anything until initial wearables are loaded, can
 	// destroy clothing items.
-	if (!gAgentWearables.areWearablesLoaded()) 
+	if (!gAgentWearables.areWearablesLoaded())
 	{
 		LLNotifications::instance().add("CanNotChangeAppearanceUntilLoaded");
 		return;
@@ -4960,7 +4960,7 @@ void LLWearableBridgeAction::wearOnAvatar()
 	}
 }
 
-//virtual 
+//virtual
 void LLWearableBridgeAction::doIt()
 {
 	if(isInTrash())
@@ -5036,7 +5036,7 @@ void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		items.push_back(std::string("Restore Item"));
 	}
 	else
-	{	
+	{
 		items.push_back(std::string("Delete"));
 		if (!isItemRemovable())
 		{
@@ -5086,7 +5086,7 @@ void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		items.push_back(std::string("Restore Item"));
 	}
 	else
-	{	
+	{
 		items.push_back(std::string("Goto Link"));
 		items.push_back(std::string("Delete"));
 		if (!isItemRemovable())
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index d3366cdcaa..db473a3f10 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -151,6 +151,7 @@
   <texture name="Inspector_Hover" file_name="windows/Inspector_Hover.png" preload="false" />
 
   <texture name="Inv_Acessories" file_name="icons/Inv_Accessories.png" preload="false" />
+  <texture name="Inv_Alpha" file_name="icons/Inv_Alpha.png" preload="false" />
   <texture name="Inv_Animation" file_name="icons/Inv_Animation.png" preload="false" />
   <texture name="Inv_BodyShape" file_name="icons/Inv_BodyShape.png" preload="false" />
   <texture name="Inv_CallingCard" file_name="icons/Inv_CallingCard.png" preload="false" />
@@ -175,6 +176,7 @@
   <texture name="Inv_Snapshot" file_name="icons/Inv_Snapshot.png" preload="false" />
   <texture name="Inv_Socks" file_name="icons/Inv_Socks.png" preload="false" />
   <texture name="Inv_Sound" file_name="icons/Inv_Sound.png" preload="false" />
+  <texture name="Inv_Tattoo" file_name="icons/Inv_Tattoo.png" preload="false" />
   <texture name="Inv_Texture" file_name="icons/Inv_Texture.png" preload="false" />
   <texture name="Inv_Trash" file_name="icons/Inv_Trash.png" preload="false" />
   <texture name="Inv_Underpants" file_name="icons/Inv_Underpants.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index f42bab14de..91dcdce23b 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -20,8 +20,9 @@
     </panel.string>
     <check_box
      control_name="UseChatBubbles"
+     follows="left|top"
      height="16"
-     label="Bubble Chat"
+     label="Bubble chat"
      layout="topleft"
      left="30"
      top="10"
@@ -30,6 +31,7 @@
 
     <slider
      control_name="ChatBubbleOpacity"
+     follows="left|top"
      height="16"
      increment="0.05"
      initial_value="1"
@@ -40,40 +42,24 @@
      label_width="50"
      name="bubble_chat_opacity"
      width="200" />
-
-   <!-- <check_box
-     control_name="UIAutoScale"
-     height="16"
-     label="Resolution independent scale"
-     layout="topleft"
-     left="30"
-     name="ui_auto_scale"
-     top_pad="10"
-     width="256" />-->
-    <!--
-    <combo_box
-     height="18"
-     layout="topleft"
-     left_pad="5"
-     name="fullscreen combo"
-     top_delta="-1"
-     width="150" /-->
     <text
+     follows="left|top"
      type="string"
      length="1"
      height="25"
      layout="topleft"
      left="30"
-     top_pad="20"
+     top_pad="5"
      name="AspectRatioLabel1"
      tool_tip="width / height"
      label_width="50"
      width="120">
-        Aspect Ratio
+        Aspect ratio
     </text>
     <combo_box
      allow_text_entry="true"
      height="20"
+     follows="left|top"
      layout="topleft"
      left_pad="0"
      max_chars="100"
@@ -104,6 +90,7 @@
     </combo_box>
     <check_box
      control_name="FullScreenAutoDetectAspectRatio"
+     follows="left|top"
      height="25"
      label="Auto-detect"
      layout="topleft"
@@ -113,14 +100,14 @@
         <check_box.commit_callback
          function="Pref.AutoDetectAspect" />
     </check_box>
-
      <text
+     follows="left|top"
      type="string"
      length="1"
      height="10"
      left="30"
      name="heading1"
-     top_pad="10"
+     top_pad="5"
      width="270">
 Camera:
 	</text>
@@ -128,7 +115,7 @@ Camera:
      can_edit_text="true"
 	 control_name="CameraAngle"
      decimal_digits="2"
-     top_pad="10"
+     top_pad="5"
      follows="left|top"
      height="16"
      increment="0.025"
@@ -159,56 +146,62 @@ Camera:
      name="camera_offset_scale"
      show_text="false"
      width="240"
-     top_pad="10"/>
+     top_pad="5"/>
      <text
+     follows="left|top"
      type="string"
      length="1"
      height="10"
      left="30"
      name="heading2"
-     width="270">
+     width="270"
+     top_pad="5">
 Automatic positioning for:
 	</text>
         <check_box
      control_name="EditCameraMovement"
      height="20"
+     follows="left|top"
      label="Build/Edit"
      layout="topleft"
      left_delta="50"
      name="edit_camera_movement"
      tool_tip="Use automatic camera positioning when entering and exiting edit mode"
      width="280"
-     top_pad="10" />
+     top_pad="5" />
     <check_box
      control_name="AppearanceCameraMovement"
+     follows="left|top"
      height="16"
      label="Appearance"
      layout="topleft"
      name="appearance_camera_movement"
      tool_tip="Use automatic camera positioning while in edit mode"
      width="242" />
-
      <text
+     follows="left|top"
      type="string"
      length="1"
      height="10"
      left="30"
      name="heading3"
-     top_pad="10"
+     top_pad="5"
      width="270">
 Avatars:
 	</text>
     <check_box
      control_name="FirstPersonAvatarVisible"
+     follows="left|top"
      height="20"
      label="Show me in Mouselook"
      layout="topleft"
      left_delta="50"
      name="first_person_avatar_visible"
      width="256"
-     top_pad="10"/>
+     top_pad="0"/>
     <check_box
      control_name="ArrowKeysMoveAvatar"
+     follows="left|top"
      height="20"
      label="Arrow keys always move me"
      layout="topleft"
@@ -218,6 +211,7 @@ Avatars:
      top_pad="0"/>
     <check_box
      control_name="AllowTapTapHoldRun"
+     follows="left|top"
      height="20"
      label="Tap-tap-hold to run"
      layout="topleft"
@@ -227,6 +221,7 @@ Avatars:
      top_pad="0"/>
     <check_box
      control_name="LipSyncEnabled"
+     follows="left|top"
      height="20"
      label="Move avatar lips when speaking"
      layout="topleft"
@@ -236,16 +231,18 @@ Avatars:
      top_pad="0" />
     <check_box
      control_name="ShowScriptErrors"
+     follows="left|top"
      height="20"
      label="Show script errors"
      layout="topleft"
      left="30"
      name="show_script_errors"
      width="256"
-     top_pad="10"/>
+     top_pad="5"/>
     <radio_group
 	 enabled_control="ShowScriptErrors"
 	 control_name="ShowScriptErrorsLocation"
+     follows="top|left"
      draw_border="false"
      height="40"
      layout="topleft"
@@ -259,17 +256,53 @@ Avatars:
          layout="topleft"
          left="3"
          name="0"
-         top="3"
+         top="0"
          width="315" />
         <radio_item
          height="16"
          label="In window"
          layout="topleft"
-         left_delta="0"
+         left_delta="175"
          name="1"
-         top_delta="16"
+         top_delta="0"
          width="315" />
     </radio_group>
-
-
+     <check_box
+     follows="top|left"
+     height="20"
+     label="Use Push-to-talk in toggle mode"
+     layout="topleft"
+     left="30"
+     name="push_to_talk_toggle_check"
+     width="237"
+     top_pad="-25"
+     tool_tip="When in toggle mode, press and release the push-to-talk trigger to switch your microphone on and off. When not in toggle mode, the microphone is active only when the trigger is held down."/>
+    <line_editor
+     follows="top|left"
+     height="19"
+     left_delta="50"
+     max_length="254"
+     name="modifier_combo"
+     label="Push-to-talk trigger"
+     top_pad="0"
+     width="280" />
+    <button
+	follows="top|left"
+	height="20"
+	label="Set Key"
+	left_delta="0"
+        name="set_voice_hotkey_button"
+	width="115"
+	top_pad="5" />
+    <button
+        bottom_delta="0"
+	follows="left"
+	font="SansSerif"
+	halign="center"
+	height="20"
+	label="Middle Mouse Button"
+	left_delta="120"
+	mouse_opaque="true"
+	name="set_voice_middlemouse_button"
+	width="160" />
 </panel>
-- 
cgit v1.2.3