diff options
| author | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-02-03 21:30:38 +0200 | 
|---|---|---|
| committer | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-02-03 21:30:38 +0200 | 
| commit | d90dc965874687a40f6ffc90f7edec1301fe293b (patch) | |
| tree | 341ccc5a0c770e8d41fc61138da9fd9984bda4c5 /indra/newview | |
| parent | 5dbd37f50bbefe8552f910d5079b48cd3f648c5e (diff) | |
| parent | 917841120f8932af112896344c7f25be7bc32773 (diff) | |
merge
--HG--
branch : product-engine
Diffstat (limited to 'indra/newview')
57 files changed, 949 insertions, 623 deletions
| diff --git a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store b/indra/newview/installers/darwin/firstlook-dmg/_DS_StoreBinary files differ index 9d9fd897e7..495ec37f53 100644 --- a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store +++ b/indra/newview/installers/darwin/firstlook-dmg/_DS_Store diff --git a/indra/newview/installers/darwin/fix_application_icon_position.sh b/indra/newview/installers/darwin/fix_application_icon_position.sh index a0b72a89f2..c6b92589db 100644 --- a/indra/newview/installers/darwin/fix_application_icon_position.sh +++ b/indra/newview/installers/darwin/fix_application_icon_position.sh @@ -4,11 +4,14 @@ cp -r ./../../../build-darwin-i386/newview/*.dmg ~/Desktop/TempBuild.dmg  hdid ~/Desktop/TempBuild.dmg  open -a finder /Volumes/Second\ Life\ Installer  osascript dmg-cleanup.applescript -cp /Volumes/Second\ Life\ Installer/.DS_Store ~/Desktop/_DS_Store -chflags nohidden ~/Desktop/_DS_Store -cp ~/Desktop/_DS_Store ./firstlook-dmg/_DS_Store -cp ~/Desktop/_DS_Store ./publicnightly-dmg/_DS_Store -cp ~/Desktop/_DS_Store ./release-dmg/_DS_Store -cp ~/Desktop/_DS_Store ./releasecandidate-dmg/_DS_Store  umount /Volumes/Second\ Life\ Installer/ -rm ~/Desktop/_DS_Store ~/Desktop/TempBuild.dmg +hdid ~/Desktop/TempBuild.dmg +open -a finder /Volumes/Second\ Life\ Installer +#cp /Volumes/Second\ Life\ Installer/.DS_Store ~/Desktop/_DS_Store +#chflags nohidden ~/Desktop/_DS_Store +#cp ~/Desktop/_DS_Store ./firstlook-dmg/_DS_Store +#cp ~/Desktop/_DS_Store ./publicnightly-dmg/_DS_Store +#cp ~/Desktop/_DS_Store ./release-dmg/_DS_Store +#cp ~/Desktop/_DS_Store ./releasecandidate-dmg/_DS_Store +#umount /Volumes/Second\ Life\ Installer/ +#rm ~/Desktop/_DS_Store ~/Desktop/TempBuild.dmg diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store b/indra/newview/installers/darwin/publicnightly-dmg/_DS_StoreBinary files differ index 9d9fd897e7..495ec37f53 100644 --- a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store +++ b/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store diff --git a/indra/newview/installers/darwin/release-dmg/_DS_Store b/indra/newview/installers/darwin/release-dmg/_DS_StoreBinary files differ index 9d9fd897e7..495ec37f53 100644 --- a/indra/newview/installers/darwin/release-dmg/_DS_Store +++ b/indra/newview/installers/darwin/release-dmg/_DS_Store diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_StoreBinary files differ index 9d9fd897e7..495ec37f53 100644 --- a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store +++ b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index a2d594cfa2..0102e9488e 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -474,6 +474,7 @@ void LLBottomTray::onContextMenuItemClicked(const LLSD& userdata)  	else if (item == "paste")  	{  		edit_box->paste(); +		edit_box->setFocus(TRUE);  	}  	else if (item == "delete")  	{ diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index a351c52ce2..1dc0e8c0a7 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -610,19 +610,26 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  				url += "?name=" + chat.mFromName;  				url += "&owner=" + args["owner_id"].asString(); -				LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent); -				if (region) +				std::string slurl = args["slurl"].asString(); +				if (slurl.empty())  				{ -					S32 x, y, z; -					LLSLURL::globalPosToXYZ(LLVector3d(chat.mPosAgent), x, y, z); -					url += "&slurl=" + region->getName() + llformat("/%d/%d/%d", x, y, z); +					LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent); +					if (region) +					{ +						S32 x, y, z; +						LLSLURL::globalPosToXYZ(LLVector3d(chat.mPosAgent), x, y, z); +						slurl = region->getName() + llformat("/%d/%d/%d", x, y, z); +					}  				} +				url += "&slurl=" + slurl;  				// set the link for the object name to be the objectim SLapp +				// (don't let object names with hyperlinks override our objectim Url)  				LLStyle::Params link_params(style_params);  				link_params.color.control = "HTMLLinkColor";  				link_params.link_href = url; -				mEditor->appendText(chat.mFromName + delimiter, false, link_params); +				mEditor->appendText("<nolink>" + chat.mFromName + "</nolink>"  + delimiter, +									false, link_params);  			}  			else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() )  			{ diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h index 5a10b688da..651dabff9e 100644 --- a/indra/newview/lldrawable.h +++ b/indra/newview/lldrawable.h @@ -44,7 +44,6 @@  #include "llquaternion.h"  #include "xform.h"  #include "llmemtype.h" -#include "llprimitive.h"  #include "lldarray.h"  #include "llviewerobject.h"  #include "llrect.h" diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index f5bb777419..a5b62439f4 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -370,7 +370,8 @@ struct LLFavoritesSort  LLFavoritesBarCtrl::Params::Params()  : image_drag_indication("image_drag_indication"), -  chevron_button("chevron_button") +  chevron_button("chevron_button"), +  label("label")  {  } @@ -401,6 +402,10 @@ LLFavoritesBarCtrl::LLFavoritesBarCtrl(const LLFavoritesBarCtrl::Params& p)  	chevron_button_params.click_callback.function(boost::bind(&LLFavoritesBarCtrl::showDropDownMenu, this));       	mChevronButton = LLUICtrlFactory::create<LLButton> (chevron_button_params);  	addChild(mChevronButton);  + +	LLTextBox::Params label_param(p.label); +	mBarLabel = LLUICtrlFactory::create<LLTextBox> (label_param); +	addChild(mBarLabel);  }  LLFavoritesBarCtrl::~LLFavoritesBarCtrl() diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 40dd551eef..2c6d8d1580 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -35,6 +35,7 @@  #include "llbutton.h"  #include "lluictrl.h" +#include "lltextbox.h"  #include "llinventoryobserver.h"  #include "llinventorymodel.h" @@ -46,6 +47,7 @@ public:  	{  		Optional<LLUIImage*> image_drag_indication;  		Optional<LLButton::Params> chevron_button; +		Optional<LLTextBox::Params> label;  		Params();  	}; @@ -139,6 +141,7 @@ private:  	LLUICtrl* mLandingTab;  	LLUICtrl* mLastTab;  	LLButton* mChevronButton; +	LLTextBox* mBarLabel;  	LLUUID mDragItemId;  	BOOL mStartDrag; diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp index 60f150bd96..904655cdc8 100644 --- a/indra/newview/llfloateranimpreview.cpp +++ b/indra/newview/llfloateranimpreview.cpp @@ -86,38 +86,40 @@ const F32 BASE_ANIM_TIME_OFFSET = 5.f;  std::string STATUS[] =  { -  "E_ST_OK", -  "E_ST_EOF", -  "E_ST_NO_CONSTRAINT", -  "E_ST_NO_FILE", -"E_ST_NO_HIER", -"E_ST_NO_JOINT", -"E_ST_NO_NAME", -"E_ST_NO_OFFSET", -"E_ST_NO_CHANNELS", -"E_ST_NO_ROTATION", -"E_ST_NO_AXIS", -"E_ST_NO_MOTION", -"E_ST_NO_FRAMES", -"E_ST_NO_FRAME_TIME", -"E_ST_NO_POS", -"E_ST_NO_ROT", -"E_ST_NO_XLT_FILE", -"E_ST_NO_XLT_HEADER", -"E_ST_NO_XLT_NAME", -"E_ST_NO_XLT_IGNORE", -"E_ST_NO_XLT_RELATIVE", -"E_ST_NO_XLT_OUTNAME", -"E_ST_NO_XLT_MATRIX", -"E_ST_NO_XLT_MERGECHILD", -"E_ST_NO_XLT_MERGEPARENT", -"E_ST_NO_XLT_PRIORITY", -"E_ST_NO_XLT_LOOP", -"E_ST_NO_XLT_EASEIN", -"E_ST_NO_XLT_EASEOUT", -"E_ST_NO_XLT_HAND", -"E_ST_NO_XLT_EMOTE", +	"E_ST_OK", +	"E_ST_EOF", +	"E_ST_NO_CONSTRAINT", +	"E_ST_NO_FILE", +	"E_ST_NO_HIER", +	"E_ST_NO_JOINT", +	"E_ST_NO_NAME", +	"E_ST_NO_OFFSET", +	"E_ST_NO_CHANNELS", +	"E_ST_NO_ROTATION", +	"E_ST_NO_AXIS", +	"E_ST_NO_MOTION", +	"E_ST_NO_FRAMES", +	"E_ST_NO_FRAME_TIME", +	"E_ST_NO_POS", +	"E_ST_NO_ROT", +	"E_ST_NO_XLT_FILE", +	"E_ST_NO_XLT_HEADER", +	"E_ST_NO_XLT_NAME", +	"E_ST_NO_XLT_IGNORE", +	"E_ST_NO_XLT_RELATIVE", +	"E_ST_NO_XLT_OUTNAME", +	"E_ST_NO_XLT_MATRIX", +	"E_ST_NO_XLT_MERGECHILD", +	"E_ST_NO_XLT_MERGEPARENT", +	"E_ST_NO_XLT_PRIORITY", +	"E_ST_NO_XLT_LOOP", +	"E_ST_NO_XLT_EASEIN", +	"E_ST_NO_XLT_EASEOUT", +	"E_ST_NO_XLT_HAND", +	"E_ST_NO_XLT_EMOTE", +	"E_ST_BAD_ROOT"  }; +  //-----------------------------------------------------------------------------  // LLFloaterAnimPreview()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 0ad283d7c6..8cd63deebe 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -427,8 +427,26 @@ BOOL LLPanelLandGeneral::postBuild()  	mBtnBuyLand = getChild<LLButton>("Buy Land...");  	mBtnBuyLand->setClickedCallback(onClickBuyLand, (void*)&BUY_PERSONAL_LAND); -	mBtnScriptLimits = getChild<LLButton>("Scripts..."); -	mBtnScriptLimits->setClickedCallback(onClickScriptLimits, this); +	// note: on region change this will not be re checked, should not matter on Agni as +	// 99% of the time all regions will return the same caps. In case of an erroneous setting +	// to enabled the floater will just throw an error when trying to get it's cap +	std::string url = gAgent.getRegion()->getCapability("LandResources"); +	if (!url.empty()) +	{ +		mBtnScriptLimits = getChild<LLButton>("Scripts..."); +		if(mBtnScriptLimits) +		{ +			mBtnScriptLimits->setClickedCallback(onClickScriptLimits, this); +		} +	} +	else +	{ +		mBtnScriptLimits = getChild<LLButton>("Scripts..."); +		if(mBtnScriptLimits) +		{ +			mBtnScriptLimits->setVisible(false); +		} +	}  	mBtnBuyGroupLand = getChild<LLButton>("Buy For Group...");  	mBtnBuyGroupLand->setClickedCallback(onClickBuyLand, (void*)&BUY_GROUP_LAND); diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp index 8875e35821..4194416a01 100644 --- a/indra/newview/llfloaterscriptlimits.cpp +++ b/indra/newview/llfloaterscriptlimits.cpp @@ -59,10 +59,30 @@  /// LLFloaterScriptLimits  ///---------------------------------------------------------------------------- -// due to server side bugs the full summary display is not possible -// until they are fixed this define creates a simple version of the -// summary which only shows available & correct information -#define USE_SIMPLE_SUMMARY +// debug switches, won't work in release +#ifndef LL_RELEASE_FOR_DOWNLOAD + +// dump responder replies to llinfos for debugging +//#define DUMP_REPLIES_TO_LLINFOS + +#ifdef DUMP_REPLIES_TO_LLINFOS +#include "llsdserialize.h" +#include "llwindow.h" +#endif + +// use fake LLSD responses to check the viewer side is working correctly +// I'm syncing this with the server side efforts so hopfully we can keep +// the to-ing and fro-ing between the two teams to a minimum +//#define USE_FAKE_RESPONSES + +#ifdef USE_FAKE_RESPONSES +const S32 FAKE_NUMBER_OF_URLS = 329; +const S32 FAKE_AVAILABLE_URLS = 731; +const S32 FAKE_AMOUNT_OF_MEMORY = 66741; +const S32 FAKE_AVAILABLE_MEMORY = 895577; +#endif + +#endif  const S32 SIZE_OF_ONE_KB = 1024; @@ -87,32 +107,41 @@ BOOL LLFloaterScriptLimits::postBuild()  	}  	mTab = getChild<LLTabContainer>("scriptlimits_panels"); +	 +	if(!mTab) +	{ +		llinfos << "Error! couldn't get scriptlimits_panels, aborting Script Information setup" << llendl; +		return FALSE; +	}  	// contruct the panels -	LLPanelScriptLimitsRegionMemory* panel_memory; -	panel_memory = new LLPanelScriptLimitsRegionMemory; -	mInfoPanels.push_back(panel_memory); +	std::string land_url = gAgent.getRegion()->getCapability("LandResources"); +	if (!land_url.empty()) +	{ +		LLPanelScriptLimitsRegionMemory* panel_memory; +		panel_memory = new LLPanelScriptLimitsRegionMemory; +		mInfoPanels.push_back(panel_memory); +		LLUICtrlFactory::getInstance()->buildPanel(panel_memory, "panel_script_limits_region_memory.xml"); +		mTab->addTabPanel(panel_memory); +	} -	LLUICtrlFactory::getInstance()->buildPanel(panel_memory, "panel_script_limits_region_memory.xml"); -	mTab->addTabPanel(panel_memory); - -	LLPanelScriptLimitsRegionURLs* panel_urls = new LLPanelScriptLimitsRegionURLs; -	mInfoPanels.push_back(panel_urls); -	LLUICtrlFactory::getInstance()->buildPanel(panel_urls, "panel_script_limits_region_urls.xml"); -	mTab->addTabPanel(panel_urls); - -	LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment; -	mInfoPanels.push_back(panel_attachments); -	LLUICtrlFactory::getInstance()->buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml"); -	mTab->addTabPanel(panel_attachments); - -	if(selectParcelPanel) +	std::string attachment_url = gAgent.getRegion()->getCapability("AttachmentResources"); +	if (!attachment_url.empty()) +	{ +		LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment; +		mInfoPanels.push_back(panel_attachments); +		LLUICtrlFactory::getInstance()->buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml"); +		mTab->addTabPanel(panel_attachments); +	} +	 +	if(mInfoPanels.size() > 0)  	{  		mTab->selectTab(0);  	} -	else + +	if(!selectParcelPanel && (mInfoPanels.size() > 1))  	{ -		mTab->selectTab(2); +		mTab->selectTab(1);  	}  	return TRUE; @@ -160,6 +189,20 @@ void LLPanelScriptLimitsInfo::updateChild(LLUICtrl* child_ctr)  void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content)  { +	//we don't need to test with a fake respose here (shouldn't anyway) + +#ifdef DUMP_REPLIES_TO_LLINFOS + +	LLSDNotationStreamer notation_streamer(content); +	std::ostringstream nice_llsd; +	nice_llsd << notation_streamer; + +	OSMessageBox(nice_llsd.str(), "main cap response:", 0); + +	llinfos << "main cap response:" << content << llendl; + +#endif +  	// at this point we have an llsd which should contain ether one or two urls to the services we want.  	// first we look for the details service:  	if(content.has("ScriptResourceDetails")) @@ -173,24 +216,6 @@ void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content)  		{  			llinfos << "Failed to get llfloaterscriptlimits instance" << llendl;  		} -		else -		{ - -// temp - only show info if we get details - there's nothing to show if not until the sim gets fixed -#ifdef USE_SIMPLE_SUMMARY - -			LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -			LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); -			std::string msg = LLTrans::getString("ScriptLimitsRequestDontOwnParcel"); -			panel_memory->childSetValue("loading_text", LLSD(msg)); -			LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel"); -			panel_urls->childSetValue("loading_text", LLSD(msg)); -			 -			// intentional early out as we dont want the resource summary if we are using the "simple summary" -			// and the details are missing -			return; -#endif -		}  	}  	// then the summary service: @@ -205,8 +230,61 @@ void fetchScriptLimitsRegionInfoResponder::error(U32 status, const std::string&  	llinfos << "Error from responder " << reason << llendl;  } -void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content) +void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref)  { +#ifdef USE_FAKE_RESPONSES + +	LLSD fake_content; +	LLSD summary = LLSD::emptyMap(); +	LLSD available = LLSD::emptyArray(); +	LLSD available_urls = LLSD::emptyMap(); +	LLSD available_memory = LLSD::emptyMap(); +	LLSD used = LLSD::emptyArray(); +	LLSD used_urls = LLSD::emptyMap(); +	LLSD used_memory = LLSD::emptyMap(); + +	used_urls["type"] = "urls"; +	used_urls["amount"] = FAKE_NUMBER_OF_URLS; +	available_urls["type"] = "urls"; +	available_urls["amount"] = FAKE_AVAILABLE_URLS; +	used_memory["type"] = "memory"; +	used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY; +	available_memory["type"] = "memory"; +	available_memory["amount"] = FAKE_AVAILABLE_MEMORY; + +//summary response:{'summary':{'available':[{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'},{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'}],'used':[{'amount':i329,'type':'urls'},{'amount':i66741,'type':'memory'}]}} + +	used.append(used_urls); +	used.append(used_memory); +	available.append(available_urls); +	available.append(available_memory); + +	summary["available"] = available; +	summary["used"] = used; +	 +	fake_content["summary"] = summary; + +	const LLSD& content = fake_content; + +#else + +	const LLSD& content = content_ref; + +#endif + + +#ifdef DUMP_REPLIES_TO_LLINFOS + +	LLSDNotationStreamer notation_streamer(content); +	std::ostringstream nice_llsd; +	nice_llsd << notation_streamer; + +	OSMessageBox(nice_llsd.str(), "summary response:", 0); + +	llinfos << "summary response:" << *content << llendl; + +#endif +  	LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");  	if(!instance)  	{ @@ -217,8 +295,6 @@ void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content)  		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");  		LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");  		panel_memory->setRegionSummary(content); -		LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel"); -		panel_urls->setRegionSummary(content);  	}  } @@ -227,8 +303,82 @@ void fetchScriptLimitsRegionSummaryResponder::error(U32 status, const std::strin  	llinfos << "Error from responder " << reason << llendl;  } -void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content) +void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content_ref)  { +#ifdef USE_FAKE_RESPONSES +/* +Updated detail service, ** denotes field added: + +result (map) ++-parcels (array of maps) +  +-id (uuid) +  +-local_id (S32)** +  +-name (string) +  +-owner_id (uuid) (in ERS as owner, but owner_id in code) +  +-objects (array of maps) +    +-id (uuid) +    +-name (string) +	+-owner_id (uuid) (in ERS as owner, in code as owner_id) +	+-owner_name (sting)** +	+-location (map)** +	  +-x (float) +	  +-y (float) +	  +-z (float) +    +-resources (map) (this is wrong in the ERS but right in code) +      +-type (string) +      +-amount (int) +*/ +	LLSD fake_content; +	LLSD resource = LLSD::emptyMap(); +	LLSD location = LLSD::emptyMap(); +	LLSD object = LLSD::emptyMap(); +	LLSD objects = LLSD::emptyArray(); +	LLSD parcel = LLSD::emptyMap(); +	LLSD parcels = LLSD::emptyArray(); + +	resource["urls"] = FAKE_NUMBER_OF_URLS; +	resource["memory"] = FAKE_AMOUNT_OF_MEMORY; +	 +	location["x"] = 128.0f; +	location["y"] = 128.0f; +	location["z"] = 0.0f; +	 +	object["id"] = LLUUID("d574a375-0c6c-fe3d-5733-da669465afc7"); +	object["name"] = "Gabs fake Object!"; +	object["owner_id"] = LLUUID("8dbf2d41-69a0-4e5e-9787-0c9d297bc570"); +	object["owner_name"] = "Gabs Linden"; +	object["location"] = location; +	object["resources"] = resource; + +	objects.append(object); + +	parcel["id"] = LLUUID("da05fb28-0d20-e593-2728-bddb42dd0160"); +	parcel["local_id"] = 42; +	parcel["name"] = "Gabriel Linden\'s Sub Plot"; +	parcel["objects"] = objects; +	parcels.append(parcel); + +	fake_content["parcels"] = parcels; +	const LLSD& content = fake_content; + +#else + +	const LLSD& content = content_ref; + +#endif + +#ifdef DUMP_REPLIES_TO_LLINFOS + +	LLSDNotationStreamer notation_streamer(content); +	std::ostringstream nice_llsd; +	nice_llsd << notation_streamer; + +	OSMessageBox(nice_llsd.str(), "details response:", 0); + +	llinfos << "details response:" << content << llendl; + +#endif +  	LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");  	if(!instance) @@ -238,11 +388,22 @@ void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content)  	else  	{  		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -		LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); -		panel_memory->setRegionDetails(content); -		 -		LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel"); -		panel_urls->setRegionDetails(content); +		if(tab) +		{ +			LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); +			if(panel_memory) +			{ +				panel_memory->setRegionDetails(content); +			} +			else +			{ +				llinfos << "Failed to get scriptlimits memory panel" << llendl; +			} +		} +		else +		{ +			llinfos << "Failed to get scriptlimits_panels" << llendl; +		}  	}  } @@ -251,8 +412,61 @@ void fetchScriptLimitsRegionDetailsResponder::error(U32 status, const std::strin  	llinfos << "Error from responder " << reason << llendl;  } -void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content) +void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref)  { + +#ifdef USE_FAKE_RESPONSES + +	// just add the summary, as that's all I'm testing currently! +	LLSD fake_content = LLSD::emptyMap(); +	LLSD summary = LLSD::emptyMap(); +	LLSD available = LLSD::emptyArray(); +	LLSD available_urls = LLSD::emptyMap(); +	LLSD available_memory = LLSD::emptyMap(); +	LLSD used = LLSD::emptyArray(); +	LLSD used_urls = LLSD::emptyMap(); +	LLSD used_memory = LLSD::emptyMap(); + +	used_urls["type"] = "urls"; +	used_urls["amount"] = FAKE_NUMBER_OF_URLS; +	available_urls["type"] = "urls"; +	available_urls["amount"] = FAKE_AVAILABLE_URLS; +	used_memory["type"] = "memory"; +	used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY; +	available_memory["type"] = "memory"; +	available_memory["amount"] = FAKE_AVAILABLE_MEMORY; + +	used.append(used_urls); +	used.append(used_memory); +	available.append(available_urls); +	available.append(available_memory); + +	summary["available"] = available; +	summary["used"] = used; +	 +	fake_content["summary"] = summary; +	fake_content["attachments"] = content_ref["attachments"]; + +	const LLSD& content = fake_content; + +#else + +	const LLSD& content = content_ref; + +#endif + +#ifdef DUMP_REPLIES_TO_LLINFOS + +	LLSDNotationStreamer notation_streamer(content); +	std::ostringstream nice_llsd; +	nice_llsd << notation_streamer; + +	OSMessageBox(nice_llsd.str(), "attachment response:", 0); +	 +	llinfos << "attachment response:" << content << llendl; + +#endif +  	LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");  	if(!instance) @@ -262,8 +476,22 @@ void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content)  	else  	{  		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -		LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel"); -		panel->setAttachmentDetails(content); +		if(tab) +		{ +			LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel"); +			if(panel) +			{ +				panel->setAttachmentDetails(content); +			} +			else +			{ +				llinfos << "Failed to get script_limits_my_avatar_panel" << llendl; +			} +		} +		else +		{ +			llinfos << "Failed to get scriptlimits_panels" << llendl; +		}  	}  } @@ -309,7 +537,7 @@ void LLPanelScriptLimitsRegionMemory::processParcelInfo(const LLParcelData& parc  	{  		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");  		childSetValue("loading_text", LLSD(msg_waiting)); -	}	 +	}  }  void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id) @@ -341,6 +569,11 @@ void LLPanelScriptLimitsRegionMemory::onNameCache(  	std::string name = first_name + " " + last_name;  	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");	 +	if(!list) +	{ +		return; +	} +	  	std::vector<LLSD>::iterator id_itor;  	for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)  	{ @@ -351,33 +584,8 @@ void LLPanelScriptLimitsRegionMemory::onNameCache(  			if(item)  			{ -				item->getColumn(2)->setValue(LLSD(name)); -				element["columns"][2]["value"] = name; -			} -		} -	} - -	// fill in the url's tab if needed, all urls must have memory so we can do it all here -	LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); -	if(instance) -	{ -		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -		LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_urls_panel"); - -		LLScrollListCtrl *list = panel->getChild<LLScrollListCtrl>("scripts_list");	 -		std::vector<LLSD>::iterator id_itor; -		for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor) -		{ -			LLSD element = *id_itor; -			if(element["owner_id"].asUUID() == id) -			{ -				LLScrollListItem* item = list->getItem(element["id"].asUUID()); - -				if(item) -				{ -					item->getColumn(2)->setValue(LLSD(name)); -					element["columns"][2]["value"] = name; -				} +				item->getColumn(3)->setValue(LLSD(name)); +				element["columns"][3]["value"] = name;  			}  		}  	} @@ -386,6 +594,12 @@ void LLPanelScriptLimitsRegionMemory::onNameCache(  void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)  {  	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); +	 +	if(!list) +	{ +		llinfos << "Error getting the scripts_list control" << llendl; +		return; +	}  	S32 number_parcels = content["parcels"].size(); @@ -394,130 +608,197 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)  	std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels);  	childSetValue("parcels_listed", LLSD(msg_parcels)); -	S32 total_objects = 0; -	S32 total_size = 0; -  	std::vector<LLUUID> names_requested; +	// This makes the assumption that all objects will have the same set +	// of attributes, ie they will all have, or none will have locations +	// This is a pretty safe assumption as it's reliant on server version. +	bool has_locations = false; +	bool has_local_ids = false; +  	for(S32 i = 0; i < number_parcels; i++)  	{  		std::string parcel_name = content["parcels"][i]["name"].asString();  		LLUUID parcel_id = content["parcels"][i]["id"].asUUID();  		S32 number_objects = content["parcels"][i]["objects"].size(); + +		S32 local_id = 0; +		if(content["parcels"][i].has("local_id")) +		{ +			// if any locations are found flag that we can use them and turn on the highlight button +			has_local_ids = true; +			local_id = content["parcels"][i]["local_id"].asInteger(); +		} +  		for(S32 j = 0; j < number_objects; j++)  		{  			S32 size = content["parcels"][i]["objects"][j]["resources"]["memory"].asInteger() / SIZE_OF_ONE_KB; -			total_size += size; +			 +			S32 urls = content["parcels"][i]["objects"][j]["resources"]["urls"].asInteger();  			std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString();  			LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID();  			LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID(); -			 + +			F32 location_x = 0.0f; +			F32 location_y = 0.0f; +			F32 location_z = 0.0f; + +			if(content["parcels"][i]["objects"][j].has("location")) +			{ +				// if any locations are found flag that we can use them and turn on the highlight button +				LLVector3 vec = ll_vector3_from_sd(content["parcels"][i]["objects"][j]["location"]); +				has_locations = true; +				location_x = vec.mV[0]; +				location_y = vec.mV[1]; +				location_z = vec.mV[2]; +			} +  			std::string owner_buf; -			 -			BOOL name_is_cached = gCacheName->getFullName(owner_id, owner_buf); -			if(!name_is_cached) + +			// in the future the server will give us owner names, so see if we're there yet: +			if(content["parcels"][i]["objects"][j].has("owner_name")) +			{ +				owner_buf = content["parcels"][i]["objects"][j]["owner_name"].asString(); +			} +			// ...and if not use the slightly more painful method of disovery: +			else  			{ -				if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end()) +				BOOL name_is_cached = gCacheName->getFullName(owner_id, owner_buf); +				if(!name_is_cached)  				{ -					names_requested.push_back(owner_id); -					gCacheName->get(owner_id, TRUE, -					boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache, -						this, _1, _2, _3)); +					if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end()) +					{ +						names_requested.push_back(owner_id); +						gCacheName->get(owner_id, TRUE, +						boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache, +							this, _1, _2, _3)); +					}  				}  			}  			LLSD element;  			element["id"] = task_id; -			element["owner_id"] = owner_id;  			element["columns"][0]["column"] = "size";  			element["columns"][0]["value"] = llformat("%d", size);  			element["columns"][0]["font"] = "SANSSERIF"; -			element["columns"][1]["column"] = "name"; -			element["columns"][1]["value"] = name_buf; +			element["columns"][1]["column"] = "urls"; +			element["columns"][1]["value"] = llformat("%d", urls);  			element["columns"][1]["font"] = "SANSSERIF"; -			element["columns"][2]["column"] = "owner"; -			element["columns"][2]["value"] = owner_buf; +			element["columns"][2]["column"] = "name"; +			element["columns"][2]["value"] = name_buf;  			element["columns"][2]["font"] = "SANSSERIF"; -			element["columns"][3]["column"] = "location"; -			element["columns"][3]["value"] = parcel_name; +			element["columns"][3]["column"] = "owner"; +			element["columns"][3]["value"] = owner_buf;  			element["columns"][3]["font"] = "SANSSERIF"; +			element["columns"][4]["column"] = "parcel"; +			element["columns"][4]["value"] = parcel_name; +			element["columns"][4]["font"] = "SANSSERIF"; +			element["columns"][5]["column"] = "location"; +			if(has_locations) +			{ +				element["columns"][5]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z); +			} +			else +			{ +				element["columns"][5]["value"] = ""; +			} +			element["columns"][5]["font"] = "SANSSERIF";  			list->addElement(element, ADD_SORTED); +			 +			element["owner_id"] = owner_id; +			element["local_id"] = local_id;  			mObjectListItems.push_back(element); -			total_objects++;  		}  	} -	mParcelMemoryUsed =total_size; -	mGotParcelMemoryUsed = TRUE; -	populateParcelMemoryText(); -} +	if (has_locations) +	{ +		LLButton* btn = getChild<LLButton>("highlight_btn"); +		if(btn) +		{ +			btn->setVisible(true); +		} +	} -void LLPanelScriptLimitsRegionMemory::populateParcelMemoryText() -{ -	if(mGotParcelMemoryUsed && mGotParcelMemoryMax) +	if (has_local_ids)  	{ -#ifdef USE_SIMPLE_SUMMARY -		LLStringUtil::format_map_t args_parcel_memory; -		args_parcel_memory["[COUNT]"] = llformat ("%d", mParcelMemoryUsed); -		std::string msg_parcel_memory = LLTrans::getString("ScriptLimitsMemoryUsedSimple", args_parcel_memory); -		childSetValue("memory_used", LLSD(msg_parcel_memory)); -#else -		S32 parcel_memory_available = mParcelMemoryMax - mParcelMemoryUsed; +		LLButton* btn = getChild<LLButton>("return_btn"); +		if(btn) +		{ +			btn->setVisible(true); +		} +	} -		LLStringUtil::format_map_t args_parcel_memory; -		args_parcel_memory["[COUNT]"] = llformat ("%d", mParcelMemoryUsed); -		args_parcel_memory["[MAX]"] = llformat ("%d", mParcelMemoryMax); -		args_parcel_memory["[AVAILABLE]"] = llformat ("%d", parcel_memory_available); -		std::string msg_parcel_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_parcel_memory); -		childSetValue("memory_used", LLSD(msg_parcel_memory)); -#endif +	// save the structure to make object return easier +	mContent = content; -		childSetValue("loading_text", LLSD(std::string(""))); -	} +	childSetValue("loading_text", LLSD(std::string("")));  }  void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content)  { -	if(content["summary"]["available"][0]["type"].asString() == std::string("memory")) +	if(content["summary"]["used"][0]["type"].asString() == std::string("memory"))  	{ -		mParcelMemoryMax = content["summary"]["available"][0]["amount"].asInteger(); -		mGotParcelMemoryMax = TRUE; +		mParcelMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; +		mParcelMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; +		mGotParcelMemoryUsed = TRUE;  	} -	else if(content["summary"]["available"][1]["type"].asString() == std::string("memory")) +	else if(content["summary"]["used"][1]["type"].asString() == std::string("memory"))  	{ -		mParcelMemoryMax = content["summary"]["available"][1]["amount"].asInteger(); -		mGotParcelMemoryMax = TRUE; +		mParcelMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; +		mParcelMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; +		mGotParcelMemoryUsed = TRUE;  	}  	else  	{  		llinfos << "summary doesn't contain memory info" << llendl;  		return;  	} -/* -	currently this is broken on the server, so we get this value from the details section -	and update via populateParcelMemoryText() when both sets of information have been returned - -	when the sim is fixed this should be used instead: -	if(content["summary"]["used"][0]["type"].asString() == std::string("memory")) +	 +	if(content["summary"]["used"][0]["type"].asString() == std::string("urls"))  	{ -		mParcelMemoryUsed = content["summary"]["used"][0]["amount"].asInteger(); -		mGotParcelMemoryUsed = TRUE; +		mParcelURLsUsed = content["summary"]["used"][0]["amount"].asInteger(); +		mParcelURLsMax = content["summary"]["available"][0]["amount"].asInteger(); +		mGotParcelURLsUsed = TRUE;  	} -	else if(content["summary"]["used"][1]["type"].asString() == std::string("memory")) +	else if(content["summary"]["used"][1]["type"].asString() == std::string("urls"))  	{ -		mParcelMemoryUsed = content["summary"]["used"][1]["amount"].asInteger(); -		mGotParcelMemoryUsed = TRUE; +		mParcelURLsUsed = content["summary"]["used"][1]["amount"].asInteger(); +		mParcelURLsMax = content["summary"]["available"][1]["amount"].asInteger(); +		mGotParcelURLsUsed = TRUE;  	}  	else  	{ -		//ERROR!!! +		llinfos << "summary doesn't contain urls info" << llendl;  		return; -	}*/ +	} -	populateParcelMemoryText(); +	if((mParcelMemoryUsed >= 0) && (mParcelMemoryMax >= 0)) +	{ +		S32 parcel_memory_available = mParcelMemoryMax - mParcelMemoryUsed; + +		LLStringUtil::format_map_t args_parcel_memory; +		args_parcel_memory["[COUNT]"] = llformat ("%d", mParcelMemoryUsed); +		args_parcel_memory["[MAX]"] = llformat ("%d", mParcelMemoryMax); +		args_parcel_memory["[AVAILABLE]"] = llformat ("%d", parcel_memory_available); +		std::string msg_parcel_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_parcel_memory); +		childSetValue("memory_used", LLSD(msg_parcel_memory)); +	} + +	if((mParcelURLsUsed >= 0) && (mParcelURLsMax >= 0)) +	{ +		S32 parcel_urls_available = mParcelURLsMax - mParcelURLsUsed; + +		LLStringUtil::format_map_t args_parcel_urls; +		args_parcel_urls["[COUNT]"] = llformat ("%d", mParcelURLsUsed); +		args_parcel_urls["[MAX]"] = llformat ("%d", mParcelURLsMax); +		args_parcel_urls["[AVAILABLE]"] = llformat ("%d", parcel_urls_available); +		std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_parcel_urls); +		childSetValue("urls_used", LLSD(msg_parcel_urls)); +	}  }  BOOL LLPanelScriptLimitsRegionMemory::postBuild() @@ -530,6 +811,10 @@ BOOL LLPanelScriptLimitsRegionMemory::postBuild()  	childSetValue("loading_text", LLSD(msg_waiting));  	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); +	if(!list) +	{ +		return FALSE; +	}  	//set all columns to resizable mode even if some columns will be empty  	for(S32 column = 0; column < list->getNumColumns(); column++) @@ -548,18 +833,11 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()  	LLFloaterLand* instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land");  	if(!instance)  	{ -		//this isnt really an error... -//		llinfos << "Failed to get about land instance" << llendl; -//		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");  		childSetValue("loading_text", LLSD(std::string("")));  		//might have to do parent post build here  		//if not logic below could use early outs  		return FALSE;  	} - -	LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -	LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel"); -  	LLParcel* parcel = instance->getCurrentSelectedParcel();  	LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); @@ -575,7 +853,6 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()  		{  			std::string msg_wrong_region = LLTrans::getString("ScriptLimitsRequestWrongRegion");  			childSetValue("loading_text", LLSD(msg_wrong_region)); -			panel_urls->childSetValue("loading_text", LLSD(msg_wrong_region));  			return FALSE;  		} @@ -605,14 +882,12 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()  			std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");  			childSetValue("loading_text", LLSD(msg_waiting)); -			panel_urls->childSetValue("loading_text", LLSD(msg_waiting));  		}  	}  	else  	{ -		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError"); +		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestNoParcelSelected");  		childSetValue("loading_text", LLSD(msg_waiting)); -		panel_urls->childSetValue("loading_text", LLSD(msg_waiting));  	}  	return LLPanelScriptLimitsInfo::postBuild(); @@ -629,10 +904,13 @@ void LLPanelScriptLimitsRegionMemory::clearList()  	mGotParcelMemoryUsed = FALSE;  	mGotParcelMemoryMax = FALSE; +	mGotParcelURLsUsed = FALSE; +	mGotParcelURLsMax = FALSE;  	LLStringUtil::format_map_t args_parcel_memory;  	std::string msg_empty_string("");  	childSetValue("memory_used", LLSD(msg_empty_string)); +	childSetValue("urls_used", LLSD(msg_empty_string));  	childSetValue("parcels_listed", LLSD(msg_empty_string));  	mObjectListItems.clear(); @@ -647,13 +925,16 @@ void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata)  	if(instance)  	{  		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -		LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); -		panel_memory->clearList(); - -		LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel"); -		panel_urls->clearList(); +		if(tab) +		{ +			LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); +			if(panel_memory) +			{ +				panel_memory->clearList(); -		panel_memory->StartRequestChain(); +				panel_memory->StartRequestChain(); +			} +		}  		return;  	}  	else @@ -665,78 +946,80 @@ void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata)  void LLPanelScriptLimitsRegionMemory::showBeacon()  {	 -/*	LLScrollListCtrl* list = getChild<LLScrollListCtrl>("scripts_list"); +	LLScrollListCtrl* list = getChild<LLScrollListCtrl>("scripts_list");  	if (!list) return;  	LLScrollListItem* first_selected = list->getFirstSelected();  	if (!first_selected) return; -	std::string name = first_selected->getColumn(1)->getValue().asString(); -	std::string pos_string =  first_selected->getColumn(3)->getValue().asString(); +	std::string name = first_selected->getColumn(2)->getValue().asString(); +	std::string pos_string =  first_selected->getColumn(5)->getValue().asString(); -	llinfos << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" <<llendl; -	llinfos << "name = " << name << " pos = " << pos_string << llendl; -  	F32 x, y, z;  	S32 matched = sscanf(pos_string.c_str(), "<%g,%g,%g>", &x, &y, &z);  	if (matched != 3) return;  	LLVector3 pos_agent(x, y, z);  	LLVector3d pos_global = gAgent.getPosGlobalFromAgent(pos_agent); -	llinfos << "name = " << name << " pos = " << pos_string << llendl; +  	std::string tooltip(""); -	LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM);*/ +	LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM);  }  // static  void LLPanelScriptLimitsRegionMemory::onClickHighlight(void* userdata)  { -/*	llinfos << "LLPanelRegionGeneralInfo::onClickHighlight" << llendl; +	llinfos << "LLPanelRegionGeneralInfo::onClickHighlight" << llendl;  	LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");  	if(instance)  	{  		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -		LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); -		panel->showBeacon(); +		if(tab) +		{ +			LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); +			if(panel) +			{ +				panel->showBeacon(); +			} +		}  		return;  	}  	else  	{  		llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl; -//		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError"); -//		panel->childSetValue("loading_text", LLSD(msg_waiting));  		return; -	}*/ +	}  } -void LLPanelScriptLimitsRegionMemory::returnObjects() +void LLPanelScriptLimitsRegionMemory::returnObjectsFromParcel(S32 local_id)  { -/*	llinfos << "started" << llendl;  	LLMessageSystem *msg = gMessageSystem;  	LLViewerRegion* region = gAgent.getRegion();  	if (!region) return; -	llinfos << "got region" << llendl;  	LLCtrlListInterface *list = childGetListInterface("scripts_list");  	if (!list || list->getItemCount() == 0) return; -	llinfos << "got list" << llendl; -	std::vector<LLUUID>::iterator id_itor; +	std::vector<LLSD>::iterator id_itor;  	bool start_message = true; -	for (id_itor = mObjectListIDs.begin(); id_itor != mObjectListIDs.end(); ++id_itor) +	for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)  	{ -		LLUUID task_id = *id_itor; -		llinfos << task_id << llendl; -		if (!list->isSelected(task_id)) +		LLSD element = *id_itor; +		if (!list->isSelected(element["id"].asUUID()))  		{ -			llinfos << "not selected" << llendl;  			// Selected only  			continue;  		} -		llinfos << "selected" << llendl; +		 +		if(element["local_id"].asInteger() != local_id) +		{ +			// Not the parcel we are looking for +			continue; +		} +  		if (start_message)  		{  			msg->newMessageFast(_PREHASH_ParcelReturnObjects); @@ -744,285 +1027,74 @@ void LLPanelScriptLimitsRegionMemory::returnObjects()  			msg->addUUIDFast(_PREHASH_AgentID,	gAgent.getID());  			msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());  			msg->nextBlockFast(_PREHASH_ParcelData); -			msg->addS32Fast(_PREHASH_LocalID, -1); // Whole region -			msg->addS32Fast(_PREHASH_ReturnType, RT_LIST); +			msg->addS32Fast(_PREHASH_LocalID, element["local_id"].asInteger()); +			msg->addU32Fast(_PREHASH_ReturnType, RT_LIST);  			start_message = false; -			llinfos << "start message" << llendl;  		}  		msg->nextBlockFast(_PREHASH_TaskIDs); -		msg->addUUIDFast(_PREHASH_TaskID, task_id); -		llinfos << "added id" << llendl; +		msg->addUUIDFast(_PREHASH_TaskID, element["id"].asUUID());  		if (msg->isSendFullFast(_PREHASH_TaskIDs))  		{  			msg->sendReliable(region->getHost());  			start_message = true; -			llinfos << "sent 1" << llendl;  		}  	}  	if (!start_message)  	{  		msg->sendReliable(region->getHost()); -		llinfos << "sent 2" << llendl; -	}*/ +	}  } -// static -void LLPanelScriptLimitsRegionMemory::onClickReturn(void* userdata) +void LLPanelScriptLimitsRegionMemory::returnObjects()  { -/*	llinfos << "LLPanelRegionGeneralInfo::onClickReturn" << llendl; -	LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); -	if(instance) +	if(!mContent.has("parcels"))  	{ -		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -		LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); -		panel->returnObjects();  		return;  	} -	else -	{ -		llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl; -//		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError"); -//		panel->childSetValue("loading_text", LLSD(msg_waiting)); -		return; -	}*/ -} - -///---------------------------------------------------------------------------- -// URLs Panel -///---------------------------------------------------------------------------- - -void LLPanelScriptLimitsRegionURLs::setRegionDetails(LLSD content) -{ -	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); - -	S32 number_parcels = content["parcels"].size(); - -	LLStringUtil::format_map_t args_parcels; -	args_parcels["[PARCELS]"] = llformat ("%d", number_parcels); -	std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels); -	childSetValue("parcels_listed", LLSD(msg_parcels)); - -	S32 total_objects = 0; -	S32 total_size = 0; +	S32 number_parcels = mContent["parcels"].size(); + +	// a message per parcel containing all objects to be returned from that parcel  	for(S32 i = 0; i < number_parcels; i++)  	{ -		std::string parcel_name = content["parcels"][i]["name"].asString(); -		llinfos << parcel_name << llendl; - -		S32 number_objects = content["parcels"][i]["objects"].size(); -		for(S32 j = 0; j < number_objects; j++) +		S32 local_id = 0; +		if(mContent["parcels"][i].has("local_id"))  		{ -			if(content["parcels"][i]["objects"][j]["resources"].has("urls")) -			{ -				S32 size = content["parcels"][i]["objects"][j]["resources"]["urls"].asInteger(); -				total_size += size; -				 -				std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString(); -				LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID(); -				LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID(); - -				std::string owner_buf; -				gCacheName->getFullName(owner_id, owner_buf); //dont care if this fails as the memory tab will request and fill the field - -				LLSD element; - -				element["id"] = task_id; -				element["columns"][0]["column"] = "urls"; -				element["columns"][0]["value"] = llformat("%d", size); -				element["columns"][0]["font"] = "SANSSERIF"; -				element["columns"][1]["column"] = "name"; -				element["columns"][1]["value"] = name_buf; -				element["columns"][1]["font"] = "SANSSERIF"; -				element["columns"][2]["column"] = "owner"; -				element["columns"][2]["value"] = owner_buf; -				element["columns"][2]["font"] = "SANSSERIF"; -				element["columns"][3]["column"] = "location"; -				element["columns"][3]["value"] = parcel_name; -				element["columns"][3]["font"] = "SANSSERIF"; - -				list->addElement(element); -				mObjectListItems.push_back(element); -				total_objects++; -			} +			local_id = mContent["parcels"][i]["local_id"].asInteger(); +			returnObjectsFromParcel(local_id);  		}  	} -	 -	mParcelURLsUsed =total_size; -	mGotParcelURLsUsed = TRUE; -	populateParcelURLsText(); -} - -void LLPanelScriptLimitsRegionURLs::populateParcelURLsText() -{ -	if(mGotParcelURLsUsed && mGotParcelURLsMax) -	{ - -#ifdef USE_SIMPLE_SUMMARY -		LLStringUtil::format_map_t args_parcel_urls; -		args_parcel_urls["[COUNT]"] = llformat ("%d", mParcelURLsUsed); -		std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsedSimple", args_parcel_urls); -		childSetValue("urls_used", LLSD(msg_parcel_urls)); -#else -		S32 parcel_urls_available = mParcelURLsMax - mParcelURLsUsed; -		LLStringUtil::format_map_t args_parcel_urls; -		args_parcel_urls["[COUNT]"] = llformat ("%d", mParcelURLsUsed); -		args_parcel_urls["[MAX]"] = llformat ("%d", mParcelURLsMax); -		args_parcel_urls["[AVAILABLE]"] = llformat ("%d", parcel_urls_available); -		std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_parcel_urls); -		childSetValue("urls_used", LLSD(msg_parcel_urls)); -#endif - -		childSetValue("loading_text", LLSD(std::string(""))); - -	} +	onClickRefresh(NULL);  } -void LLPanelScriptLimitsRegionURLs::setRegionSummary(LLSD content) -{ -	if(content["summary"]["available"][0]["type"].asString() == std::string("urls")) -	{ -		mParcelURLsMax = content["summary"]["available"][0]["amount"].asInteger(); -		mGotParcelURLsMax = TRUE; -	} -	else if(content["summary"]["available"][1]["type"].asString() == std::string("urls")) -	{ -		mParcelURLsMax = content["summary"]["available"][1]["amount"].asInteger(); -		mGotParcelURLsMax = TRUE; -	} -	else -	{ -		llinfos << "summary contains no url info" << llendl; -		return; -	} -/* -	currently this is broken on the server, so we get this value from the details section -	and update via populateParcelMemoryText() when both sets of information have been returned - -	when the sim is fixed this should be used instead: -	if(content["summary"]["used"][0]["type"].asString() == std::string("urls")) -	{ -		mParcelURLsUsed = content["summary"]["used"][0]["amount"].asInteger(); -		mGotParcelURLsUsed = TRUE; -	} -	else if(content["summary"]["used"][1]["type"].asString() == std::string("urls")) -	{ -		mParcelURLsUsed = content["summary"]["used"][1]["amount"].asInteger(); -		mGotParcelURLsUsed = TRUE; -	} -	else -	{ -		//ERROR!!! -		return; -	}*/ - -	populateParcelURLsText(); -} - -BOOL LLPanelScriptLimitsRegionURLs::postBuild() -{ -	childSetAction("refresh_list_btn", onClickRefresh, this); -	childSetAction("highlight_btn", onClickHighlight, this); -	childSetAction("return_btn", onClickReturn, this); -		 -	std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting"); -	childSetValue("loading_text", LLSD(msg_waiting)); -	return FALSE; -} - -void LLPanelScriptLimitsRegionURLs::clearList() -{ -	LLCtrlListInterface *list = childGetListInterface("scripts_list"); - -	if (list) -	{ -		list->operateOnAll(LLCtrlListInterface::OP_DELETE); -	} - -	mGotParcelURLsUsed = FALSE; -	mGotParcelURLsMax = FALSE; -	 -	LLStringUtil::format_map_t args_parcel_urls; -	std::string msg_empty_string(""); -	childSetValue("urls_used", LLSD(msg_empty_string)); -	childSetValue("parcels_listed", LLSD(msg_empty_string)); - -	mObjectListItems.clear(); -} - -// static -void LLPanelScriptLimitsRegionURLs::onClickRefresh(void* userdata) -{ -	llinfos << "Refresh clicked" << llendl; -	 -	LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); -	if(instance) -	{ -		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -		LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); -		// use the memory panel to re-request all the info -		panel_memory->clearList(); - -		LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel"); -		// but the urls panel to clear itself -		panel_urls->clearList(); - -		panel_memory->StartRequestChain(); -		return; -	} -	else -	{ -		llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after refresh button clicked" << llendl; -		return; -	} -}  // static -void LLPanelScriptLimitsRegionURLs::onClickHighlight(void* userdata) +void LLPanelScriptLimitsRegionMemory::onClickReturn(void* userdata)  { -/*	llinfos << "Highlight clicked" << llendl; +	llinfos << "LLPanelRegionGeneralInfo::onClickReturn" << llendl;  	LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");  	if(instance)  	{  		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -		LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); -		// use the beacon function from the memory panel -		panel->showBeacon(); +		if(tab) +		{ +			LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); +			if(panel) +			{ +				panel->returnObjects(); +			} +		}  		return;  	}  	else  	{  		llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl; -//		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError"); -//		panel->childSetValue("loading_text", LLSD(msg_waiting)); -		return; -	}*/ -} - -// static -void LLPanelScriptLimitsRegionURLs::onClickReturn(void* userdata) -{ -/*	llinfos << "Return clicked" << llendl; -	LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); -	if(instance) -	{ -		LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); -		LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); -		// use the return function from the memory panel -		panel->returnObjects();  		return;  	} -	else -	{ -		llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl; -//		std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError"); -//		panel->childSetValue("loading_text", LLSD(msg_waiting)); -		return; -	}*/  }  ///---------------------------------------------------------------------------- @@ -1047,6 +1119,12 @@ BOOL LLPanelScriptLimitsAttachment::requestAttachmentDetails()  void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content)  {  	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); +	 +	if(!list) +	{ +		return; +	} +	  	S32 number_attachments = content["attachments"].size();  	for(int i = 0; i < number_attachments; i++) @@ -1096,6 +1174,8 @@ void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content)  			list->addElement(element);  		}  	} +	 +	setAttachmentSummary(content);  	childSetValue("loading_text", LLSD(std::string("")));  } @@ -1122,6 +1202,69 @@ void LLPanelScriptLimitsAttachment::clearList()  	childSetValue("loading_text", LLSD(msg_waiting));  } +void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content) +{ +	if(content["summary"]["used"][0]["type"].asString() == std::string("memory")) +	{ +		mAttachmentMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; +		mAttachmentMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; +		mGotAttachmentMemoryUsed = TRUE; +	} +	else if(content["summary"]["used"][1]["type"].asString() == std::string("memory")) +	{ +		mAttachmentMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; +		mAttachmentMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; +		mGotAttachmentMemoryUsed = TRUE; +	} +	else +	{ +		llinfos << "attachment details don't contain memory summary info" << llendl; +		return; +	} +	 +	if(content["summary"]["used"][0]["type"].asString() == std::string("urls")) +	{ +		mAttachmentURLsUsed = content["summary"]["used"][0]["amount"].asInteger(); +		mAttachmentURLsMax = content["summary"]["available"][0]["amount"].asInteger(); +		mGotAttachmentURLsUsed = TRUE; +	} +	else if(content["summary"]["used"][1]["type"].asString() == std::string("urls")) +	{ +		mAttachmentURLsUsed = content["summary"]["used"][1]["amount"].asInteger(); +		mAttachmentURLsMax = content["summary"]["available"][1]["amount"].asInteger(); +		mGotAttachmentURLsUsed = TRUE; +	} +	else +	{ +		llinfos << "attachment details don't contain urls summary info" << llendl; +		return; +	} + +	if((mAttachmentMemoryUsed >= 0) && (mAttachmentMemoryMax >= 0)) +	{ +		S32 attachment_memory_available = mAttachmentMemoryMax - mAttachmentMemoryUsed; + +		LLStringUtil::format_map_t args_attachment_memory; +		args_attachment_memory["[COUNT]"] = llformat ("%d", mAttachmentMemoryUsed); +		args_attachment_memory["[MAX]"] = llformat ("%d", mAttachmentMemoryMax); +		args_attachment_memory["[AVAILABLE]"] = llformat ("%d", attachment_memory_available); +		std::string msg_attachment_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_attachment_memory); +		childSetValue("memory_used", LLSD(msg_attachment_memory)); +	} + +	if((mAttachmentURLsUsed >= 0) && (mAttachmentURLsMax >= 0)) +	{ +		S32 attachment_urls_available = mAttachmentURLsMax - mAttachmentURLsUsed; + +		LLStringUtil::format_map_t args_attachment_urls; +		args_attachment_urls["[COUNT]"] = llformat ("%d", mAttachmentURLsUsed); +		args_attachment_urls["[MAX]"] = llformat ("%d", mAttachmentURLsMax); +		args_attachment_urls["[AVAILABLE]"] = llformat ("%d", attachment_urls_available); +		std::string msg_attachment_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_attachment_urls); +		childSetValue("urls_used", LLSD(msg_attachment_urls)); +	} +} +  // static  void LLPanelScriptLimitsAttachment::onClickRefresh(void* userdata)  { diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h index e675d14515..4c1ecc1019 100644 --- a/indra/newview/llfloaterscriptlimits.h +++ b/indra/newview/llfloaterscriptlimits.h @@ -166,10 +166,10 @@ public:  	BOOL StartRequestChain(); -	void populateParcelMemoryText();  	BOOL getLandScriptResources();  	void clearList();  	void showBeacon(); +	void returnObjectsFromParcel(S32 local_id);  	void returnObjects();  private: @@ -178,69 +178,30 @@ private:  			 const std::string& first_name,  			 const std::string& last_name); +	LLSD mContent;  	LLUUID mParcelId;  	BOOL mGotParcelMemoryUsed; +	BOOL mGotParcelMemoryUsedDetails;  	BOOL mGotParcelMemoryMax;  	S32 mParcelMemoryMax;  	S32 mParcelMemoryUsed; +	S32 mParcelMemoryUsedDetails; -	std::vector<LLSD> mObjectListItems; -		 -protected: - -// LLRemoteParcelInfoObserver interface: -/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); -/*virtual*/ void setParcelID(const LLUUID& parcel_id); -/*virtual*/ void setErrorStatus(U32 status, const std::string& reason); -	 -	static void onClickRefresh(void* userdata); -	static void onClickHighlight(void* userdata); -	static void onClickReturn(void* userdata); -}; - -///////////////////////////////////////////////////////////////////////////// -// URLs panel -///////////////////////////////////////////////////////////////////////////// - -class LLPanelScriptLimitsRegionURLs : public LLPanelScriptLimitsInfo -{ -	 -public: -	LLPanelScriptLimitsRegionURLs() -		: LLPanelScriptLimitsInfo(), - -		mParcelId(LLUUID()), -		mGotParcelURLsUsed(FALSE), -		mGotParcelURLsMax(FALSE), -		mParcelURLsMax(0), -		mParcelURLsUsed(0) -		{ -		}; - -	~LLPanelScriptLimitsRegionURLs() -	{ -	}; -	 -	// LLPanel -	virtual BOOL postBuild(); - -	void setRegionDetails(LLSD content); -	void setRegionSummary(LLSD content); - -	void populateParcelURLsText(); -	void clearList(); - -private: - -	LLUUID mParcelId;  	BOOL mGotParcelURLsUsed; +	BOOL mGotParcelURLsUsedDetails;  	BOOL mGotParcelURLsMax;  	S32 mParcelURLsMax;  	S32 mParcelURLsUsed; +	S32 mParcelURLsUsedDetails;  	std::vector<LLSD> mObjectListItems;  protected: + +// LLRemoteParcelInfoObserver interface: +/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); +/*virtual*/ void setParcelID(const LLUUID& parcel_id); +/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);  	static void onClickRefresh(void* userdata);  	static void onClickHighlight(void* userdata); @@ -266,11 +227,26 @@ public:  	void setAttachmentDetails(LLSD content); +	void setAttachmentSummary(LLSD content);  	BOOL requestAttachmentDetails();  	void clearList();  private: +	BOOL mGotAttachmentMemoryUsed; +	BOOL mGotAttachmentMemoryUsedDetails; +	BOOL mGotAttachmentMemoryMax; +	S32 mAttachmentMemoryMax; +	S32 mAttachmentMemoryUsed; +	S32 mAttachmentMemoryUsedDetails; +	 +	BOOL mGotAttachmentURLsUsed; +	BOOL mGotAttachmentURLsUsedDetails; +	BOOL mGotAttachmentURLsMax; +	S32 mAttachmentURLsMax; +	S32 mAttachmentURLsUsed; +	S32 mAttachmentURLsUsedDetails; +  protected:  	static void onClickRefresh(void* userdata); diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index b05eb84e52..f154de39c9 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -2540,13 +2540,11 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde  	{  		static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); -		static const LLUUID& landmarks_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);  		LLUUID a_uuid = a->getParentFolder()->getListener()->getUUID();  		LLUUID b_uuid = b->getParentFolder()->getListener()->getUUID(); -		if ((a_uuid == favorites_folder_id && b_uuid == favorites_folder_id) || -			(a_uuid == landmarks_folder_id && b_uuid == landmarks_folder_id)) +		if ((a_uuid == favorites_folder_id && b_uuid == favorites_folder_id))  		{  			// *TODO: mantipov: probably it is better to add an appropriate method to LLFolderViewItem  			// or to LLInvFVBridge diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp index 898f1cd9ac..66e4a1bf66 100644 --- a/indra/newview/llinspectremoteobject.cpp +++ b/indra/newview/llinspectremoteobject.cpp @@ -167,7 +167,8 @@ void LLInspectRemoteObject::nameCallback(const LLUUID& id, const std::string& fi  void LLInspectRemoteObject::update()  {  	// show the object name as the inspector's title -	getChild<LLUICtrl>("object_name")->setValue(mName); +	// (don't hyperlink URLs in object names) +	getChild<LLUICtrl>("object_name")->setValue("<nolink>" + mName + "</nolink>");  	// show the object's owner - click it to show profile  	std::string owner = mOwner; @@ -192,7 +193,7 @@ void LLInspectRemoteObject::update()  	std::string url;  	if (! mSLurl.empty())  	{ -		std::string url = "secondlife:///app/teleport/" + mSLurl; +		url = "secondlife:///app/teleport/" + mSLurl;  	}  	getChild<LLUICtrl>("object_slurl")->setValue(url); diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 961f7adc0a..7ec976604a 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -218,7 +218,10 @@ BOOL LLInventoryModel::isObjectDescendentOf(const LLUUID& obj_id,  const LLViewerInventoryCategory *LLInventoryModel::getFirstNondefaultParent(const LLUUID& obj_id) const  {  	const LLInventoryObject* obj = getObject(obj_id); -	const LLUUID& parent_id = obj->getParentUUID(); + +	// Search up the parent chain until we get to root or an acceptable folder. +	// This assumes there are no cycles in the tree else we'll get a hang. +	LLUUID parent_id = obj->getParentUUID();  	while (!parent_id.isNull())  	{  		const LLViewerInventoryCategory *cat = getCategory(parent_id); @@ -230,6 +233,7 @@ const LLViewerInventoryCategory *LLInventoryModel::getFirstNondefaultParent(cons  		{  			return cat;  		} +		parent_id = cat->getParentUUID();  	}  	return NULL;  } diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index fccf71f3cb..7bcbe334ff 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1904,7 +1904,7 @@ void LLLiveLSLEditor::uploadAssetViaCaps(const std::string& url,  										 const LLUUID& item_id,  										 BOOL is_running)  { -	llinfos << "Update Task Inventory via capability" << llendl; +	llinfos << "Update Task Inventory via capability " << url << llendl;  	LLSD body;  	body["task_id"] = task_id;  	body["item_id"] = item_id; diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 7b923f4b0b..3fd5309947 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -176,7 +176,7 @@ void LLSidepanelInventory::onPlayButtonClicked()  		performActionOnSelection("play");  		break;  	default: -		performActionOnSelection("activate"); +		performActionOnSelection("open");  		break;  	}  } diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp index 37e268ad34..3343ee88bd 100644 --- a/indra/newview/llslurl.cpp +++ b/indra/newview/llslurl.cpp @@ -39,7 +39,8 @@  const std::string LLSLURL::PREFIX_SL_HELP		= "secondlife://app.";  const std::string LLSLURL::PREFIX_SL			= "sl://";  const std::string LLSLURL::PREFIX_SECONDLIFE	= "secondlife://"; -const std::string LLSLURL::PREFIX_SLURL			= "http://slurl.com/secondlife/"; +const std::string LLSLURL::PREFIX_SLURL_OLD		= "http://slurl.com/secondlife/"; +const std::string LLSLURL::PREFIX_SLURL			= "http://maps.secondlife.com/secondlife/";  const std::string LLSLURL::APP_TOKEN = "app/"; @@ -63,6 +64,11 @@ std::string LLSLURL::stripProtocol(const std::string& url)  	{  		stripped.erase(0, PREFIX_SLURL.length());  	} +	else if (matchPrefix(stripped, PREFIX_SLURL_OLD)) +	{ +		stripped.erase(0, PREFIX_SLURL_OLD.length()); +	} +  	return stripped;  } @@ -74,6 +80,7 @@ bool LLSLURL::isSLURL(const std::string& url)  	if (matchPrefix(url, PREFIX_SL))			return true;  	if (matchPrefix(url, PREFIX_SECONDLIFE))	return true;  	if (matchPrefix(url, PREFIX_SLURL))			return true; +	if (matchPrefix(url, PREFIX_SLURL_OLD))		return true;  	return false;  } @@ -83,7 +90,8 @@ bool LLSLURL::isSLURLCommand(const std::string& url)  {   	if (matchPrefix(url, PREFIX_SL + APP_TOKEN) ||  		matchPrefix(url, PREFIX_SECONDLIFE + "/" + APP_TOKEN) || -		matchPrefix(url, PREFIX_SLURL + APP_TOKEN) ) +		matchPrefix(url, PREFIX_SLURL + APP_TOKEN) || +		matchPrefix(url, PREFIX_SLURL_OLD + APP_TOKEN) )  	{  		return true;  	} diff --git a/indra/newview/llslurl.h b/indra/newview/llslurl.h index 05b0143e72..21b32ce409 100644 --- a/indra/newview/llslurl.h +++ b/indra/newview/llslurl.h @@ -50,6 +50,7 @@ public:  	static const std::string PREFIX_SL;  	static const std::string PREFIX_SECONDLIFE;  	static const std::string PREFIX_SLURL; +	static const std::string PREFIX_SLURL_OLD;  	static const std::string APP_TOKEN; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index ce5da8bb24..522adc05ce 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -906,7 +906,7 @@ bool idle_startup()  		LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir()); -		//good as place as any to create user windlight directories +		//good a place as any to create user windlight directories  		std::string user_windlight_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", ""));  		LLFile::mkdir(user_windlight_path_name.c_str());		 diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp index a436dc0546..7ae2404203 100644 --- a/indra/newview/lltoastimpanel.cpp +++ b/indra/newview/lltoastimpanel.cpp @@ -37,6 +37,7 @@  #include "llfloaterreg.h"  #include "llgroupactions.h"  #include "llgroupiconctrl.h" +#include "llimview.h"  #include "llnotifications.h"  #include "llinstantmessage.h"  #include "lltooltip.h" @@ -52,9 +53,9 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notif  {  	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml"); -	LLIconCtrl* sys_msg_icon = getChild<LLIconCtrl>("sys_msg_icon");  	mGroupIcon = getChild<LLGroupIconCtrl>("group_icon");  	mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon"); +	mAdhocIcon = getChild<LLAvatarIconCtrl>("adhoc_icon");  	mAvatarName = getChild<LLTextBox>("user_name");  	mTime = getChild<LLTextBox>("time_box");  	mMessage = getChild<LLTextBox>("message"); @@ -90,27 +91,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notif  	mAvatarID = p.avatar_id;  	mNotification = p.notification; -	mAvatarIcon->setVisible(FALSE); -	mGroupIcon->setVisible(FALSE); -	sys_msg_icon->setVisible(FALSE); - -	if(p.from == SYSTEM_FROM) -	{ -		sys_msg_icon->setVisible(TRUE); -	} -	else -	{ -		if(LLGroupActions::isInGroup(mSessionID)) -		{ -			mGroupIcon->setVisible(TRUE); -			mGroupIcon->setValue(p.session_id); -		} -		else -		{ -			mAvatarIcon->setVisible(TRUE); -			mAvatarIcon->setValue(p.avatar_id); -		} -	} +	initIcon();  	S32 maxLinesCount;  	std::istringstream ss( getString("message_max_lines_count") ); @@ -162,13 +143,27 @@ BOOL LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask)  void LLToastIMPanel::showInspector()  { -	if(LLGroupActions::isInGroup(mSessionID)) +	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mSessionID); +	if(!im_session)  	{ -		LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", mSessionID)); +		llwarns << "Invalid IM session" << llendl; +		return;  	} -	else + +	switch(im_session->mSessionType)  	{ +	case LLIMModel::LLIMSession::P2P_SESSION:  		LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarID)); +		break; +	case LLIMModel::LLIMSession::GROUP_SESSION: +		LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", mSessionID)); +		break; +	case LLIMModel::LLIMSession::ADHOC_SESSION: +		LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", im_session->mOtherParticipantID)); +		break; +	default: +		llwarns << "Unknown IM session type" << llendl; +		break;  	}  } @@ -217,4 +212,48 @@ void LLToastIMPanel::spawnGroupIconToolTip()  	LLToolTipMgr::getInstance()->show(params);  } +void LLToastIMPanel::initIcon() +{ +	LLIconCtrl* sys_msg_icon = getChild<LLIconCtrl>("sys_msg_icon"); + +	mAvatarIcon->setVisible(FALSE); +	mGroupIcon->setVisible(FALSE); +	sys_msg_icon->setVisible(FALSE); +	mAdhocIcon->setVisible(FALSE); + +	if(mAvatarName->getValue().asString() == SYSTEM_FROM) +	{ +		sys_msg_icon->setVisible(TRUE); +	} +	else +	{ +		LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mSessionID); +		if(!im_session) +		{ +			llwarns << "Invalid IM session" << llendl; +			return; +		} + +		switch(im_session->mSessionType) +		{ +		case LLIMModel::LLIMSession::P2P_SESSION: +			mAvatarIcon->setVisible(TRUE); +			mAvatarIcon->setValue(mAvatarID); +			break; +		case LLIMModel::LLIMSession::GROUP_SESSION: +			mGroupIcon->setVisible(TRUE); +			mGroupIcon->setValue(mSessionID); +			break; +		case LLIMModel::LLIMSession::ADHOC_SESSION: +			mAdhocIcon->setVisible(TRUE); +			mAdhocIcon->setValue(im_session->mOtherParticipantID); +			mAdhocIcon->setToolTip(im_session->mName); +			break; +		default: +			llwarns << "Unknown IM session type" << llendl; +			break; +		} +	} +} +  // EOF diff --git a/indra/newview/lltoastimpanel.h b/indra/newview/lltoastimpanel.h index 444c0af144..cf4ad80637 100644 --- a/indra/newview/lltoastimpanel.h +++ b/indra/newview/lltoastimpanel.h @@ -66,6 +66,8 @@ private:  	void spawnNameToolTip();  	void spawnGroupIconToolTip(); +	void initIcon(); +  	static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT;  	LLNotificationPtr	mNotification; @@ -73,6 +75,7 @@ private:  	LLUUID				mAvatarID;  	LLAvatarIconCtrl*	mAvatarIcon;  	LLGroupIconCtrl*	mGroupIcon; +	LLAvatarIconCtrl*	mAdhocIcon;  	LLTextBox*			mAvatarName;  	LLTextBox*			mTime;  	LLTextBox*			mMessage; diff --git a/indra/newview/lltoolplacer.h b/indra/newview/lltoolplacer.h index b7422380d4..df07f1854c 100644 --- a/indra/newview/lltoolplacer.h +++ b/indra/newview/lltoolplacer.h @@ -33,7 +33,6 @@  #ifndef LL_TOOLPLACER_H  #define LL_TOOLPLACER_H -#include "llprimitive.h"  #include "llpanel.h"  #include "lltool.h" diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 3bf0fb6f71..143d95d27e 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1478,6 +1478,11 @@ void inventory_offer_handler(LLOfferInfo* info)  	// Strip any SLURL from the message display. (DEV-2754)  	std::string msg = info->mDesc;  	int indx = msg.find(" ( http://slurl.com/secondlife/"); +	if(indx == std::string::npos) +	{ +		// try to find new slurl host +		indx = msg.find(" ( http://maps.secondlife.com/secondlife/"); +	}  	if(indx >= 0)  	{  		LLStringUtil::truncate(msg, indx); @@ -2208,7 +2213,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  			LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());  			if(nearby_chat)  			{ -				nearby_chat->addMessage(chat); +				LLSD args; +				args["owner_id"] = from_id; +				args["slurl"] = location; +				nearby_chat->addMessage(chat, true, args);  			} diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 7ec650629d..a075a706e1 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1597,14 +1597,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use  				instance->mTeleportInProgress = FALSE;  				instance->mTeleportFinishedSignal(gAgent.getPositionGlobal());  			} - -			// HACK: This makes agents drop from the sky if they enter a parcel -			// which is set to no fly. -			BOOL was_flying = gAgent.getFlying(); -			if (was_flying && !parcel->getAllowFly()) -			{ -				gAgent.setFlying(gAgent.canFly()); -			}  		}  	} diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 431e9625c4..b6e7e73b9d 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -1258,7 +1258,6 @@ LLVoiceClient::LLVoiceClient() :  	mEarLocation(0),  	mSpeakerVolumeDirty(true),  	mSpeakerMuteDirty(true), -	mSpeakerVolume(0),  	mMicVolume(0),  	mMicVolumeDirty(true), @@ -1271,6 +1270,8 @@ LLVoiceClient::LLVoiceClient() :  	mAPIVersion = LLTrans::getString("NotConnected"); +	mSpeakerVolume = scale_speaker_volume(0); +	  #if LL_DARWIN || LL_LINUX || LL_SOLARIS  		// HACK: THIS DOES NOT BELONG HERE  		// When the vivox daemon dies, the next write attempt on our socket generates a SIGPIPE, which kills us. @@ -3525,7 +3526,7 @@ void LLVoiceClient::buildLocalAudioUpdates(std::ostringstream &stream)  	if(mSpeakerMuteDirty)  	{ -		const char *muteval = ((mSpeakerVolume == 0)?"true":"false"); +		const char *muteval = ((mSpeakerVolume <= scale_speaker_volume(0))?"true":"false");  		mSpeakerMuteDirty = false; @@ -6064,7 +6065,8 @@ void LLVoiceClient::setVoiceVolume(F32 volume)  	if(scaled_volume != mSpeakerVolume)  	{ -		if((scaled_volume == 0) || (mSpeakerVolume == 0)) +		int min_volume = scale_speaker_volume(0); +		if((scaled_volume == min_volume) || (mSpeakerVolume == min_volume))  		{  			mSpeakerMuteDirty = true;  		} diff --git a/indra/newview/skins/default/textures/build/Object_Cone_Selected.png b/indra/newview/skins/default/textures/build/Object_Cone_Selected.pngBinary files differ new file mode 100644 index 0000000000..d50dc69ffe --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Cone_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Cube_Selected.png b/indra/newview/skins/default/textures/build/Object_Cube_Selected.pngBinary files differ new file mode 100644 index 0000000000..3d6964530d --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Cube_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png b/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.pngBinary files differ new file mode 100644 index 0000000000..3ed0389961 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Grass_Selected.png b/indra/newview/skins/default/textures/build/Object_Grass_Selected.pngBinary files differ new file mode 100644 index 0000000000..3ebd5ea7a1 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Grass_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.pngBinary files differ new file mode 100644 index 0000000000..3bdc4d1fd5 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.pngBinary files differ new file mode 100644 index 0000000000..0912442e29 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.pngBinary files differ new file mode 100644 index 0000000000..33db4a2de8 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Prism_Selected.png b/indra/newview/skins/default/textures/build/Object_Prism_Selected.pngBinary files differ new file mode 100644 index 0000000000..9e80fe2b84 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Prism_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png b/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.pngBinary files differ new file mode 100644 index 0000000000..d36bfa55d4 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Ring_Selected.png b/indra/newview/skins/default/textures/build/Object_Ring_Selected.pngBinary files differ new file mode 100644 index 0000000000..962f6efb93 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Ring_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Sphere_Selected.png b/indra/newview/skins/default/textures/build/Object_Sphere_Selected.pngBinary files differ new file mode 100644 index 0000000000..715d597144 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Sphere_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png b/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.pngBinary files differ new file mode 100644 index 0000000000..b2ea680f23 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Torus_Selected.png b/indra/newview/skins/default/textures/build/Object_Torus_Selected.pngBinary files differ new file mode 100644 index 0000000000..1fc22686eb --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Torus_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Tree_Selected.png b/indra/newview/skins/default/textures/build/Object_Tree_Selected.pngBinary files differ new file mode 100644 index 0000000000..5bd87f8a2f --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Tree_Selected.png diff --git a/indra/newview/skins/default/textures/build/Object_Tube_Selected.png b/indra/newview/skins/default/textures/build/Object_Tube_Selected.pngBinary files differ new file mode 100644 index 0000000000..a4c3f39e14 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Tube_Selected.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 60c1470b89..ea66897b35 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -321,20 +321,35 @@ with the same filename but different name    <texture name="NoEntryPassLines" file_name="world/NoEntryPassLines.png" use_mips="true" preload="false" />    <texture name="Object_Cone" file_name="build/Object_Cone.png" preload="false" /> +  <texture name="Object_Cone_Selected" file_name="build/Object_Cone_Selected.png" preload="false" />    <texture name="Object_Cube" file_name="build/Object_Cube.png" preload="false" /> +  <texture name="Object_Cube_Selected" file_name="build/Object_Cube_Selected.png" preload="false" />    <texture name="Object_Cylinder" file_name="build/Object_Cylinder.png" preload="false" /> +  <texture name="Object_Cylinder_Selected" file_name="build/Object_Cylinder_Selected.png" preload="false" />    <texture name="Object_Grass" file_name="build/Object_Grass.png" preload="false" /> +  <texture name="Object_Grass_Selected" file_name="build/Object_Grass_Selected.png" preload="false" />    <texture name="Object_Hemi_Cone" file_name="build/Object_Hemi_Cone.png" preload="false" /> +  <texture name="Object_Hemi_Cone_Selected" file_name="build/Object_Hemi_Cone_Selected.png" preload="false" />    <texture name="Object_Hemi_Cylinder" file_name="build/Object_Hemi_Cylinder.png" preload="false" /> +  <texture name="Object_Hemi_Cylinder_Selected" file_name="build/Object_Hemi_Cylinder_Selected.png" preload="false" />    <texture name="Object_Hemi_Sphere" file_name="build/Object_Hemi_Sphere.png" preload="false" /> +  <texture name="Object_Hemi_Sphere_Selected" file_name="build/Object_Hemi_Sphere_Selected.png" preload="false" />    <texture name="Object_Prism" file_name="build/Object_Prism.png" preload="false" /> +  <texture name="Object_Prism_Selected" file_name="build/Object_Prism_Selected.png" preload="false" />    <texture name="Object_Pyramid" file_name="build/Object_Pyramid.png" preload="false" /> +  <texture name="Object_Pyramid_Selected" file_name="build/Object_Pyramid_Selected.png" preload="false" />    <texture name="Object_Ring" file_name="build/Object_Ring.png" preload="false" /> +  <texture name="Object_Ring_Selected" file_name="build/Object_Ring_Selected.png" preload="false" />    <texture name="Object_Sphere" file_name="build/Object_Sphere.png" preload="false" /> +  <texture name="Object_Sphere_Selected" file_name="build/Object_Sphere_Selected.png" preload="false" />    <texture name="Object_Tetrahedron" file_name="build/Object_Tetrahedron.png" preload="false" /> +  <texture name="Object_Tetrahedron_Selected" file_name="build/Object_Tetrahedron_Selected.png" preload="false" />    <texture name="Object_Torus" file_name="build/Object_Torus.png" preload="false" /> +  <texture name="Object_Torus_Selected" file_name="build/Object_Torus_Selected.png" preload="false" />    <texture name="Object_Tree" file_name="build/Object_Tree.png" preload="false" /> +  <texture name="Object_Tree_Selected" file_name="build/Object_Tree_Selected.png" preload="false" />    <texture name="Object_Tube" file_name="build/Object_Tube.png" preload="false" /> +  <texture name="Object_Tube_Selected" file_name="build/Object_Tube_Selected.png" preload="false" />    <texture name="OptionsMenu_Disabled" file_name="icons/OptionsMenu_Disabled.png" preload="false" />    <texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" /> @@ -585,10 +600,15 @@ with the same filename but different name             scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" />    <texture name="Tool_Create" file_name="build/Tool_Create.png" preload="false" /> +  <texture name="Tool_Create_Selected" file_name="build/Tool_Create_Selected.png" preload="false" />    <texture name="Tool_Dozer" file_name="build/Tool_Dozer.png" preload="false" /> +  <texture name="Tool_Dozer_Selected" file_name="build/Tool_Dozer_Selected.png" preload="false" />    <texture name="Tool_Face" file_name="build/Tool_Face.png" preload="false" /> +  <texture name="Tool_Face_Selected" file_name="build/Tool_Face_Selected.png" preload="false" />    <texture name="Tool_Grab" file_name="build/Tool_Grab.png" preload="false" /> +  <texture name="Tool_Grab_Selected" file_name="build/Tool_Grab_Selected.png" preload="false" />    <texture name="Tool_Zoom" file_name="build/Tool_Zoom.png" preload="false" /> +  <texture name="Tool_Zoom_Selected" file_name="build/Tool_Zoom_Selected.png" preload="false" />    <texture name="Toolbar_Divider" file_name="containers/Toolbar_Divider.png" preload="false" />    <texture name="Toolbar_Left_Off" file_name="containers/Toolbar_Left_Off.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" /> diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index 7236351f2e..b9bc45a10b 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -19,7 +19,7 @@   width="320">    <string name="nudge_parabuild" translate="false">Nudge 1</string>    <string name="test_the_vlt">This string CHANGE2 is extracted.</string> -  <string name="testing_eli">Just a test. change here. more change.</string> +  <string name="testing_eli">Just a test. changes.</string>    <chat_history     allow_html="true"     bg_readonly_color="ChatHistoryBgColor" diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml index 4f4288b654..1ffedde29b 100644 --- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml @@ -147,7 +147,11 @@ Maximum animation length is [MAX_LENGTH] seconds.       name="E_ST_NO_XLT_EMOTE">          Cannot read emote name.      </floater.string> -    <text +    <floater.string +     name="E_ST_BAD_ROOT"> +        Incorrect root joint name, use "hip". +    </floater.string> +  <text       type="string"       length="1"       bottom="42" diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml index 703a02d995..961bd6b5e4 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -178,8 +178,8 @@       follows="top|left"       height="16"       halign="right" -     left="150" -     width="170" +     left="140" +     width="180"       layout="topleft"       name="buy_action">          [NAME] L$ [PRICE] diff --git a/indra/newview/skins/default/xui/en/floater_script_limits.xml b/indra/newview/skins/default/xui/en/floater_script_limits.xml index 98c44ad1b3..6b36cdfcc5 100644 --- a/indra/newview/skins/default/xui/en/floater_script_limits.xml +++ b/indra/newview/skins/default/xui/en/floater_script_limits.xml @@ -1,6 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   legacy_header_height="18" + can_resize="true"   height="570"   help_topic="scriptlimits"   layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index f1aa5c27c1..5630dfbe8f 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -70,7 +70,7 @@       height="20"       image_disabled="Tool_Zoom"       image_disabled_selected="Tool_Zoom" -     image_selected="Tool_Zoom" +     image_selected="Tool_Zoom_Selected"       image_unselected="Tool_Zoom"       layout="topleft"       left="10" @@ -86,7 +86,7 @@       height="20"       image_disabled="Tool_Grab"       image_disabled_selected="Tool_Grab" -     image_selected="Tool_Grab" +     image_selected="Tool_Grab_Selected"       image_unselected="Tool_Grab"       layout="topleft"       left_pad="20" @@ -102,7 +102,7 @@       height="20"       image_disabled="Tool_Face"       image_disabled_selected="Tool_Face" -     image_selected="Tool_Face" +     image_selected="Tool_Face_Selected"       image_unselected="Tool_Face"       layout="topleft"       left_pad="20" @@ -118,7 +118,7 @@       height="20"       image_disabled="Tool_Create"       image_disabled_selected="Tool_Create" -     image_selected="Tool_Create" +     image_selected="Tool_Create_Selected"       image_unselected="Tool_Create"       layout="topleft"       left_pad="20" @@ -134,7 +134,7 @@       height="20"       image_disabled="Tool_Dozer"       image_disabled_selected="Tool_Dozer" -     image_selected="Tool_Dozer" +     image_selected="Tool_Dozer_Selected"       image_unselected="Tool_Dozer"       layout="topleft"       left_pad="20" @@ -344,7 +344,7 @@       height="20"       image_disabled="Object_Cube"       image_disabled_selected="Object_Cube" -     image_selected="Object_Cube" +     image_selected="Object_Cube_Selected"       image_unselected="Object_Cube"       layout="topleft"       left="4" @@ -357,7 +357,7 @@       height="20"       image_disabled="Object_Prism"       image_disabled_selected="Object_Prism" -     image_selected="Object_Prism" +     image_selected="Object_Prism_Selected"       image_unselected="Object_Prism"       layout="topleft"       left_delta="26" @@ -370,7 +370,7 @@       height="20"       image_disabled="Object_Pyramid"       image_disabled_selected="Object_Pyramid" -     image_selected="Object_Pyramid" +     image_selected="Object_Pyramid_Selected"       image_unselected="Object_Pyramid"       layout="topleft"       left_delta="26" @@ -383,7 +383,7 @@       height="20"       image_disabled="Object_Tetrahedron"       image_disabled_selected="Object_Tetrahedron" -     image_selected="Object_Tetrahedron" +     image_selected="Object_Tetrahedron_Selected"       image_unselected="Object_Tetrahedron"       layout="topleft"       left_delta="26" @@ -396,7 +396,7 @@       height="20"       image_disabled="Object_Cylinder"       image_disabled_selected="Object_Cylinder" -     image_selected="Object_Cylinder" +     image_selected="Object_Cylinder_Selected"       image_unselected="Object_Cylinder"       layout="topleft"       left_delta="26" @@ -409,7 +409,7 @@       height="20"       image_disabled="Object_Hemi_Cylinder"       image_disabled_selected="Object_Hemi_Cylinder" -     image_selected="Object_Hemi_Cylinder" +     image_selected="Object_Hemi_Cylinder_Selected"       image_unselected="Object_Hemi_Cylinder"       layout="topleft"       left_delta="26" @@ -422,7 +422,7 @@       height="20"       image_disabled="Object_Cone"       image_disabled_selected="Object_Cone" -     image_selected="Object_Cone" +     image_selected="Object_Cone_Selected"       image_unselected="Object_Cone"       layout="topleft"       left_delta="26" @@ -435,7 +435,7 @@       height="20"       image_disabled="Object_Hemi_Cone"       image_disabled_selected="Object_Hemi_Cone" -     image_selected="Object_Hemi_Cone" +     image_selected="Object_Hemi_Cone_Selected"       image_unselected="Object_Hemi_Cone"       layout="topleft"       left_delta="26" @@ -448,7 +448,7 @@       height="20"       image_disabled="Object_Sphere"       image_disabled_selected="Object_Sphere" -     image_selected="Object_Sphere" +     image_selected="Object_Sphere_Selected"       image_unselected="Object_Sphere"       layout="topleft"       left_delta="26" @@ -461,7 +461,7 @@       height="20"       image_disabled="Object_Hemi_Sphere"       image_disabled_selected="Object_Hemi_Sphere" -     image_selected="Object_Hemi_Sphere" +     image_selected="Object_Hemi_Sphere_Selected"       image_unselected="Object_Hemi_Sphere"       layout="topleft"       left_delta="26" @@ -474,7 +474,7 @@       height="20"       image_disabled="Object_Torus"       image_disabled_selected="Object_Torus" -     image_selected="Object_Torus" +     image_selected="Object_Torus_Selected"       image_unselected="Object_Torus"       layout="topleft"       left="4" @@ -487,7 +487,7 @@       height="20"       image_disabled="Object_Tube"       image_disabled_selected="Object_Tube" -     image_selected="Object_Tube" +     image_selected="Object_Tube_Selected"       image_unselected="Object_Tube"       layout="topleft"       left_delta="26" @@ -500,7 +500,7 @@       height="20"       image_disabled="Object_Ring"       image_disabled_selected="Object_Ring" -     image_selected="Object_Ring" +     image_selected="Object_Ring_Selected"       image_unselected="Object_Ring"       layout="topleft"       left_delta="26" @@ -513,7 +513,7 @@       height="20"       image_disabled="Object_Tree"       image_disabled_selected="Object_Tree" -     image_selected="Object_Tree" +     image_selected="Object_Tree_Selected"       image_unselected="Object_Tree"       layout="topleft"       left_delta="26" @@ -526,8 +526,9 @@       height="20"       image_disabled="Object_Grass"       image_disabled_selected="Object_Grass" -     image_selected="Object_Grass" +     image_selected="Object_Grass_Selected"       image_unselected="Object_Grass" +     image_overlay_color="Red"       layout="topleft"       left_delta="26"       name="ToolGrass" diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index 9279d1e686..c7e5b25e06 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -93,6 +93,7 @@               height="23"               label="Teleport"               name="teleport_btn" +             tool_tip = "Offer to teleport this person"               width="100" />          </layout_panel>          <layout_panel @@ -119,6 +120,23 @@           layout="topleft"           min_height="25"           width="100" +         name="share_btn_panel" +         user_resize="false"> +           <button +             auto_resize="true" +             follows="left|top|right" +             height="23" +             label="Pay" +             name="pay_btn" +             width="100" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="100"           name="call_btn_panel"           user_resize="false">              <button diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml index 5a1bc32db0..a0ad38cf76 100644 --- a/indra/newview/skins/default/xui/en/panel_instant_message.xml +++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml @@ -45,6 +45,17 @@           name="group_icon"           top="3"           width="18" /> +        <avatar_icon +         color="Green" +         follows="right" +         height="18" +         image_name="Generic_Person" +         layout="topleft" +         left="3" +         mouse_opaque="false" +         name="adhoc_icon" +         top="3" +         width="18" />          <!--<icon           follows="right"           height="20" 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 02eddc9212..b2ed51abf3 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -141,12 +141,25 @@       font="SansSerifSmall"       height="15"       layout="topleft" -     left="102" +     left="0"       name="favorite"       image_drag_indication="Accordion_ArrowOpened_Off"       bottom="55"       tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"                 width="590"> +        <label +         follows="left|top" +         font.style="BOLD" +         height="15" +         layout="topleft" +         left="10" +         name="favorites_bar_label" +         text_color="LtGray" +         tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!" +         top="12" +         width="102"> +          Favorites Bar +        </label>      <chevron_button name=">>"                       image_unselected="TabIcon_Close_Off"                       image_selected="TabIcon_Close_Off" @@ -157,15 +170,4 @@  		     top="15"                       height="15"/>    </favorites_bar> -     <text -               follows="left|top" -         font.style="BOLD" -               height="15" -               layout="topleft" -               left="10" -               top_pad="-12" -               name="favorites_bar_label" -               text_color="LtGray" -               tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!" -               width="102">Favorites Bar</text>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 9bfd8b91d8..c4e4b9aa9b 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -17,12 +17,13 @@ background_visible="true"       name="teleport_history_tab_title"       value="TELEPORT HISTORY" />      <filter_editor +     text_pad_left="14"       follows="left|top|right" -     font="SansSerif" +     font="SansSerifSmall"       height="23"       layout="topleft"       left="15" -     label="Filter Places" +     label="Filter My Places"       max_length="300"       name="Filter"       top="3" diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml index d98f690339..629d8567d1 100644 --- a/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml +++ b/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml @@ -9,7 +9,44 @@   name="script_limits_my_avatar_panel"   top="0"   width="480"> -    <text +	<text +	 type="string" +	 length="1" +	 follows="left|top" +	 height="16" +	 layout="topleft" +	 left="10" +	 name="script_memory" +	 top_pad="24" +	 text_color="White" +	 width="480"> +		Avatar Script Usage +	</text> +	<text +	 type="string" +	 length="1" +	 follows="left|top" +	 height="16" +	 layout="topleft" +	 left="30" +	 name="memory_used" +	 top_delta="18" +	 width="480"> + +	</text> +	<text +	 type="string" +	 length="1" +	 follows="left|top" +	 height="16" +	 layout="topleft" +	 left="30" +	 name="urls_used" +	 top_delta="18" +	 width="480"> + +	</text> +	<text       type="string"       length="1"       follows="left|top" @@ -17,7 +54,7 @@       layout="topleft"       left="10"       name="loading_text" -     top="10" +     top="80"       text_color="EmphasisColor"       width="480">          Loading... @@ -25,12 +62,12 @@      <scroll_list       draw_heading="true"       follows="all" -     height="500" +     height="415"       layout="topleft"       left_delta="0"       multi_select="true"       name="scripts_list" -     top_delta="17" +     top="100"       width="460">          <scroll_list.columns           label="Size (kb)" diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml index 0fa3c1cf2e..9dff00fa0b 100644 --- a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml +++ b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml @@ -33,7 +33,7 @@  	 top_delta="18"  	 visible="true"  	 width="480"> -		Parcels Owned: +	   	</text>  	<text  	 type="string" @@ -45,7 +45,19 @@  	 name="memory_used"  	 top_delta="18"  	 width="480"> -		Memory used: +	</text> +	 +	<text +	 type="string" +	 length="1" +	 follows="left|top" +	 height="16" +	 layout="topleft" +	 left="30" +	 name="urls_used" +	 top_delta="18" +	 width="480"> +	   	</text>  	<text       type="string" @@ -55,7 +67,7 @@       layout="topleft"       left="10"       name="loading_text" -     top_delta="32" +     top_delta="12"       text_color="EmphasisColor"       width="480">          Loading... @@ -73,7 +85,11 @@          <scroll_list.columns           label="Size (kb)"           name="size" -         width="70" /> +         width="72" /> +        <scroll_list.columns +         label="URLs" +         name="urls" +         width="48" />          <scroll_list.columns           label="Object Name"           name="name" @@ -83,11 +99,13 @@           name="owner"           width="100" />          <scroll_list.columns -         label="Parcel / Location" -         name="location" +         label="Parcel" +         name="parcel"           width="130" /> -<!--		<scroll_list.commit_callback -          function="TopObjects.CommitObjectsList" />--> +        <scroll_list.columns +         label="Location" +         name="location" +         width="80" />      </scroll_list>      <button       follows="bottom|left" @@ -102,8 +120,8 @@      <button       follows="bottom|right"       height="19" -	 visible="false"       label="Highlight" +	 visible="false"       layout="bottomright"       left="370"       name="highlight_btn" @@ -112,8 +130,8 @@      <button       follows="bottom|right"       height="19" -	 visible="false"       label="Return" +	 visible="false"       layout="bottomright"       name="return_btn"       top="34" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index b378944e48..b4a12cfb32 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2051,6 +2051,7 @@ this texture in your inventory  	<string name="ScriptLimitsURLsUsed">URLs used: [COUNT] out of [MAX]; [AVAILABLE] available</string>  	<string name="ScriptLimitsURLsUsedSimple">URLs used: [COUNT]</string>  	<string name="ScriptLimitsRequestError">Error requesting information</string> +	<string name="ScriptLimitsRequestNoParcelSelected">No Parcel Selected</string>  	<string name="ScriptLimitsRequestWrongRegion">Error: script information is only available in your current region</string>  	<string name="ScriptLimitsRequestWaiting">Retrieving information...</string>  	<string name="ScriptLimitsRequestDontOwnParcel">You do not have permission to examine this parcel</string> diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml index 70a58b8e03..2163660206 100644 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml @@ -96,7 +96,7 @@      name="damage_icon"      width="14"      height="13" -    top="21" +    top="19"      left="2"      follows="right|top"      image_name="Parcel_Damage_Dark" @@ -106,7 +106,7 @@      name="damage_text"  	width="35"  	height="18" -	top="16" +	top="17"      follows="right|top"  	halign="right"  	font="SansSerifSmall" | 
