diff options
61 files changed, 760 insertions, 230 deletions
| diff --git a/indra/llcommon/llchat.h b/indra/llcommon/llchat.h index f1b9091298..63cce24005 100644 --- a/indra/llcommon/llchat.h +++ b/indra/llcommon/llchat.h @@ -82,6 +82,7 @@ public:  		mFromName(),  		mFromID(),  		mNotifId(), +		mOwnerID(),  		mSourceType(CHAT_SOURCE_AGENT),  		mChatType(CHAT_TYPE_NORMAL),  		mAudible(CHAT_AUDIBLE_FULLY), @@ -98,6 +99,7 @@ public:  	std::string		mFromName;	// agent or object name  	LLUUID			mFromID;	// agent id or object id  	LLUUID			mNotifId; +	LLUUID			mOwnerID;  	EChatSourceType	mSourceType;  	EChatType		mChatType;  	EChatAudible	mAudible; diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 47766a24cb..0cd6e48d14 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -297,11 +297,17 @@ private:  		// append details to agent string  		LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent ); +		// TODO: Remove this ifdef when the Linux version of llqtwebkit gets updated with the new WOB constant. +#if !LL_LINUX +		// Set up window open behavior +		LLQtWebKit::getInstance()->setWindowOpenBehavior(mBrowserWindowId, LLQtWebKit::WOB_SIMULATE_BLANK_HREF_CLICK); +#endif +		  #if !LL_QTWEBKIT_USES_PIXMAPS  		// don't flip bitmap  		LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true );  #endif // !LL_QTWEBKIT_USES_PIXMAPS -		 +  		// set background color  		// convert background color channels from [0.0, 1.0] to [0, 255];  		LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, int(mBackgroundR * 255.0f), int(mBackgroundG * 255.0f), int(mBackgroundB * 255.0f) ); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index d77d53f6af..28a5555ca2 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -91,6 +91,7 @@ set(viewer_SOURCE_FILES      llbottomtray.cpp      llbox.cpp      llbreadcrumbview.cpp +    llbuycurrencyhtml.cpp      llcallbacklist.cpp      llcallfloater.cpp      llcallingcard.cpp @@ -159,6 +160,7 @@ set(viewer_SOURCE_FILES      llfloaterbuy.cpp      llfloaterbuycontents.cpp      llfloaterbuycurrency.cpp +    llfloaterbuycurrencyhtml.cpp      llfloaterbuyland.cpp      llfloatercamera.cpp      llfloatercolorpicker.cpp @@ -604,6 +606,7 @@ set(viewer_HEADER_FILES      llbottomtray.h      llbox.h      llbreadcrumbview.h +    llbuycurrencyhtml.h      llcallbacklist.h      llcallfloater.h      llcallingcard.h @@ -674,6 +677,7 @@ set(viewer_HEADER_FILES      llfloaterbuy.h      llfloaterbuycontents.h      llfloaterbuycurrency.h +    llfloaterbuycurrencyhtml.h      llfloaterbuyland.h      llfloatercamera.h      llfloatercolorpicker.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 7156af57ec..1d27d00451 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4591,6 +4591,17 @@        <key>Value</key>        <string />      </map> +    <key>MarketplaceURL</key> +    <map> +      <key>Comment</key> +      <string>URL to the Marketplace</string> +      <key>Persist</key> +      <integer>0</integer> +      <key>Type</key> +      <string>String</string> +      <key>Value</key> +      <string>https://www.xstreetsl.com/modules.php?name=Marketplace</string> +    </map>          <key>MaxDragDistance</key>      <map>        <key>Comment</key> @@ -6017,6 +6028,17 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>QuickBuyCurrency</key> +    <map> +      <key>Comment</key> +      <string>Toggle between HTML based currency purchase floater and legacy XUI version</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>RegionTextureSize</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index 2f90d652e4..27dcb9f1c7 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -37,7 +37,7 @@  // viewer includes  #include "llagent.h"  #include "llcompilequeue.h" -#include "llfloaterbuycurrency.h" +#include "llbuycurrencyhtml.h"  #include "llfilepicker.h"  #include "llinventorydefines.h"  #include "llinventoryobserver.h" @@ -186,7 +186,7 @@ void LLAssetUploadResponder::uploadFailure(const LLSD& content)  		S32 price = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();  		LLStringUtil::format_map_t args;  		args["AMOUNT"] = llformat("%d", price); -		LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("uploading_costs", args), price); +		LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("uploading_costs", args), price );  	}  	else  	{ diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 0595bedd31..caf43f5ddc 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -35,20 +35,32 @@  #define LLBOTTOMTRAY_CPP  #include "llbottomtray.h" -#include "llagentcamera.h" -#include "llchiclet.h" +// library includes  #include "llfloaterreg.h"  #include "llflyoutbutton.h" -#include "llimfloater.h" // for LLIMFloater  #include "lllayoutstack.h" -#include "llnearbychatbar.h" +#include "llnotifications.h"  #include "llnotificationsutil.h" +#include "lltexteditor.h" + +// newview includes +#include "llagentcamera.h" +#include "llchiclet.h" +#include "llfloatercamera.h" +#include "llimfloater.h" // for LLIMFloater +#include "llnearbychatbar.h"  #include "llspeakbutton.h"  #include "llsplitbutton.h"  #include "llsyswellwindow.h" -#include "llfloatercamera.h" -#include "lltexteditor.h" -#include "llnotifications.h" +#include "lltoolmgr.h" +#include "llviewerparcelmgr.h" + +static void update_build_button_enable_state() +{ +	bool can_edit = LLToolMgr::getInstance()->canEdit(); + +	LLBottomTray::getInstance()->childSetEnabled("build_btn", can_edit); +}  // Build time optimization, generate extern template once in .cpp file  template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance(); @@ -508,6 +520,8 @@ BOOL LLBottomTray::postBuild()  	showWellButton(RS_IM_WELL, !LLIMWellWindow::getInstance()->isWindowEmpty());  	showWellButton(RS_NOTIFICATION_WELL, !LLNotificationWellWindow::getInstance()->isWindowEmpty()); +	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&update_build_button_enable_state)); +  	return TRUE;  } @@ -1246,6 +1260,13 @@ void LLBottomTray::setButtonsControlsAndListeners()  	gSavedSettings.getControl("ShowSearchButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_SEARCH, _2));  	gSavedSettings.getControl("ShowWorldMapButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_WORLD_MAP, _2));  	gSavedSettings.getControl("ShowMiniMapButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_MINI_MAP, _2)); + + +	LLButton* build_btn = getChild<LLButton>("build_btn"); +	// set control name for Build button. It is not enough to link it with Button.SetFloaterToggle in xml +	std::string vis_control_name = LLFloaterReg::declareVisibilityControl("build"); +	// Set the button control value (toggle state) to the floater visibility control (Sets the value as well) +	build_btn->setControlVariable(LLUI::sSettingGroups["floater"]->getControl(vis_control_name));  }  bool LLBottomTray::toggleShowButton(LLBottomTray::EResizeState button_type, const LLSD& new_visibility) diff --git a/indra/newview/llbuycurrencyhtml.cpp b/indra/newview/llbuycurrencyhtml.cpp new file mode 100644 index 0000000000..163829a1ea --- /dev/null +++ b/indra/newview/llbuycurrencyhtml.cpp @@ -0,0 +1,165 @@ +/**  + * @file llbuycurrencyhtml.cpp + * @brief Manages Buy Currency HTML floater + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + *  + * Copyright (c) 2006-2010, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterbuycurrency.h" +#include "llbuycurrencyhtml.h" +#include "llfloaterbuycurrencyhtml.h" + +#include "llfloaterreg.h" +#include "llcommandhandler.h" +#include "llviewercontrol.h" + +// support for secondlife:///app/buycurrencyhtml/{ACTION}/{NEXT_ACTION}/{RETURN_CODE} SLapps +class LLBuyCurrencyHTMLHandler :  +	public LLCommandHandler +{ +public: +	// requests will be throttled from a non-trusted browser +	LLBuyCurrencyHTMLHandler() : LLCommandHandler( "buycurrencyhtml", UNTRUSTED_ALLOW ) {} + +	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) +	{ +		std::string action( "" ); +		if ( params.size() >= 1 ) +		{ +			 action = params[ 0 ].asString(); +		}; + +		std::string next_action( "" ); +		if ( params.size() >= 2 ) +		{ +			next_action = params[ 1 ].asString(); +		}; + +		int result_code = 0; +		if ( params.size() >= 3 ) +		{ +			result_code = params[ 2 ].asInteger(); +		}; + +		// open the legacy XUI based currency floater +		if ( "open_legacy" == next_action ) +		{ +			LLFloaterBuyCurrency::buyCurrency(); +		}; + +		// ask the Buy Currency floater to close +		// note: this is the last thing we can do so make +		// sure any other actions are processed before this. +		if ( "close" == action ) +		{ +			LLBuyCurrencyHTML::closeDialog(); +		}; + +		return true; +	}; +}; +LLBuyCurrencyHTMLHandler gBuyCurrencyHTMLHandler; + +//////////////////////////////////////////////////////////////////////////////// +// static +// Opens the legacy XUI based floater or new HTML based one based on  +// the QuickBuyCurrency value in settings.xml - this overload is for +// the case where the amount is not requested. +void LLBuyCurrencyHTML::openCurrencyFloater() +{ +	if ( gSavedSettings.getBOOL( "QuickBuyCurrency" ) ) +	{ +		// HTML version +		LLBuyCurrencyHTML::showDialog( false, "", 0 ); +	} +	else +	{ +		// legacy version +		LLFloaterBuyCurrency::buyCurrency(); +	}; +} + +//////////////////////////////////////////////////////////////////////////////// +// static +// Opens the legacy XUI based floater or new HTML based one based on  +// the QuickBuyCurrency value in settings.xml - this overload is for +// the case where the amount and a string to display are requested. +void LLBuyCurrencyHTML::openCurrencyFloater( const std::string& message, S32 sum ) +{ +	if ( gSavedSettings.getBOOL( "QuickBuyCurrency" ) ) +	{ +		// HTML version +		LLBuyCurrencyHTML::showDialog( true, message, sum ); +	} +	else +	{ +		// legacy version +		LLFloaterBuyCurrency::buyCurrency( message, sum ); +	}; +} + +//////////////////////////////////////////////////////////////////////////////// +// static +void LLBuyCurrencyHTML::showDialog( bool specific_sum_requested, const std::string& message, S32 sum ) +{ +	LLFloaterBuyCurrencyHTML* buy_currency_floater = dynamic_cast< LLFloaterBuyCurrencyHTML* >( LLFloaterReg::getInstance( "buy_currency_html" ) ); +	if ( buy_currency_floater ) +	{ +		// pass on flag indicating if we want to buy specific amount and if so, how much +		buy_currency_floater->setParams( specific_sum_requested, message, sum ); + +		// force navigate to new URL +		buy_currency_floater->navigateToFinalURL(); + +		// make it visible and raise to front +		BOOL visible = TRUE; +		buy_currency_floater->setVisible( visible ); +		BOOL take_focus = TRUE; +		buy_currency_floater->setFrontmost( take_focus ); + +		// spec calls for floater to be centered on client window +		buy_currency_floater->center(); +	} +	else +	{ +		llwarns << "Buy Currency (HTML) Floater not found" << llendl; +	}; +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLBuyCurrencyHTML::closeDialog() +{ +	LLFloaterBuyCurrencyHTML* buy_currency_floater = dynamic_cast< LLFloaterBuyCurrencyHTML* >(LLFloaterReg::getInstance( "buy_currency_html" ) ); +	if ( buy_currency_floater ) +	{ +		buy_currency_floater->closeFloater(); +	}; +} diff --git a/indra/newview/llbuycurrencyhtml.h b/indra/newview/llbuycurrencyhtml.h new file mode 100644 index 0000000000..3435bb0451 --- /dev/null +++ b/indra/newview/llbuycurrencyhtml.h @@ -0,0 +1,57 @@ +/**  + * @file llbuycurrencyhtml.h + * @brief Manages Buy Currency HTML floater + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + *  + * Copyright (c) 2006-2010, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLBUYCURRENCYHTML_H +#define LL_LLBUYCURRENCYHTML_H + +#include "llsingleton.h" + +class LLFloaterBuyCurrencyHTML; + +class LLBuyCurrencyHTML +{ +	public: +		// choke point for opening a legacy or new currency floater - this overload is when the L$ sum is not required +		static void openCurrencyFloater(); + +		// choke point for opening a legacy or new currency floater - this overload is when the L$ sum is required +		static void openCurrencyFloater( const std::string& message, S32 sum ); + +		// show and give focus to actual currency floater - this is used for both cases +		// where the sum is required and where it is not +		static void showDialog( bool specific_sum_requested, const std::string& message, S32 sum ); + +		// close (and destroy) the currency floater +		static void closeDialog(); +}; + +#endif  // LL_LLBUYCURRENCYHTML_H diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 31feabe722..bd14732b4a 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -649,7 +649,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  				// for object IMs, create a secondlife:///app/objectim SLapp  				std::string url = LLSLURL("objectim", chat.mFromID, "").getSLURLString();  				url += "?name=" + chat.mFromName; -				url += "&owner=" + args["owner_id"].asString(); +				url += "&owner=" + chat.mOwnerID.asString();  				std::string slurl = args["slurl"].asString();  				if (slurl.empty()) diff --git a/indra/newview/llfloaterbuycurrencyhtml.cpp b/indra/newview/llfloaterbuycurrencyhtml.cpp new file mode 100644 index 0000000000..5815df36d1 --- /dev/null +++ b/indra/newview/llfloaterbuycurrencyhtml.cpp @@ -0,0 +1,119 @@ +/**  + * @file llfloaterbuycurrencyhtml.cpp + * @brief buy currency implemented in HTML floater - uses embedded media browser control + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + *  + * Copyright (c) 2006-2010, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterbuycurrencyhtml.h" +#include "llstatusbar.h" + +//////////////////////////////////////////////////////////////////////////////// +// +LLFloaterBuyCurrencyHTML::LLFloaterBuyCurrencyHTML( const LLSD& key ): +	LLFloater( key ), +	mSpecificSumRequested( false ), +	mMessage( "" ), +	mSum( 0 ) +{ +} + +//////////////////////////////////////////////////////////////////////////////// +// +BOOL LLFloaterBuyCurrencyHTML::postBuild() +{ +	// observer media events +	mBrowser = getChild<LLMediaCtrl>( "browser" ); +	mBrowser->addObserver( this ); + +	return TRUE; +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLFloaterBuyCurrencyHTML::navigateToFinalURL() +{ +	// URL for actual currency buy contents is in XUI file +	std::string buy_currency_url = getString( "buy_currency_url" ); + +	// replace [LANGUAGE] meta-tag with view language +	LLStringUtil::format_map_t replace; + +	// viewer language +	replace[ "[LANGUAGE]" ] = LLUI::getLanguage(); + +	// flag that specific amount requested  +	replace[ "[SPECIFIC_AMOUNT]" ] = ( mSpecificSumRequested ? "y":"n" ); + +	// amount requested +	std::ostringstream codec( "" ); +	codec << mSum; +	replace[ "[SUM]" ] = codec.str(); + +	// users' current balance +	codec.clear(); +	codec.str( "" ); +	codec << gStatusBar->getBalance(); +	replace[ "[BAL]" ] = codec.str(); + +	// message - "This cost L$x,xxx for example +	replace[ "[MSG]" ] = LLURI::escape( mMessage ); +	LLStringUtil::format( buy_currency_url, replace ); + +	// kick off the navigation +	mBrowser->navigateTo( buy_currency_url ); +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLFloaterBuyCurrencyHTML::handleMediaEvent( LLPluginClassMedia* self, EMediaEvent event ) +{ +	// placeholder for now - just in case we want to catch media events +	if ( LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_COMPLETE == event ) +	{ +	}; +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLFloaterBuyCurrencyHTML::onClose( bool app_quitting ) +{ +	destroy(); +} + +//////////////////////////////////////////////////////////////////////////////// +// +void LLFloaterBuyCurrencyHTML::setParams( bool specific_sum_requested, const std::string& message, S32 sum ) +{ +	// save these away - used to construct URL later +	mSpecificSumRequested = specific_sum_requested; +	mMessage = message; +	mSum = sum; +} diff --git a/indra/newview/llfloaterbuycurrencyhtml.h b/indra/newview/llfloaterbuycurrencyhtml.h new file mode 100644 index 0000000000..be7a4d3dd6 --- /dev/null +++ b/indra/newview/llfloaterbuycurrencyhtml.h @@ -0,0 +1,65 @@ +/**  + * @file llfloaterbuycurrencyhtml.h + * @brief buy currency implemented in HTML floater - uses embedded media browser control + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + *  + * Copyright (c) 2006-2010, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERBUYCURRENCYHTML_H +#define LL_LLFLOATERBUYCURRENCYHTML_H + +#include "llfloater.h" +#include "llmediactrl.h" + +class LLFloaterBuyCurrencyHTML :  +	public LLFloater,  +	public LLViewerMediaObserver +{ +	public: +		LLFloaterBuyCurrencyHTML( const LLSD& key ); + +		/*virtual*/ BOOL postBuild(); +		/*virtual*/ void onClose( bool app_quitting ); + +		// inherited from LLViewerMediaObserver +		/*virtual*/ void handleMediaEvent( LLPluginClassMedia* self, EMediaEvent event ); + +		// allow our controlling parent to tell us paramters +		void setParams( bool specific_sum_requested, const std::string& message, S32 sum ); + +		// parse and construct URL and set browser to navigate there. +		void navigateToFinalURL(); + +	private: +		LLMediaCtrl* mBrowser; +		bool mSpecificSumRequested; +		std::string mMessage; +		S32 mSum; +}; + +#endif  // LL_LLFLOATERBUYCURRENCYHTML_H diff --git a/indra/newview/llfloaterhud.cpp b/indra/newview/llfloaterhud.cpp index d2ee3e44c5..930bbe9e6b 100644 --- a/indra/newview/llfloaterhud.cpp +++ b/indra/newview/llfloaterhud.cpp @@ -79,9 +79,6 @@ BOOL LLFloaterHUD::postBuild()  	mWebBrowser = getChild<LLMediaCtrl>("floater_hud_browser" );  	if (mWebBrowser)  	{ -		// Open links in internal browser -		mWebBrowser->setOpenInExternalBrowser(false); -		  		// This is a "chrome" floater, so we don't want anything to  		// take focus (as the user needs to be able to walk with   		// arrow keys during tutorial). diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 05cb6ddc4a..7a4ed74c4c 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -78,8 +78,6 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :  	mBorder(NULL),  	mFrequentUpdates( true ),  	mForceUpdate( false ), -	mOpenLinksInExternalBrowser( false ), -	mOpenLinksInInternalBrowser( false ),  	mHomePageUrl( "" ),  	mTrusted(false),  	mIgnoreUIScale( true ), @@ -167,20 +165,6 @@ void LLMediaCtrl::setTakeFocusOnClick( bool take_focus )  }  //////////////////////////////////////////////////////////////////////////////// -// set flag that forces the embedded browser to open links in the external system browser -void LLMediaCtrl::setOpenInExternalBrowser( bool valIn ) -{ -	mOpenLinksInExternalBrowser = valIn; -}; - -//////////////////////////////////////////////////////////////////////////////// -// set flag that forces the embedded browser to open links in the internal browser floater -void LLMediaCtrl::setOpenInInternalBrowser( bool valIn ) -{ -	mOpenLinksInInternalBrowser = valIn; -}; - -////////////////////////////////////////////////////////////////////////////////  void LLMediaCtrl::setTrusted( bool valIn )  {  	if(mMediaSource) @@ -944,7 +928,6 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)  		case MEDIA_EVENT_CLICK_LINK_HREF:  		{  			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << self->getClickTarget() << "\", uri is " << self->getClickURL() << LL_ENDL; -			onClickLinkHref(self);  		};  		break; @@ -979,95 +962,6 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)  ////////////////////////////////////////////////////////////////////////////////  //  -void LLMediaCtrl::onClickLinkHref( LLPluginClassMedia* self ) -{ -	// retrieve the event parameters -	std::string url = self->getClickURL(); -	U32 target_type = self->getClickTargetType(); -	 -	// is there is a target specified for the link? -	if (target_type == LLPluginClassMedia::TARGET_EXTERNAL || -		target_type == LLPluginClassMedia::TARGET_BLANK ) -	{ -		if (gSavedSettings.getBOOL("UseExternalBrowser")) -		{ -			LLSD payload; -			payload["url"] = url; -			payload["target_type"] = LLSD::Integer(target_type); -			LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, onClickLinkExternalTarget); -		} -		else -		{ -			clickLinkWithTarget(url, target_type); -		} -	} -	else { -		const std::string protocol1( "http://" ); -		const std::string protocol2( "https://" ); -		if( mOpenLinksInExternalBrowser ) -		{ -			if ( !url.empty() ) -			{ -				if ( LLStringUtil::compareInsensitive( url.substr( 0, protocol1.length() ), protocol1 ) == 0 || -					LLStringUtil::compareInsensitive( url.substr( 0, protocol2.length() ), protocol2 ) == 0 ) -				{ -					LLWeb::loadURLExternal( url ); -				} -			} -		} -		else -		if( mOpenLinksInInternalBrowser ) -		{ -			if ( !url.empty() ) -			{ -				if ( LLStringUtil::compareInsensitive( url.substr( 0, protocol1.length() ), protocol1 ) == 0 || -					LLStringUtil::compareInsensitive( url.substr( 0, protocol2.length() ), protocol2 ) == 0 ) -				{ -					llwarns << "Dead, unimplemented path that we used to send to the built-in browser long ago." << llendl; -				} -			} -		} -	} -} - -//////////////////////////////////////////////////////////////////////////////// -// static  -bool LLMediaCtrl::onClickLinkExternalTarget(const LLSD& notification, const LLSD& response ) -{ -	S32 option = LLNotificationsUtil::getSelectedOption(notification, response); -	if ( 0 == option ) -	{ -		LLSD payload = notification["payload"]; -		std::string url = payload["url"].asString(); -		S32 target_type = payload["target_type"].asInteger(); -		clickLinkWithTarget(url, target_type); -	} -	return false; -} - - -//////////////////////////////////////////////////////////////////////////////// -// static  -void LLMediaCtrl::clickLinkWithTarget(const std::string& url, const S32& target_type ) -{ -	if (target_type == LLPluginClassMedia::TARGET_EXTERNAL) -	{ -		// load target in an external browser -		LLWeb::loadURLExternal(url); -	} -	else if (target_type == LLPluginClassMedia::TARGET_BLANK) -	{ -		// load target in the user's preferred browser -		LLWeb::loadURL(url); -	} -	else { -		// unsupported link target - shouldn't happen -		LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL; -	} -} - -//////////////////////////////////////////////////////////////////////////////// -//   std::string LLMediaCtrl::getCurrentNavUrl()  {  	return mCurrentNavUrl; diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index e55d2f7cd0..310492fe02 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -99,8 +99,6 @@ public:  		void navigateToLocalPage( const std::string& subdir, const std::string& filename_in );  		bool canNavigateBack();  		bool canNavigateForward(); -		void setOpenInExternalBrowser( bool valIn ); -		void setOpenInInternalBrowser( bool valIn );  		std::string getCurrentNavUrl();  		// By default, we do not handle "secondlife:///app/" SLURLs, because @@ -162,24 +160,17 @@ public:  		// Incoming media event dispatcher  		virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); -		// handlers for individual events (could be done inside the switch in handleMediaEvent, they're just individual functions for clarity) -		void onClickLinkHref( LLPluginClassMedia* self ); -		  	protected:  		void convertInputCoords(S32& x, S32& y);  	private:  		void onVisibilityChange ( const LLSD& new_visibility ); -		static bool onClickLinkExternalTarget( const LLSD&, const LLSD& ); -		static void clickLinkWithTarget(const std::string& url, const S32& target_type );  		const S32 mTextureDepthBytes;  		LLUUID mMediaTextureID;  		LLViewBorder* mBorder;  		bool mFrequentUpdates;  		bool mForceUpdate; -		bool mOpenLinksInExternalBrowser; -		bool mOpenLinksInInternalBrowser;  		bool mTrusted;  		std::string mHomePageUrl;  		std::string mCurrentNavUrl; diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp index d670eb6ffd..27a27fb65a 100644 --- a/indra/newview/llmorphview.cpp +++ b/indra/newview/llmorphview.cpp @@ -131,14 +131,7 @@ void LLMorphView::setVisible(BOOL visible)  		if (visible)  		{ -			llassert( !gFloaterCustomize ); -			gFloaterCustomize = new LLFloaterCustomize(); -			gFloaterCustomize->fetchInventory(); -			gFloaterCustomize->openFloater(); - -			// Must do this _after_ gFloaterView is initialized. -			gFloaterCustomize->switchToDefaultSubpart(); - +			// TODO: verify some user action has already opened outfit editor? - Nyx  			initialize();  			// First run dialog @@ -146,13 +139,7 @@ void LLMorphView::setVisible(BOOL visible)  		}  		else  		{ -			if( gFloaterCustomize ) -			{ -				gFloaterView->removeChild( gFloaterCustomize ); -				delete gFloaterCustomize; -				gFloaterCustomize = NULL; -			} - +			// TODO: verify some user action has already closed outfit editor ? - Nyx  			shutdown();  		}  	} diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index b00fcb2608..680ed35fa2 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -86,6 +86,14 @@ public:  		LLScrollListCtrl::handleScrollWheel( x, y, clicks );  		return TRUE;  	} +	//See EXT-6598 +	//Mouse hover over separator will result in not processing tooltip message +	//So eat this message +	BOOL handleToolTip(S32 x, S32 y, MASK mask) +	{ +		LLScrollListCtrl::handleToolTip( x, y, mask ); +		return TRUE; +	}  };  LLGestureComboList::Params::Params() diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 95ec8170f2..7dec2251e8 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -797,8 +797,37 @@ BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root)  void LLPanelGroupMembersSubTab::setGroupID(const LLUUID& id)  { +	//clear members list +	if(mMembersList) mMembersList->deleteAllItems(); +	if(mAssignedRolesList) mAssignedRolesList->deleteAllItems(); +	if(mAllowedActionsList) mAllowedActionsList->deleteAllItems(); +  	LLPanelGroupSubTab::setGroupID(id); +} + +void LLPanelGroupRolesSubTab::setGroupID(const LLUUID& id) +{ +	if(mRolesList) mRolesList->deleteAllItems(); +	if(mAssignedMembersList) mAssignedMembersList->deleteAllItems(); +	if(mAllowedActionsList) mAllowedActionsList->deleteAllItems(); + +	if(mRoleName) mRoleName->clear(); +	if(mRoleDescription) mRoleDescription->clear(); +	if(mRoleTitle) mRoleTitle->clear(); + +	setFooterEnabled(FALSE); +	LLPanelGroupSubTab::setGroupID(id); +} +void LLPanelGroupActionsSubTab::setGroupID(const LLUUID& id) +{ +	if(mActionList) mActionList->deleteAllItems(); +	if(mActionRoles) mActionRoles->deleteAllItems(); +	if(mActionMembers) mActionMembers->deleteAllItems(); + +	if(mActionDescription) mActionDescription->clear(); + +	LLPanelGroupSubTab::setGroupID(id);  } diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h index a877402041..44aa7cea38 100644 --- a/indra/newview/llpanelgrouproles.h +++ b/indra/newview/llpanelgrouproles.h @@ -257,6 +257,8 @@ public:  	void handleDeleteRole();  	void saveRoleChanges(); + +	virtual void setGroupID(const LLUUID& id);  protected:  	void handleActionCheck(LLUICtrl* ctrl, bool force);  	LLSD createRoleItem(const LLUUID& role_id, std::string name, std::string title, S32 members); @@ -294,6 +296,8 @@ public:  	virtual void update(LLGroupChange gc);  	void handleActionSelect(); + +	virtual void setGroupID(const LLUUID& id);  protected:  	LLScrollListCtrl*	mActionList;  	LLScrollListCtrl*	mActionRoles; diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 508a58e74f..0009f7203a 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -270,20 +270,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	web_browser->setTabStop(FALSE);  	// web_browser->navigateToLocalPage( "loading", "loading.html" ); -	if (gSavedSettings.getBOOL("RegInClient")) -	{ -		// need to follow links in the internal browser -		web_browser->setOpenInExternalBrowser( false ); - -		getChild<LLView>("login_widgets")->setVisible(false); -	} -	else -	{ -		// make links open in external browser -		web_browser->setOpenInExternalBrowser( true ); - -		reshapeBrowser(); -	} +	reshapeBrowser();  	// kick off a request to grab the url manually  	gResponsePtr = LLIamHereLogin::build( this ); @@ -487,7 +474,6 @@ void LLPanelLogin::showLoginWidgets()  {  	sInstance->childSetVisible("login_widgets", true);  	LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html"); -	web_browser->setOpenInExternalBrowser( true );  	sInstance->reshapeBrowser();  	// *TODO: Append all the usual login parameters, like first_login=Y etc.  	std::string splash_screen_url = sInstance->getString("real_url"); diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index de16f9d343..39ade40967 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -48,7 +48,7 @@  #include "llagent.h"  #include "llavataractions.h"  #include "llcallbacklist.h" -#include "llfloaterbuycurrency.h" +#include "llbuycurrencyhtml.h"  #include "llfloaterreg.h"  #include "llinventorybridge.h"  #include "llinventorydefines.h" @@ -616,7 +616,7 @@ void LLTaskInvFVBridge::performAction(LLInventoryModel* model, std::string actio  			{  				LLStringUtil::format_map_t args;  				args["AMOUNT"] = llformat("%d", price); -				LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_costs", args), price); +				LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("this_costs", args), price );  			}  			else  			{ diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 4178fd9c90..4f3f73beca 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -350,6 +350,8 @@ void LLPanelOutfitEdit::showFilteredWearablesPanel()  	if(switchPanels(mInventoryItemsPanel, mWearableItemsPanel))  	{  		mFolderViewBtn->setToggleState(FALSE); +		mFolderViewBtn->setImageOverlay(getString("folder_view_off"), mFolderViewBtn->getImageOverlayHAlign()); +		mListViewBtn->setImageOverlay(getString("list_view_on"), mListViewBtn->getImageOverlayHAlign());  	}  	mListViewBtn->setToggleState(TRUE);  } @@ -359,6 +361,8 @@ void LLPanelOutfitEdit::showFilteredFolderWearablesPanel()  	if(switchPanels(mWearableItemsPanel, mInventoryItemsPanel))  	{  		mListViewBtn->setToggleState(FALSE); +		mListViewBtn->setImageOverlay(getString("list_view_off"), mListViewBtn->getImageOverlayHAlign()); +		mFolderViewBtn->setImageOverlay(getString("folder_view_on"), mFolderViewBtn->getImageOverlayHAlign());  	}  	mFolderViewBtn->setToggleState(TRUE);  } diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 1a1650c38b..c8abcc83c4 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -50,7 +50,7 @@  #include "llagentui.h"  #include "llappviewer.h"  #include "llcallbacklist.h" -#include "llfloaterbuycurrency.h" +#include "llbuycurrencyhtml.h"  #include "llstatusbar.h"  #include "llviewercontrol.h"  #include "llviewerparcelmgr.h" @@ -573,7 +573,7 @@ void LLPanelPlaceProfile::onForSaleBannerClick()  			{  				LLStringUtil::format_map_t args;  				args["AMOUNT"] = llformat("%d", price); -				LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("buying_selected_land", args), price); +				LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("buying_selected_land", args), price );  			}  			else  			{ diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 3f05e05fd4..010d593b27 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -47,6 +47,7 @@  #include "llsidetray.h"  #include "lltextbox.h"  #include "lluictrlfactory.h" +#include "llviewercontrol.h"  #include "llviewerregion.h"  #include "llvoavatarself.h"  #include "llwearable.h" @@ -267,14 +268,14 @@ void LLSidepanelAppearance::showOutfitsInventoryPanel()  void LLSidepanelAppearance::showOutfitEditPanel()  {  	togglMyOutfitsPanel(FALSE); -	toggleWearableEditPanel(FALSE); +	toggleWearableEditPanel(FALSE, NULL, TRUE); // don't switch out of edit appearance mode  	toggleOutfitEditPanel(TRUE);  }  void LLSidepanelAppearance::showWearableEditPanel(LLWearable *wearable /* = NULL*/)  {  	togglMyOutfitsPanel(FALSE); -	toggleOutfitEditPanel(FALSE); +	toggleOutfitEditPanel(FALSE, TRUE); // don't switch out of edit appearance mode  	toggleWearableEditPanel(TRUE, wearable);  } @@ -300,7 +301,7 @@ void LLSidepanelAppearance::togglMyOutfitsPanel(BOOL visible)  	}  } -void LLSidepanelAppearance::toggleOutfitEditPanel(BOOL visible) +void LLSidepanelAppearance::toggleOutfitEditPanel(BOOL visible, BOOL disable_camera_switch)  {  	if (!mOutfitEdit || mOutfitEdit->getVisible() == visible)  	{ @@ -313,10 +314,18 @@ void LLSidepanelAppearance::toggleOutfitEditPanel(BOOL visible)  	if (visible)  	{  		mOutfitEdit->onOpen(LLSD()); +		if (!disable_camera_switch && gSavedSettings.getBOOL("AppearanceCameraMovement") ) +		{ +			gAgentCamera.changeCameraToCustomizeAvatar(); +		} +	} +	else if (!disable_camera_switch && gSavedSettings.getBOOL("AppearanceCameraMovement") ) +	{ +		gAgentCamera.changeCameraToDefault();  	}  } -void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *wearable) +void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *wearable, BOOL disable_camera_switch)  {  	if (!mEditWearable || mEditWearable->getVisible() == visible)  	{ @@ -340,11 +349,19 @@ void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *we  	if (visible)  	{  		mEditWearable->onOpen(LLSD()); // currently no-op, just for consistency +		if (!disable_camera_switch && gSavedSettings.getBOOL("AppearanceCameraMovement") ) +		{ +			gAgentCamera.changeCameraToCustomizeAvatar(); +		}  	}  	else  	{  		// Save changes if closing.  		mEditWearable->saveChanges(); +		if (!disable_camera_switch && gSavedSettings.getBOOL("AppearanceCameraMovement") ) +		{ +			gAgentCamera.changeCameraToDefault(); +		}  	}  } diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index f243bbd471..12303b6e96 100644 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -75,8 +75,8 @@ private:  	void onEditAppearanceButtonClicked();  	void togglMyOutfitsPanel(BOOL visible); -	void toggleOutfitEditPanel(BOOL visible); -	void toggleWearableEditPanel(BOOL visible, LLWearable* wearable = NULL); +	void toggleOutfitEditPanel(BOOL visible, BOOL disable_camera_switch = FALSE); +	void toggleWearableEditPanel(BOOL visible, LLWearable* wearable = NULL, BOOL disable_camera_switch = FALSE);  	LLFilterEditor*			mFilterEditor;  	LLPanelOutfitsInventory* mPanelOutfitsInventory; diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 65b9184fe5..fc5143d33b 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -42,6 +42,7 @@  #include "llsidepaneltaskinfo.h"  #include "lltabcontainer.h"  #include "llselectmgr.h" +#include "llweb.h"  static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory"); @@ -70,6 +71,9 @@ BOOL LLSidepanelInventory::postBuild()  		mShareBtn = mInventoryPanel->getChild<LLButton>("share_btn");  		mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this)); +		LLButton* shop_btn = mInventoryPanel->getChild<LLButton>("shop_btn"); +		shop_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShopButtonClicked, this)); +  		mWearBtn = mInventoryPanel->getChild<LLButton>("wear_btn");  		mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this)); @@ -155,6 +159,11 @@ void LLSidepanelInventory::onShareButtonClicked()  	LLAvatarActions::shareWithAvatars();  } +void LLSidepanelInventory::onShopButtonClicked() +{ +	LLWeb::loadURLExternal(gSavedSettings.getString("MarketplaceURL")); +} +  void LLSidepanelInventory::performActionOnSelection(const std::string &action)  {  	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory"); diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h index 95eab3571c..2dc17e741d 100644 --- a/indra/newview/llsidepanelinventory.h +++ b/indra/newview/llsidepanelinventory.h @@ -79,6 +79,7 @@ private:  protected:  	void 						onInfoButtonClicked();  	void 						onShareButtonClicked(); +	void 						onShopButtonClicked();  	void 						onWearButtonClicked();  	void 						onPlayButtonClicked();  	void 						onTeleportButtonClicked(); diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index b660a2b8ea..5628205dd4 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -41,6 +41,7 @@  #include "llcommandhandler.h"  #include "llviewercontrol.h"  #include "llfloaterbuycurrency.h" +#include "llbuycurrencyhtml.h"  #include "llfloaterlagmeter.h"  #include "llpanelnearbymedia.h"  #include "llpanelvolumepulldown.h" @@ -509,7 +510,9 @@ S32 LLStatusBar::getSquareMetersLeft() const  void LLStatusBar::onClickBuyCurrency()  { -	LLFloaterBuyCurrency::buyCurrency(); +	// open a currency floater - actual one open depends on  +	// value specified in settings.xml +	LLBuyCurrencyHTML::openCurrencyFloater();  }  static void onClickHealth(void* ) diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 9275ca4f42..38f67720b7 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -495,12 +495,6 @@ void LLToastNotifyPanel::onClickButton(void* data)  	if(is_reusable)  	{  		sButtonClickSignal(self->mNotification->getID(), button_name); - -		if(new_info && !self->mNotification->isPersistent()) -		{ -			self->mNotification->setResponseFunctor( -				boost::bind(&LLOfferInfo::inventory_offer_callback, new_info, _1, _2)); -		}  	}  	else  	{ diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 506cebfe73..49ea0348f9 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -49,6 +49,7 @@  #include "llfloaterbuy.h"  #include "llfloaterbuycontents.h"  #include "llfloaterbuycurrency.h" +#include "llfloaterbuycurrencyhtml.h"  #include "llfloaterbuyland.h"  #include "llfloaterbulkpermission.h"  #include "llfloaterbump.h" @@ -141,6 +142,7 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("beacons", "floater_beacons.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBeacons>);  	LLFloaterReg::add("bulk_perms", "floater_bulk_perms.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBulkPermission>);  	LLFloaterReg::add("buy_currency", "floater_buy_currency.xml", &LLFloaterBuyCurrency::buildFloater); +	LLFloaterReg::add("buy_currency_html", "floater_buy_currency_html.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBuyCurrencyHTML>);	  	LLFloaterReg::add("buy_land", "floater_buy_land.xml", &LLFloaterBuyLand::buildFloater);  	LLFloaterReg::add("buy_object", "floater_buy_object.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBuy>);  	LLFloaterReg::add("buy_object_contents", "floater_buy_contents.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBuyContents>); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 4db05e8a98..7429a49ccf 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -2795,6 +2795,42 @@ bool LLViewerMediaImpl::isPlayable() const  	return false;  } +//////////////////////////////////////////////////////////////////////////////// +// static  +bool LLViewerMediaImpl::onClickLinkExternalTarget(const LLSD& notification, const LLSD& response ) +{ +	S32 option = LLNotificationsUtil::getSelectedOption(notification, response); +	if ( 0 == option ) +	{ +		LLSD payload = notification["payload"]; +		std::string url = payload["url"].asString(); +		S32 target_type = payload["target_type"].asInteger(); +		clickLinkWithTarget(url, target_type); +	} +	return false; +} + + +//////////////////////////////////////////////////////////////////////////////// +// static  +void LLViewerMediaImpl::clickLinkWithTarget(const std::string& url, const S32& target_type ) +{ +	if (target_type == LLPluginClassMedia::TARGET_EXTERNAL) +	{ +		// load target in an external browser +		LLWeb::loadURLExternal(url); +	} +	else if (target_type == LLPluginClassMedia::TARGET_BLANK) +	{ +		// load target in the user's preferred browser +		LLWeb::loadURL(url); +	} +	else { +		// unsupported link target - shouldn't happen +		LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL; +	} +} +  //////////////////////////////////////////////////////////////////////////////////////////  void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event)  { @@ -2808,6 +2844,31 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla  		}  		break; +		case MEDIA_EVENT_CLICK_LINK_HREF: +		{ +			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << plugin->getClickTarget() << "\", uri is " << plugin->getClickURL() << LL_ENDL; +			// retrieve the event parameters +			std::string url = plugin->getClickURL(); +			U32 target_type = plugin->getClickTargetType(); +			 +			// is there is a target specified for the link? +			if (target_type == LLPluginClassMedia::TARGET_EXTERNAL || +				target_type == LLPluginClassMedia::TARGET_BLANK ) +			{ +				if (gSavedSettings.getBOOL("UseExternalBrowser")) +				{ +					LLSD payload; +					payload["url"] = url; +					payload["target_type"] = LLSD::Integer(target_type); +					LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, onClickLinkExternalTarget); +				} +				else +				{ +					clickLinkWithTarget(url, target_type); +				} +			} +		}; +		break;  		case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:  		{  			// The plugin failed to load properly.  Make sure the timer doesn't retry. diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index 8626f4469e..754d0851c3 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -391,6 +391,8 @@ private:  	bool shouldShowBasedOnClass() const;  	static bool isObjectAttachedToAnotherAvatar(LLVOVolume *obj);  	static bool isObjectInAgentParcel(LLVOVolume *obj); +	static bool onClickLinkExternalTarget( const LLSD&, const LLSD& ); +	static void clickLinkWithTarget(const std::string& url, const S32& target_type );  private:  	// a single media url with some data and an impl. diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index f905892982..10ceab2656 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -53,7 +53,7 @@  //#include "llfirstuse.h"  #include "llfloaterbuy.h"  #include "llfloaterbuycontents.h" -#include "llfloaterbuycurrency.h" +#include "llbuycurrencyhtml.h"  #include "llfloatercustomize.h"  #include "llfloatergodtools.h"  #include "llfloaterinventory.h" @@ -3288,7 +3288,7 @@ void handle_buy_object(LLSaleInfo sale_info)  	{  		LLStringUtil::format_map_t args;  		args["AMOUNT"] = llformat("%d", price); -		LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_object_costs", args), price); +		LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("this_object_costs", args), price );  		return;  	} @@ -4430,8 +4430,7 @@ void handle_buy_or_take()  		{  			LLStringUtil::format_map_t args;  			args["AMOUNT"] = llformat("%d", total_price); -			LLFloaterBuyCurrency::buyCurrency( -					LLTrans::getString("BuyingCosts", args), total_price); +			LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString( "BuyingCosts", args ), total_price );  		}  	}  	else @@ -5612,6 +5611,11 @@ void handle_customize_avatar()  	LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "my_outfits"));  } +void handle_edit_outfit() +{ +	LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit")); +} +  void handle_edit_shape()  {  	LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_shape")); @@ -5626,7 +5630,7 @@ void handle_report_abuse()  void handle_buy_currency()  { -	LLFloaterBuyCurrency::buyCurrency(); +	LLBuyCurrencyHTML::openCurrencyFloater();  }  class LLFloaterVisible : public view_listener_t @@ -7727,6 +7731,7 @@ void initialize_menus()  	view_listener_t::addMenu(new LLEditEnableCustomizeAvatar(), "Edit.EnableCustomizeAvatar");  	view_listener_t::addMenu(new LLEnableEditShape(), "Edit.EnableEditShape");  	commit.add("CustomizeAvatar", boost::bind(&handle_customize_avatar)); +	commit.add("EditOutfit", boost::bind(&handle_edit_outfit));  	commit.add("EditShape", boost::bind(&handle_edit_shape));  	// View menu diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index c415d89e9c..5570fe5fec 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -39,7 +39,7 @@  #include "llagentcamera.h"  #include "llfilepicker.h"  #include "llfloaterreg.h" -#include "llfloaterbuycurrency.h" +#include "llbuycurrencyhtml.h"  #include "llfloatersnapshot.h"  #include "llimage.h"  #include "llimagebmp.h" @@ -811,7 +811,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt  					LLStringUtil::format_map_t args;  					args["NAME"] = data->mAssetInfo.getName();  					args["AMOUNT"] = llformat("%d", expected_upload_cost); -					LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("UploadingCosts", args), expected_upload_cost); +					LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("UploadingCosts", args), expected_upload_cost );  					is_balance_sufficient = FALSE;  				}  				else if(region) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index fb87e2d3b9..5836aff4e7 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -55,8 +55,7 @@  #include "llagent.h"  #include "llagentcamera.h"  #include "llcallingcard.h" -//#include "llfirstuse.h" -#include "llfloaterbuycurrency.h" +#include "llbuycurrencyhtml.h"  #include "llfloaterbuyland.h"  #include "llfloaterland.h"  #include "llfloaterregioninfo.h" @@ -283,7 +282,7 @@ void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_  	{  		LLStringUtil::format_map_t args;  		args["AMOUNT"] = llformat("%d", amount); -		LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("giving", args), amount); +		LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("giving", args), amount );  	}  } @@ -2522,8 +2521,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  			LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());  			if(SYSTEM_FROM != name && nearby_chat)  			{ +				chat.mOwnerID = from_id;  				LLSD args; -				args["owner_id"] = from_id;  				args["slurl"] = location;  				args["type"] = LLNotificationsUI::NT_NEARBYCHAT;  				LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args); @@ -3053,7 +3052,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)  		// object inspect for an object that is chatting with you  		LLSD args;  		args["type"] = LLNotificationsUI::NT_NEARBYCHAT; -		args["owner_id"] = owner_id; +		chat.mOwnerID = owner_id;  		LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args);  	} diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 25b46f8e55..1b4471a9fe 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -791,6 +791,12 @@ void LLVoiceChannelP2P::handleStatusChange(EStatusType type)  		}  		mIgnoreNextSessionLeave = FALSE;  		return; +	case STATUS_JOINING: +		// because we join session we expect to process session leave event in the future. EXT-7371 +		// may be this should be done in the LLVoiceChannel::handleStatusChange. +		mIgnoreNextSessionLeave = FALSE; +		break; +  	default:  		break;  	} diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 33668f5ed6..e8a893e31b 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -359,7 +359,7 @@       reference="White"/>      <color       name="GroupNotifyDimmedTextColor" -     reference="DkGray" /> +     reference="LtGray" />      <color       name="GroupOverTierColor"       value="0.43 0.06 0.06 1" /> diff --git a/indra/newview/skins/default/textures/icons/DownArrow_Off.png b/indra/newview/skins/default/textures/icons/DownArrow_Off.pngBinary files differ new file mode 100644 index 0000000000..60f62eed4a --- /dev/null +++ b/indra/newview/skins/default/textures/icons/DownArrow_Off.png diff --git a/indra/newview/skins/default/textures/icons/Edit_Wrench.png b/indra/newview/skins/default/textures/icons/Edit_Wrench.pngBinary files differ new file mode 100644 index 0000000000..1c43960d02 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Edit_Wrench.png diff --git a/indra/newview/skins/default/textures/icons/Hierarchy_View_Disabled.png b/indra/newview/skins/default/textures/icons/Hierarchy_View_Disabled.pngBinary files differ new file mode 100644 index 0000000000..fb370f98d5 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Hierarchy_View_Disabled.png diff --git a/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.pngBinary files differ new file mode 100644 index 0000000000..c590a5a5d3 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png diff --git a/indra/newview/skins/default/textures/icons/List_View_Disabled.png b/indra/newview/skins/default/textures/icons/List_View_Disabled.pngBinary files differ new file mode 100644 index 0000000000..155dee5047 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/List_View_Disabled.png diff --git a/indra/newview/skins/default/textures/icons/List_View_On.png b/indra/newview/skins/default/textures/icons/List_View_On.pngBinary files differ new file mode 100644 index 0000000000..9127c92c3b --- /dev/null +++ b/indra/newview/skins/default/textures/icons/List_View_On.png diff --git a/indra/newview/skins/default/textures/icons/Locked_Icon.png b/indra/newview/skins/default/textures/icons/Locked_Icon.pngBinary files differ new file mode 100644 index 0000000000..8ead280794 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Locked_Icon.png diff --git a/indra/newview/skins/default/textures/icons/Search_Icon.png b/indra/newview/skins/default/textures/icons/Search_Icon.pngBinary files differ new file mode 100644 index 0000000000..541aa8f52a --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Search_Icon.png diff --git a/indra/newview/skins/default/textures/icons/Shirt_Large.png b/indra/newview/skins/default/textures/icons/Shirt_Large.pngBinary files differ new file mode 100644 index 0000000000..0f3846bccc --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Shirt_Large.png diff --git a/indra/newview/skins/default/textures/icons/UpArrow_Off.png b/indra/newview/skins/default/textures/icons/UpArrow_Off.pngBinary files differ new file mode 100644 index 0000000000..00015bce20 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/UpArrow_Off.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index f4206dc2e5..0788a0ca9e 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -110,6 +110,8 @@ with the same filename but different name    <texture name="DisclosureArrow_Opened_Off" file_name="widgets/DisclosureArrow_Opened_Off.png" preload="true" />    <texture name="DownArrow" file_name="bottomtray/DownArrow.png" preload="false" /> +  <texture name="DownArrow_Off" file_name="icons/DownArrow_off.png" preload="false" /> +  <texture name="Dragbar" file_name="icons/Dragbar.png" preload="false" />    <texture name="DropDown_Disabled" file_name="widgets/DropDown_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" />    <texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> @@ -119,6 +121,7 @@ with the same filename but different name    <texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" />    <texture name="ExternalBrowser_Off" file_name="icons/ExternalBrowser_Off.png" preload="false" /> +  <texture name="Edit_Wrench" file_name="icons/Edit_Wrench.png" preload="false" />    <texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" />    <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" /> @@ -145,6 +148,9 @@ with the same filename but different name    <texture name="Help_Press" file_name="navbar/Help_Press.png" preload="false" /> +  <texture name="Hierarchy_View_Disabled" file_name="icons/Hierarchy_View_Disabled.png" preload="false" /> +  <texture name="Hierarchy_View_On" file_name="icons/Hierarchy_View_On.png" preload="false" /> +    <texture name="Home_Off" file_name="navbar/Home_Off.png" preload="false" /> @@ -255,9 +261,14 @@ with the same filename but different name    <texture name="ListItem_Select" file_name="widgets/ListItem_Select.png" preload="true" scale.left="2" scale.bottom="2" scale.top="22" scale.right="278" />    <texture name="ListItem_Over" file_name="widgets/ListItem_Over.png" preload="true" scale.left="2" scale.bottom="2" scale.top="22" scale.right="278" /> +  <texture name="List_View_Disabled" file_name="icons/List_View_Disabled.png" preload="false" /> +  <texture name="List_View_On" file_name="icons/List_View_On.png" preload="false" /> +    <texture name="Lock" file_name="icons/Lock.png" preload="false" />    <texture name="Lock2" file_name="navbar/Lock.png" preload="false" /> +  <texture name="Locked_Icon" file_name="icons/Locked_Icon.png" preload="false" /> +    <texture name="Microphone_On" file_name="icons/Microphone_On.png" preload="false" /> @@ -410,6 +421,8 @@ with the same filename but different name    <texture name="Search" file_name="navbar/Search.png" preload="false" /> +  <texture name="Search_Icon" file_name="icons/Search_Icon.png" preload="false" /> +    <texture name="SegmentedBtn_Left_Off" file_name="widgets/SegmentedBtn_Left_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Left_Over" file_name="widgets/SegmentedBtn_Left_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Left_Press" file_name="widgets/SegmentedBtn_Left_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> @@ -432,6 +445,8 @@ with the same filename but different name    <texture name="SegmentedBtn_Right_Selected_Press" file_name="widgets/SegmentedBtn_Right_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="SegmentedBtn_Right_Selected_Disabled" file_name="widgets/SegmentedBtn_Right_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> +  <texture name="Shirt_Large" file_name="icons/Shirt_Large.png" preload="false" /> +    <texture name="SkipBackward_Off" file_name="icons/SkipBackward_Off.png" preload="false" />    <texture name="SkipForward_Off" file_name="icons/SkipForward_Off.png" preload="false" /> @@ -523,6 +538,8 @@ with the same filename but different name    <texture name="Unread_Chiclet" file_name="bottomtray/Unread_Chiclet.png" preload="false" />    <texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" /> +  <texture name="UpArrow_Off" file_name="icons/UpArrow_Off.png" preload="false" /> +      <texture name="Volume_Background" file_name="windows/Volume_Background.png" preload="false"             scale.left="6" scale.top="33" scale.right="63" scale.bottom="10" /> diff --git a/indra/newview/skins/default/textures/windows/Dragbar.png b/indra/newview/skins/default/textures/windows/Dragbar.pngBinary files differ new file mode 100644 index 0000000000..d94dda1aae --- /dev/null +++ b/indra/newview/skins/default/textures/windows/Dragbar.png diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml new file mode 100644 index 0000000000..ab44082070 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + can_resize="false" + height="240" + layout="topleft" + min_height="240" + min_width="420" + name="floater_buy_currency_html" + help_topic="floater_buy_currency_html" + save_rect="true" + single_instance="true" + title="BUY CURRENCY" + width="422"> + <floater.string +      name="buy_currency_url" translate="false"> +        http://user.lindenlab.com/~callum/ez/index.php?lang=[LANGUAGE]&sa=[SPECIFIC_AMOUNT]&sum=[SUM]&msg=[MSG]&bal=[BAL] +</floater.string> +    <web_browser +     bottom="238" +     follows="left|right|top|bottom" +     layout="topleft" +     left="2" +     name="browser" +     top="18" +     width="420" /> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 7d9a17548e..b690986e6b 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -165,7 +165,7 @@           right="-13"           name="turn right btn"           scale_image="false" -         tool_tip="Turn left (press Right Arrow or D)" +         tool_tip="Turn right (press Right Arrow or D)"           top_pad="-3"           width="24" />          <joystick_slide diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 0c7ef3619d..c3c63cec37 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -11,6 +11,7 @@   save_rect="true"   short_title="BUILD TOOLS"   single_instance="true" + save_visibility="true"   sound_flags="0"   width="295">      <floater.string diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml index b0cfb261cb..d5b993152a 100644 --- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml @@ -191,8 +191,15 @@          <menu_item_call.on_enable           function="Edit.EnableCustomizeAvatar" />      </menu_item_call> -    <menu_item_call -    label="Edit My Shape" +    <menu_item_call label="Edit My Outfit"  +    layout="topleft" +    name="Edit Outfit"> +       <menu_item_call.on_click +        function="EditOutfit" /> +       <menu_item_call.on_enable +        function="Edit.EnableCustomizeAvatar" /> +   </menu_item_call> +    <menu_item_call label="Edit My Shape"       layout="topleft"      name="Edit My Shape">         <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml index 115964e5f2..e3f6045e27 100644 --- a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml @@ -52,18 +52,17 @@       name="btn_lock"       layout="topleft"       follows="top|right" -     image_name="Lock2" -     top="0" +     image_name="Locked_Icon" +     top="2"       left="0" -     height="20" -     width="20" +     height="13" +     width="9"       tab_stop="false" />      <button        name="btn_edit"       layout="topleft"       follows="top|right" -     image_unselected="Icon_Gear_Background" -     image_selected="Icon_Gear_Background" +     image_overlay="Edit_Wrench"       top="0"       left_pad="3"       height="20" diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 2ba7bef502..bfc40a8638 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -260,7 +260,6 @@ Disabled for now.  Disabled for now.  -->              <button -enabled="false"               follows="left|right"               height="23"               image_pressed="PushButton_Press" @@ -275,8 +274,8 @@ enabled="false"               top="5"               use_ellipses="true"               width="80"> -                <init_callback -                 function="Button.SetFloaterToggle" +                <commit_callback +                 function="Build.Toggle"                   parameter="build" />              </button>          </layout_panel> diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml index 7cc9c46c08..b1782f405e 100644 --- a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml @@ -63,8 +63,7 @@       name="btn_move_up"       layout="topleft"       follows="top|right" -     image_unselected="Movement_Up_Off" -     image_selected="Movement_Up_Off" +     image_overlay="UpArrow_Off"       top="0"       left="0"       height="20" @@ -74,8 +73,7 @@       name="btn_move_down"       layout="topleft"       follows="top|right" -     image_unselected="Movement_Down_Off" -     image_selected="Movement_Down_Off" +     image_overlay="DownArrow_Off"       top="0"       left_pad="3"       height="20" @@ -85,17 +83,16 @@       name="btn_lock"       layout="topleft"       follows="top|right" -     image_name="Lock2" -     top="0" -     left_pad="3" -     height="20" -     width="20" /> +     image_name="Locked_Icon" +     top="2" +     left_pad="1" +     height="13" +     width="9" />      <button        name="btn_edit"       layout="topleft"       follows="top|right" -     image_unselected="Icon_Gear_Background" -     image_selected="Icon_Gear_Background" +     image_overlay="Edit_Wrench"       top="0"       left_pad="3"       height="20" diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml index c5a60ced88..c5fbd1cae6 100644 --- a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml @@ -53,7 +53,7 @@       name="btn_add"       layout="topleft"       follows="top|right" -     label="+" +     image_overlay="AddItem_Off"       top="0"       left="0"       height="20" diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index 9072418329..454a808f02 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -21,6 +21,22 @@      <string       name="now_editing"       value="Now Editing"/> +    <string +     name="folder_view_off" +     value="Hierarchy_View_Disabled" +     translate="false"/> +    <string +     name="folder_view_on" +     value="Hierarchy_View_On" +     translate="false"/> +    <string +     name="list_view_off" +     value="List_View_Disabled" +     translate="false"/> +    <string +     name="list_view_on" +     value="List_View_On" +     translate="false"/>  	<panel.string  		name="not_available"> @@ -88,15 +104,15 @@       width="311">          <icon           follows="left|top" -         height="40" -         image_name="TabIcon_Appearance_Off" +         height="31" +         image_name="Shirt_Large"           left="2"           mouse_opaque="false"           name="outfit_icon" -         top="1" +         top="2"           scale_image="true"           visible="true" -         width="35" /> +         width="31" />              <panel               bevel_style="none"               follows="top|right" @@ -231,11 +247,10 @@               follows="top|left|right"               height="20"               image_hover_unselected="Toolbar_Middle_Over" -             image_overlay="" +             image_overlay="Search_Icon"               image_selected="Toolbar_Middle_Selected"               image_unselected="Toolbar_Middle_Off"               is_toggle="true" -             label="O"               layout="topleft"               left_pad="5"               name="filter_button" @@ -356,11 +371,10 @@                   follows="bottom|left"                   height="25"                   image_hover_unselected="Toolbar_Middle_Over" -                 image_overlay="" +                 image_overlay="Hierarchy_View_Disabled"                   image_selected="Toolbar_Middle_Selected"                   image_unselected="Toolbar_Middle_Off"                   is_toggle="true" -                 label="F"                   layout="topleft"                   left_pad="1"                   name="folder_view_btn" @@ -370,11 +384,10 @@                   follows="bottom|left"                   height="25"                   image_hover_unselected="Toolbar_Middle_Over" -                 image_overlay="" +                 image_overlay="List_View_On"                   image_selected="Toolbar_Middle_Selected"                   image_unselected="Toolbar_Middle_Off"                   is_toggle="true" -                 label="L"                   layout="topleft"                   left_pad="1"                   name="list_view_btn" diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index 32fa6c3b5a..5a6b3ec096 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -87,7 +87,7 @@ width="333">        <button        follows="left|top"        height="20" -      image_overlay="windows/Icon_Gear_Over.png" +      image_overlay="Edit_Wrench"        label=""        layout="topleft"        left="265" diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index 812d94c55f..4c42d1f750 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -58,6 +58,16 @@  				 top="0"  				 width="102" />  			<button +				 enabled="true" +				 follows="bottom|left" +				 height="23" +				 label="Shop" +				 layout="topleft" +				 left="210" +				 name="shop_btn" +				 top="0" +				 width="102" /> +			<button  				 enabled="false"  				 follows="bottom|left"  				 height="23" diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml index 4c3398de87..8e1beb263c 100644 --- a/indra/newview/skins/default/xui/it/floater_about_land.xml +++ b/indra/newview/skins/default/xui/it/floater_about_land.xml @@ -198,13 +198,13 @@ o suddivisa.  			<text name="resellable_lbl">  				Rivendita:  			</text> -			<text left="125" name="resellable_clause"> +			<text name="resellable_clause">  				La terra in questa regione non può essere rivenduta.  			</text>  			<text name="changeable_lbl">  				Suddividi:  			</text> -			<text left="125" name="changeable_clause"> +			<text name="changeable_clause">  				La terra in questa regione non può essere unita/suddivisa.  			</text>  		</panel> @@ -340,7 +340,7 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.  			<check_box label="Sicuro (senza danno)" name="check safe" tool_tip="Se spuntato, imposta il terreno su 'sicuro', disabilitando i danni da combattimento. Se non spuntato, viene abilitato il combattimento a morte."/>  			<check_box label="Nessuna spinta" name="PushRestrictCheck" tool_tip="Previeni i colpi. Selezionare questa opzione può essere utile per prevenire comportamenti dannosi sul tuo terreno."/>  			<check_box label="Mostra luogo nella ricerca (30 L$/settimana)" name="ShowDirectoryCheck" tool_tip="Lascia che questa terra sia vista dagli altri nei risultati di ricerca"/> -			<combo_box left="282" name="land category with adult" width="140"> +			<combo_box name="land category with adult">  				<combo_box.item label="Tutte le categorie" name="item0"/>  				<combo_box.item label="Luogo dei Linden" name="item1"/>  				<combo_box.item label="Adulti" name="item2"/> @@ -355,7 +355,7 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.  				<combo_box.item label="Shopping" name="item11"/>  				<combo_box.item label="Altro" name="item12"/>  			</combo_box> -			<combo_box left="282" name="land category" width="140"> +			<combo_box name="land category">  				<combo_box.item label="Tutte le categorie" name="item0"/>  				<combo_box.item label="Luogo dei Linden" name="item1"/>  				<combo_box.item label="Arte & Cultura" name="item3"/> diff --git a/install.xml b/install.xml index 0e54c73c93..bb2f8c1f2f 100644 --- a/install.xml +++ b/install.xml @@ -955,9 +955,9 @@ anguage Infrstructure (CLI) international standard</string>            <key>linux</key>            <map>              <key>md5sum</key> -            <string>a90135a68d2821eef742d15cb06b15b9</string> +            <string>7a5e02d252b76ab41bdca58506fa4147</string>              <key>url</key> -            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20100407-cookie-api.tar.bz2</uri> +            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20100521.tar.bz2</uri>            </map>            <key>windows</key>            <map> | 
