Merge with viewer-development
commit
3a36ed079c
|
|
@ -767,6 +767,8 @@ WolfPup Lowenhar
|
|||
STORM-102
|
||||
STORM-103
|
||||
STORM-143
|
||||
STORM-535
|
||||
STORM-544
|
||||
VWR-20741
|
||||
VWR-20933
|
||||
Zai Lynch
|
||||
|
|
|
|||
|
|
@ -442,6 +442,14 @@
|
|||
<boolean>true</boolean>
|
||||
</map>
|
||||
|
||||
<key>SimConsoleResponse</key>
|
||||
<map>
|
||||
<key>flavor</key>
|
||||
<string>llsd</string>
|
||||
<key>trusted-sender</key>
|
||||
<boolean>true</boolean>
|
||||
</map>
|
||||
|
||||
<key>DirLandReply</key>
|
||||
<map>
|
||||
<key>flavor</key>
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ macro (check_message_template _target)
|
|||
TARGET ${_target}
|
||||
POST_BUILD
|
||||
COMMAND ${PYTHON_EXECUTABLE}
|
||||
ARGS ${SCRIPTS_DIR}/template_verifier.py
|
||||
--mode=development --cache_master
|
||||
COMMENT "Verifying message template"
|
||||
ARGS ${SCRIPTS_DIR}/md5check.py
|
||||
3f19d130400c547de36278a6b6f9b028
|
||||
${SCRIPTS_DIR}/messages/message_template.msg
|
||||
COMMENT "Verifying message template - See http://wiki.secondlife.com/wiki/Template_verifier.py"
|
||||
)
|
||||
endmacro (check_message_template)
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
@ -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
|
||||
|
|
@ -680,8 +680,6 @@ void LLIMFloater::updateMessages()
|
|||
|
||||
if (messages.size())
|
||||
{
|
||||
// LLUIColor chat_color = LLUIColorTable::instance().getColor("IMChatColor");
|
||||
|
||||
LLSD chat_args;
|
||||
chat_args["use_plain_text_chat_history"] = use_plain_text_chat_history;
|
||||
|
||||
|
|
|
|||
|
|
@ -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>);
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -399,9 +399,6 @@
|
|||
<color
|
||||
name="HighlightParentColor"
|
||||
value="0.67 0.83 0.96 1" />
|
||||
<color
|
||||
name="IMChatColor"
|
||||
reference="LtGray" />
|
||||
<color
|
||||
name="IMHistoryBgColor"
|
||||
reference="Unused?" />
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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 />
|
||||
|
||||
|
|
|
|||
|
|
@ -113,22 +113,22 @@
|
|||
</text>
|
||||
<color_swatch
|
||||
can_apply_immediately="true"
|
||||
color="LtGray"
|
||||
color="EmphasisColor_35"
|
||||
follows="left|top"
|
||||
height="24"
|
||||
label_height="0"
|
||||
label_width="60"
|
||||
layout="topleft"
|
||||
left="360"
|
||||
name="im"
|
||||
name="objects"
|
||||
top_pad="-15"
|
||||
width="44">
|
||||
<color_swatch.init_callback
|
||||
function="Pref.getUIColor"
|
||||
parameter="IMChatColor" />
|
||||
parameter="ObjectChatColor" />
|
||||
<color_swatch.commit_callback
|
||||
function="Pref.applyUIColor"
|
||||
parameter="IMChatColor" />
|
||||
parameter="ObjectChatColor" />
|
||||
</color_swatch>
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -141,7 +141,7 @@
|
|||
name="text_box3"
|
||||
top_delta="5"
|
||||
width="95">
|
||||
IM
|
||||
Objects
|
||||
</text>
|
||||
<color_swatch
|
||||
can_apply_immediately="true"
|
||||
|
|
@ -206,37 +206,6 @@
|
|||
width="95">
|
||||
Errors
|
||||
</text>
|
||||
<color_swatch
|
||||
can_apply_immediately="true"
|
||||
color="EmphasisColor_35"
|
||||
follows="left|top"
|
||||
height="24"
|
||||
label_height="0"
|
||||
layout="topleft"
|
||||
left="360"
|
||||
name="objects"
|
||||
top_pad="-15"
|
||||
width="44" >
|
||||
<color_swatch.init_callback
|
||||
function="Pref.getUIColor"
|
||||
parameter="ObjectChatColor" />
|
||||
<color_swatch.commit_callback
|
||||
function="Pref.applyUIColor"
|
||||
parameter="ObjectChatColor" />
|
||||
</color_swatch>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
mouse_opaque="false"
|
||||
name="text_box6"
|
||||
top_delta="5"
|
||||
width="95">
|
||||
Objects
|
||||
</text>
|
||||
<color_swatch
|
||||
can_apply_immediately="true"
|
||||
color="LtYellow"
|
||||
|
|
@ -305,7 +274,7 @@
|
|||
left="30"
|
||||
height="12"
|
||||
name="bubble_chat"
|
||||
top_pad="28"
|
||||
top_pad="20"
|
||||
width="120"
|
||||
>
|
||||
Bubble chat:
|
||||
|
|
@ -336,11 +305,58 @@
|
|||
height="16"
|
||||
increment="0.05"
|
||||
initial_value="1"
|
||||
label="Opacity"
|
||||
label="Opacity:"
|
||||
layout="topleft"
|
||||
left_pad="15"
|
||||
label_width="56"
|
||||
left_pad="10"
|
||||
label_width="70"
|
||||
name="bubble_chat_opacity"
|
||||
top_delta = "6"
|
||||
width="347" />
|
||||
width="378" />
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
height="12"
|
||||
name="bubble_chat"
|
||||
top_pad="15"
|
||||
width="120"
|
||||
>
|
||||
Floater Opacity:
|
||||
</text>
|
||||
<slider
|
||||
can_edit_text="false"
|
||||
control_name="ActiveFloaterTransparency"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.01"
|
||||
initial_value="0.8"
|
||||
layout="topleft"
|
||||
label_width="115"
|
||||
label="Active :"
|
||||
left="50"
|
||||
max_val="1.00"
|
||||
min_val="0.00"
|
||||
name="active"
|
||||
show_text="true"
|
||||
top_pad="5"
|
||||
width="415" />
|
||||
<slider
|
||||
can_edit_text="false"
|
||||
control_name="InactiveFloaterTransparency"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.01"
|
||||
initial_value="0.5"
|
||||
layout="topleft"
|
||||
label_width="115"
|
||||
label="Inctive :"
|
||||
left="50"
|
||||
max_val="1.00"
|
||||
min_val="0.00"
|
||||
name="active"
|
||||
show_text="true"
|
||||
top_pad="5"
|
||||
width="415" />
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
#!/usr/bin/python
|
||||
"""\
|
||||
@file md5check.py
|
||||
@brief Replacement for message template compatibility verifier.
|
||||
|
||||
$LicenseInfo:firstyear=20i10&license=viewergpl$
|
||||
Copyright (c) 2010, Linden Research, Inc.
|
||||
|
||||
Second Life Viewer Source Code
|
||||
The source code in this file ("Source Code") is provided by Linden Lab
|
||||
to you under the terms of the GNU General Public License, version 2.0
|
||||
("GPL"), unless you have obtained a separate licensing agreement
|
||||
("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
|
||||
There are special exceptions to the terms and conditions of the GPL as
|
||||
it is applied to this Source Code. View the full text of the exception
|
||||
in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
online at
|
||||
http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
|
||||
By copying, modifying or distributing this software, you acknowledge
|
||||
that you have read and understood your obligations described above,
|
||||
and agree to abide by those obligations.
|
||||
|
||||
ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
COMPLETENESS OR PERFORMANCE.
|
||||
$/LicenseInfo$
|
||||
"""
|
||||
|
||||
import sys
|
||||
import hashlib
|
||||
|
||||
if len(sys.argv) != 3:
|
||||
print """Usage: %s --create|<hash-digest> <file>
|
||||
|
||||
Creates an md5sum hash digest of the specified file content
|
||||
and compares it with the given hash digest.
|
||||
|
||||
If --create is used instead of a hash digest, it will simply
|
||||
print out the hash digest of specified file content.
|
||||
""" % sys.argv[0]
|
||||
sys.exit(1)
|
||||
|
||||
if sys.argv[2] == '-':
|
||||
fh = sys.stdin
|
||||
filename = "<stdin>"
|
||||
else:
|
||||
filename = sys.argv[2]
|
||||
fh = open(filename)
|
||||
|
||||
hexdigest = hashlib.md5(fh.read()).hexdigest()
|
||||
if sys.argv[1] == '--create':
|
||||
print hexdigest
|
||||
elif hexdigest == sys.argv[1]:
|
||||
print "md5sum check passed:", filename
|
||||
else:
|
||||
print "md5sum check FAILED:", filename
|
||||
sys.exit(1)
|
||||
Loading…
Reference in New Issue