diff options
| author | Richard Nelson <none@none> | 2010-06-04 14:26:08 -0700 | 
|---|---|---|
| committer | Richard Nelson <none@none> | 2010-06-04 14:26:08 -0700 | 
| commit | 1be76eccdfed4d02f7ff8e34a29528887dd8d26c (patch) | |
| tree | 0f1ef59f9ff5986dbd6ce8ab117c66f92b4205bc /indra | |
| parent | 46e1253ee11cd2aca41314ec4e9c053bddd7a0b4 (diff) | |
| parent | 05d7addde73511d303f9203d0dc007ebb2e5b299 (diff) | |
merge
Diffstat (limited to 'indra')
45 files changed, 1066 insertions, 326 deletions
| diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 41ff5849f4..d06d6baf85 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -954,7 +954,12 @@ namespace LLError  		std::string class_name = className(site.mClassInfo);  		std::string function_name = functionName(site.mFunction); +#if LL_LINUX +		// gross, but typeid comparison seems to always fail here with gcc4.1 +		if (0 != strcmp(site.mClassInfo.name(), typeid(NoClassInfo).name())) +#else  		if (site.mClassInfo != typeid(NoClassInfo)) +#endif // LL_LINUX  		{  			function_name = class_name + "::" + function_name;  		} @@ -1079,7 +1084,12 @@ namespace LLError  	#if LL_WINDOWS  		// DevStudio: __FUNCTION__ already includes the full class name  	#else +                #if LL_LINUX +		// gross, but typeid comparison seems to always fail here with gcc4.1 +		if (0 != strcmp(site.mClassInfo.name(), typeid(NoClassInfo).name())) +                #else  		if (site.mClassInfo != typeid(NoClassInfo)) +                #endif // LL_LINUX  		{  			prefix << className(site.mClassInfo) << "::";  		} diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h index 09812de2b8..e64ee5e081 100644 --- a/indra/llcommon/llerror.h +++ b/indra/llcommon/llerror.h @@ -179,7 +179,7 @@ namespace LLError  		{ return s; }  		// used to indicate the end of a message -	class NoClassInfo { }; +	class LL_COMMON_API NoClassInfo { };  		// used to indicate no class info known for logging     //LLCallStacks keeps track of call stacks and output the call stacks to log file diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index ad8f8632a2..8071c8aa2d 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -249,7 +249,7 @@ public:  	/////////////////////////////////////////////////////////////////////////////////////////  	// Static Utility functions that operate on std::strings -	static std::basic_string<T> null; +	static const std::basic_string<T> null;  	typedef std::map<LLFormatMapString, LLFormatMapString> format_map_t;  	LL_COMMON_API static void getTokens(const std::basic_string<T>& instr, std::vector<std::basic_string<T> >& tokens, const std::basic_string<T>& delims); @@ -371,7 +371,7 @@ private:  	LL_COMMON_API static size_type getSubstitution(const std::basic_string<T>& instr, size_type& start, std::vector<std::basic_string<T> >& tokens);  }; -template<class T> std::basic_string<T> LLStringUtilBase<T>::null; +template<class T> const std::basic_string<T> LLStringUtilBase<T>::null;  template<class T> std::string LLStringUtilBase<T>::sLocale;  typedef LLStringUtilBase<char> LLStringUtil; diff --git a/indra/llcommon/tests/llerror_test.cpp b/indra/llcommon/tests/llerror_test.cpp index 6785d0cf17..1558df231a 100644 --- a/indra/llcommon/tests/llerror_test.cpp +++ b/indra/llcommon/tests/llerror_test.cpp @@ -545,15 +545,6 @@ namespace tut  		// output order  	void ErrorTestObject::test<10>()  	{ -#if LL_LINUX -        skip("Fails on Linux, see comments"); -// on Linux: -// [error, 10] fail: 'order is time type location function message: expected -// '1947-07-08T03:04:05Z INFO: llcommon/tests/llerror_test.cpp(268) : -// writeReturningLocationAndFunction: apple' actual -// '1947-07-08T03:04:05Z INFO: llcommon/tests/llerror_test.cpp(268) : -// LLError::NoClassInfo::writeReturningLocationAndFunction: apple'' -#endif  		LLError::setPrintLocation(true);  		LLError::setTimeFunction(roswell);  		mRecorder.setWantsTime(true); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b00104c427..7dbe650625 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -356,6 +356,7 @@ set(viewer_SOURCE_FILES      llpanelprofileview.cpp      llpanelteleporthistory.cpp      llpaneltiptoast.cpp +    llpaneltopinfobar.cpp      llpanelvolume.cpp      llpanelvolumepulldown.cpp      llparcelselection.cpp @@ -871,6 +872,7 @@ set(viewer_HEADER_FILES      llpanelprofileview.h      llpanelteleporthistory.h      llpaneltiptoast.h +    llpaneltopinfobar.h      llpanelvolume.h      llpanelvolumepulldown.h      llparcelselection.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 6204c8047a..70caead451 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -583,7 +583,7 @@        <key>Type</key>        <string>U32</string>        <key>Value</key> -      <integer>0</integer> +      <integer>180</integer>      </map>      <key>AvatarSex</key>      <map> @@ -8360,6 +8360,17 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>ShowMiniLocationPanel</key> +    <map> +      <key>Comment</key> +      <string>Show/Hide Mini-Location Panel</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>SidebarCameraMovement</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index e0104eddf0..d823a3cbbb 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1638,10 +1638,6 @@ LLUUID LLAgentWearables::computeBakedTextureHash(LLVOAvatarDefines::EBakedTextur  			{  				LLUUID asset_id = wearable->getAssetID();  				hash.update((const unsigned char*)asset_id.mData, UUID_BYTES); -				if (!generate_valid_hash) -				{ -					hash.update((const unsigned char*)asset_id.mData, UUID_BYTES); -				}  				hash_computed = true;  			}  		} @@ -1649,6 +1645,15 @@ LLUUID LLAgentWearables::computeBakedTextureHash(LLVOAvatarDefines::EBakedTextur  	if (hash_computed)  	{  		hash.update((const unsigned char*)baked_dict->mWearablesHashID.mData, UUID_BYTES); + +		// Add some garbage into the hash so that it becomes invalid. +		if (!generate_valid_hash) +		{ +			if (isAgentAvatarValid()) +			{ +				hash.update((const unsigned char*)gAgentAvatarp->getID().mData, UUID_BYTES); +			} +		}  		hash.finalize();  		hash.raw_digest(hash_id.mData);  	} diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index f0b3740086..95084666bb 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -893,14 +893,20 @@ bool LLAppViewer::init()  	LLViewerMedia::initClass(); -	LLStringOps::setupWeekDaysNames(LLTrans::getString("dateTimeWeekdaysNames")); -	LLStringOps::setupWeekDaysShortNames(LLTrans::getString("dateTimeWeekdaysShortNames")); -	LLStringOps::setupMonthNames(LLTrans::getString("dateTimeMonthNames")); -	LLStringOps::setupMonthShortNames(LLTrans::getString("dateTimeMonthShortNames")); -	LLStringOps::setupDayFormat(LLTrans::getString("dateTimeDayFormat")); - -	LLStringOps::sAM = LLTrans::getString("dateTimeAM"); -	LLStringOps::sPM = LLTrans::getString("dateTimePM"); +	//EXT-7013 - On windows for some locale (Japanese) standard  +	//datetime formatting functions didn't support some parameters such as "weekday". +	std::string language = LLControlGroup::getInstance(sGlobalSettingsName)->getString("Language"); +	if(language == "ja") +	{ +		LLStringOps::setupWeekDaysNames(LLTrans::getString("dateTimeWeekdaysNames")); +		LLStringOps::setupWeekDaysShortNames(LLTrans::getString("dateTimeWeekdaysShortNames")); +		LLStringOps::setupMonthNames(LLTrans::getString("dateTimeMonthNames")); +		LLStringOps::setupMonthShortNames(LLTrans::getString("dateTimeMonthShortNames")); +		LLStringOps::setupDayFormat(LLTrans::getString("dateTimeDayFormat")); + +		LLStringOps::sAM = LLTrans::getString("dateTimeAM"); +		LLStringOps::sPM = LLTrans::getString("dateTimePM"); +	}  	return true;  } diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 79ce2f8f6b..7ac3d14c72 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -387,7 +387,13 @@ LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventory  	item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable);  	//turning on gray separator line for the last item in the items group of the same wearable type -	item_panel->childSetVisible("wearable_type_separator_panel", last); +	if (last) +	{ +		LLRect rect = item_panel->getRect(); +		item_panel->reshape(rect.getWidth(), rect.getHeight() + +		item_panel->getChild<LLView>("wearable_type_separator_icon")->getRect().getHeight()); +		item_panel->childSetVisible("wearable_type_separator_icon", true); +	}  	return item_panel;  } diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 593d5c267e..5fbbb2c1a8 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -501,7 +501,7 @@ void LLFloaterPreference::onOpen(const LLSD& key)  	if (can_choose_maturity)  	{		  		// if they're not adult or a god, they shouldn't see the adult selection, so delete it -		if (!gAgent.isAdult() && !gAgent.isGodlike()) +		if (!gAgent.isAdult() && !gAgent.isGodlikeWithoutAdminMenuFakery())  		{  			// we're going to remove the adult entry from the combo  			LLScrollListCtrl* maturity_list = maturity_combo->findChild<LLScrollListCtrl>("ComboBox"); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b7495f7dbe..0e63c21e16 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1194,18 +1194,18 @@ void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)  LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const  {  	U8 font = LLFontGL::NORMAL; +	const LLViewerInventoryItem* item = getItem();  	if (get_is_item_worn(mUUID))  	{  		// llinfos << "BOLD" << llendl;  		font |= LLFontGL::BOLD;  	} - -	const LLViewerInventoryItem* item = getItem(); -	if (item && item->getIsLinkType()) +	else if(item && item->getIsLinkType())  	{  		font |= LLFontGL::ITALIC;  	} +  	return (LLFontGL::StyleFlags)font;  } @@ -4029,24 +4029,6 @@ void LLObjectBridge::openItem()  		      get_is_item_worn(mUUID) ? "detach" : "attach");  } -LLFontGL::StyleFlags LLObjectBridge::getLabelStyle() const -{ -	U8 font = LLFontGL::NORMAL; - -	if(get_is_item_worn( mUUID ) ) -	{ -		font |= LLFontGL::BOLD; -	} - -	LLInventoryItem* item = getItem(); -	if (item && item->getIsLinkType()) -	{ -		font |= LLFontGL::ITALIC; -	} - -	return (LLFontGL::StyleFlags)font; -} -  std::string LLObjectBridge::getLabelSuffix() const  {  	if (get_is_item_worn(mUUID)) diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 59c1f3d6fb..310fd7fb1d 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -436,7 +436,6 @@ public:  	virtual LLUIImagePtr	getIcon() const;  	virtual void			performAction(LLInventoryModel* model, std::string action);  	virtual void			openItem(); -	virtual LLFontGL::StyleFlags getLabelStyle() const;  	virtual std::string getLabelSuffix() const;  	virtual void			buildContextMenu(LLMenuGL& menu, U32 flags);  	virtual BOOL renameItem(const std::string& new_name); diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 817da34c61..ca6cede7e9 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -185,8 +185,6 @@ void remove_category(LLInventoryModel* model, const LLUUID& cat_id)  		}  	} -	// go ahead and do the normal remove if no 'last calling -	// cards' are being removed.  	LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);  	if (cat)  	{ diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp index 750cdfb678..cd0e976a79 100644 --- a/indra/newview/llinventoryitemslist.cpp +++ b/indra/newview/llinventoryitemslist.cpp @@ -132,7 +132,8 @@ BOOL LLPanelInventoryListItemBase::postBuild()  	setIconCtrl(getChild<LLIconCtrl>("item_icon"));  	setTitleCtrl(getChild<LLTextBox>("item_name")); -	mIconImage = LLInventoryIcon::getIcon(mItem->getType(), mItem->getInventoryType(), mItem->getIsLinkType(), mItem->getFlags(), FALSE); +	BOOL show_links = mForceNoLinksOnIcons ? FALSE : mItem->getIsLinkType(); +	mIconImage = LLInventoryIcon::getIcon(mItem->getType(), mItem->getInventoryType(), show_links, mItem->getFlags(), FALSE);  	setNeedsRefresh(true); @@ -198,6 +199,7 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem  , mLeftWidgetsWidth(0)  , mRightWidgetsWidth(0)  , mNeedsRefresh(false) +, mForceNoLinksOnIcons(false)  {  } diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h index 03ad7c2184..0dd6f53be7 100644 --- a/indra/newview/llinventoryitemslist.h +++ b/indra/newview/llinventoryitemslist.h @@ -179,6 +179,9 @@ protected:  	/** Set item title - inventory item name usually */  	void setTitle(const std::string& title, const std::string& highlit_text); +	// force not showing link icon on item's icon +	bool mForceNoLinksOnIcons; +  private:  	/** reshape left side widgets diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index d605d4430e..d09f729943 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -72,7 +72,7 @@ LLNameListCtrl::LLNameListCtrl(const LLNameListCtrl::Params& p)  // public  void LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPosition pos, -								 BOOL enabled, std::string& suffix) +								 BOOL enabled, const std::string& suffix)  {  	//llinfos << "LLNameListCtrl::addNameItem " << agent_id << llendl; @@ -268,7 +268,7 @@ LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition p  LLScrollListItem* LLNameListCtrl::addNameItemRow(  	const LLNameListCtrl::NameItem& name_item,  	EAddPosition pos, -	std::string& suffix) +	const std::string& suffix)  {  	LLUUID id = name_item.value().asUUID();  	LLNameListItem* item = NULL; diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h index 1c26ee5db4..ee71db7540 100644 --- a/indra/newview/llnamelistctrl.h +++ b/indra/newview/llnamelistctrl.h @@ -90,11 +90,11 @@ public:  	// Add a user to the list by name.  It will be added, the name   	// requested from the cache, and updated as necessary.  	void addNameItem(const LLUUID& agent_id, EAddPosition pos = ADD_BOTTOM, -					 BOOL enabled = TRUE, std::string& suffix = LLStringUtil::null); +					 BOOL enabled = TRUE, const std::string& suffix = LLStringUtil::null);  	void addNameItem(NameItem& item, EAddPosition pos = ADD_BOTTOM);  	/*virtual*/ LLScrollListItem* addElement(const LLSD& element, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL); -	LLScrollListItem* addNameItemRow(const NameItem& value, EAddPosition pos = ADD_BOTTOM, std::string& suffix = LLStringUtil::null); +	LLScrollListItem* addNameItemRow(const NameItem& value, EAddPosition pos = ADD_BOTTOM, const std::string& suffix = LLStringUtil::null);  	// Add a user to the list by name.  It will be added, the name   	// requested from the cache, and updated as necessary. diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index e5548007bd..fce666c9d4 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -48,6 +48,7 @@  #include "lllandmarkactions.h"  #include "lllocationhistory.h"  #include "lllocationinputctrl.h" +#include "llpaneltopinfobar.h"  #include "llteleporthistory.h"  #include "llsearchcombobox.h"  #include "llsidetray.h" @@ -714,6 +715,7 @@ void LLNavigationBar::onNavigationButtonHeldUp(LLButton* nav_button)  void LLNavigationBar::handleLoginComplete()  {  	LLTeleportHistory::getInstance()->handleLoginComplete(); +	LLPanelTopInfoBar::instance().handleLoginComplete();  	mCmbLocation->handleLoginComplete();  } diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 36f2d05fab..8d0e3d4647 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -520,7 +520,8 @@ static void init_color_swatch_ctrl(LLPanelEditWearable* self, LLPanel* panel, co  	LLColorSwatchCtrl* color_swatch_ctrl = panel->getChild<LLColorSwatchCtrl>(entry->mControlName);  	if (color_swatch_ctrl)  	{ -		color_swatch_ctrl->setOriginal(self->getWearable()->getClothesColor(entry->mTextureIndex)); +		// Can't get the color from the wearable here, since the wearable may not be set when this is called. +		color_swatch_ctrl->setOriginal(LLColor4::white);  	}  } @@ -654,6 +655,49 @@ BOOL LLPanelEditWearable::postBuild()  	configureAlphaCheckbox(LLVOAvatarDefines::TEX_EYES_ALPHA, "eye alpha texture invisible");  	configureAlphaCheckbox(LLVOAvatarDefines::TEX_HAIR_ALPHA, "hair alpha texture invisible"); +	// configure tab expanded callbacks +	for (U32 type_index = 0; type_index < (U32)LLWearableType::WT_COUNT; ++type_index) +	{ +		LLWearableType::EType type = (LLWearableType::EType) type_index; +		const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type); +		if (!wearable_entry) +		{ +			llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl; +			continue; +		} +		U8 num_subparts = wearable_entry->mSubparts.size(); +	 +		for (U8 index = 0; index < num_subparts; ++index) +		{ +			// dive into data structures to get the panel we need +			ESubpart subpart_e = wearable_entry->mSubparts[index]; +			const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e); +	 +			if (!subpart_entry) +			{ +				llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl; +				continue; +			} +	 +			const std::string accordion_tab = subpart_entry->mAccordionTab; +	 +			LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab); +	 +			if (!tab) +			{ +				llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl; +				continue; +			} +	 +			// initialize callback to ensure camera view changes appropriately. +			tab->setDropDownStateChangedCallback(boost::bind(&LLPanelEditWearable::onTabExpandedCollapsed,this,_2,index)); +		} + +		// initialize texture and color picker controls +		for_each_picker_ctrl_entry <LLColorSwatchCtrl> (getPanel(type), type, boost::bind(init_color_swatch_ctrl, this, _1, _2)); +		for_each_picker_ctrl_entry <LLTextureCtrl>     (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2)); +	} +  	return TRUE;  } @@ -690,10 +734,9 @@ void LLPanelEditWearable::setWearable(LLWearable *wearable)  	showWearable(mWearablePtr, FALSE);  	mWearablePtr = wearable;  	showWearable(mWearablePtr, TRUE); - -	initializePanel();  } +  //static   void LLPanelEditWearable::onRevertButtonClicked(void* userdata)  { @@ -880,29 +923,83 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show)  	std::string title;  	std::string description_title; -	const LLEditWearableDictionary::WearableEntry *entry = LLEditWearableDictionary::getInstance()->getWearable(type); -	if (!entry) +	const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type); +	if (!wearable_entry)  	{  		llwarns << "called LLPanelEditWearable::showWearable with an invalid wearable type! (" << type << ")" << llendl;  		return;  	}  	targetPanel = getPanel(type); -	title = getString(entry->mTitle); -	description_title = getString(entry->mDescTitle); +	title = getString(wearable_entry->mTitle); +	description_title = getString(wearable_entry->mDescTitle); + +	// Update picker controls state +	for_each_picker_ctrl_entry <LLColorSwatchCtrl> (targetPanel, type, boost::bind(set_enabled_color_swatch_ctrl, show, _1, _2)); +	for_each_picker_ctrl_entry <LLTextureCtrl>     (targetPanel, type, boost::bind(set_enabled_texture_ctrl, show, _1, _2));  	targetPanel->setVisible(show); +	toggleTypeSpecificControls(type); +  	if (show)  	{  		mPanelTitle->setText(title);  		mDescTitle->setText(description_title); -	} +		 +		// set name +		mTextEditor->setText(wearable->getName()); -	// Update picker controls state -	for_each_picker_ctrl_entry <LLColorSwatchCtrl> (targetPanel, type, boost::bind(set_enabled_color_swatch_ctrl, show, _1, _2)); -	for_each_picker_ctrl_entry <LLTextureCtrl>     (targetPanel, type, boost::bind(set_enabled_texture_ctrl, show, _1, _2)); +		updatePanelPickerControls(type); +		updateTypeSpecificControls(type); -	showDefaultSubpart(); +		// clear and rebuild visual param list +		U8 num_subparts = wearable_entry->mSubparts.size(); +	 +		for (U8 index = 0; index < num_subparts; ++index) +		{ +			// dive into data structures to get the panel we need +			ESubpart subpart_e = wearable_entry->mSubparts[index]; +			const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e); +	 +			if (!subpart_entry) +			{ +				llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl; +				continue; +			} +	 +			const std::string scrolling_panel = subpart_entry->mParamList; +			const std::string accordion_tab = subpart_entry->mAccordionTab; +	 +			LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel); +			LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab); +	 +			if (!panel_list) +			{ +				llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl; +				continue; +			} +	 +			if (!tab) +			{ +				llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl; +				continue; +			} +	 +			// what edit group do we want to extract params for? +			const std::string edit_group = subpart_entry->mEditGroup; +	 +			// storage for ordered list of visual params +			value_map_t sorted_params; +			getSortedParams(sorted_params, edit_group); +	 +			buildParamList(panel_list, sorted_params, tab); +	 +			updateScrollingPanelUI(); +		} +		showDefaultSubpart(); + +		updateVerbs(); +	}  }  void LLPanelEditWearable::showDefaultSubpart() @@ -967,91 +1064,6 @@ void LLPanelEditWearable::updateScrollingPanelList()  	updateScrollingPanelUI();  } -void LLPanelEditWearable::initializePanel() -{ -	if (!mWearablePtr) -	{ -		// cannot initialize with a null reference. -		return; -	} - -	LLWearableType::EType type = mWearablePtr->getType(); - -	// set name -	mTextEditor->setText(mWearablePtr->getName()); - -	// toggle wearable type-specific controls -	toggleTypeSpecificControls(type); - -	// clear and rebuild visual param list -	const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type); -	if (!wearable_entry) -	{ -		llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl; -		return; -	} -	U8 num_subparts = wearable_entry->mSubparts.size(); - -	for (U8 index = 0; index < num_subparts; ++index) -	{ -		// dive into data structures to get the panel we need -		ESubpart subpart_e = wearable_entry->mSubparts[index]; -		const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e); - -		if (!subpart_entry) -		{ -			llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl; -			continue; -		} - -		const std::string scrolling_panel = subpart_entry->mParamList; -		const std::string accordion_tab = subpart_entry->mAccordionTab; - -		LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel); -		LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab); - -		if (!panel_list) -		{ -			llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl; -			continue; -		} - -		if (!tab) -		{ -			llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl; -			continue; -		} - -		// what edit group do we want to extract params for? -		const std::string edit_group = subpart_entry->mEditGroup; - -		// initialize callback to ensure camera view changes appropriately. -		tab->setDropDownStateChangedCallback(boost::bind(&LLPanelEditWearable::onTabExpandedCollapsed,this,_2,index)); - -		// storage for ordered list of visual params -		value_map_t sorted_params; -		getSortedParams(sorted_params, edit_group); - -		buildParamList(panel_list, sorted_params, tab); - -		updateScrollingPanelUI(); -	} - -	// initialize texture and color picker controls -	for_each_picker_ctrl_entry <LLColorSwatchCtrl> (getPanel(type), type, boost::bind(init_color_swatch_ctrl, this, _1, _2)); -	for_each_picker_ctrl_entry <LLTextureCtrl>     (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2)); - -	showDefaultSubpart(); -	updateVerbs(); - -	if (getWearable()) -	{ -		LLWearableType::EType type = getWearable()->getType(); -		updatePanelPickerControls(type); -		updateTypeSpecificControls(type); -	} -} -  void LLPanelEditWearable::toggleTypeSpecificControls(LLWearableType::EType type)  {  	// Toggle controls specific to shape editing panel. diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h index b6b8c0c781..6b376fe3d9 100644 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -78,7 +78,6 @@ private:  	typedef std::map<F32, LLViewerVisualParam*> value_map_t;  	void				showWearable(LLWearable* wearable, BOOL show); -	void				initializePanel();  	void				updateScrollingPanelUI();  	LLPanel*			getPanel(LLWearableType::EType type);  	void				getSortedParams(value_map_t &sorted_params, const std::string &edit_group); diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp new file mode 100644 index 0000000000..7cf574b6e5 --- /dev/null +++ b/indra/newview/llpaneltopinfobar.cpp @@ -0,0 +1,393 @@ +/** + * @file llpaneltopinfobar.cpp + * @brief Coordinates and Parcel Settings information panel definition + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llpaneltopinfobar.h" + +#include "llagent.h" +#include "llagentui.h" +#include "lllocationinputctrl.h" +#include "llnotificationsutil.h" +#include "llparcel.h" +#include "llsidetray.h" +#include "llstatusbar.h" +#include "llviewercontrol.h" +#include "llviewermenu.h" +#include "llviewerparcelmgr.h" +#include "llviewerregion.h" + +class LLPanelTopInfoBar::LLParcelChangeObserver : public LLParcelObserver +{ +public: +	LLParcelChangeObserver(LLPanelTopInfoBar* topInfoBar) : mTopInfoBar(topInfoBar) {} + +private: +	/*virtual*/ void changed() +	{ +		if (mTopInfoBar) +		{ +			mTopInfoBar->updateParcelIcons(); +		} +	} + +	LLPanelTopInfoBar* mTopInfoBar; +}; + +LLPanelTopInfoBar::LLPanelTopInfoBar(): mParcelChangedObserver(0) +{ +	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_topinfo_bar.xml"); +} + +LLPanelTopInfoBar::~LLPanelTopInfoBar() +{ +	if (mParcelChangedObserver) +	{ +		LLViewerParcelMgr::getInstance()->removeObserver(mParcelChangedObserver); +		delete mParcelChangedObserver; +	} + +	if (mParcelPropsCtrlConnection.connected()) +	{ +		mParcelPropsCtrlConnection.disconnect(); +	} + +	if (mParcelMgrConnection.connected()) +	{ +		mParcelMgrConnection.disconnect(); +	} + +	if (mShowCoordsCtrlConnection.connected()) +	{ +		mShowCoordsCtrlConnection.disconnect(); +	} +} + +void LLPanelTopInfoBar::initParcelIcons() +{ +	mParcelIcon[VOICE_ICON] = getChild<LLIconCtrl>("voice_icon"); +	mParcelIcon[FLY_ICON] = getChild<LLIconCtrl>("fly_icon"); +	mParcelIcon[PUSH_ICON] = getChild<LLIconCtrl>("push_icon"); +	mParcelIcon[BUILD_ICON] = getChild<LLIconCtrl>("build_icon"); +	mParcelIcon[SCRIPTS_ICON] = getChild<LLIconCtrl>("scripts_icon"); +	mParcelIcon[DAMAGE_ICON] = getChild<LLIconCtrl>("damage_icon"); + +	mParcelIcon[VOICE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, VOICE_ICON)); +	mParcelIcon[FLY_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, FLY_ICON)); +	mParcelIcon[PUSH_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, PUSH_ICON)); +	mParcelIcon[BUILD_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, BUILD_ICON)); +	mParcelIcon[SCRIPTS_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, SCRIPTS_ICON)); +	mParcelIcon[DAMAGE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, DAMAGE_ICON)); + +	mDamageText->setText(LLStringExplicit("100%")); +} + +void LLPanelTopInfoBar::handleLoginComplete() +{ +	// An agent parcel update hasn't occurred yet, so +	// we have to manually set location and the icons. +	update(); +} + +BOOL LLPanelTopInfoBar::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ +	show_navbar_context_menu(this, x, y); +	return TRUE; +} + +BOOL LLPanelTopInfoBar::postBuild() +{ +	mInfoBtn = getChild<LLButton>("place_info_btn"); +	mInfoBtn->setClickedCallback(boost::bind(&LLPanelTopInfoBar::onInfoButtonClicked, this)); + +	mParcelInfoText = getChild<LLTextBox>("parcel_info_text"); +	mDamageText = getChild<LLTextBox>("damage_text"); + +	initParcelIcons(); + +	mParcelChangedObserver = new LLParcelChangeObserver(this); +	LLViewerParcelMgr::getInstance()->addObserver(mParcelChangedObserver); + +	// Connecting signal for updating parcel icons on "Show Parcel Properties" setting change. +	LLControlVariable* ctrl = gSavedSettings.getControl("NavBarShowParcelProperties").get(); +	if (ctrl) +	{ +		mParcelPropsCtrlConnection = ctrl->getSignal()->connect(boost::bind(&LLPanelTopInfoBar::updateParcelIcons, this)); +	} + +	// Connecting signal for updating parcel text on "Show Coordinates" setting change. +	ctrl = gSavedSettings.getControl("NavBarShowCoordinates").get(); +	if (ctrl) +	{ +		mShowCoordsCtrlConnection = ctrl->getSignal()->connect(boost::bind(&LLPanelTopInfoBar::onNavBarShowParcelPropertiesCtrlChanged, this)); +	} + +	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( +			boost::bind(&LLPanelTopInfoBar::onAgentParcelChange, this)); + +	return TRUE; +} + +void LLPanelTopInfoBar::onNavBarShowParcelPropertiesCtrlChanged() +{ +	std::string new_text; + +	// don't need to have separate show_coords variable; if user requested the coords to be shown +	// they will be added during the next call to the draw() method. +	buildLocationString(new_text, false); +	setParcelInfoText(new_text); +} + +void LLPanelTopInfoBar::draw() +{ +	updateParcelInfoText(); +	updateHealth(); + +	LLPanel::draw(); +} + +void LLPanelTopInfoBar::buildLocationString(std::string& loc_str, bool show_coords) +{ +	LLAgentUI::ELocationFormat format = +		(show_coords ? LLAgentUI::LOCATION_FORMAT_FULL : LLAgentUI::LOCATION_FORMAT_NO_COORDS); + +	if (!LLAgentUI::buildLocationString(loc_str, format)) +	{ +		loc_str = "???"; +	} +} + +void LLPanelTopInfoBar::setParcelInfoText(const std::string& new_text) +{ +	const LLFontGL* font = mParcelInfoText->getDefaultFont(); +	S32 new_text_width = font->getWidth(new_text); + +	mParcelInfoText->setText(new_text); + +	LLRect rect = mParcelInfoText->getRect(); +	rect.setOriginAndSize(rect.mLeft, rect.mBottom, new_text_width, rect.getHeight()); + +	mParcelInfoText->reshape(rect.getWidth(), rect.getHeight(), TRUE); +	mParcelInfoText->setRect(rect); +	layoutParcelIcons(); +} + +void LLPanelTopInfoBar::update() +{ +	std::string new_text; + +	// don't need to have separate show_coords variable; if user requested the coords to be shown +	// they will be added during the next call to the draw() method. +	buildLocationString(new_text, false); +	setParcelInfoText(new_text); + +	updateParcelIcons(); +} + +void LLPanelTopInfoBar::updateParcelInfoText() +{ +	static LLUICachedControl<bool> show_coords("NavBarShowCoordinates", false); + +	if (show_coords) +	{ +		std::string new_text; + +		buildLocationString(new_text, show_coords); +		setParcelInfoText(new_text); +	} +} + +void LLPanelTopInfoBar::updateParcelIcons() +{ +	LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance(); + +	LLViewerRegion* agent_region = gAgent.getRegion(); +	LLParcel* agent_parcel = vpm->getAgentParcel(); +	if (!agent_region || !agent_parcel) +		return; + +	if (gSavedSettings.getBOOL("NavBarShowParcelProperties")) +	{ +		LLParcel* current_parcel; +		LLViewerRegion* selection_region = vpm->getSelectionRegion(); +		LLParcel* selected_parcel = vpm->getParcelSelection()->getParcel(); + +		// If agent is in selected parcel we use its properties because +		// they are updated more often by LLViewerParcelMgr than agent parcel properties. +		// See LLViewerParcelMgr::processParcelProperties(). +		// This is needed to reflect parcel restrictions changes without having to leave +		// the parcel and then enter it again. See EXT-2987 +		if (selected_parcel && selected_parcel->getLocalID() == agent_parcel->getLocalID() +				&& selection_region == agent_region) +		{ +			current_parcel = selected_parcel; +		} +		else +		{ +			current_parcel = agent_parcel; +		} + +		bool allow_voice	= vpm->allowAgentVoice(agent_region, current_parcel); +		bool allow_fly		= vpm->allowAgentFly(agent_region, current_parcel); +		bool allow_push		= vpm->allowAgentPush(agent_region, current_parcel); +		bool allow_build	= vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610. +		bool allow_scripts	= vpm->allowAgentScripts(agent_region, current_parcel); +		bool allow_damage	= vpm->allowAgentDamage(agent_region, current_parcel); + +		// Most icons are "block this ability" +		mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice ); +		mParcelIcon[FLY_ICON]->setVisible(     !allow_fly ); +		mParcelIcon[PUSH_ICON]->setVisible(    !allow_push ); +		mParcelIcon[BUILD_ICON]->setVisible(   !allow_build ); +		mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts ); +		mParcelIcon[DAMAGE_ICON]->setVisible(  allow_damage ); +		mDamageText->setVisible(allow_damage); + +		layoutParcelIcons(); +	} +	else +	{ +		for (S32 i = 0; i < ICON_COUNT; ++i) +		{ +			mParcelIcon[i]->setVisible(false); +		} +		mDamageText->setVisible(false); +	} +} + +void LLPanelTopInfoBar::updateHealth() +{ +	static LLUICachedControl<bool> show_icons("NavBarShowParcelProperties", false); + +	// *FIXME: Status bar owns health information, should be in agent +	if (show_icons && gStatusBar) +	{ +		static S32 last_health = -1; +		S32 health = gStatusBar->getHealth(); +		if (health != last_health) +		{ +			std::string text = llformat("%d%%", health); +			mDamageText->setText(text); +			last_health = health; +		} +	} +} + +void LLPanelTopInfoBar::layoutParcelIcons() +{ +	// TODO: remove hard-coded values and read them as xml parameters +	static const int FIRST_ICON_HPAD = 32; +	static const int LAST_ICON_HPAD = 11; + +	S32 left = mParcelInfoText->getRect().mRight + FIRST_ICON_HPAD; + +	left = layoutWidget(mDamageText, left); + +	for (int i = ICON_COUNT - 1; i >= 0; --i) +	{ +		left = layoutWidget(mParcelIcon[i], left); +	} + +	LLRect rect = getRect(); +	rect.set(rect.mLeft, rect.mTop, left + LAST_ICON_HPAD, rect.mBottom); +	setRect(rect); +} + +S32 LLPanelTopInfoBar::layoutWidget(LLUICtrl* ctrl, S32 left) +{ +	// TODO: remove hard-coded values and read them as xml parameters +	static const int ICON_HPAD = 2; + +	if (ctrl->getVisible()) +	{ +		LLRect rect = ctrl->getRect(); +		rect.mRight = left + rect.getWidth(); +		rect.mLeft = left; + +		ctrl->setRect(rect); +		left += rect.getWidth() + ICON_HPAD; +	} + +	return left; +} + +void LLPanelTopInfoBar::onParcelIconClick(EParcelIcon icon) +{ +	switch (icon) +	{ +	case VOICE_ICON: +		LLNotificationsUtil::add("NoVoice"); +		break; +	case FLY_ICON: +		LLNotificationsUtil::add("NoFly"); +		break; +	case PUSH_ICON: +		LLNotificationsUtil::add("PushRestricted"); +		break; +	case BUILD_ICON: +		LLNotificationsUtil::add("NoBuild"); +		break; +	case SCRIPTS_ICON: +	{ +		LLViewerRegion* region = gAgent.getRegion(); +		if(region && region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) +		{ +			LLNotificationsUtil::add("ScriptsStopped"); +		} +		else if(region && region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) +		{ +			LLNotificationsUtil::add("ScriptsNotRunning"); +		} +		else +		{ +			LLNotificationsUtil::add("NoOutsideScripts"); +		} +		break; +	} +	case DAMAGE_ICON: +		LLNotificationsUtil::add("NotSafe"); +		break; +	case ICON_COUNT: +		break; +	// no default to get compiler warning when a new icon gets added +	} +} + +void LLPanelTopInfoBar::onAgentParcelChange() +{ +	update(); +} + +void LLPanelTopInfoBar::onInfoButtonClicked() +{ +	LLSideTray::getInstance()->showPanel("panel_places", LLSD().with("type", "agent")); +} diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h new file mode 100644 index 0000000000..4a85bbcd76 --- /dev/null +++ b/indra/newview/llpaneltopinfobar.h @@ -0,0 +1,154 @@ +/** + * @file llpaneltopinfobar.h + * @brief Coordinates and Parcel Settings information panel definition + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LLPANELTOPINFOBAR_H_ +#define LLPANELTOPINFOBAR_H_ + +#include "llpanel.h" + +class LLButton; +class LLTextBox; +class LLIconCtrl; +class LLParcelChangeObserver; + +class LLPanelTopInfoBar : public LLPanel, public LLSingleton<LLPanelTopInfoBar> +{ +	LOG_CLASS(LLPanelTopInfoBar); + +public: +	LLPanelTopInfoBar(); +	~LLPanelTopInfoBar(); + +	/*virtual*/ BOOL postBuild(); +	/*virtual*/ void draw(); + +	/** +	 * Updates location and parcel icons on login complete +	 */ +	void handleLoginComplete(); + +private: +	class LLParcelChangeObserver; + +	friend class LLParcelChangeObserver; + +	enum EParcelIcon +	{ +		VOICE_ICON = 0, +		FLY_ICON, +		PUSH_ICON, +		BUILD_ICON, +		SCRIPTS_ICON, +		DAMAGE_ICON, +		ICON_COUNT +	}; + +	/** +	 * Initializes parcel icons controls. Called from the constructor. +	 */ +	void initParcelIcons(); + +	BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + +	/** +	 * Handles clicks on the parcel icons. +	 */ +	void onParcelIconClick(EParcelIcon icon); + +	/** +	 * Handles clicks on the info buttons. +	 */ +	void onInfoButtonClicked(); + +	/** +	 * Called when agent changes the parcel. +	 */ +	void onAgentParcelChange(); + +	/** +	 * Called when user checks/unchecks Show Coordinates menu item. +	 */ +	void onNavBarShowParcelPropertiesCtrlChanged(); + +	/** +	 * Shorthand to call updateParcelInfoText() and updateParcelIcons(). +	 */ +	void update(); + +	/** +	 * Updates parcel info text (mParcelInfoText). +	 */ +	void updateParcelInfoText(); + +	/** +	 * Updates parcel icons (mParcelIcon[]). +	 */ +	void updateParcelIcons(); + +	/** +	 * Updates health information (mDamageText). +	 */ +	void updateHealth(); + +	/** +	 * Lays out all parcel icons starting from right edge of the mParcelInfoText + 11px +	 * (see screenshots in EXT-5808 for details). +	 */ +	void layoutParcelIcons(); + +	/** +	 * Lays out a widget. Widget's rect mLeft becomes equal to the 'left' argument. +	 */ +	S32 layoutWidget(LLUICtrl* ctrl, S32 left); + +	/** +	 * Generates location string and returns it in the loc_str parameter. +	 */ +	void buildLocationString(std::string& loc_str, bool show_coords); + +	/** +	 * Sets new value to the mParcelInfoText and updates the size of the top bar. +	 */ +	void setParcelInfoText(const std::string& new_text); + +	LLButton* 				mInfoBtn; +	LLTextBox* 				mParcelInfoText; +	LLTextBox* 				mDamageText; +	LLIconCtrl*				mParcelIcon[ICON_COUNT]; +	LLParcelChangeObserver*	mParcelChangedObserver; + +	boost::signals2::connection	mParcelPropsCtrlConnection; +	boost::signals2::connection	mShowCoordsCtrlConnection; +	boost::signals2::connection	mParcelMgrConnection; +}; + +#endif /* LLPANELTOPINFOBAR_H_ */ diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index f02e15706d..f4b4954cbd 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -74,6 +74,7 @@  #include "llfloatertools.h"  #include "llpaneloutfitsinventory.h"  #include "llpanellogin.h" +#include "llpaneltopinfobar.h"  #ifdef TOGGLE_HACKED_GODLIKE_VIEWER  BOOL 				gHackGodmode = FALSE; @@ -471,6 +472,12 @@ bool toggle_show_favorites_panel(const LLSD& newvalue)  	return true;  } +bool toggle_show_mini_location_panel(const LLSD& newvalue) +{ +	LLPanelTopInfoBar::getInstance()->setVisible(newvalue.asBoolean()); +	return true; +} +  bool toggle_show_object_render_cost(const LLSD& newvalue)  {  	LLFloaterTools::sShowObjectCost = newvalue.asBoolean(); @@ -615,6 +622,7 @@ void settings_setup_listeners()  	gSavedSettings.getControl("AgentPause")->getSignal()->connect(boost::bind(&toggle_agent_pause, _2));  	gSavedSettings.getControl("ShowNavbarNavigationPanel")->getSignal()->connect(boost::bind(&toggle_show_navigation_panel, _2));  	gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&toggle_show_favorites_panel, _2)); +	gSavedSettings.getControl("ShowMiniLocationPanel")->getSignal()->connect(boost::bind(&toggle_show_mini_location_panel, _2));  	gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2));  	gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2));  } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index d91f232f0e..83556452c0 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -201,6 +201,7 @@  #include "llnearbychat.h"  #include "llviewerwindowlistener.h" +#include "llpaneltopinfobar.h"  #if LL_WINDOWS  #include <tchar.h> // For Unicode conversion methods @@ -1669,6 +1670,20 @@ void LLViewerWindow::initWorldUI()  		navbar->showFavoritesPanel(FALSE);  	} +	// Top Info bar +	LLPanel* topinfo_bar_container = getRootView()->getChild<LLPanel>("topinfo_bar_container"); +	LLPanelTopInfoBar* topinfo_bar = LLPanelTopInfoBar::getInstance(); + +	topinfo_bar->setShape(topinfo_bar_container->getLocalRect()); + +	topinfo_bar_container->addChild(topinfo_bar); +	topinfo_bar_container->setVisible(TRUE); + +	if (!gSavedSettings.getBOOL("ShowMiniLocationPanel")) +	{ +		topinfo_bar->setVisible(FALSE); +	} +  	if ( gHUDView == NULL )  	{  		LLRect hud_rect = full_window; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 462c442954..e18b617120 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1273,7 +1273,8 @@ BOOL LLVOAvatarSelf::isLocalTextureDataAvailable(const LLTexLayerSet* layerset)  //-----------------------------------------------------------------------------  BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLTexLayerSet* layerset) const  { -	const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel"); +	//const U32 desired_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel");  +	const U32 desired_tex_discard_level = 0; // SERAPH hack to not bake textures on lower discard levels.  	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)  	{ @@ -1289,7 +1290,7 @@ BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLTexLayerSet* layerset) cons  				const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type);  				for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)  				{ -					if (getLocalDiscardLevel(*local_tex_iter, wearable_index) > (S32)(override_tex_discard_level)) +					if (getLocalDiscardLevel(*local_tex_iter, wearable_index) > (S32)(desired_tex_discard_level))  					{  						return FALSE;  					} @@ -1304,7 +1305,8 @@ BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLTexLayerSet* layerset) cons  BOOL LLVOAvatarSelf::isAllLocalTextureDataFinal() const  { -	const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel"); +	// const U32 desired_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel");  +	const U32 desired_tex_discard_level = 0; // SERAPH hack to not bake textures on lower discard levels  	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)  	{ @@ -1318,7 +1320,7 @@ BOOL LLVOAvatarSelf::isAllLocalTextureDataFinal() const  			const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type);  			for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++)  			{ -				if (getLocalDiscardLevel(*local_tex_iter, wearable_index) > (S32)(override_tex_discard_level)) +				if (getLocalDiscardLevel(*local_tex_iter, wearable_index) > (S32)(desired_tex_discard_level))  				{  					return FALSE;  				} diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index c35b45d446..ba1d0b727d 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -88,6 +88,8 @@ void LLPanelWearableListItem::onMouseLeave(S32 x, S32 y, MASK mask)  LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item)  : LLPanelInventoryListItemBase(item)  { +	// icons should not be shown for this type of items (EXT-7511) +	mForceNoLinksOnIcons = true;  }  ////////////////////////////////////////////////////////////////////////// @@ -168,7 +170,7 @@ BOOL LLPanelClothingListItem::postBuild()  	addWidgetToRightSide("btn_move_up");  	addWidgetToRightSide("btn_move_down");  	addWidgetToRightSide("btn_lock"); -	addWidgetToRightSide("btn_edit"); +	addWidgetToRightSide("btn_edit_panel");  	setWidgetsVisible(false);  	reshapeWidgets(); @@ -211,7 +213,7 @@ BOOL LLPanelBodyPartsListItem::postBuild()  	LLPanelInventoryListItemBase::postBuild();  	addWidgetToRightSide("btn_lock"); -	addWidgetToRightSide("btn_edit"); +	addWidgetToRightSide("btn_edit_panel");  	return TRUE;  } diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 0ed480a92a..2fdb8f0ab8 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -139,7 +139,7 @@ public:  	inline void setShowMoveDownButton(bool show) { setShowWidget("btn_move_down", show); }  	inline void setShowLockButton(bool show) { setShowWidget("btn_lock", show); } -	inline void setShowEditButton(bool show) { setShowWidget("btn_edit", show); } +	inline void setShowEditButton(bool show) { setShowWidget("btn_edit_panel", show); }  protected: @@ -164,7 +164,7 @@ public:  	* Make button visible during mouse over event.  	*/  	inline void setShowLockButton(bool show) { setShowWidget("btn_lock", show); } -	inline void setShowEditButton(bool show) { setShowWidget("btn_edit", show); } +	inline void setShowEditButton(bool show) { setShowWidget("btn_edit_panel", show); }  protected:  	LLPanelBodyPartsListItem(LLViewerInventoryItem* item); diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 1a05dbacd2..85ccf0f564 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -567,6 +567,8 @@ with the same filename but different name    <texture name="VoicePTT_Off" file_name="bottomtray/VoicePTT_Off.png" preload="false" />    <texture name="VoicePTT_On" file_name="bottomtray/VoicePTT_On.png" preload="false" /> +  <texture name="Wearables_Divider" file_name="windows/Wearables_Divider.png" preload="false" /> +    <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png"  preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />    <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> diff --git a/indra/newview/skins/default/textures/windows/Wearables_Divider.png b/indra/newview/skins/default/textures/windows/Wearables_Divider.pngBinary files differ new file mode 100644 index 0000000000..9dce7bf45c --- /dev/null +++ b/indra/newview/skins/default/textures/windows/Wearables_Divider.png diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml index ad40cafe61..ece406f9b1 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -178,16 +178,16 @@       width="90">          Land Sale      </text> -    <icon -     color="1 1 0.25 1" +        <icon +     color="0.5 0.25 1 1"       follows="top|right"       height="16"       image_name="legend.tga"       layout="topleft"       mouse_opaque="true"       name="square2" -     left="41" -     top_pad="-2" +     left="20" +     top_pad="2"       width="16" />      <text       type="string" @@ -196,21 +196,21 @@       height="16"       layout="topleft"       left_pad="0" -     name="by_owner_label" +     name="auction_label"       top_delta="3" -     width="100"> -       by owner +     width="170"> +        land auction      </text> -        <icon -     color="0.5 0.25 1 1" +    <icon +     color="1 1 0.25 1"       follows="top|right"       height="16"       image_name="legend.tga"       layout="topleft"       mouse_opaque="true"       name="square2" -     left="41" -     top_pad="-3" +     left="20" +     top_pad="-5"       width="16" />      <text       type="string" @@ -219,10 +219,10 @@       height="16"       layout="topleft"       left_pad="0" -     name="auction_label" +     name="by_owner_label"       top_delta="3" -     width="170"> -        land auction +     width="100"> +       by owner      </text>      <button diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index d8410a26dd..72ab6195bc 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -73,6 +73,17 @@                     mouse_opaque="false"                  name="hud container"                     width="500"> +            <panel auto_resize="false" +                   follows="left|top" +                   height="19" +                   left="0" +                   mouse_opaque="false" +                   name="topinfo_bar_container" +                   tab_stop="false" +                   top="0" +                   user_resize="false" +                   visible="false" +                   width="1024"/>                <panel follows="right|top|bottom"                       height="500"                       mouse_opaque="false" diff --git a/indra/newview/skins/default/xui/en/menu_hide_navbar.xml b/indra/newview/skins/default/xui/en/menu_hide_navbar.xml index a175b3103f..3f38d734b9 100644 --- a/indra/newview/skins/default/xui/en/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/en/menu_hide_navbar.xml @@ -12,10 +12,10 @@           label="Show Navigation Bar"           layout="topleft"           name="ShowNavbarNavigationPanel"> -           <menu_item_check.on_click +           <on_click               function="ToggleControl"               parameter="ShowNavbarNavigationPanel" />  -             <menu_item_check.on_check +             <on_check               function="CheckControl"               parameter="ShowNavbarNavigationPanel" />      </menu_item_check> @@ -23,11 +23,22 @@           label="Show Favorites Bar"           layout="topleft"           name="ShowNavbarFavoritesPanel"> -           <menu_item_check.on_click +           <on_click               function="ToggleControl"               parameter="ShowNavbarFavoritesPanel" />  -             <menu_item_check.on_check +             <on_check               function="CheckControl"               parameter="ShowNavbarFavoritesPanel" />      </menu_item_check> +    <menu_item_check +         label="Show Mini-Location Bar" +         layout="topleft" +         name="ShowMiniLocationPanel"> +           <on_click +             function="ToggleControl" +             parameter="ShowMiniLocationPanel" /> +             <on_check +             function="CheckControl" +             parameter="ShowMiniLocationPanel" /> +    </menu_item_check>  </menu> diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml index 2edd643cc5..a0bbc8f2ee 100644 --- a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel   follows="top|right|left" - height="23" + height="25"   layout="topleft"   left="0"   name="wearable_item" @@ -9,22 +9,22 @@   width="380">      <icon       follows="top|right|left" -     height="23" +     height="22"       image_name="ListItem_Over"       layout="topleft"       left="0"       name="hovered_icon" -     top="0" +     top="1"       visible="false"       width="380" />      <icon -     height="23" +     height="22"       follows="top|right|left"       image_name="ListItem_Select"       layout="topleft"       left="0"       name="selected_icon" -     top="0" +     top="1"       visible="false"       width="380" />      <icon @@ -53,7 +53,6 @@       name="btn_lock"       layout="topleft"       follows="top|right" -     image_name="Locked_Icon"       top="0"       left="0"       height="23" @@ -70,24 +69,35 @@           width="9"           tab_stop="false" />      </panel> -    <button  -     name="btn_edit" +    <panel +     background_visible="false" +     name="btn_edit_panel"       layout="topleft"       follows="top|right" -     image_overlay="Edit_Wrench"       top="0"       left_pad="3" -     height="23" -     width="23" -     tab_stop="false" /> -    <panel -     background_visible="true" -     bg_alpha_color="0.4 0.4 0.4 1.0" -     bottom="0" +     height="24" +     width="27" +     tab_stop="false"> +         <button  +          name="btn_edit" +          layout="topleft" +          follows="top|right" +          image_overlay="Edit_Wrench" +          top="0" +          left="0" +          height="24" +          width="24" +          tab_stop="false" /> +      </panel> +    <icon       follows="left|right|top" -     height="1" +     height="3" +     image_name="Wearables_Divider"       layout="bottomleft"       left="0" -     name="wearable_type_separator_panel" +     name="wearable_type_separator_icon" +     top="3" +     visible="true"       width="380"/>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml index 035e8607ec..e41141f6bd 100644 --- a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml @@ -9,22 +9,22 @@   width="380">      <icon       follows="top|right|left" -     height="23" +     height="22"       image_name="ListItem_Over"       layout="topleft"       left="0"       name="hovered_icon" -     top="0" +     top="1"       visible="false"       width="380" />      <icon -     height="23" +     height="22"       follows="top|right|left"       image_name="ListItem_Select"       layout="topleft"       left="0"       name="selected_icon" -     top="0" +     top="1"       visible="false"       width="380" />      <button  @@ -33,10 +33,10 @@       follows="top|left"       image_unselected="Toast_CloseBtn"       image_selected="Toast_CloseBtn" -     top="0" +     top="2"       left="0" -     height="20" -     width="20" +     height="18" +     width="18"       tab_stop="false" />      <icon       height="16" @@ -66,8 +66,8 @@       image_overlay="UpArrow_Off"       top="0"       left="0" -     height="23" -     width="23" +     height="24" +     width="24"       tab_stop="false" />      <button        name="btn_move_down" @@ -76,15 +76,14 @@       image_overlay="DownArrow_Off"       top="0"       left_pad="3" -     height="23" -     width="23" +     height="24" +     width="24"       tab_stop="false" />      <panel       background_visible="false"       name="btn_lock"       layout="topleft"       follows="top|right" -     image_name="Locked_Icon"       top="0"       left="0"       height="23" @@ -101,25 +100,35 @@           width="9"           tab_stop="false" />      </panel> -    <button  -     name="btn_edit" +    <panel +     background_visible="false" +     name="btn_edit_panel"       layout="topleft"       follows="top|right" -     image_overlay="Edit_Wrench"       top="0"       left_pad="3" -     height="23" -     width="23" -     tab_stop="false" /> -    <panel -     background_visible="true" -     bg_alpha_color="0.4 0.4 0.4 1.0" -     bottom="0" +     height="24" +     width="27" +     tab_stop="false"> +        <button  +         name="btn_edit" +         layout="topleft" +         follows="top|right" +         image_overlay="Edit_Wrench" +         top="0" +         left="0" +         height="24" +         width="24" +         tab_stop="false" /> +      </panel> +    <icon       follows="left|right|top" -     height="1" +     height="3" +     image_name="Wearables_Divider"       layout="bottomleft"       left="0" -     name="wearable_type_separator_panel" +     name="wearable_type_separator_icon" +     top="0"       visible="false"       width="380"/>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml index 2f37b9d3c9..b006d125ee 100644 --- a/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel   follows="top|right|left" - height="23" + height="25"   layout="topleft"   left="0"   name="deletable_wearable_item" @@ -9,22 +9,22 @@   width="380">      <icon       follows="top|right|left" -     height="20" +     height="22"       image_name="ListItem_Over"       layout="topleft"       left="0"       name="hovered_icon" -     top="0" +     top="1"       visible="false"       width="380" />      <icon -     height="20" +     height="22"       follows="top|right|left"       image_name="ListItem_Select"       layout="topleft"       left="0"       name="selected_icon" -     top="0" +     top="1"       visible="false"       width="380" />      <button  @@ -33,10 +33,10 @@       follows="top|left"       image_unselected="Toast_CloseBtn"       image_selected="Toast_CloseBtn" -     top="0" +     top="2"       left="0" -     height="20" -     width="20" +     height="18" +     width="18"       tab_stop="false" />      <icon       height="16" @@ -59,15 +59,14 @@       top="4"       value="..."       width="359" /> -    <panel -     background_visible="true" -     bg_alpha_color="0.4 0.4 0.4 1.0" -     bottom="0" +    <icon       follows="left|right|top" -     height="1" +     height="3" +     image_name="Wearables_Divider"       layout="bottomleft"       left="0" -     name="wearable_type_separator_panel" +     name="wearable_type_separator_icon" +     top="3"       visible="true"       width="380"/>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml index 06371b7489..6c43635d49 100644 --- a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel   follows="top|right|left" - height="23" + height="25"   layout="topleft"   left="0"   name="dummy_clothing_item" @@ -9,22 +9,22 @@   width="380">      <icon       follows="top|right|left" -     height="23" +     height="22"       image_name="ListItem_Over"       layout="topleft"       left="0"       name="hovered_icon" -     top="0" +     top="1"       visible="false"       width="380" />      <icon -     height="23" +     height="22"       follows="top|right|left"       image_name="ListItem_Select"       layout="topleft"       left="0"       name="selected_icon" -     top="0" +     top="1"       visible="false"       width="380" />      <icon @@ -56,17 +56,17 @@       image_overlay="AddItem_Off"       top="0"       left="0" -     height="23" -     width="23" +     height="24" +     width="24"       tab_stop="false" /> -    <panel -     background_visible="true" -     bg_alpha_color="0.4 0.4 0.4 1.0" -     bottom="0" +    <icon       follows="left|right|top" -     height="1" +     height="3" +     image_name="Wearables_Divider"       layout="bottomleft"       left="0" -     name="wearable_type_separator_panel" +     name="wearable_type_separator_icon" +     top="3" +     visible="true"       width="380"/>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml index cfcdc25f81..7bcd4962d2 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml @@ -21,126 +21,131 @@        name="avatar_alpha_color_panel"        top="0"        width="313" > +       <check_box +        control_name="LowerAlphaTextureInvisible" +        follows="left" +        height="16" +        layout="topleft" +        left="5" +        name="lower alpha texture invisible" +        top="10" +        width="16" />         <texture_picker          can_apply_immediately="true"          default_image_name="Default"          follows="left|top" -        height="100" +        height="115"          label="Lower Alpha"          layout="topleft" -        left="30" +        left_pad="5"          name="Lower Alpha"          tool_tip="Click to choose a picture"          top="10" -        width="94" > +        width="115" >           <texture_picker.commit_callback               function="TexturePicker.Commit" />         </texture_picker> +         <check_box -        control_name="LowerAlphaTextureInvisible" +        control_name="UpperAlphaTextureInvisible"          follows="left"          height="16"          layout="topleft" -        left_pad="6" -        name="lower alpha texture invisible" -        top_delta="4" +        left_pad="20" +        name="upper alpha texture invisible" +        top="10"          width="16" />         <texture_picker          can_apply_immediately="true"          default_image_name="Default"          follows="left|top" -        height="100" +        height="115"          label="Upper Alpha"          layout="topleft" -        left_pad="20" +        left_pad="5"          name="Upper Alpha"          tool_tip="Click to choose a picture"          top="10" -        width="94"> +        width="115">           <texture_picker.commit_callback               function="TexturePicker.Commit" />         </texture_picker> +         <check_box -        control_name="UpperAlphaTextureInvisible" +        control_name="HeadAlphaTextureInvisible"          follows="left"          height="16"          layout="topleft" -        left_pad="6" -        name="upper alpha texture invisible" -        top_delta="4" +        left="5" +        name="head alpha texture invisible" +        top_pad="15"          width="16" />         <texture_picker          can_apply_immediately="true"          default_image_name="Default"          follows="left|top" -        height="100" +        height="115"          label="Head Alpha"          layout="topleft" -        left="30" +        left_pad="5"          name="Head Alpha"          tool_tip="Click to choose a picture" -        top="120" -        width="94" > +        top_delta="0" +        width="115" >           <texture_picker.commit_callback               function="TexturePicker.Commit" />         </texture_picker> +         <check_box -        control_name="HeadAlphaTextureInvisible" +        control_name="Eye AlphaTextureInvisible"          follows="left"          height="16"          layout="topleft" -        left_pad="6" -        name="head alpha texture invisible" -        top_delta="4" +        left_pad="20" +        name="eye alpha texture invisible" +        top_delta="0"          width="16" />         <texture_picker          can_apply_immediately="true"          default_image_name="Default"          follows="left|top" -        height="100" +        height="115"          label="Eye Alpha"          layout="topleft" -        left_pad="20" +        left_pad="5"          name="Eye Alpha"          tool_tip="Click to choose a picture" -        top="120" -        width="94" > +        top_delta="0" +        width="115" >           <texture_picker.commit_callback               function="TexturePicker.Commit" />         </texture_picker> +         <check_box -        control_name="Eye AlphaTextureInvisible" +        control_name="HairAlphaTextureInvisible"          follows="left"          height="16"          layout="topleft" -        left_pad="6" -        name="eye alpha texture invisible" -        top_delta="4" +        left="5" +        name="hair alpha texture invisible" +        top_pad="15"          width="16" />         <texture_picker          can_apply_immediately="true"          default_image_name="Default"          follows="left|top" -        height="100" +        height="115"          label="Hair Alpha"          layout="topleft"          left="30"          name="Hair Alpha"          tool_tip="Click to choose a picture" -        top="230" -        width="94" > +        top_delta="0" +        width="115" >           <texture_picker.commit_callback               function="TexturePicker.Commit" />         </texture_picker> -       <check_box -        control_name="HairAlphaTextureInvisible" -        follows="left" -        height="16" -        layout="topleft" -        left_pad="6" -        name="hair alpha texture invisible" -        top_delta="4" -        width="16" /> +  	 </panel>  </panel> 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 2ff46637f1..769f9b7bbf 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -205,6 +205,9 @@ It is calculated as border_size + 2*UIResizeBarOverlap                      <button                       follows="left|bottom"                        height="22" +                     image_pressed="PushButton_Press" +                     image_pressed_selected="PushButton_Selected_Press" +                     image_selected="PushButton_Selected_Press"                       is_toggle="true"                       label="Add More..."                       layout="topleft" @@ -227,6 +230,9 @@ It is calculated as border_size + 2*UIResizeBarOverlap                       follows="bottom|right"                       height="22"                       image_overlay="Search_Icon" +                     image_pressed="PushButton_Press" +                     image_pressed_selected="PushButton_Selected_Press" +                     image_selected="PushButton_Selected_Press"                       is_toggle="true"                       layout="topleft"                       name="filter_button" @@ -294,7 +300,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap               background_visible="false"               border="false"               follows="left|top|right|bottom" -             height="210" +             height="203"               layout="topleft"               left="0"               mouse_opaque="false" @@ -312,7 +318,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap               height="210"               left="0"               mouse_opaque="false" -             width="311" +             width="310"               top_delta="0"               visible="true">                  <wearable_items_list diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index a7a0efcdb3..33f895e13a 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -89,6 +89,7 @@ background_visible="true"           layout="topleft"           left_pad="3"           name="map_btn" +         tool_tip="Show the corresponding area on the World Map"           width="85" />          <button           follows="bottom|left" @@ -141,6 +142,7 @@ background_visible="true"           layout="topleft"           name="profile_btn"           right="-1" +         tool_tip="Show place profile"           top="1"           width="111" />      </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 new file mode 100644 index 0000000000..d3fb77f135 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="UTF-8"?> +<panel + background_visible="true" + background_opaque="false" + bg_opaque_color="Black_50" + bg_alpha_color="Black_50" + follows="left|top|right" + height="19" + layout="topleft" + name="topinfo_bar" + width="1024"> +  <button +    border="true" +    follows="left|top" +    height="16" +    hover_glow_amount="0.15" +    image_disabled="Info_Off" +    image_disabled_selected="Info_Off" +    image_selected="Info_Off" +    image_unselected="Info_Off" +    left="11" +    name="place_info_btn" +    top="1" +    width="16"/> +   <text +     follows="left|top|right" +     font="DejaVu" +     height="16" +     layout="topleft" +     left_pad="11" +     length="1" +     name="parcel_info_text" +     top="1" +     type="string" +     width="1"/> +  <icon +    enabled="true" +    follows="right|top" +    height="18" +    image_name="Parcel_VoiceNo_Light" +    name="voice_icon" +    top="1" +    visible="false" +    width="22" +    /> +  <icon +    follows="right|top" +    height="18" +    image_name="Parcel_FlyNo_Light" +    name="fly_icon" +    top="1" +    visible="false" +    width="22" +    /> +  <icon +    follows="right|top" +    height="18" +    image_name="Parcel_PushNo_Light" +    name="push_icon" +    top="1" +    visible="false" +    width="22" +    /> +  <icon +    follows="right|top" +    height="18" +    image_name="Parcel_BuildNo_Light" +    name="build_icon" +    top="1" +    visible="false" +    width="22" +    /> +  <icon +    follows="right|top" +    height="18" +    image_name="Parcel_ScriptsNo_Light" +    name="scripts_icon" +    top="1" +    visible="false" +    width="22" +    /> +  <icon +    follows="right|top" +    height="13" +    image_name="Parcel_Health_Dark" +    left="2" +    name="damage_icon" +    top="3" +    visible="false" +    width="14" +    /> +  <text +    follows="right|top" +    font="SansSerifSmall" +    halign="right" +    height="18" +    name="damage_text" +    top="5" +    visible="false" +    width="35" +    /> +</panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index 4c42d1f750..6c9acae35e 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -45,6 +45,7 @@  				 layout="topleft"  				 left="0"  				 name="info_btn" +				 tool_tip="Show object profile"  				 top="0"  				 width="102" />  			<button @@ -55,6 +56,7 @@  				 layout="topleft"  				 left="105"  				 name="share_btn" +				 tool_tip="Share an inventory item"  				 top="0"  				 width="102" />  			<button @@ -65,6 +67,7 @@  				 layout="topleft"  				 left="210"  				 name="shop_btn" +				 tool_tip="Open Marketplace webpage"  				 top="0"  				 width="102" />  			<button @@ -75,6 +78,7 @@  				 layout="topleft"  				 left="210"  				 name="wear_btn" +				 tool_tip="Wear seleceted outfit"  				 top="0"  				 width="102" />  			<button @@ -95,6 +99,7 @@  				 layout="topleft"  				 left="210"  				 name="teleport_btn" +				 tool_tip="Teleport to the selected area"  				 top="0"  				 width="102" />  		</panel> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index ed6484302f..790bc64a4a 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3189,18 +3189,13 @@ Abuse Report</string>    </string>    <!-- overriding datetime formating.  -	leave emtpy in for current localization this is not needed  -	list of values should be separated with ':' -        example: -	<string name="dateTimeWeekdaysShortNames"> -	Son:Mon:Tue:Wed:Thu:Fri:Sat -	</string>  	 +	didn't translate if this is not needed for current localization     --> -  <string name="dateTimeWeekdaysNames"></string> -  <string name="dateTimeWeekdaysShortNames"></string> -  <string name="dateTimeMonthNames"></string> -  <string name="dateTimeMonthShortNames"></string> -  <string name="dateTimeDayFormat"></string> -  <string name="dateTimeAM"></string> -  <string name="dateTimePM"></string> +  <string name="dateTimeWeekdaysNames">Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday</string> +  <string name="dateTimeWeekdaysShortNames">Sun:Mon:Tue:Wed:Thu:Fri:Sat</string> +  <string name="dateTimeMonthNames">January:February:March:April:May:June:July:August:September:October:November:December</string> +  <string name="dateTimeMonthShortNames">Jan:Feb:Mar:Apr:May:Jun:Jul:Aug:Sep:Oct:Nov:Dec</string> +  <string name="dateTimeDayFormat">[MDAY]</string> +  <string name="dateTimeAM">AM</string> +  <string name="dateTimePM">PM</string>    </strings> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index dfc12bc1cb..d59699552d 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -3762,22 +3762,4 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ  	<string name="texture_load_dimensions_error">  		[WIDTH]*[HEIGHT] 以上の画像は読み込めません  	</string> -	<!-- overriding datetime formating. leave emtpy in for current localization this is not needed --> -	<string name="dateTimeWeekdaysNames"> -	Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday -	</string> -	<string name="dateTimeWeekdaysShortNames"> -	Son:Mon:Tue:Wed:Thu:Fri:Sat -	</string> -	<string name="dateTimeMonthNames"> -	January:February:March:April:May:June:July:August:September:October:November:December -	</string> -	<string name="dateTimeMonthNames"> -	Jan:Feb:Mar:Apr:May:Jun:Jul:Aug:Sep:Oct:Nov:Dec -	</string> -	<string name="dateTimeDayFormat"> -		[MDAY] D -	</string> -        <string name="dateTimeAM">AM</string> -        <string name="dateTimePM">PM</string>  </strings> diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml index 65e48b4bfd..878d0b1973 100644 --- a/indra/newview/skins/default/xui/pt/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml @@ -6,7 +6,7 @@  		</text>  	</panel>  	<panel name="layout_panel_2"> -		<button font="SansSerifSmall" label="Mostra minha localização" label_selected="Mostra minha localização" left_delta="91" name="Show My Location" tool_tip="Centrar o mapa na localização do meu avatar" width="135"/> +		<button font="SansSerifSmall" label="Mostra minha localização" label_selected="Mostra minha localização" left_delta="91" name="Show My Location" tool_tip="Centrar o mapa na localização do meu avatar" />  		<text name="me_label">  			Eu  		</text> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index c887097575..8c089c0b79 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -355,7 +355,6 @@ class WindowsManifest(ViewerManifest):                  self.path("qtwebkitd4.dll")                  self.path("qtxmlpatternsd4.dll")                  self.path("ssleay32.dll") -                self.path("winmm.dll")                  # For WebKit/Qt plugin runtimes (image format plugins)                  if self.prefix(src="imageformats", dst="imageformats"): | 
