diff options
| author | Oz Linden <oz@lindenlab.com> | 2010-11-17 15:22:05 -0500 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2010-11-17 15:22:05 -0500 | 
| commit | 3b86582fb8fd809273d152197f72de2c59a29f24 (patch) | |
| tree | 4f51bb96564c454bde64ab74897e458f0f77a80a /indra | |
| parent | 00ada8dccd50cf04e5ea16f200ce3c6bfbee5023 (diff) | |
| parent | f526f641d887f4a30884d55d63e2aa3898b2fd30 (diff) | |
merge fix for STORM-588
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llui/lllineeditor.cpp | 6 | ||||
| -rw-r--r-- | indra/llui/lltextbase.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llfloaterregiondebugconsole.cpp | 227 | ||||
| -rw-r--r-- | indra/newview/llfloaterregiondebugconsole.h | 63 | ||||
| -rw-r--r-- | indra/newview/llviewerfloaterreg.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerregion.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_region_debug_console.xml | 41 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 12 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_preferences_advanced.xml | 3 | 
10 files changed, 359 insertions, 4 deletions
| diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 5f5fe851bb..3eb58e1aec 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -1304,7 +1304,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)  	// handle ctrl-uparrow if we have a history enabled line editor.  	case KEY_UP: -		if( mHaveHistory && ( MASK_CONTROL == mask ) ) +		if( mHaveHistory && ((mIgnoreArrowKeys == false) || ( MASK_CONTROL == mask )) )  		{  			if( mCurrentHistoryLine > mLineHistory.begin() )  			{ @@ -1319,9 +1319,9 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)  		}  		break; -	// handle ctrl-downarrow if we have a history enabled line editor +	// handle [ctrl]-downarrow if we have a history enabled line editor  	case KEY_DOWN: -		if( mHaveHistory  && ( MASK_CONTROL == mask ) ) +		if( mHaveHistory  && ((mIgnoreArrowKeys == false) || ( MASK_CONTROL == mask )) )  		{  			if( !mLineHistory.empty() && mCurrentHistoryLine < mLineHistory.end() - 1 )  			{ diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 5721df6b36..3f213ed13e 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1591,7 +1591,10 @@ void LLTextBase::setText(const LLStringExplicit &utf8str, const LLStyle::Params&  	// appendText modifies mCursorPos...  	appendText(text, false, input_params);  	// ...so move cursor to top after appending text -	startOfDoc(); +	if (!mTrackEnd) +	{ +		startOfDoc(); +	}  	onValueChange(0, getLength());  } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index d44b0ce679..3a4b9be0d7 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -201,6 +201,7 @@ set(viewer_SOURCE_FILES      llfloaterpostprocess.cpp      llfloaterpreference.cpp      llfloaterproperties.cpp +    llfloaterregiondebugconsole.cpp      llfloaterregioninfo.cpp      llfloaterreporter.cpp      llfloaterscriptdebug.cpp @@ -733,6 +734,7 @@ set(viewer_HEADER_FILES      llfloaterpostprocess.h      llfloaterpreference.h      llfloaterproperties.h +    llfloaterregiondebugconsole.h      llfloaterregioninfo.h      llfloaterreporter.h      llfloaterscriptdebug.h diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp new file mode 100644 index 0000000000..b3b7645dd4 --- /dev/null +++ b/indra/newview/llfloaterregiondebugconsole.cpp @@ -0,0 +1,227 @@ +/**  + * @file llfloaterregiondebugconsole.h + * @author Brad Kittenbrink <brad@lindenlab.com> + * @brief Quick and dirty console for region debug settings + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + *  + * Copyright (c) 2010-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 "llfloaterregiondebugconsole.h" + +#include "llagent.h" +#include "llhttpclient.h" +#include "llhttpnode.h" +#include "lllineeditor.h" +#include "lltexteditor.h" +#include "llviewerregion.h" + +// Two versions of the sim console API are supported. +// +// SimConsole capability (deprecated): +// This is the initial implementation that is supported by some versions of the +// simulator. It is simple and straight forward, just POST a command and the +// body of the response has the result. This API is deprecated because it +// doesn't allow the sim to use any asynchronous API. +// +// SimConsoleAsync capability: +// This capability replaces the original SimConsole capability. It is similar +// in that the command is POSTed to the SimConsoleAsync cap, but the response +// comes in through the event poll, which gives the simulator more flexibility +// and allows it to perform complex operations without blocking any frames. +// +// We will assume the SimConsoleAsync capability is available, and fall back to +// the SimConsole cap if it is not. The simulator will only support one or the +// other. + +namespace +{ +	// Signal used to notify the floater of responses from the asynchronous +	// API. +	typedef boost::signals2::signal< +		void (const std::string& output)> console_reply_signal_t; +	console_reply_signal_t sConsoleReplySignal; + +	const std::string PROMPT("\n\n> "); +	const std::string UNABLE_TO_SEND_COMMAND( +		"ERROR: The last command was not received by the server."); +	const std::string CONSOLE_UNAVAILABLE( +		"ERROR: No console available for this region/simulator."); +	const std::string CONSOLE_NOT_SUPPORTED( +		"This region does not support the simulator console."); + +	// This responder handles the initial response. Unless error() is called +	// we assume that the simulator has received our request. Error will be +	// called if this request times out. +	class AsyncConsoleResponder : public LLHTTPClient::Responder +	{ +	public: +		/* virtual */ +		void error(U32 status, const std::string& reason) +		{ +			sConsoleReplySignal(UNABLE_TO_SEND_COMMAND); +		} +	}; + +	class ConsoleResponder : public LLHTTPClient::Responder +	{ +	public: +		ConsoleResponder(LLTextEditor *output) : mOutput(output) +		{ +		} + +		/*virtual*/ +		void error(U32 status, const std::string& reason) +		{ +			if (mOutput) +			{ +				mOutput->appendText( +					UNABLE_TO_SEND_COMMAND + PROMPT, +					false); +			} +		} + +		/*virtual*/ +		void result(const LLSD& content) +		{ +			if (mOutput) +			{ +				mOutput->appendText( +					content.asString() + PROMPT, false); +			} +		} + +		LLTextEditor * mOutput; +	}; + +	// This handles responses for console commands sent via the asynchronous +	// API. +	class ConsoleResponseNode : public LLHTTPNode +	{ +	public: +		/* virtual */ +		void post( +			LLHTTPNode::ResponsePtr reponse, +			const LLSD& context, +			const LLSD& input) const +		{ +			llinfos << "Received response from the debug console: " +				<< input << llendl; +			sConsoleReplySignal(input["body"].asString()); +		} +	}; +} + +LLFloaterRegionDebugConsole::LLFloaterRegionDebugConsole(LLSD const & key) +: LLFloater(key), mOutput(NULL) +{ +	mReplySignalConnection = sConsoleReplySignal.connect( +		boost::bind( +			&LLFloaterRegionDebugConsole::onReplyReceived, +			this, +			_1)); +} + +LLFloaterRegionDebugConsole::~LLFloaterRegionDebugConsole() +{ +	mReplySignalConnection.disconnect(); +} + +BOOL LLFloaterRegionDebugConsole::postBuild() +{ +	LLLineEditor* input = getChild<LLLineEditor>("region_debug_console_input"); +	input->setEnableLineHistory(true); +	input->setCommitCallback(boost::bind(&LLFloaterRegionDebugConsole::onInput, this, _1, _2)); +	input->setFocus(true); +	input->setCommitOnFocusLost(false); + +	mOutput = getChild<LLTextEditor>("region_debug_console_output"); + +	std::string url = gAgent.getRegion()->getCapability("SimConsoleAsync"); +	if (url.empty()) +	{ +		// Fall back to see if the old API is supported. +		url = gAgent.getRegion()->getCapability("SimConsole"); +		if (url.empty()) +		{ +			mOutput->appendText( +				CONSOLE_NOT_SUPPORTED + PROMPT, +				false); +			return TRUE; +		} +	} + +	mOutput->appendText("> ", false); +	return TRUE; +} + +void LLFloaterRegionDebugConsole::onInput(LLUICtrl* ctrl, const LLSD& param) +{ +	LLLineEditor* input = static_cast<LLLineEditor*>(ctrl); +	std::string text = input->getText() + "\n"; + +	std::string url = gAgent.getRegion()->getCapability("SimConsoleAsync"); +	if (url.empty()) +	{ +		// Fall back to the old API +		url = gAgent.getRegion()->getCapability("SimConsole"); +		if (url.empty()) +		{ +			text += CONSOLE_UNAVAILABLE + PROMPT; +		} +		else +		{ +			// Using SimConsole (deprecated) +			LLHTTPClient::post( +				url, +				LLSD(input->getText()), +				new ConsoleResponder(mOutput)); +		} +	} +	else +	{ +		// Using SimConsoleAsync +		LLHTTPClient::post( +			url, +			LLSD(input->getText()), +			new AsyncConsoleResponder); +	} + +	mOutput->appendText(text, false); +	input->clear(); +} + +void LLFloaterRegionDebugConsole::onReplyReceived(const std::string& output) +{ +	mOutput->appendText(output + PROMPT, false); +} + +LLHTTPRegistration<ConsoleResponseNode> +	gHTTPRegistrationMessageDebugConsoleResponse( +		"/message/SimConsoleResponse"); diff --git a/indra/newview/llfloaterregiondebugconsole.h b/indra/newview/llfloaterregiondebugconsole.h new file mode 100644 index 0000000000..4171a4da6b --- /dev/null +++ b/indra/newview/llfloaterregiondebugconsole.h @@ -0,0 +1,63 @@ +/**  + * @file llfloaterregiondebugconsole.h + * @author Brad Kittenbrink <brad@lindenlab.com> + * @brief Quick and dirty console for region debug settings + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + *  + * Copyright (c) 2010-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_LLFLOATERREGIONDEBUGCONSOLE_H +#define LL_LLFLOATERREGIONDEBUGCONSOLE_H + +#include <boost/signals2.hpp> + +#include "llfloater.h" +#include "llhttpclient.h" + +class LLTextEditor; + +class LLFloaterRegionDebugConsole : public LLFloater, public LLHTTPClient::Responder +{ +public: +	LLFloaterRegionDebugConsole(LLSD const & key); +	virtual ~LLFloaterRegionDebugConsole(); + +	// virtual +	BOOL postBuild(); +	 +	void onInput(LLUICtrl* ctrl, const LLSD& param); + +	LLTextEditor * mOutput; + + private: +	void onReplyReceived(const std::string& output); + +	boost::signals2::connection mReplySignalConnection; +}; + +#endif // LL_LLFLOATERREGIONDEBUGCONSOLE_H diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index b3f14b441d..f573f25efe 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -81,6 +81,7 @@  #include "llfloaterpostprocess.h"  #include "llfloaterpreference.h"  #include "llfloaterproperties.h" +#include "llfloaterregiondebugconsole.h"  #include "llfloaterregioninfo.h"  #include "llfloaterreporter.h"  #include "llfloaterscriptdebug.h" @@ -227,6 +228,7 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("reporter", "floater_report_abuse.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterReporter>);  	LLFloaterReg::add("reset_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterResetQueue>); +	LLFloaterReg::add("region_debug_console", "floater_region_debug_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionDebugConsole>);  	LLFloaterReg::add("region_info", "floater_region_info.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionInfo>);  	LLFloaterReg::add("script_debug", "floater_script_debug.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptDebug>); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index b684206960..ca07e7c4cf 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1400,6 +1400,8 @@ void LLViewerRegion::setSeedCapability(const std::string& url)  	capabilityNames.append("SendUserReportWithScreenshot");  	capabilityNames.append("ServerReleaseNotes");  	capabilityNames.append("SetDisplayName"); +	capabilityNames.append("SimConsole"); +	capabilityNames.append("SimConsoleAsync");  	capabilityNames.append("StartGroupProposal");  	capabilityNames.append("TextureStats");  	capabilityNames.append("UntrustedSimulatorMessage"); diff --git a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml new file mode 100644 index 0000000000..cf95257b0a --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater +  name="region_debug_console" +  title="Region Debug" +  layout="topleft" +  min_height="300" +  min_width="300" +  height="400" +  width="600" +  default_tab_group="1"> +  <text_editor +  left="10" +   type="string" +   length="1" +   follows="left|top|right|bottom" +   font="Monospace" +   height="366" +   width="576" +   ignore_tab="false" +   layout="topleft" +   max_length="65536" +   name="region_debug_console_output" +   show_line_numbers="false"  +   word_wrap="true" +   track_end="true" +   read_only="true"> +  </text_editor> +  <line_editor +   border_style="line" +   border_thickness="1" +   tab_group="1"  +   follows="left|top|right" +   font="SansSerif" +   height="19" +   layout="topleft" +   bottom_delta="20" +   max_length="127" +   name="region_debug_console_input" +   top_delta="0" +   width="576" /> +</floater> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 796b15551a..9fcf952bf0 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -2680,6 +2680,18 @@                   function="ToggleControl"                   parameter="DoubleClickTeleport" />              </menu_item_check> +            <menu_item_check +             label="Region Debug Console" +             name="Region Debug Console" +             shortcut="control|shift|`" +             use_mac_ctrl="true"> +                <menu_item_check.on_check +                 function="Floater.Visible" +                 parameter="region_debug_console" /> +                <menu_item_check.on_click +                 function="Floater.Toggle" +                 parameter="region_debug_console" /> +            </menu_item_check>              <menu_item_separator /> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index dd01683c51..d6e4c56113 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -89,6 +89,7 @@       top_pad="20"       width="237"/>      <check_box +     control_name="ForceShowGrid"       follows="top|left"       height="15"       label="Show Grid Selection at login" @@ -98,6 +99,7 @@       top_pad="5"       width="237"/>      <check_box +     control_name="UseDebugMenus"       follows="top|left"       height="15"       label="Show Advanced Menu" @@ -107,6 +109,7 @@       top_pad="5"       width="237"/>      <check_box +     control_name="QAMode"       follows="top|left"       height="15"       label="Show Developer Menu" | 
