diff options
| author | Loren Shih <seraph@lindenlab.com> | 2010-06-24 19:37:35 -0400 | 
|---|---|---|
| committer | Loren Shih <seraph@lindenlab.com> | 2010-06-24 19:37:35 -0400 | 
| commit | c77efc92e3ebcb9af9bb997e5b709484153844d4 (patch) | |
| tree | 57f58946a62b16dc623d7469d59bef19f514d574 | |
| parent | 9f835b9bce6ac023a9f8b98cfb53015f5d416130 (diff) | |
| parent | c6b80b47459711cc4c0b1971cb954ad6148517a0 (diff) | |
automated merge
89 files changed, 579 insertions, 400 deletions
| diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp index 27c0c0b640..11665aff76 100644 --- a/indra/llcharacter/llcharacter.cpp +++ b/indra/llcharacter/llcharacter.cpp @@ -381,7 +381,7 @@ void LLCharacter::clearVisualParamWeights()  		param;  		param = getNextVisualParam())  	{ -		if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +		if (param->isTweakable())  		{  			param->setWeight( param->getDefaultWeight(), FALSE );  		} diff --git a/indra/llcharacter/llvisualparam.cpp b/indra/llcharacter/llvisualparam.cpp index 703fe2f9cc..122406e20b 100644 --- a/indra/llcharacter/llvisualparam.cpp +++ b/indra/llcharacter/llvisualparam.cpp @@ -261,7 +261,7 @@ void LLVisualParam::setAnimationTarget(F32 target_value, BOOL upload_bake)  	if (mInfo)  	{ -		if (getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +		if (isTweakable())  		{  			mTargetWeight = llclamp(target_value, mInfo->mMinWeight, mInfo->mMaxWeight);  		} @@ -305,7 +305,7 @@ void LLVisualParam::animate( F32 delta, BOOL upload_bake )  //-----------------------------------------------------------------------------  void LLVisualParam::stopAnimating(BOOL upload_bake)  {  -	if (mIsAnimating && getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +	if (mIsAnimating && isTweakable())  	{  		mIsAnimating = FALSE;   		setWeight(mTargetWeight, upload_bake); diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h index 12b45e6ebe..20ee5fd7ec 100644 --- a/indra/llcharacter/llvisualparam.h +++ b/indra/llcharacter/llvisualparam.h @@ -52,6 +52,7 @@ enum EVisualParamGroup  {  	VISUAL_PARAM_GROUP_TWEAKABLE,  	VISUAL_PARAM_GROUP_ANIMATABLE, +	VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT,  	NUM_VISUAL_PARAM_GROUPS  }; @@ -144,6 +145,7 @@ public:  	F32						getCurrentWeight() const 	{ return mCurWeight; }  	F32						getLastWeight() const	{ return mLastWeight; }  	BOOL					isAnimating() const	{ return mIsAnimating; } +	BOOL					isTweakable() const { return (getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE)  || (getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT); }  	LLVisualParam*			getNextParam()		{ return mNext; }  	void					setNextParam( LLVisualParam *next ); diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index d7ab030a47..f4af19b696 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -230,6 +230,8 @@ public:  	void			setFont(const LLFontGL *font)		  		{ mGLFont = ( font ? font : LLFontGL::getFontSansSerif()); } +	const LLFontGL* getFont() const { return mGLFont; } +  	S32				getLastDrawCharsCount() const { return mLastDrawCharsCount; } diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index f22b49f30f..b87851490d 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -1227,7 +1227,7 @@ LLFlatListViewEx::LLFlatListViewEx(const Params& p)  , mNoFilteredItemsMsg(p.no_filtered_items_msg)  , mNoItemsMsg(p.no_items_msg)  , mForceShowingUnmatchedItems(false) -, mLastFilterSucceded(false) +, mHasMatchedItems(false)  {  } @@ -1285,7 +1285,7 @@ void LLFlatListViewEx::filterItems()  	item_panel_list_t items;  	getItems(items); -	mLastFilterSucceded = false; +	mHasMatchedItems = false;  	for (item_panel_list_t::iterator  			 iter = items.begin(),  			 iter_end = items.end(); @@ -1296,13 +1296,16 @@ void LLFlatListViewEx::filterItems()  		// i.e. we don't hide items that don't support 'match_filter' action, separators etc.  		if (0 == pItem->notify(action))  		{ -			mLastFilterSucceded = true; +			mHasMatchedItems = true;  			pItem->setVisible(true);  		}  		else  		{  			// TODO: implement (re)storing of current selection. -			selectItem(pItem, false); +			if(!mForceShowingUnmatchedItems) +			{ +				selectItem(pItem, false); +			}  			pItem->setVisible(mForceShowingUnmatchedItems);  		}  	} @@ -1311,9 +1314,9 @@ void LLFlatListViewEx::filterItems()  	notifyParentItemsRectChanged();  } -bool LLFlatListViewEx::wasLasFilterSuccessfull() +bool LLFlatListViewEx::hasMatchedItems()  { -	return mLastFilterSucceded; +	return mHasMatchedItems;  }  //EOF diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index caeddfc179..ded46d8122 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -488,7 +488,7 @@ public:  	/**  	 * Returns true if last call of filterItems() found at least one matching item  	 */ -	bool wasLasFilterSuccessfull(); +	bool hasMatchedItems();  protected:  	LLFlatListViewEx(const Params& p); @@ -512,7 +512,7 @@ private:  	/**  	 * True if last call of filterItems() found at least one matching item  	 */ -	bool mLastFilterSucceded; +	bool mHasMatchedItems;  };  #endif diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 9a56372e68..39a6855273 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2754,10 +2754,10 @@ void LLFloater::initFromParams(const LLFloater::Params& p)  LLFastTimer::DeclareTimer POST_BUILD("Floater Post Build"); -bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node) +bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node)  {  	Params params(LLUICtrlFactory::getDefaultParams<LLFloater>()); -	LLXUIParser::instance().readXUI(node, params); // *TODO: Error checking +	LLXUIParser::instance().readXUI(node, params, filename); // *TODO: Error checking  	if (output_node)  	{ diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 654164ddc0..3ea035777c 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -149,7 +149,7 @@ public:  	static void setupParamsForExport(Params& p, LLView* parent);  	void initFromParams(const LLFloater::Params& p); -	bool initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL); +	bool initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node = NULL);  	/*virtual*/ void handleReshape(const LLRect& new_rect, bool by_user = false);  	/*virtual*/ BOOL canSnapTo(const LLView* other_view); diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index b77126996e..b4a1bcb7c5 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -139,6 +139,7 @@ LLMenuItemGL::Params::Params()  :	shortcut("shortcut"),  	jump_key("jump_key", KEY_NONE),  	use_mac_ctrl("use_mac_ctrl", false), +	allow_key_repeat("allow_key_repeat", false),  	rect("rect"),  	left("left"),  	top("top"), @@ -160,7 +161,7 @@ LLMenuItemGL::Params::Params()  LLMenuItemGL::LLMenuItemGL(const LLMenuItemGL::Params& p)  :	LLUICtrl(p),  	mJumpKey(p.jump_key), -	mAllowKeyRepeat(FALSE), +	mAllowKeyRepeat(p.allow_key_repeat),  	mHighlight( FALSE ),  	mGotHover( FALSE ),  	mBriefItem( FALSE ), diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 6f0f83d4b9..7668f301ea 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -61,7 +61,8 @@ public:  	{  		Optional<std::string>	shortcut;  		Optional<KEY>			jump_key; -		Optional<bool>			use_mac_ctrl; +		Optional<bool>			use_mac_ctrl, +								allow_key_repeat;  		Ignored					rect,  								left, diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 0cd052eefa..9ebdcb87c6 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -508,16 +508,19 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu  		if (xml_filename.empty())  		{  			node->getAttributeString("filename", xml_filename); +			setXMLFilename(xml_filename);  		}  		if (!xml_filename.empty())  		{ +			LLUICtrlFactory::instance().pushFileName(xml_filename); +  			LLFastTimer timer(FTM_EXTERNAL_PANEL_LOAD);  			if (output_node)  			{  				//if we are exporting, we want to export the current xml  				//not the referenced xml -				LLXUIParser::instance().readXUI(node, params, xml_filename); +				LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());  				Params output_params(params);  				setupParamsForExport(output_params, parent);  				output_node->setName(node->getName()->mString); @@ -533,13 +536,13 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu  				return FALSE;  			} -			LLXUIParser::instance().readXUI(referenced_xml, params, xml_filename); +			LLXUIParser::instance().readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName());  			// add children using dimensions from referenced xml for consistent layout  			setShape(params.rect);  			LLUICtrlFactory::createChildren(this, referenced_xml, child_registry_t::instance()); -			setXMLFilename(xml_filename); +			LLUICtrlFactory::instance().popFileName();  		}  		// ask LLUICtrlFactory for filename, since xml_filename might be empty diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index bf12384a28..dff1cb93e7 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -1752,6 +1752,33 @@ std::string LLUI::getLanguage()  	return language;  } +struct SubDir : public LLInitParam::Block<SubDir> +{ +	Mandatory<std::string> value; + +	SubDir() +	:	value("value") +	{} +}; + +struct Directory : public LLInitParam::Block<Directory> +{ +	Multiple<SubDir, AtLeast<1> > subdirs; + +	Directory() +	:	subdirs("subdir") +	{} +}; + +struct Paths : public LLInitParam::Block<Paths> +{ +	Multiple<Directory, AtLeast<1> > directories; + +	Paths() +	:	directories("directory") +	{} +}; +  //static  void LLUI::setupPaths()  { @@ -1759,21 +1786,36 @@ void LLUI::setupPaths()  	LLXMLNodePtr root;  	BOOL success  = LLXMLNode::parseFile(filename, root, NULL); +	Paths paths; +	LLXUIParser::instance().readXUI(root, paths, filename); +  	sXUIPaths.clear(); -	if (success) +	if (success && paths.validateBlock())  	{  		LLStringUtil::format_map_t path_args;  		path_args["[LANGUAGE]"] = LLUI::getLanguage(); -		for (LLXMLNodePtr path = root->getFirstChild(); path.notNull(); path = path->getNextSibling()) +		for (LLInitParam::ParamIterator<Directory>::const_iterator it = paths.directories().begin(),  +				end_it = paths.directories().end(); +			it != end_it; +			++it)  		{ -			std::string path_val_ui(path->getValue()); +			std::string path_val_ui; +			for (LLInitParam::ParamIterator<SubDir>::const_iterator subdir_it = it->subdirs().begin(), +					subdir_end_it = it->subdirs().end(); +				subdir_it != subdir_end_it;) +			{ +				path_val_ui += subdir_it->value(); +				if (++subdir_it != subdir_end_it) +					path_val_ui += gDirUtilp->getDirDelimiter(); +			}  			LLStringUtil::format(path_val_ui, path_args);  			if (std::find(sXUIPaths.begin(), sXUIPaths.end(), path_val_ui) == sXUIPaths.end())  			{  				sXUIPaths.push_back(path_val_ui);  			} +  		}  	}  	else // parsing failed diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index 930dadc377..6b337e0d74 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -101,7 +101,9 @@ void LLUICtrlFactory::loadWidgetTemplate(const std::string& widget_tag, LLInitPa  	if (LLUICtrlFactory::getLayeredXMLNode(filename, root_node))  	{ +		LLUICtrlFactory::instance().pushFileName(filename);  		LLXUIParser::instance().readXUI(root_node, block, filename); +		LLUICtrlFactory::instance().popFileName();  	}  } @@ -211,7 +213,7 @@ bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filen  	bool res = true;  	lldebugs << "Building floater " << filename << llendl; -	mFileNames.push_back(gDirUtilp->findSkinnedFilename(LLUI::getSkinPath(), filename)); +	pushFileName(filename);  	{  		if (!floaterp->getFactoryMap().empty())  		{ @@ -222,7 +224,7 @@ bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filen  		floaterp->getCommitCallbackRegistrar().pushScope();  		floaterp->getEnableCallbackRegistrar().pushScope(); -		res = floaterp->initFloaterXML(root, floaterp->getParent(), output_node); +		res = floaterp->initFloaterXML(root, floaterp->getParent(), filename, output_node);  		floaterp->setXMLFilename(filename); @@ -234,7 +236,7 @@ bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filen  			mFactoryStack.pop_front();  		}  	} -	mFileNames.pop_back(); +	popFileName();  	return res;  } @@ -283,7 +285,7 @@ BOOL LLUICtrlFactory::buildPanel(LLPanel* panelp, const std::string& filename, L  	lldebugs << "Building panel " << filename << llendl; -	mFileNames.push_back(gDirUtilp->findSkinnedFilename(LLUI::getSkinPath(), filename)); +	pushFileName(filename);  	{  		if (!panelp->getFactoryMap().empty())  		{ @@ -306,7 +308,7 @@ BOOL LLUICtrlFactory::buildPanel(LLPanel* panelp, const std::string& filename, L  			mFactoryStack.pop_front();  		}  	} -	mFileNames.pop_back(); +	popFileName();  	return didPost;  } @@ -364,6 +366,23 @@ LLPanel* LLUICtrlFactory::createFactoryPanel(const std::string& name)  	return create<LLPanel>(panel_p);  } +std::string LLUICtrlFactory::getCurFileName()  +{  +	return mFileNames.empty() ? "" : gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + mFileNames.back();  +} + + +void LLUICtrlFactory::pushFileName(const std::string& name)  +{  +	mFileNames.push_back(gDirUtilp->findSkinnedFilename(LLUI::getSkinPath(), name));  +} + +void LLUICtrlFactory::popFileName()  +{  +	mFileNames.pop_back();  +} + +  //-----------------------------------------------------------------------------  //static diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index b1fa6add67..7da96ffce3 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -170,7 +170,9 @@ public:  	// Returns 0 on success  	S32 saveToXML(LLView* viewp, const std::string& filename); -	std::string getCurFileName() { return mFileNames.empty() ? "" : mFileNames.back(); } +	std::string getCurFileName(); +	void pushFileName(const std::string& name); +	void popFileName();  	static BOOL getAttributeColor(LLXMLNodePtr node, const std::string& name, LLColor4& color); @@ -229,7 +231,7 @@ public:  		T* widget = NULL;  		std::string skinned_filename = findSkinnedFilename(filename); -		getInstance()->mFileNames.push_back(skinned_filename); +		instance().pushFileName(filename);  		{  			LLXMLNodePtr root_node; @@ -263,7 +265,7 @@ public:  			}  		}  fail: -		getInstance()->mFileNames.pop_back(); +		instance().popFileName();  		return widget;  	} diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index bd56da9121..394ec957d5 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -111,6 +111,8 @@ LLView::Params::Params()  	user_resize("user_resize"),  	auto_resize("auto_resize"),  	needs_translate("translate"), +	min_width("min_width"), +	max_width("max_width"),  	xmlns("xmlns"),  	xmlns_xsi("xmlns:xsi"),  	xsi_schemaLocation("xsi:schemaLocation"), diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 3779fedf34..9ff6a4e1a0 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -148,6 +148,8 @@ public:  		Ignored						user_resize,  									auto_resize,  									needs_translate, +									min_width, +									max_width,  									xmlns,  									xmlns_xsi,  									xsi_schemaLocation, @@ -634,7 +636,7 @@ template <class T> T* LLView::getChild(const std::string& name, BOOL recurse) co  		// did we find *something* with that name?  		if (child)  		{ -			llwarns << "Found child named " << name << " but of wrong type " << typeid(*child).name() << ", expecting " << typeid(T*).name() << llendl; +			llwarns << "Found child named \"" << name << "\" but of wrong type " << typeid(*child).name() << ", expecting " << typeid(T*).name() << llendl;  		}  		result = getDefaultWidget<T>(name);  		if (!result) diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index 9564236ad2..a9b4ff02c5 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -11533,7 +11533,7 @@ render_pass="bump">      <param       id="1071" -     group="0" +     group="2"       wearable="tattoo"       edit_group="colorpicker"       name="tattoo_red" @@ -11566,7 +11566,7 @@ render_pass="bump">      <param       id="1072" -     group="0" +     group="2"       wearable="tattoo"       edit_group="colorpicker"       name="tattoo_green" @@ -11599,7 +11599,7 @@ render_pass="bump">      <param       id="1073" -     group="0" +     group="2"       wearable="tattoo"       edit_group="colorpicker"       name="tattoo_blue" diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 217fb0f988..345953f2e9 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3627,7 +3627,7 @@ void LLAgent::sendAgentSetAppearance()  		 param;  		 param = (LLViewerVisualParam*)gAgentAvatarp->getNextVisualParam())  	{ -		if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +		if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) // do not transmit params of group VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT  		{  			msg->nextBlockFast(_PREHASH_VisualParam ); diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index aa8cc01f7d..1fab5c7683 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -374,7 +374,12 @@ void LLCOFWearables::refresh()  				 value_it_end = values.end();  			 value_it != value_it_end; ++value_it)  		{ -			list->selectItemByValue(*value_it); +			// value_it may be null because of dummy items +			// Dummy items have no ID +			if(value_it->asUUID().notNull()) +			{ +				list->selectItemByValue(*value_it); +			}  		}  	}  } @@ -608,7 +613,20 @@ void LLCOFWearables::onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContex  		uuid_vec_t selected_uuids;  		if(getSelectedUUIDs(selected_uuids))  		{ -			menu->show(ctrl, selected_uuids, x, y); +			bool show_menu = false; +			for(uuid_vec_t::iterator it = selected_uuids.begin();it!=selected_uuids.end();++it) +			{ +				if ((*it).notNull()) +				{ +					show_menu = true; +					break; +				} +			} + +			if(show_menu) +			{ +				menu->show(ctrl, selected_uuids, x, y); +			}  		}  	}  } diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 76263a4307..98f940c233 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -1940,8 +1940,6 @@ BOOL LLPanelLandOptions::postBuild()  	mLandingTypeCombo = getChild<LLComboBox>( "landing type");  	childSetCommitCallback("landing type", onCommitAny, this); -	getChild<LLTextureCtrl>("snapshot_ctrl")->setFallbackImageName("default_land_picture.j2c"); -  	return TRUE;  } diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index f450b199c8..3ce1b46a4c 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -70,6 +70,7 @@  #include "llscrolllistctrl.h"  #include "llscrolllistitem.h"  #include "llsliderctrl.h" +#include "llsidetray.h"  #include "lltabcontainer.h"  #include "lltrans.h"  #include "llviewercontrol.h" @@ -309,6 +310,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)  	mCommitCallbackRegistrar.add("Pref.applyUIColor",			boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));  	mCommitCallbackRegistrar.add("Pref.getUIColor",				boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2));  	mCommitCallbackRegistrar.add("Pref.MaturitySettings",		boost::bind(&LLFloaterPreference::onChangeMaturity, this)); +	mCommitCallbackRegistrar.add("Pref.BlockList",				boost::bind(&LLFloaterPreference::onClickBlockList, this));  	sSkin = gSavedSettings.getString("SkinCurrent");  } @@ -1225,6 +1227,17 @@ void LLFloaterPreference::onChangeMaturity()  	getChild<LLIconCtrl>("rating_icon_adult")->setVisible(sim_access == SIM_ACCESS_ADULT);  } +// FIXME: this will stop you from spawning the sidetray from preferences dialog on login screen +// but the UI for this will still be enabled +void LLFloaterPreference::onClickBlockList() +{ +	// don't create side tray on demand +	if (LLSideTray::instanceCreated()) +	{ +		LLSideTray::getInstance()->showPanel("panel_block_list_sidetray"); +	} +} +  void LLFloaterPreference::applyUIColor(LLUICtrl* ctrl, const LLSD& param)  { diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index b45e09db7d..0df1b61dcb 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -141,6 +141,7 @@ public:  	void onCommitMusicEnabled();  	void applyResolution();  	void onChangeMaturity(); +	void onClickBlockList();  	void applyUIColor(LLUICtrl* ctrl, const LLSD& param);  	void getUIColor(LLUICtrl* ctrl, const LLSD& param); diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index a42f6ee00f..565f0619a5 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -235,7 +235,6 @@ BOOL	LLFloaterTools::postBuild()  	childSetValue("checkbox uniform",(BOOL)gSavedSettings.getBOOL("ScaleUniform"));  	mCheckStretchTexture	= getChild<LLCheckBoxCtrl>("checkbox stretch textures");  	childSetValue("checkbox stretch textures",(BOOL)gSavedSettings.getBOOL("ScaleStretchTextures")); -	mTextGridMode			= getChild<LLTextBox>("text ruler mode");  	mComboGridMode			= getChild<LLComboBox>("combobox grid mode");  	mCheckStretchUniformLabel = getChild<LLTextBox>("checkbox uniform label"); @@ -313,7 +312,6 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)  	mCheckSnapToGrid(NULL),  	mBtnGridOptions(NULL),  	mTitleMedia(NULL), -	mTextGridMode(NULL),  	mComboGridMode(NULL),  	mCheckStretchUniform(NULL),  	mCheckStretchTexture(NULL), @@ -625,8 +623,6 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)  		mComboGridMode->setCurrentByIndex(index);  	} -	if (mTextGridMode) mTextGridMode->setVisible( edit_visible ); -  	// Snap to grid disabled for grab tool - very confusing  	if (mCheckSnapToGrid) mCheckSnapToGrid->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ );  	if (mBtnGridOptions) mBtnGridOptions->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ ); diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index 91431969bb..7aa319a441 100644 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -144,7 +144,6 @@ public:  	LLCheckBoxCtrl*	mCheckSnapToGrid;  	LLButton*		mBtnGridOptions; -	LLTextBox*		mTextGridMode;  	LLComboBox*		mComboGridMode;  	LLCheckBoxCtrl*	mCheckStretchUniform;  	LLCheckBoxCtrl*	mCheckStretchTexture; diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 152360a96e..fbe77047e3 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -56,7 +56,7 @@  #include "llinventorymodelbackgroundfetch.h"  #include "llinventoryobserver.h"  #include "lllandmarklist.h" -#include "lllineeditor.h" +#include "llsearcheditor.h"  #include "llnotificationsutil.h"  #include "llregionhandle.h"  #include "llscrolllistctrl.h" @@ -229,30 +229,20 @@ BOOL LLFloaterWorldMap::postBuild()  	mPanel = getChild<LLPanel>("objects_mapview");  	LLComboBox *avatar_combo = getChild<LLComboBox>("friend combo"); -	if (avatar_combo) -	{ -		avatar_combo->selectFirstItem(); -		avatar_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onAvatarComboPrearrange, this) ); -		avatar_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) ); -	} +	avatar_combo->selectFirstItem(); +	avatar_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onAvatarComboPrearrange, this) ); +	avatar_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) ); -	getChild<LLScrollListCtrl>("location")->setFocusChangedCallback(boost::bind(&LLFloaterWorldMap::onLocationFocusChanged, this, _1)); - -	LLLineEditor *location_editor = getChild<LLLineEditor>("location"); -	if (location_editor) -	{ -		location_editor->setKeystrokeCallback( boost::bind(&LLFloaterWorldMap::onSearchTextEntry, this, _1), NULL ); -	} +	LLSearchEditor *location_editor = getChild<LLSearchEditor>("location"); +	location_editor->setFocusChangedCallback(boost::bind(&LLFloaterWorldMap::onLocationFocusChanged, this, _1)); +	location_editor->setKeystrokeCallback( boost::bind(&LLFloaterWorldMap::onSearchTextEntry, this));  	getChild<LLScrollListCtrl>("search_results")->setDoubleClickCallback( boost::bind(&LLFloaterWorldMap::onClickTeleportBtn, this));  	LLComboBox *landmark_combo = getChild<LLComboBox>( "landmark combo"); -	if (landmark_combo) -	{ -		landmark_combo->selectFirstItem(); -		landmark_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onLandmarkComboPrearrange, this) ); -		landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) ); -	} +	landmark_combo->selectFirstItem(); +	landmark_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onLandmarkComboPrearrange, this) ); +	landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );  	mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f);  	childSetValue("zoom slider", LLWorldMapView::sMapScale); @@ -1003,7 +993,7 @@ void LLFloaterWorldMap::onComboTextEntry()  	LLTracker::clearFocus();  } -void LLFloaterWorldMap::onSearchTextEntry( LLLineEditor* ctrl ) +void LLFloaterWorldMap::onSearchTextEntry( )  {  	onComboTextEntry();  	updateSearchEnabled(); diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h index 52809ff830..de515c689e 100644 --- a/indra/newview/llfloaterworldmap.h +++ b/indra/newview/llfloaterworldmap.h @@ -123,7 +123,7 @@ protected:  	void		    onAvatarComboCommit();  	void			onComboTextEntry( ); -	void			onSearchTextEntry( LLLineEditor* ctrl ); +	void			onSearchTextEntry( );  	void			onClearBtn();  	void			onClickTeleportBtn(); diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 67442dd573..6c2566813f 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -148,10 +148,27 @@ private:  	void onTakeOff()  	{ -		const LLUUID& selected_outfit_id = getSelectedOutfitID(); -		if (selected_outfit_id.notNull()) +		// Take off selected items if there are any +		if (mOutfitList->hasItemSelected()) +		{ +			uuid_vec_t selected_uuids; +			mOutfitList->getSelectedItemsUUIDs(selected_uuids); + +			for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it) +			{ +				if (get_is_item_worn(*it)) +				{ +					LLAppearanceMgr::instance().removeItemFromAvatar(*it); +				} +			} +		} +		else // or take off the whole selected outfit if no items specified.  		{ -			LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id); +			const LLUUID& selected_outfit_id = getSelectedOutfitID(); +			if (selected_outfit_id.notNull()) +			{ +				LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id); +			}  		}  	} @@ -474,7 +491,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)  	}  	// Handle removed tabs. -	for (uuid_vec_t::const_iterator iter=vremoved.begin(); iter != vremoved.end(); iter++) +	for (uuid_vec_t::const_iterator iter=vremoved.begin(); iter != vremoved.end(); ++iter)  	{  		outfits_map_t::iterator outfits_iter = mOutfitsMap.find((*iter));  		if (outfits_iter != mOutfitsMap.end()) @@ -626,7 +643,10 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)  	}  	if (command_name == "take_off")  	{ -		return LLAppearanceMgr::getInstance()->getBaseOutfitUUID() == mSelectedOutfitUUID; +		// Enable "Take Off" only if a worn item or base outfit is selected. +		return ( !hasItemSelected() +				 && LLAppearanceMgr::getInstance()->getBaseOutfitUUID() == mSelectedOutfitUUID ) +				|| hasWornItemSelected();  	}  	return false;  } @@ -638,6 +658,22 @@ void LLOutfitsList::showGearMenu(LLView* spawning_view)  	mGearMenu->show(spawning_view);  } +void LLOutfitsList::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const +{ +	// Collect selected items from all selected lists. +	for (wearables_lists_map_t::const_iterator iter = mSelectedListsMap.begin(); +			iter != mSelectedListsMap.end(); +			++iter) +	{ +		uuid_vec_t uuids; +		(*iter).second->getSelectedUUIDs(uuids); + +		S32 prev_size = selected_uuids.size(); +		selected_uuids.resize(prev_size + uuids.size()); +		std::copy(uuids.begin(), uuids.end(), selected_uuids.begin() + prev_size); +	} +} +  boost::signals2::connection LLOutfitsList::setSelectionChangeCallback(selection_change_callback_t cb)  {  	return mSelectionChangeSignal.connect(cb); @@ -878,7 +914,7 @@ void LLOutfitsList::applyFilterToTab(  	{  		// hide tab if its title doesn't pass filter  		// and it has no visible items -		tab->setVisible(list->wasLasFilterSuccessfull()); +		tab->setVisible(list->hasMatchedItems());  		// remove title highlighting because it might  		// have been previously highlighted by less restrictive filter @@ -894,6 +930,18 @@ void LLOutfitsList::applyFilterToTab(  	}  } +bool LLOutfitsList::hasWornItemSelected() +{ +	uuid_vec_t selected_uuids; +	getSelectedItemsUUIDs(selected_uuids); + +	for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it) +	{ +		if (get_is_item_worn(*it)) return true; +	} +	return false; +} +  void LLOutfitsList::onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id)  {  	LLAccordionCtrlTab* tab = dynamic_cast<LLAccordionCtrlTab*>(ctrl); @@ -912,6 +960,26 @@ void LLOutfitsList::onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const  	}  } +void LLOutfitsList::wearSelectedItems() +{ +	uuid_vec_t selected_uuids; +	getSelectedItemsUUIDs(selected_uuids); + +	if(selected_uuids.empty()) +	{ +		return; +	} + +	uuid_vec_t::const_iterator it; +	// Wear items from all selected lists(if possible- add, else replace) +	for (it = selected_uuids.begin(); it != selected_uuids.end()-1; ++it) +	{ +		LLAppearanceMgr::getInstance()->wearItemOnAvatar(*it, false, false); +	} +	// call update only when wearing last item +	LLAppearanceMgr::getInstance()->wearItemOnAvatar(*it, true, false); +} +  void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)  {  	LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(ctrl); @@ -919,18 +987,7 @@ void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)  	uuid_vec_t selected_uuids; -	// Collect selected items from all selected lists. -	for (wearables_lists_map_t::iterator iter = mSelectedListsMap.begin(); -			iter != mSelectedListsMap.end(); -			++iter) -	{ -		uuid_vec_t uuids; -		(*iter).second->getSelectedUUIDs(uuids); - -		S32 prev_size = selected_uuids.size(); -		selected_uuids.resize(prev_size + uuids.size()); -		std::copy(uuids.begin(), uuids.end(), selected_uuids.begin() + prev_size); -	} +	getSelectedItemsUUIDs(selected_uuids);  	LLWearableItemsList::ContextMenu::instance().show(list, selected_uuids, x, y);  } diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index d207624792..26722f2a96 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -103,8 +103,13 @@ public:  	const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; } +	void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const; +  	boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb); +	// Collects selected items from all selected lists and wears them(if possible- adds, else replaces) +	void wearSelectedItems(); +  	/**  	 * Returns true if there is a selection inside currently selected outfit  	 */ @@ -173,6 +178,11 @@ private:  	 */  	void applyFilterToTab(const LLUUID& category_id, LLAccordionCtrlTab* tab, const std::string& filter_substring); +	/** +	 * Returns true if there are any worn items among currently selected, otherwise false. +	 */ +	bool hasWornItemSelected(); +  	void onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id);  	void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y);  	void onCOFChanged(); diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 0b31ffc9a0..534bb6e3fc 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -513,12 +513,6 @@ BOOL LLPanelAvatarProfile::postBuild()  	mProfileMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_profile_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); -	LLTextureCtrl* pic = getChild<LLTextureCtrl>("2nd_life_pic"); -	pic->setFallbackImageName("default_profile_picture.j2c"); - -	pic = getChild<LLTextureCtrl>("real_world_pic"); -	pic->setFallbackImageName("default_profile_picture.j2c"); -  	LLVoiceClient::getInstance()->addObserver((LLVoiceClientStatusObserver*)this);  	resetControls(); @@ -843,9 +837,6 @@ BOOL LLPanelMyProfile::postBuild()  {  	LLPanelAvatarProfile::postBuild(); -	mStatusCombobox = getChild<LLComboBox>("status_combo"); - -	childSetCommitCallback("status_combo", boost::bind(&LLPanelMyProfile::onStatusChanged, this), NULL);  	childSetCommitCallback("status_me_message_text", boost::bind(&LLPanelMyProfile::onStatusMessageChanged, this), NULL);  	resetControls(); @@ -865,30 +856,9 @@ void LLPanelMyProfile::processProfileProperties(const LLAvatarData* avatar_data)  	fillPartnerData(avatar_data); -	fillStatusData(avatar_data); -  	fillAccountStatus(avatar_data);  } -void LLPanelMyProfile::fillStatusData(const LLAvatarData* avatar_data) -{ -	std::string status; -	if (gAgent.getAFK()) -	{ -		status = "away"; -	} -	else if (gAgent.getBusy()) -	{ -		status = "busy"; -	} -	else -	{ -		status = "online"; -	} - -	mStatusCombobox->setValue(status); -} -  void LLPanelMyProfile::resetControls()  {  	childSetVisible("status_panel", false); @@ -899,27 +869,6 @@ void LLPanelMyProfile::resetControls()  	childSetVisible("profile_me_buttons_panel", true);  } -void LLPanelMyProfile::onStatusChanged() -{ -	LLSD::String status = mStatusCombobox->getValue().asString(); - -	if ("online" == status) -	{ -		gAgent.clearAFK(); -		gAgent.clearBusy(); -	} -	else if ("away" == status) -	{ -		gAgent.clearBusy(); -		gAgent.setAFK(); -	} -	else if ("busy" == status) -	{ -		gAgent.clearAFK(); -		gAgent.setBusy(); -		LLNotificationsUtil::add("BusyModeSet"); -	} -}  void LLPanelMyProfile::onStatusMessageChanged()  { diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index bb8df2ff9c..ac2765df28 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -240,21 +240,10 @@ protected:  	/*virtual*/ void processProfileProperties(const LLAvatarData* avatar_data); -	/** -	 * Fills Avatar status data. -	 */ -	virtual void fillStatusData(const LLAvatarData* avatar_data); -  	/*virtual*/ void resetControls();  protected: - -	void onStatusChanged();  	void onStatusMessageChanged(); - -private: - -	LLComboBox* mStatusCombobox;  };  /** diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index ae54909945..0ff3bb30dc 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -63,6 +63,7 @@  #include "llcommandhandler.h"  #include "lltextutil.h" +#include "llappearancemgr.h"  // register panel with appropriate XML  static LLRegisterPanelClassWrapper<LLPanelEditWearable> t_edit_wearable("panel_edit_wearable"); @@ -382,6 +383,31 @@ LLEditWearableDictionary::PickerControlEntry::PickerControlEntry(ETextureIndex t  {  } +/** + * Class to prevent hack in LLButton's constructor and use paddings declared in xml. + */ +class LLLabledBackButton : public LLButton +{ +public: +	struct Params : public LLInitParam::Block<Params, LLButton::Params> +	{ +		Params() {} +	}; +protected: +	friend class LLUICtrlFactory; +	LLLabledBackButton(const Params&); +}; + +static LLDefaultChildRegistry::Register<LLLabledBackButton> labeled_back_btn("labeled_back_button"); + +LLLabledBackButton::LLLabledBackButton(const Params& params) +: LLButton(params) +{ +	// override hack in LLButton's constructor to use paddings have been set in xml +	setLeftHPad(params.pad_left); +	setRightHPad(params.pad_right); +} +  // Helper functions.  static const texture_vec_t null_texture_vec; @@ -649,6 +675,8 @@ BOOL LLPanelEditWearable::postBuild()  	mBtnRevert->setClickedCallback(boost::bind(&LLPanelEditWearable::onRevertButtonClicked, this));  	mBtnBack = getChild<LLButton>("back_btn"); +	mBackBtnLabel = mBtnBack->getLabelUnselected(); +	mBtnBack->setLabel(LLStringUtil::null);  	// handled at appearance panel level?  	//mBtnBack->setClickedCallback(boost::bind(&LLPanelEditWearable::onBackButtonClicked, this)); @@ -959,6 +987,7 @@ void LLPanelEditWearable::saveChanges()  	if (mWearablePtr->getName().compare(mNameEditor->getText()) != 0)  	{  		// the name of the wearable has changed, re-save wearable with new name +		LLAppearanceMgr::instance().removeCOFItemLinks(mWearablePtr->getItemID(),false);  		gAgentWearables.saveWearableAs(mWearablePtr->getType(), index, mNameEditor->getText(), FALSE);  	}  	else @@ -1016,6 +1045,7 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show)  	if (show)  	{  		mPanelTitle->setText(title); +		mPanelTitle->setToolTip(title);  		mDescTitle->setText(description_title);  		// set name @@ -1302,8 +1332,8 @@ void LLPanelEditWearable::getSortedParams(value_map_t &sorted_params, const std:  	{  		LLViewerVisualParam *param = (LLViewerVisualParam*) *iter; -		if (param->getID() == -1 -			|| param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE  +		if (param->getID() == -1  +			|| !param->isTweakable()  			|| param->getEditGroup() != edit_group   			|| !(param->getSex() & avatar_sex))  		{ @@ -1357,6 +1387,28 @@ void LLPanelEditWearable::updateVerbs()  		gSavedSettings.setU32("AvatarSex", (gAgentAvatarp->getSex() == SEX_MALE) );  	} +	// update back button and title according to dirty state. +	static BOOL was_dirty = FALSE; +	if (was_dirty != is_dirty) // to avoid redundant changes because this method is called from draw +	{ +		static S32 label_width = mBtnBack->getFont()->getWidth(mBackBtnLabel); +		const std::string& label = is_dirty ? mBackBtnLabel : LLStringUtil::null; +		const S32 delta_width = is_dirty ? label_width : -label_width; + +		mBtnBack->setLabel(label); + +		// update rect according to label width +		LLRect rect = mBtnBack->getRect(); +		rect.mRight += delta_width; +		mBtnBack->setShape(rect); + +		// update title rect according to back button width +		rect = mPanelTitle->getRect(); +		rect.mLeft += delta_width; +		mPanelTitle->setShape(rect); + +		was_dirty = is_dirty; +	}  }  void LLPanelEditWearable::configureAlphaCheckbox(LLVOAvatarDefines::ETextureIndex te, const std::string& name) diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h index 61441435cd..bfce2ae56e 100644 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -120,6 +120,7 @@ private:  	// these are constant no matter what wearable we're editing  	LLButton *mBtnRevert;  	LLButton *mBtnBack; +	std::string mBackBtnLabel;  	LLTextBox *mPanelTitle;  	LLTextBox *mDescTitle; diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index b50c6442e1..7d5be39074 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -790,7 +790,6 @@ void LLPanelFace::getState()  		if(texture_ctrl)  		{  			texture_ctrl->setImageAssetID( LLUUID::null ); -			texture_ctrl->setFallbackImageName( "locked_image.j2c" );  			texture_ctrl->setEnabled( FALSE );  // this is a LLUICtrl, but we don't want it to have keyboard focus so we add it as a child, not a ctrl.  // 			texture_ctrl->setValid(FALSE);  		} diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp index 6411cd802d..7f4609b83e 100644 --- a/indra/newview/llpanelnearbymedia.cpp +++ b/indra/newview/llpanelnearbymedia.cpp @@ -224,8 +224,8 @@ void LLPanelNearByMedia::reshape(S32 width, S32 height, BOOL called_from_parent)  {  	LLPanel::reshape(width, height, called_from_parent); -	LLButton* more_less_btn = getChild<LLButton>("more_less_btn"); -	if (more_less_btn->getValue().asBoolean()) +	LLButton* more_btn = findChild<LLButton>("more_btn"); +	if (more_btn && more_btn->getValue().asBoolean())  	{  		mMoreRect = getRect();  	} diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 30221da12a..a1b3114bb4 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -172,7 +172,6 @@ BOOL	LLPanelObject::postBuild()  	//--------------------------------------------------------  	// material type popup -	mLabelMaterial = getChild<LLTextBox>("label material");  	mComboMaterial = getChild<LLComboBox>("material");  	childSetCommitCallback("material",onCommitMaterial,this);  	mComboMaterial->removeall(); @@ -189,7 +188,6 @@ BOOL	LLPanelObject::postBuild()  	mComboMaterialItemCount = mComboMaterial->getItemCount();  	// Base Type -	mLabelBaseType = getChild<LLTextBox>("label basetype");  	mComboBaseType = getChild<LLComboBox>("comboBaseType");  	childSetCommitCallback("comboBaseType",onCommitParametric,this); @@ -548,7 +546,6 @@ void LLPanelObject::getState( )  	if (editable && single_volume && material_same)  	{  		mComboMaterial->setEnabled( TRUE ); -		mLabelMaterial->setEnabled( TRUE );  		if (material_code == LL_MCODE_LIGHT)  		{  			if (mComboMaterial->getItemCount() == mComboMaterialItemCount) @@ -570,7 +567,6 @@ void LLPanelObject::getState( )  	else  	{  		mComboMaterial->setEnabled( FALSE ); -		mLabelMaterial->setEnabled( FALSE );	  	}  	//---------------------------------------------------------------------------- @@ -979,7 +975,6 @@ void LLPanelObject::getState( )  	}  	// Update field enablement -	mLabelBaseType	->setEnabled( enabled );  	mComboBaseType	->setEnabled( enabled );  	mLabelCut		->setEnabled( enabled ); @@ -1910,12 +1905,10 @@ void LLPanelObject::clearCtrls()  	mCheckCastShadows->setEnabled( FALSE );  #endif  	mComboMaterial	->setEnabled( FALSE ); -	mLabelMaterial	->setEnabled( FALSE );  	// Disable text labels  	mLabelPosition	->setEnabled( FALSE );  	mLabelSize		->setEnabled( FALSE );  	mLabelRotation	->setEnabled( FALSE ); -	mLabelBaseType	->setEnabled( FALSE );  	mLabelCut		->setEnabled( FALSE );  	mLabelHollow	->setEnabled( FALSE );  	mLabelHoleType	->setEnabled( FALSE ); diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h index 58d9fe9b76..b4e1eee8fb 100644 --- a/indra/newview/llpanelobject.h +++ b/indra/newview/llpanelobject.h @@ -101,11 +101,9 @@ protected:  protected:  	S32				mComboMaterialItemCount; -	LLTextBox*		mLabelMaterial;  	LLComboBox*		mComboMaterial;  	// Per-object options -	LLTextBox*		mLabelBaseType;  	LLComboBox*		mComboBaseType;  	LLTextBox*		mLabelCut; diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index ea7d233333..1544717873 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -387,6 +387,7 @@ BOOL LLPanelOutfitEdit::postBuild()  	mWearableItemsList = getChild<LLInventoryItemsList>("list_view");  	mWearableItemsList->setCommitOnSelectionChange(true);  	mWearableItemsList->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this)); +	mWearableItemsList->setDoubleClickCallback(boost::bind(&LLPanelOutfitEdit::onPlusBtnClicked, this));  	mSaveComboBtn.reset(new LLSaveOutfitComboBtn(this));  	return TRUE; @@ -404,6 +405,10 @@ void LLPanelOutfitEdit::onOpen(const LLSD& key)  		displayCurrentOutfit();  		mInitialized = true;  	} + +	showAddWearablesPanel(false); +	mWearableItemsList->resetSelection(); +	mInventoryItemsPanel->clearSelection();  }  void LLPanelOutfitEdit::moveWearable(bool closer_to_body) @@ -564,7 +569,8 @@ void LLPanelOutfitEdit::onSearchEdit(const std::string& string)  void LLPanelOutfitEdit::onPlusBtnClicked(void)  { -	LLUUID selected_id = getSelectedItemUUID(); +	LLUUID selected_id; +	getCurrentItemUUID(selected_id);  	if (selected_id.isNull()) return; @@ -651,30 +657,31 @@ void LLPanelOutfitEdit::onEditWearableClicked(void)  void LLPanelOutfitEdit::onInventorySelectionChange()  { -	LLUUID item_uuid = getSelectedItemUUID(); -	if (item_uuid.isNull()) +	uuid_vec_t selected_items; +	getSelectedItemsUUID(selected_items); +	if (selected_items.empty())  	{  		return;  	} +	uuid_vec_t::iterator worn_item = std::find_if(selected_items.begin(), selected_items.end(), boost::bind(&get_is_item_worn, _1)); +	bool can_add = ( worn_item == selected_items.end() ); -	LLViewerInventoryItem* item(gInventory.getItem(item_uuid)); -	if (!item) -	{ -		return; -	} +	mPlusBtn->setEnabled(can_add); + +	LLViewerInventoryItem* first_item(gInventory.getItem(selected_items.front())); -	switch (item->getType()) +	if (can_add &&  +		first_item && +		selected_items.size() == 1 &&  +		first_item->getType() == LLAssetType::AT_BODYPART)  	{ -	case LLAssetType::AT_BODYPART:  		mPlusBtn->setToolTip(getString("replace_body_part")); -		break; -	case LLAssetType::AT_CLOTHING: -	case LLAssetType::AT_OBJECT: +	} +	else +	{  		mPlusBtn->setToolTip(LLStringUtil::null); -	default: -		break;  	} -	 +  	/* Removing add to look inline button (not part of mvp for viewer 2)  	LLRect btn_rect(current_item->getLocalRect().mRight - 50,  					current_item->getLocalRect().mTop, @@ -931,16 +938,15 @@ void LLPanelOutfitEdit::onOutfitChanging(bool started)  	indicator->setVisible(started);  } -LLUUID LLPanelOutfitEdit::getSelectedItemUUID() +void LLPanelOutfitEdit::getCurrentItemUUID(LLUUID& selected_id)  { -	LLUUID selected_id;  	if (mInventoryItemsPanel->getVisible())  	{  		LLFolderViewItem* curr_item = mInventoryItemsPanel->getRootFolder()->getCurSelectedItem(); -		if (!curr_item) return selected_id; +		if (!curr_item) return;  		LLFolderViewEventListener* listenerp  = curr_item->getListener(); -		if (!listenerp) return selected_id; +		if (!listenerp) return;  		selected_id = listenerp->getUUID();  	} @@ -948,8 +954,27 @@ LLUUID LLPanelOutfitEdit::getSelectedItemUUID()  	{  		selected_id = mWearableItemsList->getSelectedUUID();  	} +} + + +void LLPanelOutfitEdit::getSelectedItemsUUID(uuid_vec_t& uuid_list) +{ +	if (mInventoryItemsPanel->getVisible()) +	{ +		std::set<LLUUID> item_set = mInventoryItemsPanel->getRootFolder()->getSelectionList(); + +		std::for_each(item_set.begin(), item_set.end(), boost::bind( &uuid_vec_t::push_back, &uuid_list, _1)); +	} +	else if (mWearablesListViewPanel->getVisible()) +	{ +		std::vector<LLSD> item_set; +		mWearableItemsList->getSelectedValues(item_set); + +		std::for_each(item_set.begin(), item_set.end(), boost::bind( &uuid_vec_t::push_back, &uuid_list, boost::bind(&LLSD::asUUID, _1 ))); + +	} -	return selected_id; +//	return selected_id;  } diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index aa5d00903a..de1bf87fb3 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -192,7 +192,8 @@ private:  	void onAddMoreButtonClicked();  	void showFilteredWearablesListView(LLWearableType::EType type);  	void onOutfitChanging(bool started); -	LLUUID getSelectedItemUUID(); +	void getSelectedItemsUUID(uuid_vec_t& uuid_list); +	void getCurrentItemUUID(LLUUID& selected_id);  	LLTextBox*			mCurrentOutfitName;  	LLTextBox*			mStatus; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 2f1cad8a75..076e6485a8 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -169,7 +169,14 @@ void LLPanelOutfitsInventory::onSearchEdit(const std::string& string)  void LLPanelOutfitsInventory::onWearButtonClick()  { -	mMyOutfitsPanel->performAction("replaceoutfit"); +	if (mMyOutfitsPanel->hasItemSelected()) +	{ +		mMyOutfitsPanel->wearSelectedItems(); +	} +	else +	{ +		mMyOutfitsPanel->performAction("replaceoutfit"); +	}  }  bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD& response) diff --git a/indra/newview/llpanelplace.cpp b/indra/newview/llpanelplace.cpp index 6985b73200..1446088c4f 100644 --- a/indra/newview/llpanelplace.cpp +++ b/indra/newview/llpanelplace.cpp @@ -342,7 +342,6 @@ void LLPanelPlace::displayParcelInfo(const LLVector3& pos_region,  		mDescEditor->setText(getString("server_update_text"));  	}  	mSnapshotCtrl->setImageAssetID(LLUUID::null); -	mSnapshotCtrl->setFallbackImageName("default_land_picture.j2c");  }  // static diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index f6133d4446..db305b25fa 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -110,7 +110,6 @@ void LLPanelPlaceInfo::resetLocation()  	mDescEditor->setText(loading);  	mSnapshotCtrl->setImageAssetID(LLUUID::null); -	mSnapshotCtrl->setFallbackImageName("default_land_picture.j2c");  }  //virtual diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp index ae52bd3703..7d70a8a891 100644 --- a/indra/newview/llpanelvolumepulldown.cpp +++ b/indra/newview/llpanelvolumepulldown.cpp @@ -44,7 +44,7 @@  #include "lltabcontainer.h"  #include "llfloaterreg.h"  #include "llfloaterpreference.h" -#include "llslider.h" +#include "llsliderctrl.h"  /* static */ const F32 LLPanelVolumePulldown::sAutoCloseFadeStartTimeSec = 4.0f;  /* static */ const F32 LLPanelVolumePulldown::sAutoCloseTotalTimeSec = 5.0f; @@ -66,7 +66,7 @@ LLPanelVolumePulldown::LLPanelVolumePulldown()  BOOL LLPanelVolumePulldown::postBuild()  {  	// set the initial volume-slider's position to reflect reality -	LLSlider* volslider =  getChild<LLSlider>( "mastervolume" ); +	LLSliderCtrl* volslider =  getChild<LLSliderCtrl>( "mastervolume" );  	volslider->setValue(gSavedSettings.getF32("AudioLevelMaster"));  	return LLPanel::postBuild(); diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 63b6fe5ef0..de59af49da 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -71,8 +71,8 @@ BOOL LLSidepanelInventory::postBuild()  		mShareBtn = mInventoryPanel->getChild<LLButton>("share_btn");  		mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this)); -		LLButton* shop_btn = mInventoryPanel->getChild<LLButton>("shop_btn"); -		shop_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShopButtonClicked, this)); +		mShopBtn = mInventoryPanel->getChild<LLButton>("shop_btn"); +		mShopBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShopButtonClicked, this));  		mWearBtn = mInventoryPanel->getChild<LLButton>("wear_btn");  		mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this)); @@ -265,6 +265,7 @@ void LLSidepanelInventory::updateVerbs()  	mPlayBtn->setEnabled(FALSE);   	mTeleportBtn->setVisible(FALSE);   	mTeleportBtn->setEnabled(FALSE); + 	mShopBtn->setVisible(TRUE);  	mShareBtn->setEnabled(canShare()); @@ -283,16 +284,19 @@ void LLSidepanelInventory::updateVerbs()  		case LLInventoryType::IT_ATTACHMENT:  			mWearBtn->setVisible(TRUE);  			mWearBtn->setEnabled(TRUE); +		 	mShopBtn->setVisible(FALSE);  			break;  		case LLInventoryType::IT_SOUND:  		case LLInventoryType::IT_GESTURE:  		case LLInventoryType::IT_ANIMATION:  			mPlayBtn->setVisible(TRUE);  			mPlayBtn->setEnabled(TRUE); +		 	mShopBtn->setVisible(FALSE);  			break;  		case LLInventoryType::IT_LANDMARK:  			mTeleportBtn->setVisible(TRUE);  			mTeleportBtn->setEnabled(TRUE); +		 	mShopBtn->setVisible(FALSE);  			break;  		default:  			break; diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h index 13275d14c0..951fdd630c 100644 --- a/indra/newview/llsidepanelinventory.h +++ b/indra/newview/llsidepanelinventory.h @@ -94,6 +94,7 @@ private:  	LLButton*					mPlayBtn;  	LLButton*					mTeleportBtn;  	LLButton*					mOverflowBtn; +	LLButton*					mShopBtn;  }; diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 0ec351965a..6ccd89dddb 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -131,7 +131,6 @@ BOOL LLSidepanelItemInfo::postBuild()  	getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));  	// Mark for sale or not, and sale info  	getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this)); -	getChild<LLUICtrl>("RadioSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleType, this));  	// "Price" label for edit  	getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));  	refresh(); @@ -189,7 +188,6 @@ void LLSidepanelItemInfo::refresh()  			"CheckNextOwnerCopy",  			"CheckNextOwnerTransfer",  			"CheckPurchase", -			"RadioSaleType",  			"Edit Cost"  		}; @@ -364,7 +362,6 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  		"CheckNextOwnerTransfer",  		"CheckPurchase",  		"SaleLabel", -		"RadioSaleType",  		"combobox sale copy",  		"Edit Cost",  		"TextPrice" @@ -559,7 +556,6 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  		childSetEnabled("CheckNextOwnerCopy",(base_mask & PERM_COPY) && !cannot_restrict_permissions);  		childSetEnabled("CheckNextOwnerTransfer",(next_owner_mask & PERM_COPY) && !cannot_restrict_permissions); -		childSetEnabled("RadioSaleType",is_complete && is_for_sale);  		childSetEnabled("TextPrice",is_complete && is_for_sale);  		childSetEnabled("Edit Cost",is_complete && is_for_sale);  	} @@ -573,7 +569,6 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  		childSetEnabled("CheckNextOwnerCopy",FALSE);  		childSetEnabled("CheckNextOwnerTransfer",FALSE); -		childSetEnabled("RadioSaleType",FALSE);  		childSetEnabled("TextPrice",FALSE);  		childSetEnabled("Edit Cost",FALSE);  	} @@ -586,17 +581,14 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  	childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY)));  	childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER))); -	LLRadioGroup* radioSaleType = getChild<LLRadioGroup>("RadioSaleType");  	if (is_for_sale)  	{ -		radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1);  		S32 numerical_price;  		numerical_price = sale_info.getSalePrice();  		childSetText("Edit Cost",llformat("%d",numerical_price));  	}  	else  	{ -		radioSaleType->setSelectedIndex(-1);  		childSetText("Edit Cost",llformat("%d",0));  	}  } diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 8c8fbdc88c..c02559b209 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -121,7 +121,6 @@ const U32 LLStatusBar::MAX_DATE_STRING_LENGTH = 2000;  LLStatusBar::LLStatusBar(const LLRect& rect)  :	LLPanel(), -	mTextHealth(NULL),  	mTextTime(NULL),  	mSGBandwidth(NULL),  	mSGPacketLoss(NULL), @@ -181,11 +180,8 @@ BOOL LLStatusBar::postBuild()  	// build date necessary data (must do after panel built)  	setupDate(); -	mTextHealth = getChild<LLTextBox>("HealthText" );  	mTextTime = getChild<LLTextBox>("TimeText" ); -	getChild<LLUICtrl>("buycurrency")->setCommitCallback(  -		boost::bind(&LLStatusBar::onClickBuyCurrency, this));  	getChild<LLUICtrl>("buyL")->setCommitCallback(  		boost::bind(&LLStatusBar::onClickBuyCurrency, this)); @@ -328,24 +324,12 @@ void LLStatusBar::refresh()  			BOOL flash = S32(mHealthTimer->getElapsedSeconds() * ICON_FLASH_FREQUENCY) & 1;  			childSetVisible("health", flash);  		} -		mTextHealth->setVisible(TRUE);  		// Health  		childGetRect( "health", buttonRect );  		r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());  		childSetRect("health", r);  		x += buttonRect.getWidth(); - -		const S32 health_width = S32( LLFontGL::getFontSansSerifSmall()->getWidth(std::string("100%")) ); -		r.set(x, y+TEXT_HEIGHT - 2, x+health_width, y); -		mTextHealth->setRect(r); -		x += health_width; -	} -	else -	{ -		// invisible if region doesn't allow damage -		childSetVisible("health", false); -		mTextHealth->setVisible(FALSE);  	}  	mSGBandwidth->setVisible(net_stats_visible); @@ -444,8 +428,6 @@ void LLStatusBar::sendMoneyBalanceRequest()  void LLStatusBar::setHealth(S32 health)  {  	//llinfos << "Setting health to: " << buffer << llendl; -	mTextHealth->setText(llformat("%d%%", health)); -  	if( mHealth > health )  	{  		if (mHealth > (health + gSavedSettings.getF32("UISndHealthReductionThreshold"))) diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index e5240fcc3e..32f29e9e1c 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -105,7 +105,6 @@ private:  	static void onClickMediaToggle(void* data);  private: -	LLTextBox	*mTextHealth;  	LLTextBox	*mTextTime;  	LLStatGraph *mSGBandwidth; diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index a1ab051021..f3530b69db 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -100,7 +100,7 @@ public:  		PermissionMask immediate_filter_perm_mask,  		PermissionMask non_immediate_filter_perm_mask,  		BOOL can_apply_immediately, -		const std::string& fallback_image_name); +		LLUIImagePtr fallback_image_name);  	virtual ~LLFloaterTexturePicker(); @@ -153,7 +153,7 @@ protected:  	LLTextureCtrl*		mOwner;  	LLUUID				mImageAssetID; // Currently selected texture -	std::string			mFallbackImageName; // What to show if currently selected texture is null. +	LLUIImagePtr		mFallbackImage; // What to show if currently selected texture is null.  	LLUUID				mWhiteImageAssetID;  	LLUUID				mSpecialCurrentImageAssetID;  // Used when the asset id has no corresponding texture in the user's inventory. @@ -183,11 +183,11 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(  	PermissionMask immediate_filter_perm_mask,  	PermissionMask non_immediate_filter_perm_mask,  	BOOL can_apply_immediately, -	const std::string& fallback_image_name) +	LLUIImagePtr fallback_image)  :	LLFloater(LLSD()),  	mOwner( owner ),  	mImageAssetID( owner->getImageAssetID() ), -	mFallbackImageName( fallback_image_name ), +	mFallbackImage( fallback_image ),  	mWhiteImageAssetID( gSavedSettings.getString( "UIImgWhiteUUID" ) ),  	mOriginalImageAssetID(owner->getImageAssetID()),  	mLabel(label), @@ -533,11 +533,6 @@ void LLFloaterTexturePicker::draw()  			mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES);  			mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);  		} -		else if (!mFallbackImageName.empty()) -		{ -			mTexturep = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName); -			mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW); -		}  		if (mTentativeLabel)  		{ @@ -578,13 +573,10 @@ void LLFloaterTexturePicker::draw()  			// Pump the priority  			mTexturep->addTextureStats( (F32)(interior.getWidth() * interior.getHeight()) ); - -			// Draw Tentative Label over the image -			if( mOwner->getTentative() && !mViewModel->isDirty() ) -			{ -				mTentativeLabel->setVisible( TRUE ); -				drawChild(mTentativeLabel); -			} +		} +		else if (!mFallbackImage.isNull()) +		{ +			mFallbackImage->draw(interior);  		}  		else  		{ @@ -593,6 +585,13 @@ void LLFloaterTexturePicker::draw()  			// Draw X  			gl_draw_x(interior, LLColor4::black );  		} + +		// Draw Tentative Label over the image +		if( mOwner->getTentative() && !mViewModel->isDirty() ) +		{ +			mTentativeLabel->setVisible( TRUE ); +			drawChild(mTentativeLabel); +		}  	}  } @@ -875,7 +874,8 @@ LLTextureCtrl::LLTextureCtrl(const LLTextureCtrl::Params& p)  	mShowLoadingPlaceholder( TRUE ),  	mImageAssetID(p.image_id),  	mDefaultImageAssetID(p.default_image_id), -	mDefaultImageName(p.default_image_name) +	mDefaultImageName(p.default_image_name), +	mFallbackImage(p.fallback_image)  {  	setAllowNoTexture(p.allow_no_texture);  	setCanApplyImmediately(p.can_apply_immediately); @@ -1019,7 +1019,7 @@ void LLTextureCtrl::showPicker(BOOL take_focus)  			mImmediateFilterPermMask,  			mNonImmediateFilterPermMask,  			mCanApplyImmediately, -			mFallbackImageName); +			mFallbackImage);  		mFloaterHandle = floaterp->getHandle(); @@ -1223,12 +1223,6 @@ void LLTextureCtrl::draw()  		mTexturep = texture;  	} -	else if (!mFallbackImageName.empty()) -	{ -		// Show fallback image. -		mTexturep = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName); -		mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW); -	}  	else//mImageAssetID == LLUUID::null  	{  		mTexturep = NULL; @@ -1252,6 +1246,10 @@ void LLTextureCtrl::draw()  		gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep);  		mTexturep->addTextureStats( (F32)(interior.getWidth() * interior.getHeight()) );  	} +	else if (!mFallbackImage.isNull()) +	{ +		mFallbackImage->draw(interior); +	}  	else  	{  		gl_rect_2d( interior, LLColor4::grey, TRUE ); diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h index bcd0a083f2..b5dfa1b948 100644 --- a/indra/newview/lltexturectrl.h +++ b/indra/newview/lltexturectrl.h @@ -78,6 +78,7 @@ public:  														// only on DnD or when OK is pressed in the picker  		Optional<S32>			label_width;  		Optional<LLUIColor>		border_color; +		Optional<LLUIImage*>	fallback_image;  		Optional<LLTextBox::Params>	multiselect_text,  									caption_text; @@ -93,6 +94,7 @@ public:  			no_commit_on_selection("no_commit_on_selection", false),  		    label_width("label_width", -1),  			border_color("border_color"), +			fallback_image("fallback_image"),  			multiselect_text("multiselect_text"),  			caption_text("caption_text"),  			border("border") @@ -152,9 +154,6 @@ public:  	const std::string&	getDefaultImageName() const					{ return mDefaultImageName; } -	void			setFallbackImageName( const std::string& name ) { mFallbackImageName = name; }			 -	const std::string& 	getFallbackImageName() const { return mFallbackImageName; }	    -  	void			setCaption(const std::string& caption);  	void			setCanApplyImmediately(BOOL b); @@ -192,32 +191,32 @@ private:  	BOOL doDrop(LLInventoryItem* item);  private: -	drag_n_drop_callback	 mDragCallback; -	drag_n_drop_callback	 mDropCallback; -	commit_callback_t		 mOnCancelCallback; -	commit_callback_t		 mOnSelectCallback; +	drag_n_drop_callback	 	mDragCallback; +	drag_n_drop_callback	 	mDropCallback; +	commit_callback_t		 	mOnCancelCallback; +	commit_callback_t		 	mOnSelectCallback;  	LLPointer<LLViewerFetchedTexture> mTexturep; -	LLUIColor				 mBorderColor; -	LLUUID					 mImageItemID; -	LLUUID					 mImageAssetID; -	LLUUID					 mDefaultImageAssetID; -	std::string				 mFallbackImageName; -	std::string				 mDefaultImageName; -	LLHandle<LLFloater>			 mFloaterHandle; -	LLTextBox*				 mTentativeLabel; -	LLTextBox*				 mCaption; -	std::string				 mLabel; -	BOOL					 mAllowNoTexture; // If true, the user can select "none" as an option -	PermissionMask			 mImmediateFilterPermMask; -	PermissionMask			 mNonImmediateFilterPermMask; -	BOOL					 mCanApplyImmediately; -	BOOL					 mCommitOnSelection; -	BOOL					 mNeedsRawImageData; -	LLViewBorder*			 mBorder; -	BOOL					 mValid; -	BOOL					 mShowLoadingPlaceholder; -	std::string				 mLoadingPlaceholderString; -	S32						 mLabelWidth; +	LLUIColor				 	mBorderColor; +	LLUUID					 	mImageItemID; +	LLUUID					 	mImageAssetID; +	LLUUID					 	mDefaultImageAssetID; +	LLUIImagePtr				mFallbackImage; +	std::string					mDefaultImageName; +	LLHandle<LLFloater>			mFloaterHandle; +	LLTextBox*				 	mTentativeLabel; +	LLTextBox*				 	mCaption; +	std::string				 	mLabel; +	BOOL					 	mAllowNoTexture; // If true, the user can select "none" as an option +	PermissionMask			 	mImmediateFilterPermMask; +	PermissionMask			 	mNonImmediateFilterPermMask; +	BOOL					 	mCanApplyImmediately; +	BOOL					 	mCommitOnSelection; +	BOOL					 	mNeedsRawImageData; +	LLViewBorder*			 	mBorder; +	BOOL					 	mValid; +	BOOL					 	mShowLoadingPlaceholder; +	std::string				 	mLoadingPlaceholderString; +	S32						 	mLabelWidth;  };  // XUI HACK: When floaters converted, switch this file to lltexturepicker.h/cpp diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 3dce4ce0bc..316588c982 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2076,7 +2076,8 @@ void LLVOAvatar::computeBodySize()  				 	ankle.mV[VZ] * knee_scale.mV[VZ] -  				 	foot.mV[VZ] * ankle_scale.mV[VZ]; -	mBodySize.mV[VZ] = mPelvisToFoot + +	LLVector3 new_body_size; +	new_body_size.mV[VZ] = mPelvisToFoot +  					   // the sqrt(2) correction below is an approximate  					   // correction to get to the top of the head  					   F_SQRT2 * (skull.mV[VZ] * head_scale.mV[VZ]) +  @@ -2086,8 +2087,17 @@ void LLVOAvatar::computeBodySize()  					   torso.mV[VZ] * pelvis_scale.mV[VZ];   	// TODO -- measure the real depth and width -	mBodySize.mV[VX] = DEFAULT_AGENT_DEPTH; -	mBodySize.mV[VY] = DEFAULT_AGENT_WIDTH; +	new_body_size.mV[VX] = DEFAULT_AGENT_DEPTH; +	new_body_size.mV[VY] = DEFAULT_AGENT_WIDTH; + +	if (new_body_size != mBodySize) +	{ +		mBodySize = new_body_size; +		if (isSelf()) +		{	// notify simulator of change in size +			gAgent.sendAgentSetAppearance(); +		} +	}  /* debug spam  	std::cout << "skull = " << skull << std::endl;				// adebug @@ -2528,7 +2538,7 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()  				 param;  				 param = getNextVisualParam())  			{ -				if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +				if (param->isTweakable())  				{  					param->stopAnimating(FALSE);  				} @@ -2551,7 +2561,7 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()  					 param;  					 param = getNextVisualParam())  				{ -					if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +					if (param->isTweakable())  					{  						param->animate(morph_amt, FALSE);  					} @@ -6703,7 +6713,7 @@ bool LLVOAvatar::visualParamWeightsAreDefault()  	     param;  	     param = getNextVisualParam())  	{ -		if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) +		if (param->isTweakable())  		{  			LLViewerVisualParam* vparam = dynamic_cast<LLViewerVisualParam*>(param);  			llassert(vparam); @@ -6813,7 +6823,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  		{  			for( S32 i = 0; i < num_blocks; i++ )  			{ -				while( param && (param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE) ) +				while( param && (param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE) ) // should not be any of group VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT  				{  					param = getNextVisualParam();  				} @@ -6846,7 +6856,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  			}  		} -		const S32 expected_tweakable_count = getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TWEAKABLE); +		const S32 expected_tweakable_count = getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TWEAKABLE); // don't worry about VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT  		if (num_blocks != expected_tweakable_count)  		{  			llinfos << "Number of params in AvatarAppearance msg (" << num_blocks << ") does not match number of tweakable params in avatar xml file (" << expected_tweakable_count << ").  Processing what we can.  object: " << getID() << llendl; @@ -7133,7 +7143,7 @@ void LLVOAvatar::dumpArchetypeXML( void* )  		{  			LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;  			if( (viewer_param->getWearableType() == type) &&  -				(viewer_param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) ) +				(viewer_param->isTweakable() ) )  			{  				apr_file_printf(file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/>\n",  								viewer_param->getID(), viewer_param->getName().c_str(), viewer_param->getWeight()); diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index 46c736c853..2eb233ddd9 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -483,7 +483,7 @@ BOOL LLWearable::isOldVersion() const  		param;  		param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam() )  	{ -		if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) +		if( (param->getWearableType() == mType) && (param->isTweakable() ) )  		{  			param_count++;  			if( !is_in_map(mVisualParamIndexMap, param->getID() ) ) @@ -534,7 +534,7 @@ BOOL LLWearable::isDirty() const  		param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam() )  	{  		if( (param->getWearableType() == mType)  -			&& (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE )  +			&& (param->isTweakable() )   			&& !param->getCrossWearable())  		{  			F32 current_weight = getVisualParamWeight(param->getID()); @@ -588,7 +588,7 @@ void LLWearable::setParamsToDefaults()  	for( LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam() )  	{ -		if( (((LLViewerVisualParam*)param)->getWearableType() == mType ) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) +		if( (((LLViewerVisualParam*)param)->getWearableType() == mType ) && (param->isTweakable() ) )  		{  			setVisualParamWeight(param->getID(),param->getDefaultWeight(), FALSE);  		} @@ -692,7 +692,7 @@ void LLWearable::removeFromAvatar( LLWearableType::EType type, BOOL upload_bake  	// Pull params  	for( LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam() )  	{ -		if( (((LLViewerVisualParam*)param)->getWearableType() == type) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) +		if( (((LLViewerVisualParam*)param)->getWearableType() == type) && (param->isTweakable() ) )  		{  			S32 param_id = param->getID();  			gAgentAvatarp->setVisualParamWeight( param_id, param->getDefaultWeight(), upload_bake ); diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index b2aac75916..cf165f8f66 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -393,9 +393,9 @@ bool LLWearableItemTypeNameComparator::doCompare(const LLPanelInventoryListItemB  		return item_type_order1 < item_type_order2;  	} -	if (item_type_order1 & TLO_NOT_CLOTHING) +	if (item_type_order1 & TLO_SORTABLE_BY_NAME)  	{ -		// If both items are of the same asset type except AT_CLOTHING +		// If both items are of the same asset type except AT_CLOTHING and AT_BODYPART  		// we can compare them by name.  		return LLWearableItemNameComparator::doCompare(wearable_item1, wearable_item2);  	} @@ -662,7 +662,8 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu  	setMenuItemVisible(menu, "wear_add",			mask == MASK_CLOTHING && n_worn == 0);  	setMenuItemEnabled(menu, "wear_add",			n_items == 1 && canAddWearable(ids.front()));  	setMenuItemVisible(menu, "wear",				n_worn == 0); -	setMenuItemVisible(menu, "edit",				!standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items); +	//visible only when one item selected and this item is worn +	setMenuItemVisible(menu, "edit",				!standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items && n_worn == 1);  	setMenuItemEnabled(menu, "edit",				n_editable == 1 && n_worn == 1 && n_items == 1);  	setMenuItemVisible(menu, "create_new",			mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1);  	setMenuItemVisible(menu, "show_original",		!standalone); diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index eb82418454..d16a2a89c8 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -299,12 +299,12 @@ protected:  private:  	enum ETypeListOrder  	{ -		TLO_ATTACHMENT	= 0x01, -		TLO_CLOTHING	= 0x02, +		TLO_CLOTHING	= 0x01, +		TLO_ATTACHMENT	= 0x02,  		TLO_BODYPART	= 0x04,  		TLO_UNKNOWN		= 0x08, -		TLO_NOT_CLOTHING = TLO_ATTACHMENT | TLO_BODYPART | TLO_UNKNOWN +		TLO_SORTABLE_BY_NAME = TLO_ATTACHMENT | TLO_UNKNOWN  	};  	static LLWearableItemTypeNameComparator::ETypeListOrder getTypeListOrder(LLAssetType::EType item_type); diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp index 2a14ace38c..b9b48fd55a 100644 --- a/indra/newview/llwearabletype.cpp +++ b/indra/newview/llwearabletype.cpp @@ -85,7 +85,6 @@ LLWearableDictionary::LLWearableDictionary()  	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry("tattoo",      "New Tattoo",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_TATTOO));  	addEntry(LLWearableType::WT_INVALID,      new WearableEntry("invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));  	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry("none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE)); -	addEntry(LLWearableType::WT_COUNT,        new WearableEntry("count",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));  }  // static diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index cf632c085f..40e882757f 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -68,9 +68,9 @@ with the same filename but different name    <texture name="BackArrow_Off" file_name="icons/BackArrow_Off.png" preload="false" /> -  <texture name="BackButton_Off" file_name="icons/back_arrow_off.png" preload="false" /> -  <texture name="BackButton_Over" file_name="icons/back_arrow_over.png" preload="false" /> -  <texture name="BackButton_Press" file_name="icons/back_arrow_press.png" preload="false" /> +  <texture name="BackButton_Off" file_name="icons/back_arrow_off.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" /> +  <texture name="BackButton_Over" file_name="icons/back_arrow_over.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" /> +  <texture name="BackButton_Press" file_name="icons/back_arrow_press.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />    <texture name="Blank" file_name="Blank.png" preload="false" /> @@ -579,6 +579,10 @@ with the same filename but different name    <texture name="scrollbutton_left_in_blue.tga" file_name="widgets/ScrollArrow_Left_Over_Opaque.png" />    <texture name="scrollbutton_right_out_blue.tga" file_name="widgets/ScrollArrow_Right_Opaque.png" />    <texture name="scrollbutton_right_in_blue.tga" file_name="widgets/ScrollArrow_Right_Over_Opaque.png" /> +  <texture name="scrollbutton_up_out_blue.tga" file_name="widgets/ScrollArrow_Up_Opaque.png" /> +  <texture name="scrollbutton_up_in_blue.tga" file_name="widgets/ScrollArrow_Up_Over_Opaque.png" /> +  <texture name="scrollbutton_down_out_blue.tga" file_name="widgets/ScrollArrow_Down_Opaque.png" /> +  <texture name="scrollbutton_down_in_blue.tga" file_name="widgets/ScrollArrow_Down_Over_Opaque.png" />    <texture name="up_arrow.tga" file_name="up_arrow.png" />    <texture name="down_arrow.tga" file_name="down_arrow.png" /> diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Opaque.pngBinary files differ new file mode 100644 index 0000000000..a396380fb2 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Opaque.png diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over_Opaque.pngBinary files differ new file mode 100644 index 0000000000..9568dea78a --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over_Opaque.png diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Opaque.pngBinary files differ new file mode 100644 index 0000000000..67a7a5568b --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Opaque.png diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over_Opaque.pngBinary files differ new file mode 100644 index 0000000000..0cc8c4404b --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over_Opaque.png diff --git a/indra/newview/skins/default/xui/en/alert_button.xml b/indra/newview/skins/default/xui/en/alert_button.xml index 632564d793..a60e9afab1 100644 --- a/indra/newview/skins/default/xui/en/alert_button.xml +++ b/indra/newview/skins/default/xui/en/alert_button.xml @@ -5,7 +5,7 @@    label_shadow="true"    auto_resize="false"    image_overlay_alignment="center" -  use_ellipses="flse" +  use_ellipses="false"    pad_right="10"    pad_left="10"    is_toggle="false" 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 b9489895ae..14aacafa9f 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1489,6 +1489,7 @@ Only large parcels can be listed in search.               layout="topleft"               left="14"               name="snapshot_ctrl" +             fallback_image="default_land_picture.j2c"                tool_tip="Click to choose a picture"               width="195" />              <text diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml index acaa508792..0ad4fbc967 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml @@ -380,6 +380,7 @@ supports [AMOUNT2] objects       width="275" />      <texture_picker       enabled="false" +     fallback_image="default_land_picture.j2c"       follows="top|left"       height="135"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml index d9c9d63c72..887cedc33f 100644 --- a/indra/newview/skins/default/xui/en/floater_event.xml +++ b/indra/newview/skins/default/xui/en/floater_event.xml @@ -266,7 +266,6 @@             layout="topleft"             left="6"         name="create_event_btn" -           picture_style="true"             tool_tip="Create Event"             width="18" />        <button @@ -280,7 +279,6 @@             left="6"             top_pad="-7"             name="god_delete_event_btn" -           picture_style="true"             tool_tip="Delete Event"             width="18" />        <button diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index efc1a66d95..34c1b25f8c 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -335,7 +335,6 @@      </combo_box>      <button       left_pad="0" -     image_disabled="ForwardArrow_Disabled"       image_selected="ForwardArrow_Press"       image_unselected="ForwardArrow_Off"       layout="topleft" @@ -1012,7 +1011,7 @@              follows="left|top"              allow_text_entry="false"              height="23" -            intial_value="2" +            initial_value="2"              max_chars="20"              mouse_opaque="true"              name="sale type" @@ -2176,8 +2175,6 @@ even though the user gets a free copy.               width="60" />              <color_swatch               can_apply_immediately="true" -	     bevel_style="none" -	     border_style="line"               color="0.5 0.5 0.5 1"  	     border.border_thickness="0"               follows="left|top" @@ -2212,43 +2209,71 @@ even though the user gets a free copy.               name="Light Intensity"               top_pad="3"               width="128" /> -          <spinner bottom_delta="0" decimal_digits="3" follows="left|top" height="16" - increment="0.1" initial_val="0.5" label="FOV" label_width="55" - left="144" max_val="3" min_val="0" mouse_opaque="true" - name="Light FOV" width="120" /> -          <spinner -             follows="left|top" -             height="19" -             initial_value="5" -             label="Radius" -             label_width="70" -             layout="topleft" -             left="10" -             max_val="20" -             name="Light Radius" -             top_pad="3" -             width="128" /> -          <spinner bottom_delta="0" decimal_digits="3" follows="left|top" height="16" -        increment="0.5" initial_val="0.5" label="Focus" label_width="55" -        left="144" max_val="20" min_val="-20" mouse_opaque="true" -        name="Light Focus" width="120" /> -            <spinner -             follows="left|top" -             height="19" -             increment="0.25" -             initial_value="1" -             label="Falloff" -             label_width="70" -             layout="topleft" -             left="10" -             max_val="2" -             name="Light Falloff" -             top_pad="3" -             width="128" /> -          <spinner bottom_delta="0" decimal_digits="3" follows="left|top" height="16" -           increment="0.05" initial_val="1" label="Ambiance" label_width="55" -           left="144" max_val="1" min_val="0" mouse_opaque="true" -           name="Light Ambiance" width="120" /> +          <spinner bottom_delta="0" +                   decimal_digits="3" +                   follows="left|top" +                   height="16" +                   increment="0.1" +                   initial_value="0.5" +                   label="FOV" +                   label_width="55" +                   left="144" +                   max_val="3" +                   min_val="0" +                   mouse_opaque="true" +                   name="Light FOV" +                   width="120" /> +          <spinner follows="left|top" +                   height="19" +                   initial_value="5" +                   label="Radius" +                   label_width="70" +                   layout="topleft" +                   left="10" +                   max_val="20" +                   name="Light Radius" +                   top_pad="3" +                   width="128" /> +          <spinner bottom_delta="0" +                   decimal_digits="3" +                   follows="left|top" +                   height="16" +                   increment="0.5" +                   initial_value="0.5" +                   label="Focus" +                   label_width="55" +                   left="144" +                   max_val="20" +                   min_val="-20" +                   mouse_opaque="true" +                   name="Light Focus" +                   width="120" /> +          <spinner follows="left|top" +                   height="19" +                   increment="0.25" +                   initial_value="1" +                   label="Falloff" +                   label_width="70" +                   layout="topleft" +                   left="10" +                   max_val="2" +                   name="Light Falloff" +                   top_pad="3" +                   width="128" /> +          <spinner bottom_delta="0" +                   decimal_digits="3" +                   follows="left|top" +                   height="16" +                   increment="0.05" +                   initial_value="1" +                   label="Ambiance" +                   label_width="55" +                   left="144" +                   max_val="1" +                   min_val="0" +                   mouse_opaque="true" +                   name="Light Ambiance" +                   width="120" />          </panel>           <panel           border="false" @@ -2273,6 +2298,7 @@ even though the user gets a free copy.              <texture_picker               can_apply_immediately="true"               default_image_name="Default" +             fallback_image="locked_image.j2c"               follows="left|top"               height="80"               label="Texture" diff --git a/indra/newview/skins/default/xui/en/menu_edit.xml b/indra/newview/skins/default/xui/en/menu_edit.xml index 68f3cb532c..fab76c497c 100644 --- a/indra/newview/skins/default/xui/en/menu_edit.xml +++ b/indra/newview/skins/default/xui/en/menu_edit.xml @@ -52,6 +52,7 @@    <menu_item_call     label="Delete"     name="Delete" +   allow_key_repeat="true"      shortcut="Del">      <menu_item_call.on_click       function="Edit.Delete" /> diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index 976f6d6cd0..b7fd9773f2 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -46,7 +46,6 @@       image_unselected="BackButton_Off"       layout="topleft"       name="back_btn" -     picture_style="true"       left="10"       tab_stop="false"       top="2" diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml index 6744a7b9c2..3f41973b72 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -30,7 +30,6 @@       image_unselected="BackButton_Off"       layout="topleft"       name="back_btn" -     picture_style="true"       left="10"       tab_stop="false"       top="2" diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml index dff2b9a214..5072ec3a66 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -118,6 +118,7 @@               allow_no_texture="true"               default_image_name="None"               enabled="false" +             fallback_image="default_profile_picture.j2c"                follows="top|left"               height="124"               layout="topleft" @@ -174,6 +175,7 @@               allow_no_texture="true"               default_image_name="None"               enabled="false" +             fallback_image="Generic_Person_Large"               follows="top|left"               height="124"               layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index fc1caca9e9..484617df34 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -131,19 +131,25 @@       name="tattoo_desc_text">          Tattoo:      </string> -    <button +    <!-- Default width of the button should be to show it without label. +     Button will be extedned in code to show whole label when wearable is being changed. +    --> +    <labeled_back_button       follows="top|left"       height="24"       image_hover_unselected="BackButton_Over"       image_pressed="BackButton_Press"       image_unselected="BackButton_Off"       layout="topleft" +     label="Save"       left="11"       name="back_btn" +     pad_left="24" +     tool_tip="Return to Edit Outfit"       top="3"       width="30" />      <text -     follows="top|left" +     follows="top|left|right"       font="SansSerifHugeBold"       height="22"       layout="topleft" @@ -152,7 +158,8 @@       text_color="white"       top="3"       value="Editing Shape" -     width="270" /> +     use_ellipses="true" +     width="274" />      <panel       background_opaque="true"       background_visible="true" diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index e894fc8fb8..4998322d62 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -96,6 +96,7 @@ background_visible="true"         follows="all"         layout="topleft"         auto_resize="true" +       height="513"         width="313">     <accordion       left="0" @@ -105,6 +106,7 @@ background_visible="true"       follows="all"       layout="topleft"       name="groups_accordion" +     height="513"       width="313">           <accordion_tab              expanded="true" diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml index 55fef5aaf7..a0a1e2963a 100644 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -103,7 +103,8 @@           width="310">              <texture_picker               enabled="false" -         follows="left|top|right" +             fallback_image="default_land_picture.j2c" +             follows="left|top|right"               height="197"               layout="topleft"               left="11" diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 2a53b3e2fa..16529f4064 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -104,8 +104,6 @@    </tab_container>    <layout_stack     animate="false" -   background_visible="true" -   bevel_style="none"     border_size="0"     follows="left|right|bottom"     height="25" diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml index 841a4f5713..1083f4d467 100644 --- a/indra/newview/skins/default/xui/en/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml @@ -83,6 +83,7 @@                 allow_no_texture="true"                 default_image_name="None"                 enabled="false" +               fallback_image="Generic_Person_Large"                  follows="top|left"                 height="124"                 layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 96c76576c0..00b1fdd843 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -113,10 +113,6 @@  	<!--      top_delta="0" -->  	<!--      width="168" /> -->          <search_combo_box -	     bevel_style="none" -	     border_style="line" -	     border.border_thickness="0" -	     commit_on_focus_lost="false"  	     follows="right|top"  	     halign="right"  	     height="23" diff --git a/indra/newview/skins/default/xui/en/panel_nearby_media.xml b/indra/newview/skins/default/xui/en/panel_nearby_media.xml index f5a78fc929..d8675b3512 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_media.xml @@ -1,7 +1,5 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel -	can_resize="true" -	can_close="false"   bg_opaque_image="Volume_Background"    bg_alpha_image="Volume_Background"     background_opaque="true" @@ -58,7 +56,6 @@  		top_delta="0"  		left_pad="4"  		height="22" -		min_width="28"  		width="28">  	  <button.commit_callback  		  function="MediaListCtrl.GoMediaPrefs" /> diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index 4abd7dceac..362fdd606a 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -190,7 +190,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap                  <layout_panel                   auto_resize="true"                    background_visible="true" -                 bg_alpha_color="DkGray2" +                 bg_alpha_color="Black"                   layout="topleft"                   height="154"                   name="add_button_and_combobox" @@ -318,13 +318,13 @@ It is calculated as border_size + 2*UIResizeBarOverlap               background_visible="false"               border="false"               follows="left|top|right|bottom" -             height="442" +             height="449"               layout="topleft"               left="0"               mouse_opaque="false"               name="folder_view" -             top_pad="5" -             width="310" +             top_pad="0" +             width="313"               visible="false"/>              <panel               name="filtered_wearables_panel" @@ -346,7 +346,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap                   layout="topleft"                   follows="all"                   multi_select="true" -                 width="310" +                 width="313"                   height="449"                   left="0"                   top="0"/> @@ -382,20 +382,20 @@ It is calculated as border_size + 2*UIResizeBarOverlap          <icon           follows="bottom|left|right"           height="25" -         image_name="Toolbar_Right_Off" +         image_name="Toolbar_Middle_Off"           layout="topleft"           left_pad="1"           name="dummy_right_icon" -         width="246" /> +         width="250" />          <button           follows="bottom|right"           height="25" -         image_hover_unselected="Toolbar_Middle_Over" +         image_hover_unselected="Toolbar_Right_Over"           image_overlay="Shop" -         image_selected="Toolbar_Middle_Selected" -         image_unselected="Toolbar_Middle_Off" +         image_selected="Toolbar_Right_Selected" +         image_unselected="Toolbar_Right_Off"           layout="topleft" -         left_pad="0" +         left_pad="1"           name="shop_btn_1"           top="1"           width="31" /> @@ -468,21 +468,21 @@ It is calculated as border_size + 2*UIResizeBarOverlap          <icon           follows="bottom|left|right"           height="25" -         image_name="Toolbar_Right_Off" +         image_name="Toolbar_Middle_Off"           layout="topleft"           left_pad="1"           name="dummy_right_icon" -         width="153" > +         width="154" >          </icon>          <button           follows="bottom|right"           height="25" -         image_hover_unselected="Toolbar_Middle_Over" +         image_hover_unselected="Toolbar_Right_Over"           image_overlay="Shop" -         image_selected="Toolbar_Middle_Selected" -         image_unselected="Toolbar_Middle_Off" +         image_selected="Toolbar_Right_Selected" +         image_unselected="Toolbar_Right_Off"           layout="topleft" -         left_pad="0" +         left_pad="1"           name="shop_btn_2"           top="1"           width="31" /> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index b79ef1e287..7cd0d5b5f0 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -95,8 +95,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M           width="313">              <avatar_list               allow_select="true" -       		 bg_alpha_color="DkGray2" -             bg_opaque_color="DkGray2"               follows="all"               height="356"               ignore_online_status="true" @@ -300,16 +298,11 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M      -->              <group_list               allow_select="true"  -             background_visible="true" -             bg_alpha_color="DkGray2" -             bg_opaque_color="DkGray2"               follows="all"               height="356"               layout="topleft"               left="3"               name="group_list" -             no_filtered_groups_msg="[secondlife:///app/search/groups Try finding the group in search?]" -             no_groups_msg="[secondlife:///app/search/groups Try searching for some groups to join.]"               top="0"               width="307" />              <panel @@ -386,9 +379,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M           width="313">              <avatar_list               allow_select="true" -       		 background_visible="true" -       		 bg_alpha_color="DkGray2" -             bg_opaque_color="DkGray2"               follows="all"               height="356"               layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index 0093a08e15..a815cdf7f0 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -38,7 +38,6 @@ bg_opaque_color="DkGray2"    single_expansion="true"    width="313">      <accordion_tab -     can_resize="false"       layout="topleft"       height="235"       min_height="150" @@ -56,7 +55,6 @@ bg_opaque_color="DkGray2"           width="313" />      </accordion_tab>      <accordion_tab -     can_resize="false"       layout="topleft"       height="235"       name="tab_classifieds" diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 55e0184282..35e8075896 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -200,7 +200,8 @@           width="310">              <texture_picker               enabled="false" -         follows="left|top|right" +             fallback_image="default_land_picture.j2c" +             follows="left|top|right"               height="197"               layout="topleft"               left="11" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml index fca9b4bca1..4ebd4c76f8 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -162,8 +162,9 @@       name="block_list"       top_pad="20"       width="145"> -        <button.commit_callback -         function="SideTray.ShowPanel" -		 parameter="panel_block_list_sidetray" /> +        <!--<button.commit_callback +         function="SideTray.ShowPanel"--> +      <button.commit_callback +         function="Pref.BlockList"/>      </button>      </panel> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index d7a601d7a3..fc33836c79 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -83,6 +83,7 @@                 allow_no_texture="true"                 default_image_name="None"                 enabled="false" +               fallback_image="Generic_Person_Large"                 follows="top|left"                 height="124"                 layout="topleft" @@ -130,6 +131,7 @@                 allow_no_texture="true"                 default_image_name="None"                 enabled="false" +               fallback_image="Generic_Person_Large"                 follows="top|left"                 height="124"                 layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml index 92b4c17247..42f64c3a76 100644 --- a/indra/newview/skins/default/xui/en/panel_toast.xml +++ b/indra/newview/skins/default/xui/en/panel_toast.xml @@ -31,8 +31,6 @@   can_close="false"   can_dock="false"   border_visible = "false" - border_drop_shadow_visible = "false" - drop_shadow_visible = "false"   border = "false"  >   <panel diff --git a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml index d3fb77f135..d8f4297e0c 100644 --- a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml @@ -10,7 +10,6 @@   name="topinfo_bar"   width="1024">    <button -    border="true"      follows="left|top"      height="16"      hover_glow_amount="0.15" diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 185e7ebafc..f3912b5133 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -1,11 +1,9 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel -	 auto_tile="true"  	 height="570"  	 layout="topleft"  	 name="item properties"  	 help_topic="item_properties" -	 save_rect="true"  	 title="Item Profile"  	 width="333">  	<panel.string diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml index faa1ae4e8b..ef7ec74b5a 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -1,11 +1,9 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel -	 auto_tile="true"  	 height="570"  	 layout="topleft"  	 name="object properties"  	 help_topic="object_properties" -	 save_rect="true"  	 title="Object Profile"  	 width="333">  	 <panel.string @@ -219,7 +217,6 @@  			 left_pad="0"  			 top_delta="0"  			 name="button set group" -			 picture_style="true"  			 tab_stop="false"  			 tool_tip="Choose a group to share this object's permissions"  			 width="10" /> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 68eea8dc9a..e30c081ba1 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -1812,7 +1812,8 @@ Clears (deletes) the media and all params from the given face.  	<string name="skirt">Skirt</string>  	<string name="alpha">Alpha</string>  	<string name="tattoo">Tattoo</string> -	<string name="invalid">invalid</string> +  <string name="invalid">invalid</string> +  <string name="none">none</string>    <!-- Not Worn Wearable Types -->  	<string name="shirt_not_worn">Shirt not worn</string> diff --git a/indra/newview/skins/default/xui/en/widgets/search_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/search_combo_box.xml index 5d429d5b5b..ce84cfedc0 100644 --- a/indra/newview/skins/default/xui/en/widgets/search_combo_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/search_combo_box.xml @@ -1,15 +1,12 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <search_combo_box   allow_text_entry="true" - list_position="BELOW" + list_position="below"   show_text_as_tentative="false"   dropdown_button_visible="false"   max_chars="256"   name="parent" - allow_new_values="true" - background_image="TextField_Search_Off" - background_image_disabled="TextField_Search_Disabled" - background_image_focused="TextField_Search_Active"> + allow_new_values="true">   <combo_editor    name="child1"    select_on_focus="true" diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml index d79726e8e2..b5ffc8f9c7 100644 --- a/indra/newview/skins/default/xui/fr/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_sell_land.xml @@ -45,7 +45,7 @@  			</combo_box>  			<button label="Sélectionner" name="sell_to_select_agent" width="100"/>  			<text name="sell_objects_label"> -				3. Vendez-vous les objets avec ce terrain ? +				3. Vendre les objets avec ce terrain ?  			</text>  			<text name="sell_objects_text">  				Les objets transférables se trouvant sur la parcelle changeront de propriétaire. diff --git a/indra/newview/skins/paths.xml b/indra/newview/skins/paths.xml index 3b91a904b0..e6d68488ea 100644 --- a/indra/newview/skins/paths.xml +++ b/indra/newview/skins/paths.xml @@ -1,4 +1,10 @@  <paths> -	<directory>xui/en</directory> -	<directory>xui/[LANGUAGE]</directory> +	<directory> +    <subdir>xui</subdir> +    <subdir>en</subdir> +  </directory> +	<directory> +    <subdir>xui</subdir> +    <subdir>[LANGUAGE]</subdir> +  </directory>  </paths>
\ No newline at end of file | 
