Merge remote-tracking branch 'origin/next' into WL-refactor

This commit is contained in:
David Walter Seikel
2013-07-15 03:59:58 +10:00
151 changed files with 3497 additions and 1464 deletions
+91
View File
@@ -3,6 +3,97 @@
http://imprudenceviewer.org
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
=- 1.4.0 beta 2 -=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
CHANGES
This version of Imprudence mostly contains bug fixes, as
Imprudence went into a feature freeze in anticipation of an RC
release to come later.
IMPROVEMENTS
* Selective cache clearing: now you can selectively delete
different types of disk cache separately.
BUG FIXES
Many bug fixes that are listed here -
http://wiki.kokuaviewer.org/wiki/Imprudence:Release_Notes/1.4.0_Beta_2
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
=- 1.4.0 beta 1 -=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
There was very many changes in 1.4.0 beta 1 compared to Imprudence
1.3.2, this file only summarizes some of them. A more complete list
is here -
http://wiki.kokuaviewer.org/wiki/Imprudence:Release_Notes/1.4.0_Beta_1
RELEASE HIGHLIGHTS
Compared to Imprudence 1.3, Imprudence 1.4 adds a mind-blowing
number of new features, UI improvements, and bug fixes. We
recommend Imprudence 1.3 users also upgrade to Imprudence 1.4
soon, unless you require streaming audio support on Mac.
Here is a brief overview of some of the most notable new features,
grouped by category:
* General: Support for WindLight notecards; Updated Chinese,
French, German, and Japanese UIs; Derender object/avatar; Gestures
can use more keys; Reload $ Balance; Animation Overrider starts
working sooner.
* Communication: Spell Checking; AutoCorrect; Chat Translation;
Chatbar Commands; Display Names support; Highlight chat from
friends; Highlight chat mentioning your name or nickname(s);
Search bar in Friends and Groups lists.
* Content Creation: Support for Alpha and Tattoo layers; new Prim
Alignment tool; Local Textures (real-time preview of textures on
your computer without uploading); Object texture export from SL
(with TPVP-compliant permission checks); Upload support for
Photoshop PSD image files (available on Mac only); Copy/Paste
buttons in Build tools.
* Login, Grids, and OpenSim: Login name and password saved
per-grid; Support for variable sized regions (i.e. bigger than
256m) when available; Support for the OpenRegionInfo capability.
* Map, Radar, and Teleport: Full Radar; Teleport History; Estate
Managers minimap radar distance is no longer limited; Right
clicking objects in Area Object Search to teleport to/cam to/edit
them.
* Media, Browser, and Networking: Media system revamped with
SLPlugin; Media Filters; Interaction and zoom with streaming
media/webpages; Improved XMLPRC and SOCKS5 proxy support; Parcel
media URLs are no longer hidden.
* Preferences: Reorganized Preferences window; New UI skins (Dark
and Gemini); Sliders for draw distance, etc. allow typing in exact
values; Search bar in Debug Settings.
* Texture Loading: Many, many texture loading improvements from
Robin Cornelius, Thickbrick Sleaford, and others; Various
improvements to help prevent unloaded (cloud) avatars.
* Development: Many, many, many code improvements and cleanup
under the hood. Special thanks to Aleric Inglewood and others for
their work on this.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
=- 1.3.2 -=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+6
View File
@@ -702,6 +702,12 @@
<key>FetchLib</key>
<boolean>true</boolean>
<key>ObjectMedia</key>
<boolean>false</boolean>
<key>ObjectMediaNavigate</key>
<boolean>false</boolean>
</map>
<key>messageBans</key>
+5
View File
@@ -24,6 +24,11 @@ list(REMOVE_DUPLICATES TYPES)
set(CMAKE_CONFIGURATION_TYPES ${TYPES} CACHE STRING "Supported build types." FORCE)
unset(TYPES)
# Work around nmake / VS difference.
set(VIEWER_CFG_INTDIR ${CMAKE_CFG_INTDIR})
if (NMAKE)
set(VIEWER_CFG_INTDIR ${CMAKE_BUILD_TYPE})
endif(NMAKE)
# Determine the number of bits of this processor
+97 -107
View File
@@ -408,7 +408,7 @@ class LinuxSetup(UnixSetup):
print 'Running %r' % cmd
self.run(cmd)
class DarwinSetup(UnixSetup):
def __init__(self):
super(DarwinSetup, self).__init__()
@@ -485,6 +485,10 @@ class WindowsSetup(PlatformSetup):
'vc100' : {
'gen' : r'Visual Studio 10',
'ver' : r'10.0'
},
'nmake' : {
'gen' : r'NMake Makefiles',
'ver' : r''
}
}
gens['vs2003'] = gens['vc71']
@@ -500,6 +504,41 @@ class WindowsSetup(PlatformSetup):
self._generator = None
self.incredibuild = False
def find_visual_studio(self, gen=None):
if gen is None:
gen = self._generator
gen = gen.lower()
try:
import _winreg
key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
self.gens[gen]['ver'])
value_str = (r'EnvironmentDirectory')
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
key = _winreg.OpenKey(reg, key_str)
value = _winreg.QueryValueEx(key, value_str)[0]
print 'Found: %s' % value
return value
except WindowsError, err:
return ''
def find_visual_studio_express(self, gen=None):
if gen is None:
gen = self._generator
gen = gen.lower()
try:
import _winreg
key_str = (r'SOFTWARE\Microsoft\VCExpress\%s\Setup\VC' %
self.gens[gen]['ver'])
value_str = (r'ProductDir')
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
key = _winreg.OpenKey(reg, key_str)
value = _winreg.QueryValueEx(key, value_str)[0]+"vcpackages"
print 'Found: %s' % value
self.using_express = True
return value
except WindowsError, err:
return ''
def _get_generator(self):
if self._generator is None:
for version in 'vc80 vc90 vc100 vc71'.split():
@@ -508,9 +547,8 @@ class WindowsSetup(PlatformSetup):
print 'Building with ', self.gens[version]['gen']
break
else:
print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions'
for version in 'vc80 vc90 vc100 vc71'.split():
if self.find_visual_studio_express(version):
if self.find_visual_studio_express(version) != '':
self._generator = version
self.using_express = True
print 'Building with ', self.gens[version]['gen'] , "Express edition"
@@ -521,6 +559,8 @@ class WindowsSetup(PlatformSetup):
return self._generator
def _set_generator(self, gen):
if gen == 'nmake':
self._get_generator()
self._generator = gen
generator = property(_get_generator, _set_generator)
@@ -538,83 +578,58 @@ class WindowsSetup(PlatformSetup):
opts=quote(opts),
standalone=self.standalone,
unattended=self.unattended,
project_name=self.project_name
project_name=self.project_name,
type=self.build_type,
use_vstool='ON',
nmake=''
)
if self.generator == 'nmake':
args['use_vstool'] = 'OFF'
args['nmake'] = '-DNMAKE:BOOL=ON'
if self.using_express:
args['using_express'] = 'ON'
args['use_vstool'] = 'OFF'
else:
args['using_express'] = 'OFF'
# default to packaging disabled
# if simple:
# return 'cmake %(opts)s "%(dir)s"' % args
return ('cmake -G "%(generator)s" '
'-DCMAKE_BUILD_TYPE:STRING=%(type)s '
'-DSTANDALONE:BOOL=%(standalone)s '
'-DUNATTENDED:BOOL=%(unattended)s '
'-DROOT_PROJECT_NAME:STRING=%(project_name)s '
#'-DPACKAGE:BOOL=ON '
'-DUSING_EXPRESS:BOOL=%(using_express)s '
'-DUSE_VSTOOL:BOOL=%(use_vstool)s '
'%(nmake)s '
'%(opts)s "%(dir)s"' % args)
def find_visual_studio(self, gen=None):
if gen is None:
gen = self._generator
gen = gen.lower()
try:
import _winreg
key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
self.gens[gen]['ver'])
value_str = (r'EnvironmentDirectory')
print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
(key_str, value_str))
print key_str
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
key = _winreg.OpenKey(reg, key_str)
value = _winreg.QueryValueEx(key, value_str)[0]
print 'Found: %s' % value
return value
except WindowsError, err:
print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
return ''
def find_visual_studio_express(self, gen=None):
if gen is None:
gen = self._generator
gen = gen.lower()
try:
import _winreg
key_str = (r'SOFTWARE\Microsoft\VCExpress\%s\Setup\VC' %
self.gens[gen]['ver'])
value_str = (r'ProductDir')
print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
(key_str, value_str))
print key_str
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
key = _winreg.OpenKey(reg, key_str)
value = _winreg.QueryValueEx(key, value_str)[0]+"IDE"
print 'Found: %s' % value
self.using_express = True
return value
except WindowsError, err:
print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
return ''
def get_build_cmd(self):
if self.incredibuild:
config = self.build_type
if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0', r'10.0', r'7.1' ]:
config = '\"%s|Win32\"' % config
return "buildconsole %s.sln /build %s" % (self.project_name, config)
environment = self.find_visual_studio()
environment = self.find_visual_studio(self.generator)
if environment == '':
environment = self.find_visual_studio_express()
if environment == '':
print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?"
else:
print >> sys.stderr, "\nSolution generation complete, as you are using an express edition the final\n stages will need to be completed by hand"
build_dirs=self.build_dirs();
print >> sys.stderr, "Solution can now be found in:", build_dirs[0]
print >> sys.stderr, "Set %s as startup project" % self.project_name
print >> sys.stderr, "Set build target is Release or RelWithDbgInfo"
exit(0)
environment = self.find_visual_studio_express(self.generator)
if self.generator != 'nmake':
if environment == '':
print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?"
else:
build_dirs=self.build_dirs();
return("\"\"%s\\vcbuild\" /useenv %s.sln \"%s|win32\"\"" % (environment, self.project_name, self.build_type))
if self.generator == 'nmake':
# Hack around a bug in cmake that I'm surprised did not hit GUI controlled builds.
self.run(r'sed -i "s|\(^RC_FLAGS .* \) /GS .*$|\1|" build-nmake/win_crash_logger/CMakeFiles/windows-crash-logger.dir/flags.make')
self.run(r'sed -i "s|\(^RC_FLAGS .* \) /GS .*$|\1|" build-nmake/newview/CMakeFiles/imprudence-bin.dir/flags.make')
self.run(r'sed -i "s|\(^RC_FLAGS .* \) /EHsc .*/Zm1000 \($\)|\1\2|" build-nmake/win_crash_logger/CMakeFiles/windows-crash-logger.dir/flags.make')
self.run(r'sed -i "s|\(^RC_FLAGS .* \) /EHsc .*/Zm1000 \($\)|\1\2|" build-nmake/newview/CMakeFiles/imprudence-bin.dir/flags.make')
# Evil hack.
self.run(r'touch newview/touched.bat')
return 'nmake'
# devenv.com is CLI friendly, devenv.exe... not so much.
return ('"%sdevenv.com" %s.sln /build %s' %
@@ -634,55 +649,29 @@ class WindowsSetup(PlatformSetup):
raise CommandError('the command %r %s' %
(name, ret))
def run_cmake(self, args=[]):
'''Override to add the vstool.exe call after running cmake.'''
PlatformSetup.run_cmake(self, args)
if self.unattended == 'OFF':
if self.using_express == False:
self.run_vstool()
def run_vstool(self):
for build_dir in self.build_dirs():
stamp = os.path.join(build_dir, 'vstool.txt')
try:
prev_build = open(stamp).read().strip()
except IOError:
prev_build = ''
if prev_build == self.build_type:
# Only run vstool if the build type has changed.
continue
vstool_cmd = (os.path.join('tools','vstool','VSTool.exe') +
' --solution ' +
os.path.join(build_dir,'Imprudence.sln') +
' --config ' + self.build_type +
' --startup imprudence-bin')
print 'Running %r in %r' % (vstool_cmd, getcwd())
self.run(vstool_cmd)
print >> open(stamp, 'w'), self.build_type
def run_build(self, opts, targets):
cwd = getcwd()
build_cmd = self.get_build_cmd()
for d in self.build_dirs():
try:
os.chdir(d)
if targets:
for t in targets:
cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts))
if build_cmd != "":
for d in self.build_dirs():
try:
os.chdir(d)
if targets:
for t in targets:
cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts))
print 'Running %r in %r' % (cmd, d)
self.run(cmd)
else:
cmd = '%s %s' % (build_cmd, ' '.join(opts))
print 'Running %r in %r' % (cmd, d)
self.run(cmd)
else:
cmd = '%s %s' % (build_cmd, ' '.join(opts))
print 'Running %r in %r' % (cmd, d)
self.run(cmd)
finally:
os.chdir(cwd)
finally:
os.chdir(cwd)
class CygwinSetup(WindowsSetup):
def __init__(self):
super(CygwinSetup, self).__init__()
self.generator = 'vc80'
self.generator = 'nmake'
def cmake_commandline(self, src_dir, build_dir, opts, simple):
dos_dir = commands.getoutput("cygpath -w %s" % src_dir)
@@ -692,11 +681,13 @@ class CygwinSetup(WindowsSetup):
opts=quote(opts),
standalone=self.standalone,
unattended=self.unattended,
project_name=self.project_name
project_name=self.project_name,
type=self.build_type
)
#if simple:
# return 'cmake %(opts)s "%(dir)s"' % args
return ('cmake -G "%(generator)s" '
'-DCMAKE_BUILD_TYPE:STRING=%(type)s '
'-DUNATTENDED:BOOl=%(unattended)s '
'-DSTANDALONE:BOOL=%(standalone)s '
'-DROOT_PROJECT_NAME:STRING=%(project_name)s '
@@ -723,7 +714,7 @@ Options:
-m32 | -m64 build architecture (32-bit or 64-bit)
-N | --no-distcc disable use of distcc
-G | --generator=NAME generator name
Windows: VC80 (VS2005--default), VC71 (VS2003),
Windows: NMake, VC80 (VS2005--default), VC71 (VS2003),
VC90 (VS2008), or VC100 (VS2010)
Mac OS X: Xcode (default), Unix Makefiles
Linux: Unix Makefiles (default), KDevelop3
@@ -806,7 +797,6 @@ For example: develop.py configure -DSERVER:BOOL=OFF"""
for d in setup.build_dirs():
if not os.path.exists(d):
raise CommandError('run "develop.py cmake" first')
setup.run_cmake()
opts, targets = setup.parse_build_opts(args)
setup.run_build(opts, targets)
elif cmd == 'clean':
+4 -1
View File
@@ -1447,9 +1447,12 @@ S32 LLSDBinaryFormatter::format(const LLSD& data, std::ostream& ostr, U32 option
}
case LLSD::TypeUUID:
{
ostr.put('u');
ostr.write((const char*)(&(data.asUUID().mData)), UUID_BYTES);
U8 *value = data.asUUID().mData;
ostr.write((const char*)(&value), UUID_BYTES);
break;
}
case LLSD::TypeString:
ostr.put('s');
+6 -8
View File
@@ -6,7 +6,7 @@
*
* $LicenseInfo:firstyear=2006&license=viewergpl$
*
* Copyright (c) 2006-2009, Linden Research, Inc.
* 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
@@ -14,13 +14,13 @@
* ("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
* online at http://secondlife.com/developers/opensource/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
* http://secondlife.com/developers/opensource/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
@@ -30,11 +30,12 @@
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*
*/
#include "linden_common.h"
#include "llsdutil.h"
#include "llsdutil_math.h"
#include "v3math.h"
#include "v4math.h"
@@ -165,9 +166,6 @@ LLSD ll_sd_from_color4(const LLColor4& c)
LLColor4 ll_color4_from_sd(const LLSD& sd)
{
LLColor4 c;
c.mV[0] = (F32)sd[0].asReal();
c.mV[1] = (F32)sd[1].asReal();
c.mV[2] = (F32)sd[2].asReal();
c.mV[3] = (F32)sd[3].asReal();
c.setValue(sd);
return c;
}
+1 -8
View File
@@ -4437,14 +4437,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
const std::vector<LLVector3>& profile = volume->getProfile().mProfile;
S32 max_s = volume->getProfile().getTotal();
S32 max_t = volume->getPath().mPath.size();
// S32 i;
S32 num_vertices = 0, num_indices = 0;
S32 grid_size = (profile.size()-1)/4;
S32 quad_count = (grid_size * grid_size);
num_vertices = (grid_size+1)*(grid_size+1);
num_indices = quad_count * 4;
S32 grid_size = (profile.size() - 1) / 4;
LLVector3& min = mExtents[0];
LLVector3& max = mExtents[1];
@@ -743,7 +743,8 @@ LLAssetRequest* LLHTTPAssetStorage::findNextRequest(LLAssetStorage::request_list
request_list_t::iterator running_end = running.end();
request_list_t::iterator pending_iter = pending.begin();
request_list_t::iterator pending_end = pending.end();
// FIXME onefang - I assume this was being used to speed up the for(), but this is just a quick pass to get rid of warnings. Try to understand it later.
//request_list_t::iterator pending_end = pending.end();
// Loop over all pending requests until we miss finding it in the running list.
for (; pending_iter != pending.end(); ++pending_iter)
{
@@ -75,7 +75,7 @@ if (DARWIN)
COMMAND mkdir
ARGS
-p
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/SLPlugin.app/Contents/Resources
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/SLPlugin.app/Contents/Resources
)
endif (DARWIN)
@@ -40,16 +40,6 @@
LLMaterialTable LLMaterialTable::basic(1);
// Material UUIDs.
LLUUID const LL_DEFAULT_STONE_UUID("87c5765b-aa26-43eb-b8c6-c09a1ca6208e");
LLUUID const LL_DEFAULT_METAL_UUID("6f3c53e9-ba60-4010-8f3e-30f51a762476");
LLUUID const LL_DEFAULT_GLASS_UUID("b4ba225c-373f-446d-9f7e-6cb7b5cf9b3d");
LLUUID const LL_DEFAULT_WOOD_UUID("89556747-24cb-43ed-920b-47caed15465f");
LLUUID const LL_DEFAULT_FLESH_UUID("80736669-e4b9-450e-8890-d5169f988a50");
LLUUID const LL_DEFAULT_PLASTIC_UUID("304fcb4e-7d33-4339-ba80-76d3d22dc11a");
LLUUID const LL_DEFAULT_RUBBER_UUID("9fae0bc5-666d-477e-9f70-84e8556ec867");
LLUUID const LL_DEFAULT_LIGHT_UUID("00000000-0000-0000-0000-000000000000");
/*
Old Havok 1 constants
+2
View File
@@ -535,6 +535,8 @@ void LLFont::renderGlyph(const U32 glyph_index) const
int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_DEFAULT );
llassert(!error);
// Work around the compiler warning about error not being used when llassert() is compiled out.
error = error + 0;
error = FT_Render_Glyph(mFTFace->glyph, gFontRenderMode);
mRenderGlyphCount++;
+6 -7
View File
@@ -383,11 +383,10 @@ bool LLGLManager::initGL()
if (mGLVendor.substr(0,4) == "ATI ")
{
mGLVendorShort = "ATI";
BOOL mobile = FALSE;
if (mGLRenderer.find("MOBILITY") != std::string::npos)
{
mobile = TRUE;
}
// This is not used anywhere.
//BOOL mobile = FALSE;
//if (mGLRenderer.find("MOBILITY") != std::string::npos)
// mobile = TRUE;
mIsATI = TRUE;
#if LL_WINDOWS && !LL_MESA_HEADLESS
@@ -1014,8 +1013,8 @@ void assert_glerror()
void clear_glerror()
{
// Create or update texture to be used with this data
GLenum error;
error = glGetError();
//GLenum error;
/*error =*/ glGetError();
}
///////////////////////////////////////////////////////////////
+3 -1
View File
@@ -711,7 +711,9 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
{
S32 bytes = w * h * mComponents;
llassert(prev_mip_data);
llassert(prev_mip_size == bytes*4);
llassert(prev_mip_size == (bytes*4));
// Work around llassert() being compiled out and prev_mip_size not otherwise being used.
prev_mip_size = prev_mip_size + 0;
U8* new_data = new U8[bytes];
llassert_always(new_data);
LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents);
-16
View File
@@ -277,30 +277,14 @@ void LLFloater::initFloater(const std::string& title,
mMinimized = FALSE;
mExpandedRect.set(0,0,0,0);
S32 close_pad; // space to the right of close box
S32 close_box_size; // For layout purposes, how big is the close box?
if (close_btn)
{
close_box_size = LLFLOATER_CLOSE_BOX_SIZE;
close_pad = 0;
}
else
{
close_box_size = 0;
close_pad = 0;
}
S32 minimize_box_size;
S32 minimize_pad;
if (minimizable && !drag_on_left)
{
minimize_box_size = LLFLOATER_CLOSE_BOX_SIZE;
minimize_pad = 0;
}
else
{
minimize_box_size = 0;
minimize_pad = 0;
}
// Drag Handle
-2
View File
@@ -75,7 +75,6 @@ public:
bool registerFunctor(const std::string& name, ResponseFunctor f)
{
bool retval = true;
typename FunctorMap::iterator it = mMap.find(name);
if (mMap.count(name) == 0)
{
mMap[name] = f;
@@ -102,7 +101,6 @@ public:
FUNCTOR_TYPE getFunctor(const std::string& name)
{
typename FunctorMap::iterator it = mMap.find(name);
if (mMap.count(name) != 0)
{
return mMap[name];
-2
View File
@@ -288,7 +288,6 @@ void LLKeywords::findSegments(std::vector<LLTextSegment *>* seg_list, const LLWS
const llwchar* base = wtext.c_str();
const llwchar* cur = base;
const llwchar* line = NULL;
while( *cur )
{
@@ -304,7 +303,6 @@ void LLKeywords::findSegments(std::vector<LLTextSegment *>* seg_list, const LLWS
}
// Start of a new line
line = cur;
// Skip white space
while( *cur && isspace(*cur) && (*cur != '\n') )
-2
View File
@@ -3095,8 +3095,6 @@ void LLMenuGL::draw( void )
LLUI::sConfigGroup->getS32("DropShadowFloater") );
}
LLColor4 bg_color = mBackgroundColor;
if( mBgVisible )
{
gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0, mBackgroundColor );
-1
View File
@@ -1078,7 +1078,6 @@ struct LLLayoutStack::LLEmbeddedPanel
mVisibleAmt(1.f) // default to fully visible
{
LLResizeBar::Side side = (orientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
LLRect resize_bar_rect = panelp->getRect();
S32 min_dim;
if (orientation == HORIZONTAL)
-3
View File
@@ -83,9 +83,6 @@ void LLProgressBar::draw()
bar_bg_imagep->draw(getLocalRect(),
background_color);
F32 alpha = 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32()));
LLColor4 bar_color = LLUI::sColorsGroup->getColor("LoginProgressBarFgColor");
bar_color.mV[3] = alpha;
LLRect progress_rect = getLocalRect();
progress_rect.mRight = llround(getRect().getWidth() * (mPercentDone / 100.f));
bar_fg_imagep->draw(progress_rect);
-1
View File
@@ -283,7 +283,6 @@ void LLSlider::draw()
F32 opacity = getEnabled() ? 1.f : 0.3f;
LLColor4 center_color = (mThumbCenterColor % opacity);
LLColor4 track_color = (mTrackColor % opacity);
// Track
LLRect track_rect(mThumbImage->getWidth() / 2,
-4
View File
@@ -3077,7 +3077,6 @@ void LLTextEditor::drawSelectionBackground()
S32 selection_right_x = mTextRect.mRight;
S32 selection_right_y = mTextRect.mBottom;
BOOL selection_left_visible = FALSE;
BOOL selection_right_visible = FALSE;
// Skip through the lines we aren't drawing.
@@ -3085,7 +3084,6 @@ void LLTextEditor::drawSelectionBackground()
S32 left_line_num = cur_line;
S32 num_lines = getLineCount();
S32 right_line_num = num_lines - 1;
S32 line_start = -1;
if (cur_line >= num_lines)
@@ -3119,13 +3117,11 @@ void LLTextEditor::drawSelectionBackground()
if( line_start <= selection_left && selection_left <= line_end )
{
left_line_num = cur_line;
selection_left_visible = TRUE;
selection_left_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_left - line_start, mAllowEmbeddedItems);
selection_left_y = text_y;
}
if( line_start <= selection_right && selection_right <= line_end )
{
right_line_num = cur_line;
selection_right_visible = TRUE;
selection_right_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_right - line_start, mAllowEmbeddedItems);
if (selection_right == line_end)
+2
View File
@@ -706,10 +706,12 @@ public:
// this avoids a MSVC bug where non-referenced static members are "optimized" away
// even if their constructors have side effects
// Then we avoid a compiler warning that dummy is never used. lol
void reference()
{
S32 dummy;
dummy = 0;
dummy = dummy + 0;
}
};
+3 -1
View File
@@ -111,7 +111,9 @@ static const char* EatNonWhiteSpace(const char *str)
int glh_init_extensions(const char *origReqExts)
{
// Length of requested extensions string
/*
unsigned reqExtsLen;
*/
char *reqExts;
// Ptr for individual extensions within reqExts
char *reqExt;
@@ -153,8 +155,8 @@ int glh_init_extensions(const char *origReqExts)
return TRUE;
}
reqExts = strdup(origReqExts);
reqExtsLen = (S32)strlen(reqExts);
/*
reqExtsLen = (S32)strlen(reqExts);
if (NULL == gGLHExts.mUnsupportedExts)
{
gGLHExts.mUnsupportedExts = (char*)malloc(reqExtsLen + 1);
+2 -1
View File
@@ -2521,9 +2521,10 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
sortpat = FcNameParse((FcChar8*) sort_order.c_str());
if (sortpat)
{
FcResult dummyResult;
// Sort the list of system fonts from most-to-least-desirable.
fs = FcFontSort(NULL, sortpat, elide_unicode_coverage,
NULL, NULL);
NULL, &dummyResult);
FcPatternDestroy(sortpat);
}
@@ -103,7 +103,7 @@ if (WINDOWS)
PROPERTIES COMPILE_FLAGS /DYY_NO_UNISTD_H)
endif (WINDOWS)
if (WINDOWS)
if (WINDOWS AND NOT CYGWIN)
get_filename_component(M4_PATH ${M4} PATH)
add_custom_command(
OUTPUT
@@ -118,7 +118,7 @@ if (WINDOWS)
${CMAKE_CURRENT_SOURCE_DIR}/indra.y
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/windows)
else (WINDOWS)
else (WINDOWS AND NOT CYGWIN)
add_custom_command(
OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/indra.y.cpp
@@ -131,7 +131,7 @@ else (WINDOWS)
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/indra.y
)
endif (WINDOWS)
endif (WINDOWS AND NOT CYGWIN)
if (DARWIN)
# Mac OS X 10.4 compatibility
+17 -7
View File
@@ -53,9 +53,16 @@ void parse_string();
#define ECHO do { } while (0)
#if defined(__cplusplus)
extern "C" { int yylex( void ); }
extern "C" { int yyparse( void ); }
extern "C" { int yyerror(const char *fmt, ...); }
extern "C" {
#endif
int yyerror(const char *fmt, ...);
int yylex( void );
// Windows defines this in indra.y.hpp, which is included above, and defines it differently.
#ifndef LL_WINDOWS
int yyparse( void );
#endif
#if defined(__cplusplus)
}
#endif
%}
@@ -722,9 +729,6 @@ L?\"(\\.|[^\\"])*\" { parse_string(); count(); return(STRING_CONSTANT); }
LLScriptAllocationManager *gAllocationManager;
LLScriptScript *gScriptp;
// Prototype for the yacc parser entry point
int yyparse(void);
int yyerror(const char *fmt, ...)
{
gErrorToText.writeError(yyout, gLine, gColumn, LSERROR_SYNTAX_ERROR);
@@ -760,7 +764,13 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename,
yyrestart(yyin);
b_parse_ok = !yyparse();
// TODO - Try to fix this, but for now, no compiling LSL for Windows in SL.
// Actually, this seems to not actually be needed anymore?
// I thought it was needed to support ancient pre Mono LSL scripts, which only work in SL anyway, but they still work fine. Perhaps SL fixed it server side?
// If that's the case, we don't need any of this stuff.
#ifndef LL_WINDOWS
// b_parse_ok = !yyparse();
#endif
if (b_parse_ok)
{
@@ -809,16 +809,7 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,
// is there a fault?
// if yes, print out message and exit
S32 value = getVersion();
S32 major_version = 0;
if (value == LSL2_VERSION1_END_NUMBER)
{
major_version = 1;
}
else if (value == LSL2_VERSION_NUMBER)
{
major_version = 2;
}
else
if ((value != LSL2_VERSION1_END_NUMBER) && (value != LSL2_VERSION_NUMBER))
{
setFault(LSRF_VERSION_MISMATCH);
}
@@ -150,7 +150,9 @@ void LLScriptLSOParse::printGlobals(LLFILE *fp)
// get offset to skip past name
varoffset = global_v_offset;
// FIXME: Not actually used, perhaps there's a skip function? Or perhaps we really do need to skip past a name as the above comment suggests?
offset = bytestream2integer(mRawData, global_v_offset);
offset = offset + 0;
// get typeexport
type = *(mRawData + global_v_offset++);
@@ -268,8 +270,6 @@ void LLScriptLSOParse::printGlobalFunctions(LLFILE *fp)
fprintf(fp, "[Function #%d] [0x%X] %s\n", function_number, orig_function_offset, name);
fprintf(fp, "\tReturn Type: %s\n", LSCRIPTTypeNames[type]);
type = *(mRawData + function_offset++);
S32 params;
params = 0;
S32 pcount = 0;
while (type)
{
@@ -362,7 +362,9 @@ void LLScriptLSOParse::printStates(LLFILE *fp)
if (event_handlers & LSCRIPTStateBitField[k])
{
temp_end = bytestream2integer(mRawData, read_ahead);
// FIXME onefang: Dummy is not actually used, but perhaps this is here to stop a warning? We need to stop another warning now. Some sort of skip might be better.
dummy = bytestream2integer(mRawData, read_ahead);
dummy = dummy + 0;
if ( (temp_end < opcode_end)
&&(temp_end > event_offset))
{
+1 -1
View File
@@ -71,6 +71,6 @@ add_custom_command(
-E
copy_directory
${CMAKE_CURRENT_SOURCE_DIR}/CrashReporter.nib
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib
)
+1 -1
View File
@@ -74,6 +74,6 @@ add_custom_command(
-E
copy_directory
${CMAKE_CURRENT_SOURCE_DIR}/AutoUpdater.nib
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib
)
@@ -312,12 +312,9 @@ gst_slvideo_set_caps (GstBaseSink * bsink, GstCaps * caps)
static gboolean
gst_slvideo_start (GstBaseSink * bsink)
{
GstSLVideo *slvideo;
gboolean ret = TRUE;
slvideo = GST_SLVIDEO(bsink);
GST_SLVIDEO(bsink);
return ret;
return TRUE;
}
static gboolean
@@ -112,8 +112,8 @@ if (DARWIN)
# copy the webkit dylib to the build directory
add_custom_command(
TARGET media_plugin_webkit POST_BUILD
# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/libllqtwebkit.dylib
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/
DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
)
+34 -34
View File
@@ -92,7 +92,7 @@ set(viewer_SOURCE_FILES
jcfloaterareasearch.cpp
kokuastreamingaudio.cpp
kowopenregionsettings.cpp
lightshare.cpp
llettherebelight.cpp
llagent.cpp
llagentaccess.cpp
llagentdata.cpp
@@ -274,6 +274,7 @@ set(viewer_SOURCE_FILES
llmaniprotate.cpp
llmanipscale.cpp
llmaniptranslate.cpp
llmediadataclient.cpp
llmapresponders.cpp
llmediaremotectrl.cpp
llmemoryview.cpp
@@ -506,6 +507,7 @@ set(viewer_SOURCE_FILES
wlfloatermanager.cpp
wlfloaterwindlightsend.cpp
wlretrievesettings.cpp
rcmoapradar.cpp
)
set(VIEWER_BINARY_NAME "imprudence-bin" CACHE STRING
@@ -529,7 +531,7 @@ set(viewer_HEADER_FILES
CMakeLists.txt
ViewerInstall.cmake
aoremotectrl.h
chatbar_as_cmdline.h
chatbar_as_cmdline.h
emeraldboobutils.h
floaterao.h
floaterbusy.h
@@ -548,11 +550,11 @@ set(viewer_HEADER_FILES
jcfloater_animation_list.h
jcfloaterareasearch.h
kokuastreamingaudio.h
lightshare.h
lggautocorrectfloater.h
lggautocorrect.h
lggdicdownload.h
lgghunspell_wrapper.h
llettherebelight.h
lggautocorrectfloater.h
lggautocorrect.h
lggdicdownload.h
lgghunspell_wrapper.h
llagent.h
llagentaccess.h
llagentdata.h
@@ -735,6 +737,7 @@ set(viewer_HEADER_FILES
llmaniprotate.h
llmanipscale.h
llmaniptranslate.h
llmediadataclient.h
llmapresponders.h
llmediaremotectrl.h
llmemoryview.h
@@ -978,6 +981,7 @@ set(viewer_HEADER_FILES
wlfloatermanager.h
wlfloaterwindlightsend.h
wlretrievesettings.h
rcmoapradar.h
)
source_group("CMake Rules" FILES ViewerInstall.cmake)
@@ -1197,19 +1201,15 @@ set(viewer_APPSETTINGS_FILES
app_settings/cmd_line.xml
app_settings/default_grids.xml
app_settings/grass.xml
app_settings/high_graphics.xml
app_settings/keys.ini
app_settings/keywords.ini
app_settings/logcontrol.xml
app_settings/low_graphics.xml
app_settings/mid_graphics.xml
app_settings/settings.xml
app_settings/settings_crash_behavior.xml
app_settings/settings_files.xml
app_settings/settings_per_account.xml
app_settings/std_bump.ini
app_settings/trees.xml
app_settings/ultra_graphics.xml
app_settings/viewerart.xml
${CMAKE_SOURCE_DIR}/../etc/message.xml
${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
@@ -1319,7 +1319,7 @@ if (WINDOWS)
# sets the 'working directory' for debugging from visual studio.
if (NOT UNATTENDED)
if (NOT self.using_express)
if (USE_VSTOOL)
add_custom_command(
TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
@@ -1331,7 +1331,7 @@ if (WINDOWS)
${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging."
)
endif (NOT self.using_express)
endif (USE_VSTOOL)
endif (NOT UNATTENDED)
add_custom_command(
@@ -1341,7 +1341,7 @@ if (WINDOWS)
-E
copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message_template.msg
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings/message_template.msg
COMMENT "Copying message_template.msg to the runtime folder."
)
@@ -1352,7 +1352,7 @@ if (WINDOWS)
-E
copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings/message.xml
COMMENT "Copying message.xml to the runtime folder."
)
@@ -1363,11 +1363,11 @@ if (WINDOWS)
endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
add_custom_command(
OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat
OUTPUT ${VIEWER_CFG_INTDIR}/touched.bat
COMMAND ${PYTHON_EXECUTABLE}
ARGS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
--configuration=${CMAKE_CFG_INTDIR}
--configuration=${VIEWER_CFG_INTDIR}
--channel=${VIEWER_CHANNEL}
--login_channel=${VIEWER_LOGIN_CHANNEL}
--standalone=${STANDALONE}
@@ -1376,15 +1376,15 @@ if (WINDOWS)
--source=${CMAKE_CURRENT_SOURCE_DIR}
--artwork=${ARTWORK_DIR}
--build=${CMAKE_CURRENT_BINARY_DIR}
--dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/package
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
--dest=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/package
--touch=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/touched.bat
DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
)
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit media_plugin_gstreamer010)
if (PACKAGE)
add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat)
add_custom_target(package ALL DEPENDS ${VIEWER_CFG_INTDIR}/touched.bat)
add_dependencies(package windows-updater windows-crash-logger)
endif (PACKAGE)
endif (WINDOWS)
@@ -1519,8 +1519,8 @@ if (DARWIN)
--artwork=${ARTWORK_DIR}
--build=${CMAKE_CURRENT_BINARY_DIR}
--buildtype=${CMAKE_BUILD_TYPE}
--configuration=${CMAKE_CFG_INTDIR}
--dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
--configuration=${VIEWER_CFG_INTDIR}
--dest=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/${product}.app
--grid=${GRID}
--source=${CMAKE_CURRENT_SOURCE_DIR}
--standalone=${STANDALONE}
@@ -1551,8 +1551,8 @@ if (WINDOWS)
-E
copy_if_different
${BUILT_LLCOMMON}
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
COMMENT "Copying llcommon.dll to the runtime folder."
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}
COMMENT "Copying llcommon.dll to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}."
)
get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
@@ -1563,8 +1563,8 @@ if (WINDOWS)
-E
copy_if_different
${BUILT_SLPLUGIN}
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
COMMENT "Copying SLPlugin executable to the runtime folder."
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}
COMMENT "Copying SLPlugin executable to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}."
)
get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
@@ -1575,8 +1575,8 @@ if (WINDOWS)
-E
copy_if_different
${BUILT_WEBKIT_PLUGIN}
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
COMMENT "Copying WebKit Plugin to the runtime folder."
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
COMMENT "Copying WebKit Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
)
get_target_property(BUILT_GSTREAMER_PLUGIN media_plugin_gstreamer010 LOCATION)
@@ -1587,8 +1587,8 @@ if (WINDOWS)
-E
copy_if_different
${BUILT_GSTREAMER_PLUGIN}
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
COMMENT "Copying Gstreamer Plugin to the runtime folder."
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
COMMENT "Copying Gstreamer Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
)
get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
@@ -1599,13 +1599,13 @@ if (WINDOWS)
-E
copy_if_different
${BUILT_QUICKTIME_PLUGIN}
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
COMMENT "Copying Quicktime Plugin to the runtime folder."
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
COMMENT "Copying Quicktime Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
)
# Copying the mime_types.xml file to app_settings
set(mime_types_source "${CMAKE_SOURCE_DIR}/newview/skins/default/xui/en-us")
set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings")
set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings")
add_custom_command(
TARGET ${VIEWER_BINARY_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND}
@@ -1622,7 +1622,7 @@ endif (WINDOWS)
if (DARWIN)
# Don't do this here -- it's taken care of by viewer_manifest.py
# add_custom_command(TARGET ${VIEWER_BINARY_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/
# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin/
# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
# )
endif (DARWIN)
@@ -1,199 +1,285 @@
<llsd>
<array>
<map>
<key>default_grids_version</key><string>38</string>
</map>
<!-- Second Life -->
<map>
<key>gridnick</key><string>secondlife</string>
<key>gridname</key><string>Second Life</string>
<key>platform</key><string>SecondLife</string>
<key>loginuri</key><string>https://login.agni.lindenlab.com/cgi-bin/login.cgi</string>
<key>loginpage</key><string>http://imprudenceviewer.org/app/splash/</string>
<key>helperuri</key><string>https://secondlife.com/helpers/</string>
<key>website</key><string>http://secondlife.com/</string>
<key>support</key><string>http://secondlife.com/support/</string>
<key>register</key><string>http://secondlife.com/registration/</string>
<key>password</key><string>http://secondlife.com/account/request.php</string>
<key>version</key><string>2</string>
</map>
<!-- Second Life Beta -->
<map>
<key>gridnick</key><string>secondlifebeta</string>
<key>gridname</key><string>Second Life Beta Grid</string>
<key>platform</key><string>SecondLife</string>
<key>loginuri</key><string>https://login.aditi.lindenlab.com/cgi-bin/login.cgi</string>
<key>loginpage</key><string>http://imprudenceviewer.org/app/splash/</string>
<key>helperuri</key><string>http://aditi-secondlife.webdev.lindenlab.com/helpers/</string>
<key>website</key><string>http://secondlife.com/</string>
<key>support</key><string>http://secondlife.com/support/</string>
<key>register</key><string>http://secondlife.com/registration/</string>
<key>password</key><string>http://secondlife.com/account/request.php</string>
<key>version</key><string>3</string>
</map>
<!-- Local Host -->
<map>
<key>gridnick</key><string>localhost</string>
<key>gridname</key><string>Local Host</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://127.0.0.1:9000/</string>
<key>loginpage</key><string />
<key>helperuri</key><string>http://127.0.0.1:9000/</string>
<key>version</key><string>1</string>
</map>
<!-- OSGrid -->
<map>
<key>gridnick</key><string>osgrid</string>
<key>gridname</key><string>OSGrid</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://login.osgrid.org/</string>
<key>loginpage</key><string>http://www.osgrid.org/splash/</string>
<key>helperuri</key><string>http://helper.osgrid.org/</string>
<key>website</key><string>http://www.osgrid.org/</string>
<key>support</key><string>http://www.osgrid.org/</string>
<key>register</key>
<string>http://www.osgrid.org/index.php/auth/register</string>
<key>password</key>
<string>http://www.osgrid.org/index.php/auth/forgot_password</string>
<key>version</key><string>3</string>
</map>
<!-- Your Alternative Life -->
<map>
<key>gridnick</key><string>youralternativelife</string>
<key>gridname</key><string>Your Alternative Life</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://grid01.from-ne.com:8002/</string>
<key>loginpage</key><string>http://grid01.from-ne.com/tios/loginscreen3.php</string>
<key>helperuri</key><string>http://grid01.from-ne.com/tios/services/</string>
<key>website</key><string>http://www.youralternativelife.com</string>
<key>support</key><string>http://www.youralternativelife.com</string>
<key>register</key><string>http://www.youralternativelife.com</string>
<key>password</key><string>http://www.youralternativelife.com</string>
<key>version</key><string>0</string>
</map>
<!-- The New World Grid -->
<map>
<key>gridnick</key><string>thenewworldgrid</string>
<key>gridname</key><string>The New World Grid</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://grid.newworldgrid.com:8002/</string>
<key>loginpage</key><string>http://account.newworldgrid.com/loginscreen.php</string>
<key>helperuri</key><string>http://account.newworldgrid.com/</string>
<key>website</key><string>http://www.newworldgrid.com/</string>
<key>support</key><string>http://www.newworldgrid.com/</string>
<key>register</key><string>http://www.newworldgrid.com/register</string>
<key>password</key><string>http://account.newworldgrid.com/</string>
<key>version</key><string>0</string>
</map>
<!-- ReactionGrid -->
<map>
<key>gridnick</key><string>reactiongrid</string>
<key>gridname</key><string>ReactionGrid</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://reactiongrid.com:8008/</string>
<key>loginpage</key><string>http://gsquared.info/portal</string>
<key>website</key><string>http://reactiongrid.com/Default.aspx</string>
<key>support</key><string>http://reactiongrid.com/Support.aspx</string>
<key>register</key><string>http://reactiongrid.com/Register.aspx</string>
<key>password</key><string>http://reactiongrid.com/Support/ResetPassword.aspx</string>
<key>version</key><string>0</string>
</map>
<!-- Craft (offspring of Cyberlandia) -->
<map>
<key>gridnick</key><string>craft</string>
<key>gridname</key><string>Craft</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://craft-world.org:8002/</string>
<key>loginpage</key><string>http://www.craft-world.org/loginscreen.php</string>
<key>helperuri</key><string>http://webapp.craft-world.org/</string>
<key>website</key><string>http://www.craft-world.org/</string>
<key>register</key><string>http://craft-world.org:8002/wifi/user/account/</string>
<key>password</key><string>http://craft-world.org:8002/wifi/forgotpassword</string>
<key>version</key><string>0</string>
</map>
<!-- Role Play Worlds -->
<map>
<key>gridnick</key><string>roleplayworlds</string>
<key>gridname</key><string>Role Play Worlds</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://grid.roleplayworlds.net:8002/</string>
<key>loginpage</key><string>http://roleplayworlds.net/loginscreen</string>
<key>helperuri</key><string>http://grid.roleplayworlds.net/</string>
<key>website</key><string>http://roleplayworlds.net/</string>
<key>support</key><string>http://roleplayworlds.net/help</string>
<key>register</key><string>http://roleplayworlds.net/register</string>
<key>password</key><string>http://roleplayworlds.net/password</string>
<key>version</key><string>1</string>
</map>
<!-- GiantGrid -->
<map>
<key>gridnick</key><string>giantgrid</string>
<key>gridname</key><string>GiantGrid</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://giantgrid.no-ip.biz:8002/</string>
<key>loginpage</key><string>http://www.giantgrid.nl</string>
<key>helperuri</key><string>http://giantgrid.no-ip.biz/XoopCube/html/modules/xoopensim/helper/</string>
<key>website</key><string>http://www.giantgrid.nl</string>
<key>register</key><string>http://giantgrid.no-ip.biz:8002/wifi/user/account/</string>
<key>password</key><string>http://giantgrid.no-ip.biz:8002/wifi/forgotpassword</string>
<key>support</key><string>http://gianttest.no-ip.biz/ticket/</string>
<key>version</key><string>1</string>
<key>default_grids_version</key><string>39</string>
</map>
<!-- 3rd Rock Grid -->
<map>
<key>gridnick</key><string>3rdrock</string>
<key>gridname</key><string>3rd Rock Grid</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://grid.3rdrockgrid.com:8002/</string>
<key>loginpage</key><string>http://3rdrockgrid.com/startpage.php</string>
<key>helperuri</key><string>http://grid.3rdrockgrid.com/money/</string>
<key>website</key><string>http://3rdrockgrid.com/</string>
<key>register</key><string>http://3rdrockgrid.com/</string>
<key>password</key><string>http://3rdrockgrid.com/</string>
<key>support</key><string>http://3rdrockgrid.com/</string>
<key>version</key><string>1</string>
<key>gridname</key><string>3rd Rock Grid</string>
<key>gridnick</key><string>3rdRock</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://3rdrockgrid.com/</string>
<key>help</key><string>http://3rdrockgrid.com/</string>
<key>helperuri</key><string>http://grid.3rdrockgrid.com/3rg_money/</string>
<key>loginuri</key><string>http://grid.3rdrockgrid.com:8002/</string>
<key>loginpage</key><string>http://3rdrockgrid.com/startpage.php</string>
<key>website</key><string>http://3rdrockgrid.com/</string>
<key>register</key><string>http://3rdrockgrid.com/</string>
<key>password</key><string>http://3rdrockgrid.com/</string>
<key>support</key><string>http://3rdrockgrid.com/</string>
<key>version</key><string>1</string>
</map>
<!-- Avination -->
<map>
<key>gridname</key><string>Avination</string>
<key>gridnick</key><string>Avination</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://login.avination.net</string>
<key>helperuri</key><string>https://secure.3dhosting.de/</string>
<key>loginpage</key><string>https://www.avination.com/welcome.php</string>
<key>loginuri</key><string>https://login.avination.com</string>
<key>name</key><string>login.avination.net</string>
<key>password</key><string>https://www.avination.com/pwrecover.php</string>
<key>register</key><string>https://www.avination.com/join.php</string>
</map>
<!-- Craft (offspring of Cyberlandia) -->
<map>
<key>gridname</key><string>Craft - The Friendly World</string>
<key>gridnick</key><string>Craft</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://www.craft-world.org/</string>
<key>loginuri</key><string>http://craft-world.org:8002/</string>
<key>loginpage</key><string>http://www.craft-world.org/loginscreen.php</string>
<key>helperuri</key><string>http://webapp.craft-world.org/economy/</string>
<key>website</key><string>http://www.craft-world.org/</string>
<key>register</key><string>http://craft-world.org:8002/wifi/user/account/</string>
<key>password</key><string>http://craft-world.org:8002/wifi/forgotpassword</string>
<key>version</key><string>0</string>
</map>
<!-- FrancoGrid -->
<map>
<key>gridname</key><string>Metavers Francophone FrancoGrid</string>
<key>gridnick</key><string>francogrid</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://francogrid.org/</string>
<key>help</key><string>http://francogrid.org/aide</string>
<key>helperuri</key><string>http://helper.main.francogrid.org/</string>
<key>loginpage</key><string>http://viewer.francogrid.org/</string>
<key>loginuri</key><string>http://login.francogrid.org/</string>
<key>name</key><string>login.francogrid.org</string>
<key>password</key><string>http://francogrid.org/user/password</string>
<key>register</key><string>http://francogrid.org/user/register</string>
</map>
<!-- GiantGrid -->
<map>
<key>gridname</key><string>GiantGrid</string>
<key>gridnick</key><string>GiantGrid</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://giantgrid.no-ip.biz:8002/</string>
<key>loginpage</key><string>http://www.giantgrid.nl</string>
<key>helperuri</key><string>http://giantgrid.no-ip.biz/XoopCube/html/modules/xoopensim/helper/</string>
<key>website</key><string>http://www.giantgrid.nl</string>
<key>register</key><string>http://giantgrid.no-ip.biz:8002/wifi/user/account/</string>
<key>password</key><string>http://giantgrid.no-ip.biz:8002/wifi/forgotpassword</string>
<key>support</key><string>http://gianttest.no-ip.biz/ticket/</string>
<key>version</key><string>1</string>
</map>
<!-- InWorldz -->
<map>
<key>gridname</key> <string>InWorldz</string>
<key>gridnick</key> <string>inworldz</string>
<key>platform</key> <string>OpenSim</string>
<key>loginuri</key> <string>http://inworldz.com:8002/</string>
<key>loginpage</key> <string>http://inworldz.com/loginscreen.php</string>
<key>helperuri</key> <string>http://inworldz.com/</string>
<key>password</key> <string>http://inworldz.com/loginerror.php?error=2</string>
<key>register</key> <string>http://inworldz.com/register.php</string>
<key>support</key> <string>http://inworldz.com/support.php</string>
<key>website</key> <string>http://inworldz.com/</string>
<key>version</key> <string>2</string>
</map>
<key>gridname</key><string>InWorldz</string>
<key>gridnick</key><string>InWorldz</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://inworldz.com/</string>
<key>help</key><string>http://inworldz.com/faq.php</string>
<key>loginuri</key><string>http://inworldz.com:8002/</string>
<key>loginpage</key><string>http://inworldz.com/loginscreen.php</string>
<key>helperuri</key><string>http://inworldz.com/</string>
<key>password</key><string>http://inworldz.com/</string>
<key>register</key><string>http://inworldz.com/register.php</string>
<key>support</key><string>http://inworldz.com/support.php</string>
<key>website</key><string>http://inworldz.com/</string>
<key>version</key><string>2</string>
</map>
<!-- Island Oasis -->
<map>
<key>gridname</key><string>Island Oasis</string>
<key>gridnick</key><string>IslandOasis</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://www.islandoasis.biz/GridStats.aspx</string>
<key>help</key><string>http://www.islandoasis.biz/Support.aspx</string>
<key>helperuri</key><string>http://islandoasisgrid.biz:8020/OsCurrency/</string>
<key>loginpage</key><string>http://www.islandoasis.biz/welcome.aspx</string>
<key>loginuri</key><string>http://islandoasisgrid.biz:8002/</string>
<key>name</key><string>islandoasisgrid.biz:8002</string>
<key>password</key><string>http://www.islandoasis.biz/Login.aspx</string>
<key>register</key><string>http://www.islandoasis.biz/verification.aspx</string>
</map>
<!-- Local Host -->
<map>
<key>gridname</key><string>Localhost</string>
<key>gridnick</key><string>LocalHost</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://127.0.0.1:9000/</string>
<key>loginpage</key><string />
<key>helperuri</key><string>http://127.0.0.1:9000/</string>
<key>version</key><string>1</string>
</map>
<!-- local Sim-on-a-stick -->
<map>
<key>gridname</key><string>Sim-on-a-Stick</string>
<key>gridnick</key><string>SimOnAStick</string>
<key>loginpage</key><string>http://127.0.0.1:9100/wifi/welcome.html</string>
<key>loginuri</key><string>http://localhost:9100</string>
</map>
<!-- Metropolis Metaversum -->
<map>
<key>gridname</key><string>Metropolis Metaversum</string>
<key>gridnick</key><string>Metropolis</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://www.hypergrid.org/metropolis/wiki</string>
<key>help</key><string>http://metropolis.hypergrid.org</string>
<key>helperuri</key><string>http://metropolis.hypergrid.org/currency/helper/</string>
<key>loginpage</key><string>http://metropolis.hypergrid.org</string>
<key>loginuri</key><string>http://hypergrid.org:8002/</string>
<key>name</key><string>hypergrid.org:8002</string>
<key>password</key><string>http://metropolis.hypergrid.org/oswi.php</string>
<key>register</key><string>http://www.hypergrid.org/metropolis/metro_rg.php</string>
</map>
<!-- New World Grid -->
<map>
<key>gridname</key><string>New World Grid</string>
<key>gridnick</key><string>newworldgrid</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://3d.newworldgrid.com:8002/</string>
<key>loginpage</key><string>http://www.newworldgrid.com/loginpage/</string>
<key>helperuri</key><string>http://3d.newworldgrid.com/services/helper/</string>
<key>website</key><string>http://www.newworldgrid.com/</string>
<key>support</key><string>http://www.newworldgrid.com/contact/</string>
<key>register</key><string>http://www.newworldgrid.com/virreacentral/redirect.php?page=register</string>
<key>password</key><string>http://www.newworldgrid.com/virreacentral/redirect.php?page=login</string>
<key>version</key><string>0</string>
</map>
<!-- OSGrid -->
<map>
<key>gridname</key><string>OSGrid</string>
<key>gridnick</key><string>OSGrid</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://www.osgrid.org/</string>
<key>help</key><string>http://www.osgrid.org/</string>
<key>loginuri</key><string>http://login.osgrid.org/</string>
<key>loginpage</key><string>http://www.osgrid.org/splash/</string>
<key>helperuri</key><string>http://helper.osgrid.org/</string>
<key>website</key><string>http://www.osgrid.org/</string>
<key>support</key><string>http://www.osgrid.org/</string>
<key>register</key><string>http://www.osgrid.org/</string>
<key>password</key><string>http://www.osgrid.org/</string>
<key>version</key><string>3</string>
</map>
<!-- ReactionGrid -->
<map>
<key>gridname</key><string>ReactionGrid</string>
<key>gridnick</key><string>ReactionGrid</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://reactiongrid.com/Default.aspx</string>
<key>help</key><string>http://reactiongrid.com/Support.aspx</string>
<key>loginuri</key><string>http://reactiongrid.com:8008/</string>
<key>loginpage</key><string>http://gsquared.info/portal</string>
<key>helperuri</key><string>http://reactiongrid.com:9000/</string>
<key>website</key><string>http://reactiongrid.com/Default.aspx</string>
<key>support</key><string>http://reactiongrid.com/Support.aspx</string>
<key>register</key><string>http://reactiongrid.com/Register.aspx</string>
<key>password</key><string>http://www.reactiongrid.com/Support/PasswordReset.aspx</string>
<key>version</key><string>0</string>
</map>
<!-- ScienceSim -->
<map>
<key>gridname</key> <string>IEEE/ACM ScienceSim Virtual World</string>
<key>gridnick</key> <string>sciencesim</string>
<key>platform</key> <string>OpenSim</string>
<key>loginuri</key> <string>http://grid.sciencesim.com/</string>
<key>loginpage</key> <string>http://island.sciencesim.com/scisim/loginscreen.php</string>
<key>helperuri</key> <string></string>
<key>password</key> <string>http://island.sciencesim.com/scisim</string>
<key>register</key> <string>http://island.sciencesim.com/scisim</string>
<key>support</key> <string>http://island.sciencesim.com/wiki</string>
<key>website</key> <string>http://island.sciencesim.com/about/</string>
<key>version</key> <string>0</string>
<key>gridname</key><string>IEEE/ACM ScienceSim Virtual World</string>
<key>gridnick</key><string>ScienceSim</string>
<key>platform</key><string>OpenSim</string>
<key>loginuri</key><string>http://grid.sciencesim.com/</string>
<key>loginpage</key><string>http://island.sciencesim.com/scisim/loginscreen.php</string>
<key>helperuri</key><string></string>
<key>password</key><string>http://island.sciencesim.com/scisim</string>
<key>register</key><string>http://island.sciencesim.com/scisim</string>
<key>support</key><string>http://island.sciencesim.com/wiki</string>
<key>website</key><string>http://island.sciencesim.com/about/</string>
<key>version</key><string>0</string>
</map>
<!-- Second Life -->
<map>
<key>gridname</key><string>Second Life</string>
<key>gridnick</key><string>SL</string>
<key>platform</key><string>SecondLife</string>
<key>loginuri</key><string>https://login.agni.lindenlab.com/cgi-bin/login.cgi</string>
<key>loginpage</key><string>http://viewer-login.agni.lindenlab.com/</string>
<key>helperuri</key><string>https://secondlife.com/helpers/</string>
<key>website</key><string>http://secondlife.com/</string>
<key>support</key><string>http://secondlife.com/support/</string>
<key>register</key><string>http://secondlife.com/registration/</string>
<key>password</key><string>http://secondlife.com/account/request.php</string>
<key>version</key><string>2</string>
</map>
<!-- Second Life Beta -->
<map>
<key>gridname</key><string>Second Life Beta Grid</string>
<key>gridnick</key><string>SLBeta</string>
<key>platform</key><string>SecondLife</string>
<key>loginuri</key><string>https://login.aditi.lindenlab.com/cgi-bin/login.cgi</string>
<key>loginpage</key><string>http://viewer-login.agni.lindenlab.com</string>
<key>helperuri</key><string>http://aditi-secondlife.webdev.lindenlab.com/helpers/</string>
<key>website</key><string>http://secondlife.com/</string>
<key>support</key><string>http://secondlife.com/support/</string>
<key>register</key><string>http://secondlife.com/registration/</string>
<key>password</key><string>http://secondlife.com/account/request.php</string>
<key>version</key><string>3</string>
</map>
<!-- Virtual Highway -->
<map>
<key>gridname</key><string>Virtual Highway</string>
<key>gridnick</key><string>VirtualHighway</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://www.virtualhighway.us/about.php</string>
<key>helperuri</key><string>http://www.virtualhighway.us/griddal/</string>
<key>loginpage</key><string>http://www.virtualhighway.us/welcome.php</string>
<key>loginuri</key><string>http://login.virtualhighway.us:8002/</string>
<key>name</key><string>login.virtualhighway.us:8002</string>
<key>password</key><string>http://www.virtualhighway.us/users/lostPassword</string>
<key>register</key><string>http://www.virtualhighway.us/users/register</string>
</map>
<!-- virtyou -->
<map>
<key>gridname</key><string>virtyou MainGrid</string>
<key>gridnick</key><string>virtyou</string>
<key>platform</key><string>OpenSim</string>
<key>help</key><string>http://virtyou.com/q/howto/</string>
<key>loginpage</key><string>http://virtyou.com/welcome/</string>
<key>loginuri</key><string>http://go.virtyou.com</string>
<key>password</key><string>http://virtyou.com/user/forgotten.html</string>
<key>register</key><string>http://virtyou.com/user/</string>
</map>
<!-- Your Alternative Life -->
<map>
<key>gridname</key><string>Your Alternative Life</string>
<key>gridnick</key><string>YourAlternativeLife</string>
<key>platform</key><string>OpenSim</string>
<key>about</key><string>http://www.youralternativelife.com</string>
<key>loginuri</key><string>http://grid01.from-ne.com:8002/</string>
<key>loginpage</key><string>http://grid01.from-ne.com/tios/loginscreen3.php</string>
<key>helperuri</key><string>http://grid01.from-ne.com/tios/services/</string>
<key>website</key><string>http://www.youralternativelife.com</string>
<key>support</key><string>http://www.youralternativelife.com</string>
<key>register</key><string>http://www.youralternativelife.com</string>
<key>password</key><string>http://www.youralternativelife.com</string>
<key>version</key><string>0</string>
</map>
</array>
@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<settings version = "101">
<!--NO SHADERS-->
<RenderAvatarCloth value="FALSE"/>
<!--Default for now-->
<RenderAvatarLODFactor value="1.0"/>
<!--NO SHADERS-->
<RenderAvatarVP value="TRUE"/>
<!--Short Range-->
<RenderFarClip value="128"/>
<!--Default for now-->
<RenderFlexTimeFactor value="1"/>
<!--256... but they don't use this-->
<RenderGlowResolutionPow value="9"/>
<!--Sun/Moon only-->
<RenderLightingDetail value="1"/>
<!--Low number-->
<RenderMaxPartCount value="4096"/>
<!--bump okay-->
<RenderObjectBump value="TRUE"/>
<!--NO SHADERS-->
<RenderReflectionDetail value="2"/>
<!--Simple-->
<RenderTerrainDetail value="1"/>
<!--Default for now-->
<RenderTerrainLODFactor value="2"/>
<!--Default for now-->
<RenderTreeLODFactor value="0.5"/>
<!--Try Impostors-->
<RenderUseImpostors value="TRUE"/>
<!--Default for now-->
<RenderVolumeLODFactor value="1.125"/>
<!--NO SHADERS-->
<RenderWaterReflections value="FALSE"/>
<!--NO SHADERS-->
<VertexShaderEnable value="TRUE"/>
<!--NO SHADERS-->
<WindLightUseAtmosShaders value="TRUE"/>
</settings>
@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<settings version = "101">
<!--NO SHADERS-->
<RenderAvatarCloth value="FALSE"/>
<!--Default for now-->
<RenderAvatarLODFactor value="0.5"/>
<!--NO SHADERS-->
<RenderAvatarVP value="FALSE"/>
<!--Short Range-->
<RenderFarClip value="64"/>
<!--Default for now-->
<RenderFlexTimeFactor value="0.5"/>
<!--256... but they don't use this-->
<RenderGlowResolutionPow value="8"/>
<!--Sun/Moon only-->
<RenderLightingDetail value="0"/>
<!--Low number-->
<RenderMaxPartCount value="1024"/>
<!--bump okay-->
<RenderObjectBump value="FALSE"/>
<!--NO SHADERS-->
<RenderReflectionDetail value="0"/>
<!--Simple-->
<RenderTerrainDetail value="0"/>
<!--Default for now-->
<RenderTerrainLODFactor value="1.0"/>
<!--Default for now-->
<RenderTreeLODFactor value="0.5"/>
<!--Try Impostors-->
<RenderUseImpostors value="TRUE"/>
<!--Default for now-->
<RenderVolumeLODFactor value="1.125"/>
<!--NO SHADERS-->
<RenderWaterReflections value="FALSE"/>
<!--NO SHADERS-->
<VertexShaderEnable value="FALSE"/>
<!--NO SHADERS-->
<WindLightUseAtmosShaders value="FALSE"/>
</settings>
@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<settings version = "101">
<!--NO SHADERS-->
<RenderAvatarCloth value="FALSE"/>
<!--Default for now-->
<RenderAvatarLODFactor value="0.5"/>
<!--NO SHADERS-->
<RenderAvatarVP value="TRUE"/>
<!--Short Range-->
<RenderFarClip value="96"/>
<!--Default for now-->
<RenderFlexTimeFactor value="1"/>
<!--256... but they don't use this-->
<RenderGlowResolutionPow value="8"/>
<!--Sun/Moon only-->
<RenderLightingDetail value="1"/>
<!--Low number-->
<RenderMaxPartCount value="2048"/>
<!--bump okay-->
<RenderObjectBump value="TRUE"/>
<!--NO SHADERS-->
<RenderReflectionDetail value="0"/>
<!--Simple-->
<RenderTerrainDetail value="1"/>
<!--Default for now-->
<RenderTerrainLODFactor value="1.0"/>
<!--Default for now-->
<RenderTreeLODFactor value="0.5"/>
<!--Try Impostors-->
<RenderUseImpostors value="TRUE"/>
<!--Default for now-->
<RenderVolumeLODFactor value="1.125"/>
<!--NO SHADERS-->
<RenderWaterReflections value="FALSE"/>
<!--NO SHADERS-->
<VertexShaderEnable value="TRUE"/>
<!--NO SHADERS-->
<WindLightUseAtmosShaders value="FALSE"/>
</settings>
@@ -2,6 +2,123 @@
<llsd>
<map>
<!-- begin RC hacking -->
<key>PrimMediaMasterEnabled</key>
<map>
<key>Comment</key>
<string>Whether or not Media on a Prim is enabled.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>PrimMediaMaxRetries</key>
<map>
<key>Comment</key>
<string>Maximum number of retries for media queries.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>4</integer>
</map>
<key>PrimMediaRequestQueueDelay</key>
<map>
<key>Comment</key>
<string>Timer delay for fetching media from the queue (in seconds).</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1.0</real>
</map>
<key>PrimMediaRetryTimerDelay</key>
<map>
<key>Comment</key>
<string>Timer delay for retrying on media queries (in seconds).</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>5.0</real>
</map>
<key>PrimMediaMaxSortedQueueSize</key>
<map>
<key>Comment</key>
<string>Maximum number of objects the viewer will load media for initially</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>100000</integer>
</map>
<key>PrimMediaMaxRoundRobinQueueSize</key>
<map>
<key>Comment</key>
<string>Maximum number of objects the viewer will continuously update media for</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>100000</integer>
</map>
<key>ShowMOAPRadar</key>
<map>
<key>Comment</key>
<string>Show the MOAP radar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FloaterMOAPRadarRect</key>
<map>
<key>Comment</key>
<string>Rectangle for MOAP Radar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Rect</string>
<key>Value</key>
<array>
<integer>0</integer>
<integer>400</integer>
<integer>200</integer>
<integer>0</integer>
</array>
</map>
<key>MOAPRadarKeepOpen</key>
<map>
<key>Comment</key>
<string>Keeps MOAP radar updates running in background</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>MOAPRadarUpdateRate</key>
<map>
<key>Comment</key>
<string>MOAP Radar update rate (0 = high, 1 = medium, 2 = low)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>1</integer>
</map>
<!-- BEGIN IMPRUDENCE-SPECIFIC SETTINGS -->
<!-- begin Aurora-specific settings -->
@@ -14645,6 +14762,17 @@
<real>1.0</real>
</array>
</map>
<key>moapbeacon</key>
<map>
<key>Comment</key>
<string>Beacon / Highlight MOAP sources</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>particlesbeacon</key>
<map>
<key>Comment</key>
@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<settings version = "101">
<!--NO SHADERS-->
<RenderAvatarCloth value="TRUE"/>
<!--Default for now-->
<RenderAvatarLODFactor value="1.0"/>
<!--NO SHADERS-->
<RenderAvatarVP value="TRUE"/>
<!--Short Range-->
<RenderFarClip value="256"/>
<!--Default for now-->
<RenderFlexTimeFactor value="1"/>
<!--256... but they don't use this-->
<RenderGlowResolutionPow value="9"/>
<!--Sun/Moon only-->
<RenderLightingDetail value="1"/>
<!--Low number-->
<RenderMaxPartCount value="4096"/>
<!--bump okay-->
<RenderObjectBump value="TRUE"/>
<!--NO SHADERS-->
<RenderReflectionDetail value="3"/>
<!--Simple-->
<RenderTerrainDetail value="1"/>
<!--Default for now-->
<RenderTerrainLODFactor value="2.0"/>
<!--Default for now-->
<RenderTreeLODFactor value="1.0"/>
<!--Try Impostors-->
<RenderUseImpostors value="TRUE"/>
<!--Default for now-->
<RenderVolumeLODFactor value="2.0"/>
<!--NO SHADERS-->
<RenderWaterReflections value="TRUE"/>
<!--NO SHADERS-->
<VertexShaderEnable value="TRUE"/>
<!--NO SHADERS-->
<WindLightUseAtmosShaders value="TRUE"/>
</settings>
@@ -302,7 +302,6 @@ bool cmd_line_chat(std::string revised_text, EChatType type)
{
if (i >> z)
{
LLVector3 agentPos = gAgent.getPositionAgent();
LLViewerRegion* agentRegionp = gAgent.getRegion();
if(agentRegionp)
{
+12 -14
View File
@@ -28,7 +28,7 @@ RenderAvatarCloth 1 1
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 1
RenderCubeMap 1 1
RenderFarClip 1 256
RenderFarClip 1 1024
RenderFlexTimeFactor 1 1.0
RenderFogRatio 1 4.0
RenderGamma 1 0
@@ -41,10 +41,10 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 3
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 1.0
RenderTreeLODFactor 1 12.0
RenderUseImpostors 1 1
RenderVBOEnable 1 1
RenderVolumeLODFactor 1 2.0
RenderVolumeLODFactor 1 4.0
RenderWaterReflections 1 1
UseStartScreen 1 1
UseOcclusion 1 1
@@ -54,8 +54,6 @@ WLSkyDetail 1 128
Disregard128DefaultDrawDistance 1 1
Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 1.0
RenderShaderLightingMaxLevel 1 3
//
// Low Graphics Settings
@@ -74,7 +72,7 @@ RenderObjectBump 1 0
RenderReflectionDetail 1 0
RenderTerrainDetail 1 0
RenderTerrainLODFactor 1 1
RenderTreeLODFactor 1 0.5
RenderTreeLODFactor 1 2.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
RenderWaterReflections 1 0
@@ -90,7 +88,7 @@ RenderAnisotropic 1 0
RenderAvatarCloth 1 0
RenderAvatarLODFactor 1 0.5
RenderAvatarVP 1 1
RenderFarClip 1 96
RenderFarClip 1 128
RenderFlexTimeFactor 1 1.0
RenderGlowResolutionPow 1 8
RenderLightingDetail 1 1
@@ -99,7 +97,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 0
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 1.0
RenderTreeLODFactor 1 0.5
RenderTreeLODFactor 1 4.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
RenderWaterReflections 1 0
@@ -115,7 +113,7 @@ RenderAnisotropic 1 1
RenderAvatarCloth 1 0
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 1
RenderFarClip 1 128
RenderFarClip 1 256
RenderFlexTimeFactor 1 1.0
RenderGlowResolutionPow 1 9
RenderLightingDetail 1 1
@@ -124,9 +122,9 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 2
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 0.5
RenderTreeLODFactor 1 8.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
RenderVolumeLODFactor 1 2.0
RenderWaterReflections 1 0
VertexShaderEnable 1 1
WindLightUseAtmosShaders 1 1
@@ -140,7 +138,7 @@ RenderAnisotropic 1 1
RenderAvatarCloth 1 1
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 1
RenderFarClip 1 256
RenderFarClip 1 1024
RenderFlexTimeFactor 1 1.0
RenderGlowResolutionPow 1 9
RenderLightingDetail 1 1
@@ -149,9 +147,9 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 3
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 1.0
RenderTreeLODFactor 1 12.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 2.0
RenderVolumeLODFactor 1 4.0
RenderWaterReflections 1 1
VertexShaderEnable 1 1
WindLightUseAtmosShaders 1 1
+12 -12
View File
@@ -28,7 +28,7 @@ RenderAvatarCloth 1 1
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 1
RenderCubeMap 1 1
RenderFarClip 1 256
RenderFarClip 1 1024
RenderFlexTimeFactor 1 1.0
RenderFogRatio 1 4.0
RenderGamma 1 0
@@ -41,10 +41,10 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 3
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 1.0
RenderTreeLODFactor 1 12.0
RenderUseImpostors 1 1
RenderVBOEnable 1 1
RenderVolumeLODFactor 1 2.0
RenderVolumeLODFactor 1 4.0
RenderWaterReflections 1 1
UseStartScreen 1 1
UseOcclusion 1 1
@@ -72,7 +72,7 @@ RenderObjectBump 1 0
RenderReflectionDetail 1 0
RenderTerrainDetail 1 0
RenderTerrainLODFactor 1 1
RenderTreeLODFactor 1 0.5
RenderTreeLODFactor 1 2.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
RenderWaterReflections 1 0
@@ -88,7 +88,7 @@ RenderAnisotropic 1 0
RenderAvatarCloth 1 0
RenderAvatarLODFactor 1 0.5
RenderAvatarVP 1 1
RenderFarClip 1 96
RenderFarClip 1 128
RenderFlexTimeFactor 1 1.0
RenderGlowResolutionPow 1 8
RenderLightingDetail 1 1
@@ -97,7 +97,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 0
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 1.0
RenderTreeLODFactor 1 0.5
RenderTreeLODFactor 1 4.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
RenderWaterReflections 1 0
@@ -113,7 +113,7 @@ RenderAnisotropic 1 1
RenderAvatarCloth 1 0
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 1
RenderFarClip 1 128
RenderFarClip 1 256
RenderFlexTimeFactor 1 1.0
RenderGlowResolutionPow 1 9
RenderLightingDetail 1 1
@@ -122,9 +122,9 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 2
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 0.5
RenderTreeLODFactor 1 8.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
RenderVolumeLODFactor 1 2.0
RenderWaterReflections 1 0
VertexShaderEnable 1 1
WindLightUseAtmosShaders 1 1
@@ -138,7 +138,7 @@ RenderAnisotropic 1 1
RenderAvatarCloth 1 1
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 1
RenderFarClip 1 256
RenderFarClip 1 1024
RenderFlexTimeFactor 1 1.0
RenderGlowResolutionPow 1 9
RenderLightingDetail 1 1
@@ -147,9 +147,9 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 3
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 1.0
RenderTreeLODFactor 1 12.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 2.0
RenderVolumeLODFactor 1 4.0
RenderWaterReflections 1 1
VertexShaderEnable 1 1
WindLightUseAtmosShaders 1 1
+38 -40
View File
@@ -23,39 +23,37 @@ version 20
// NOTE: All settings are set to the MIN of applied values, including 'all'!
//
list all
RenderAnisotropic 1 0
RenderAvatarCloth 0 0
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 0
RenderCubeMap 1 1
RenderFarClip 1 256
RenderFlexTimeFactor 1 1.0
RenderFogRatio 1 4.0
RenderGamma 1 0
RenderGlowResolutionPow 1 9
RenderGround 1 1
RenderLightingDetail 1 1
RenderMaxPartCount 1 8192
RenderNightBrightness 1 1.0
RenderObjectBump 1 1
RenderReflectionDetail 1 3
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
RenderVBOEnable 1 1
RenderVolumeLODFactor 1 2.0
RenderWaterReflections 1 1
UseOcclusion 1 1
VertexShaderEnable 1 1
WindLightUseAtmosShaders 1 1
WLSkyDetail 1 128
RenderUseCleverUI 1 1
Disregard128DefaultDrawDistance 1 1
Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 0.5
RenderAnisotropic 1 0
RenderAvatarCloth 1 1
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 1
RenderCubeMap 1 1
RenderFarClip 1 1024
RenderFlexTimeFactor 1 1.0
RenderFogRatio 1 4.0
RenderGamma 1 0
RenderGlowResolutionPow 1 9
RenderGround 1 1
RenderLightingDetail 1 1
RenderMaxPartCount 1 8192
RenderNightBrightness 1 1.0
RenderObjectBump 1 1
RenderReflectionDetail 1 3
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 12.0
RenderUseImpostors 1 1
RenderVBOEnable 1 1
RenderVolumeLODFactor 1 4.0
RenderWaterReflections 1 1
UseStartScreen 1 1
UseOcclusion 1 1
VertexShaderEnable 1 1
WindLightUseAtmosShaders 1 1
WLSkyDetail 1 128
Disregard128DefaultDrawDistance 1 1
Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 1.0
//
// Low Graphics Settings
@@ -74,7 +72,7 @@ RenderObjectBump 1 0
RenderReflectionDetail 1 0
RenderTerrainDetail 1 0
RenderTerrainLODFactor 1 1
RenderTreeLODFactor 1 0.5
RenderTreeLODFactor 1 2.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
RenderWaterReflections 1 0
@@ -90,7 +88,7 @@ RenderAnisotropic 1 0
RenderAvatarCloth 1 0
RenderAvatarLODFactor 1 0.5
RenderAvatarVP 1 1
RenderFarClip 1 96
RenderFarClip 1 128
RenderFlexTimeFactor 1 1.0
RenderGlowResolutionPow 1 8
RenderLightingDetail 1 1
@@ -99,7 +97,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 0
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 1.0
RenderTreeLODFactor 1 0.5
RenderTreeLODFactor 1 4.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
RenderWaterReflections 1 0
@@ -115,7 +113,7 @@ RenderAnisotropic 1 1
RenderAvatarCloth 1 0
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 1
RenderFarClip 1 128
RenderFarClip 1 256
RenderFlexTimeFactor 1 1.0
RenderGlowResolutionPow 1 9
RenderLightingDetail 1 1
@@ -124,9 +122,9 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 2
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 0.5
RenderTreeLODFactor 1 8.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
RenderVolumeLODFactor 1 2.0
RenderWaterReflections 1 0
VertexShaderEnable 1 1
WindLightUseAtmosShaders 1 1
@@ -140,7 +138,7 @@ RenderAnisotropic 1 1
RenderAvatarCloth 1 1
RenderAvatarLODFactor 1 1.0
RenderAvatarVP 1 1
RenderFarClip 1 256
RenderFarClip 1 1024
RenderFlexTimeFactor 1 1.0
RenderGlowResolutionPow 1 9
RenderLightingDetail 1 1
@@ -149,9 +147,9 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 3
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTreeLODFactor 1 1.0
RenderTreeLODFactor 1 12.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 2.0
RenderVolumeLODFactor 1 4.0
RenderWaterReflections 1 1
VertexShaderEnable 1 1
WindLightUseAtmosShaders 1 1
@@ -9,15 +9,15 @@
; These will change
AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460}
AppName=Imprudence Viewer Experimental
AppVerName=Imprudence Viewer 1.4.0 beta 1.5 windows test release
AppVerName=Imprudence Viewer 1.4.0.3 exp 1 windows test release
DefaultDirName={pf}\ImprudenceExperimental
DefaultGroupName=Imprudence Viewer Experimental
VersionInfoProductName=Imprudence Viewer Experimental
OutputBaseFilename=Imprudence-1.4.0-beta-1.5-windows-test
VersionInfoVersion=1.4.0
VersionInfoTextVersion=1.4.0
VersionInfoProductVersion=1.4.0
AppVersion=1.4.0
OutputBaseFilename=Imprudence-1.4.0.3-exp-1-windows-test
VersionInfoVersion=1.4.0.3
VersionInfoTextVersion=1.4.0.3
VersionInfoProductVersion=1.4.0.3
AppVersion=1.4.0.3
VersionInfoCopyright=2011
; These won't change
@@ -8,16 +8,16 @@
; Imp Experimental ID: 1B3E68BC-13EB-4277-9439-CB5FF9259460
; These will change
AppId={{D7736EE8-AFCE-4735-BBE3-652CDFBBFCA8}
AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460}
AppName=%%APPNAME%%
AppVerName=%%APPVERNAME%%
DefaultDirName={pf}\Imprudence
DefaultGroupName=Imprudence Viewer
VersionInfoProductName=%%APPNAME%%
OutputBaseFilename=%%INSTALLERFILENAME%%
VersionInfoVersion=%%VERSION%%
VersionInfoVersion=%%VERSIONNUMBER%%
VersionInfoTextVersion=%%VERSION%%
VersionInfoProductVersion=%%VERSION%%
VersionInfoProductVersion=%%VERSIONNUMBER%%
AppVersion=%%VERSION%%
VersionInfoCopyright=2011
@@ -307,7 +307,7 @@ begin
Success := RegQueryDWordValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V);
end else begin
Success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V);
end
end;
if Success = TRUE then begin
if V = 1 then begin
@@ -22,13 +22,12 @@ else
fi
# Register handler for KDE-aware apps
if [ -z "$KDEHOME" ]; then
KDEHOME=~/.kde
fi
LLKDEPROTDIR=${KDEHOME}/share/services
if [ -d "$LLKDEPROTDIR" ]; then
LLKDEPROTFILE=${LLKDEPROTDIR}/secondlife.protocol
cat > ${LLKDEPROTFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTFILE}
for LLKDECONFIG in kde-config kde4-config; do
if [ `which $LLKDECONFIG` ]; then
LLKDEPROTODIR=`$LLKDECONFIG --path services | cut -d ':' -f 1`
if [ -d "$LLKDEPROTODIR" ]; then
LLKDEPROTOFILE=${LLKDEPROTODIR}/secondlife.protocol
cat > ${LLKDEPROTOFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTOFILE}
[Protocol]
exec=${HANDLER} '%u'
protocol=secondlife
@@ -41,6 +40,8 @@ writing=false
makedir=false
deleting=false
EOF
else
echo Info: Did not register secondlife:// handler with KDE: Directory $LLKDEPROTDIR does not exist. You can safely ignore this if you are not using KDE.
fi
else
echo Warning: Did not register secondlife:// handler with KDE: Directory $LLKDEPROTODIR does not exist.
fi
fi
done
+2 -21
View File
@@ -1613,8 +1613,6 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
abs_target_offset.abs();
LLVector3 target_offset_dir = target_offset_origin;
F32 object_radius = mFocusObject->getVObjRadius();
BOOL target_outside_object_extents = FALSE;
for (U32 i = VX; i <= VZ; i++)
@@ -1708,18 +1706,6 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent());
// length projected orthogonal to target offset
F32 camera_offset_dist = (camera_offset_object - target_offset_dir * (camera_offset_object * target_offset_dir)).magVec();
// calculate whether the target point would be "visible" if it were outside the bounding box
// on the opposite of the splitting plane defined by object_split_axis;
BOOL exterior_target_visible = FALSE;
if (camera_offset_dist > object_radius)
{
// target is visible from camera, so turn off fov zoom
exterior_target_visible = TRUE;
}
F32 camera_offset_clip = camera_offset_object * object_split_axis;
F32 target_offset_clip = target_offset_dir * object_split_axis;
@@ -2538,12 +2524,10 @@ void LLAgent::autoPilot(F32 *delta_yaw)
*delta_yaw = yaw;
// Compute when to start slowing down and when to stop
F32 stop_distance = mAutoPilotStopDistance;
F32 slow_distance;
if (getFlying())
{
slow_distance = llmax(6.f, mAutoPilotStopDistance + 5.f);
stop_distance = llmax(2.f, mAutoPilotStopDistance);
}
else
{
@@ -3719,7 +3703,6 @@ F32 LLAgent::calcCameraFOVZoomFactor()
else if (mFocusObject.notNull() && !mFocusObject->isAvatar())
{
// don't FOV zoom on mostly transparent objects
LLVector3 focus_offset = mFocusObjectOffset;
F32 obj_min_dist = 0.f;
if (!gSavedSettings.getBOOL("DisableMinZoomDist"))
calcCameraMinDistance(obj_min_dist);
@@ -3746,9 +3729,8 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
// Compute base camera position and look-at points.
F32 camera_land_height;
LLVector3d frame_center_global = mAvatarObject.isNull() ? getPositionGlobal()
: getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition());
LLVector3 upAxis = getUpAxis();
: getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition());
BOOL isConstrained = FALSE;
LLVector3d head_offset;
head_offset.setVec(mThirdPersonHeadOffset);
@@ -3883,7 +3865,6 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
// set the global camera position
LLVector3d camera_offset;
LLVector3 av_pos = mAvatarObject.isNull() ? LLVector3::zero : mAvatarObject->getRenderPosition();
camera_offset.setVec( local_camera_offset );
camera_position_global = frame_center_global + head_offset + camera_offset;
-3
View File
@@ -494,7 +494,6 @@ F32 LLDrawable::updateXform(BOOL undamped)
//scaling
LLVector3 target_scale = mVObjp->getScale();
LLVector3 old_scale = mCurrentScale;
LLVector3 dest_scale = target_scale;
// Damping
F32 dist_squared = 0.f;
@@ -834,7 +833,6 @@ const LLVector3* LLDrawable::getSpatialExtents() const
void LLDrawable::setSpatialExtents(LLVector3 min, LLVector3 max)
{
LLVector3 size = max - min;
mExtents[0] = min;
mExtents[1] = max;
}
@@ -1098,7 +1096,6 @@ LLCamera LLSpatialBridge::transformCamera(LLCamera& camera)
LLCamera ret = camera;
LLXformMatrix* mat = mDrawable->getXform();
LLVector3 center = LLVector3(0,0,0) * mat->getWorldMatrix();
LLQuaternion rotation = LLQuaternion(mat->getWorldMatrix());
LLVector3 delta = ret.getOrigin() - center;
LLQuaternion rot = ~mat->getRotation();
@@ -1,5 +1,5 @@
/**
* @file lightshare.cpp
* @file llettherebelight.cpp
* @brief Handler for Meta7 Lightshare (region-side Windlight settings), and other methods of sharing WindLight.
*
* Copyright (c) 2010, Tom Grimshaw (Tom Meta)
@@ -38,7 +38,7 @@
#include "message.h"
#include "meta7windlight.h"
#include "lightshare.h"
#include "llettherebelight.h"
#include "llagent.h"
#include "llworld.h"
@@ -1,5 +1,5 @@
/**
* @file lightshare.h
* @file llettherebelight.h
* @brief WindlightMessage class definition.
*
* Copyright (c) 2010, Jacek Antonelli
@@ -233,9 +233,6 @@ void LLVolumeImplFlexible::setAttributesOfAllSections(LLVector3* inScale)
mSection[0].mVelocity.setVec(0,0,0);
mSection[0].mAxisRotation.setQuat(begin_rot,0,0,1);
LLVector3 parentSectionPosition = mSection[0].mPosition;
LLVector3 last_direction = mSection[0].mDirection;
remapSections(mSection, mInitializedRes, mSection, mSimulateRes);
mInitializedRes = mSimulateRes;
@@ -1010,7 +1010,7 @@ void LLSpeakerMgr::update(BOOL resort_ok)
LLUUID speaker_id = speaker_it->first;
LLSpeaker* speakerp = speaker_it->second;
speaker_map_t::iterator cur_speaker_it = speaker_it++;
speaker_it++;
if (voice_channel_active && gVoiceClient->getVoiceEnabled(speaker_id))
{
@@ -54,6 +54,7 @@ LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed)
LLPipeline::setRenderScriptedTouchBeacons(gSavedSettings.getBOOL("scripttouchbeacon"));
LLPipeline::setRenderScriptedBeacons( gSavedSettings.getBOOL("scriptsbeacon"));
LLPipeline::setRenderPhysicalBeacons( gSavedSettings.getBOOL("physicalbeacon"));
LLPipeline::setRenderMOAPBeacons( gSavedSettings.getBOOL("moapbeacon"));
LLPipeline::setRenderSoundBeacons( gSavedSettings.getBOOL("soundsbeacon"));
LLPipeline::setRenderParticleBeacons( gSavedSettings.getBOOL("particlesbeacon"));
LLPipeline::setRenderHighlights( gSavedSettings.getBOOL("renderhighlights"));
@@ -67,6 +68,7 @@ BOOL LLFloaterBeacons::postBuild()
childSetCommitCallback("physical", onClickUICheck, this);
childSetCommitCallback("sounds", onClickUICheck, this);
childSetCommitCallback("particles", onClickUICheck, this);
childSetCommitCallback("moap", onClickUICheck, this);
childSetCommitCallback("highlights", onClickUICheck, this);
childSetCommitCallback("beacons", onClickUICheck, this);
return TRUE;
@@ -132,6 +134,7 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl, void* data)
else if(name == "physical") LLPipeline::setRenderPhysicalBeacons(check->get());
else if(name == "sounds") LLPipeline::setRenderSoundBeacons(check->get());
else if(name == "particles") LLPipeline::setRenderParticleBeacons(check->get());
else if(name == "moap") LLPipeline::setRenderMOAPBeacons(check->get());
else if(name == "highlights")
{
LLPipeline::toggleRenderHighlights(NULL);
@@ -115,6 +115,9 @@ BOOL LLFloaterBuildOptions::postBuild()
getChild<LLTextureCtrl>("texture control")->setImageAssetID(LLUUID(gSavedPerAccountSettings.getString("BuildPrefs_Texture")));
childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getBOOL("RenderHighlightSelections") );
childSetValue("BuildPrefsRenderHidden_toggle", gSavedSettings.getBOOL("RenderHiddenSelections") );
childSetValue("BuildPrefsRenderLightRadius_toggle", gSavedSettings.getBOOL("RenderLightRadius") );
childSetValue("BuildPrefsShowSelectionBeam_toggle", gSavedSettings.getBOOL("ShowSelectionBeam") );
childSetValue("grouplandrez", gSavedSettings.getBOOL("RezWithLandGroup") );
childSetValue("GridSubUnit", gSavedSettings.getBOOL("GridSubUnit") );
childSetValue("GridCrossSection", gSavedSettings.getBOOL("GridCrossSections") );
@@ -293,6 +296,17 @@ void LLFloaterBuildOptions::apply()
LLSelectMgr::sRenderSelectionHighlights = !LLSelectMgr::sRenderSelectionHighlights;
gSavedSettings.setBOOL("RenderHighlightSelections", LLSelectMgr::sRenderSelectionHighlights);
}
if (gSavedSettings.getBOOL("RenderHiddenSelections") != (BOOL)(childGetValue("BuildPrefsRenderHidden_toggle").asBoolean()))
{
LLSelectMgr::sRenderHiddenSelections = !LLSelectMgr::sRenderHiddenSelections;
gSavedSettings.setBOOL("RenderHiddenSelections", LLSelectMgr::sRenderHiddenSelections);
}
if (gSavedSettings.getBOOL("RenderLightRadius") != (BOOL)(childGetValue("BuildPrefsRenderLightRadius_toggle").asBoolean()))
{
LLSelectMgr::sRenderLightRadius = !LLSelectMgr::sRenderLightRadius;
gSavedSettings.setBOOL("RenderLightRadius", LLSelectMgr::sRenderLightRadius);
}
gSavedSettings.setBOOL("ShowSelectionBeam", childGetValue("BuildPrefsShowSelectionBeam_toggle").asBoolean() );
gSavedSettings.setBOOL("RezWithLandGroup", childGetValue("grouplandrez").asBoolean() );
gSavedSettings.setBOOL("GridSubUnit", childGetValue("GridSubUnit").asBoolean() );
@@ -340,6 +354,9 @@ void LLFloaterBuildOptions::reset()
mBuildTextureUUID = (LLUUID)gSavedPerAccountSettings.getControl("BuildPrefs_Texture")->getDefault().asString();
childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getControl("RenderHighlightSelections")->getDefault() );
childSetValue("BuildPrefsRenderHidden_toggle", gSavedSettings.getControl("RenderHiddenSelections")->getDefault() );
childSetValue("BuildPrefsRenderLightRadius_toggle", gSavedSettings.getControl("RenderLightRadius")->getDefault() );
childSetValue("BuildPrefsShowSelectionBeam_toggle", gSavedSettings.getControl("ShowSelectionBeam")->getDefault() );
childSetValue("grouplandrez", gSavedSettings.getControl("RezWithLandGroup")->getDefault() );
childSetValue("GridSubUnit", gSavedSettings.getControl("GridSubUnit")->getDefault() );
childSetValue("GridCrossSection", gSavedSettings.getControl("GridCrossSections")->getDefault() );
+1 -1
View File
@@ -364,7 +364,7 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
{
// desaturate muted chat
LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f);
add_timestamped_line(history_editor_with_mute, chat, color);
add_timestamped_line(history_editor_with_mute, chat, muted_color);
}
// add objects as transient speakers that can be muted
@@ -100,7 +100,6 @@ BOOL LLFloaterJoystick::postBuild()
if (child)
{
LLRect r = child->getRect();
LLRect f = getRect();
rect = LLRect(350, r.mTop, r.mRight + 200, 0);
}
+1
View File
@@ -393,6 +393,7 @@ BOOL LLFloaterTools::postBuild()
mStatusText["rotate"] = getString("status_rotate");
mStatusText["scale"] = getString("status_scale");
mStatusText["move"] = getString("status_move");
mStatusText["selectface"] = getString("status_selectface");
mStatusText["align"] = getString("status_align");
mStatusText["modifyland"] = getString("status_modifyland");
mStatusText["camera"] = getString("status_camera");
-2
View File
@@ -761,13 +761,11 @@ bool LLFloaterWater::deleteAlertCallback(const LLSD& notification, const LLSD& r
LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
LLFloaterDayCycle* day_cycle = NULL;
LLComboBox* key_combo = NULL;
LLMultiSliderCtrl* mult_sldr = NULL;
if(LLFloaterDayCycle::isOpen())
{
day_cycle = LLFloaterDayCycle::instance();
key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets");
mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WaterDayCycleKeys");
}
std::string name = combo_box->getSelectedValue().asString();
@@ -973,14 +973,12 @@ bool LLFloaterWindLight::deleteAlertCallback(const LLSD& notification, const LLS
"WLPresetsCombo");
LLFloaterDayCycle* day_cycle = NULL;
LLComboBox* key_combo = NULL;
LLMultiSliderCtrl* mult_sldr = NULL;
if(LLFloaterDayCycle::isOpen())
{
day_cycle = LLFloaterDayCycle::instance();
key_combo = day_cycle->getChild<LLComboBox>(
"WLKeyPresets");
mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
}
std::string name(combo_box->getSelectedValue().asString());
-6
View File
@@ -3767,12 +3767,6 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
LLMenuGL::sMenuContainer->hideMenus();
}
LLView *item = NULL;
if (getChildCount() > 0)
{
item = *(getChildList()->begin());
}
switch( key )
{
case KEY_F2:
+1 -240
View File
@@ -531,7 +531,6 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s
gesture = NULL;
}
if (matching.size() > 0)
{
// choose one at random
@@ -565,246 +564,8 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s
found_gestures = TRUE;
}
}
else if (LLStringUtil::compareInsensitive("/icanhaseasteregg", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhaseastereggs", cur_token) == 0)
{
LLViewerImage* kitteh = gImageList.getImageFromFile("easteregg.png", TRUE, TRUE);
if (kitteh)
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
rect.translate(left - rect.mLeft, top - rect.mTop);
LLPreviewTexture* preview;
preview = new LLPreviewTexture(rect, "Easter Egg!", kitteh);
preview->setSourceID(LLUUID::generateNewID());
preview->setFocus(TRUE);
preview->center();
gFloaterView->adjustToFitScreen(preview, FALSE);
}
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhascookie", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhascookies", cur_token) == 0)
{
LLChat chat;
chat.mText = "I made you a cookie but I eated it :(";
chat.mSourceType = CHAT_SOURCE_SYSTEM;
LLFloaterChat::addChat(chat);
if (revised_string)
{
revised_string->assign(LLStringUtil::null);
}
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasfailbook", cur_token) == 0)
{
LLWeb::loadURLInternal("http://failbook.failblog.org/");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhaszombie", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhaszombies", cur_token) == 0)
{
LLViewerImage* kitteh = gImageList.getImageFromFile("zombiecat.png", TRUE, TRUE);
if (kitteh)
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
rect.translate(left - rect.mLeft, top - rect.mTop);
LLPreviewTexture* preview;
preview = new LLPreviewTexture(rect, "Zombiecat!", kitteh);
preview->setSourceID(LLUUID::generateNewID());
preview->setFocus(TRUE);
preview->center();
gFloaterView->adjustToFitScreen(preview, FALSE);
}
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhassupport", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhashelp", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhashalp", cur_token) == 0)
{
LLWeb::loadURLInternal("http://support.kokuaviewer.org/");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasblog", cur_token) == 0)
{
LLWeb::loadURLInternal("http://kokuaviewer.org/");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhascodie", cur_token) == 0)
{
LLChat chat;
chat.mText = "All work and no play makes Codie a dull girl. All work and no play...";
chat.mSourceType = CHAT_SOURCE_SYSTEM;
LLFloaterChat::addChat(chat);
if (revised_string)
{
revised_string->assign(LLStringUtil::null);
}
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasfail", cur_token) == 0)
{
LLWeb::loadURLInternal("http://www.failblog.org/");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasdownload", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhasdownloads", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhasupdate", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhasupdates", cur_token) == 0 )
{
LLWeb::loadURLInternal("http://wiki.kokuaviewer.org/wiki/Imprudence:Downloads");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasfeatures", cur_token) == 0)
{
LLWeb::loadURLInternal("http://wiki.kokuaviewer.org/wiki/Imprudence:Features");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhaswiki", cur_token) == 0)
{
LLWeb::loadURLInternal("http://wiki.kokuaviewer.org/wiki/");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasbugs", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhasbug", cur_token) == 0 )
{
LLWeb::loadURLInternal("http://redmine.kokuaviewer.org/");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasgit", cur_token) == 0)
{
LLWeb::loadURLInternal("http://github.com/imprudence/imprudence/");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasplurk", cur_token) == 0)
{
LLWeb::loadURLInternal("http://plurk.com/imprudence");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhastwitter", cur_token) == 0)
{
LLWeb::loadURLInternal("http://twitter.com/ImpViewer");
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasimprudence", cur_token) == 0)
{
LLChat chat;
chat.mText = "You are using it right now, silly!...";
chat.mSourceType = CHAT_SOURCE_SYSTEM;
LLFloaterChat::addChat(chat);
if (revised_string)
{
revised_string->assign(LLStringUtil::null);
}
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasnoms", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhasnom", cur_token) == 0)
{
LLViewerImage* kitteh = gImageList.getImageFromFile("nomnom.png", TRUE, TRUE);
if (kitteh)
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
rect.translate(left - rect.mLeft, top - rect.mTop);
LLPreviewTexture* preview;
preview = new LLPreviewTexture(rect, "Om nom nom!", kitteh);
preview->setSourceID(LLUUID::generateNewID());
preview->setFocus(TRUE);
preview->center();
gFloaterView->adjustToFitScreen(preview, FALSE);
}
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhasceilingcat", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhascielingcat", cur_token) == 0)
{
LLViewerImage* kitteh = gImageList.getImageFromFile("ceilingcat.png", TRUE, TRUE);
if (kitteh)
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
rect.translate(left - rect.mLeft, top - rect.mTop);
LLPreviewTexture* preview;
preview = new LLPreviewTexture(rect, "Ceiling Cat is watching you!", kitteh);
preview->setSourceID(LLUUID::generateNewID());
preview->setFocus(TRUE);
preview->center();
gFloaterView->adjustToFitScreen(preview, FALSE);
}
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhascake", cur_token) == 0 )
{
LLViewerImage* kitteh = gImageList.getImageFromFile("cakeisalie.png", TRUE, TRUE);
if (kitteh)
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
rect.translate(left - rect.mLeft, top - rect.mTop);
LLPreviewTexture* preview;
preview = new LLPreviewTexture(rect, "THE CAKE IS A LIE!", kitteh);
preview->setSourceID(LLUUID::generateNewID());
preview->setFocus(TRUE);
preview->center();
gFloaterView->adjustToFitScreen(preview, FALSE);
}
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhastentacles", cur_token) == 0 )
{
LLViewerImage* kitteh = gImageList.getImageFromFile("octopus.png", TRUE, TRUE);
if (kitteh)
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
rect.translate(left - rect.mLeft, top - rect.mTop);
LLPreviewTexture* preview;
preview = new LLPreviewTexture(rect, "All hail the mighty octopus!", kitteh);
preview->setSourceID(LLUUID::generateNewID());
preview->setFocus(TRUE);
preview->center();
gFloaterView->adjustToFitScreen(preview, FALSE);
}
return TRUE;
}
else if (LLStringUtil::compareInsensitive("/icanhashugs", cur_token) == 0 ||
LLStringUtil::compareInsensitive("/icanhashug", cur_token) == 0)
{
LLViewerImage* kitteh = gImageList.getImageFromFile("hugs.png", TRUE, TRUE);
if (kitteh)
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
rect.translate(left - rect.mLeft, top - rect.mTop);
LLPreviewTexture* preview;
preview = new LLPreviewTexture(rect, "Yes, you can has hugs!", kitteh);
preview->setSourceID(LLUUID::generateNewID());
preview->setFocus(TRUE);
preview->center();
gFloaterView->adjustToFitScreen(preview, FALSE);
}
return TRUE;
}
}
if(!gesture)
{
// This token doesn't match a gesture. Pass it through to the output.
+5 -4
View File
@@ -546,14 +546,15 @@ void LLHoverView::updateText()
LLParcel* hover_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel();
LLUUID owner;
S32 width = 0;
S32 height = 0;
// Their use is commented out below. No doubt both will get deleted on a later clean up pass.
//S32 width = 0;
//S32 height = 0;
if ( hover_parcel )
{
owner = hover_parcel->getOwnerID();
width = S32(LLViewerParcelMgr::getInstance()->getHoverParcelWidth());
height = S32(LLViewerParcelMgr::getInstance()->getHoverParcelHeight());
// width = S32(LLViewerParcelMgr::getInstance()->getHoverParcelWidth());
// height = S32(LLViewerParcelMgr::getInstance()->getHoverParcelHeight());
}
// Line: "Land"
+5 -19
View File
@@ -1439,7 +1439,6 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
if(drop && accept)
{
it = inventory_objects.begin();
InventoryObjectList::iterator first_it = inventory_objects.begin();
LLMoveInv* move_inv = new LLMoveInv;
move_inv->mObjectID = object_id;
move_inv->mCategoryID = category_id;
@@ -1922,24 +1921,11 @@ void LLFolderBridge::pasteFromClipboard()
item = model->getItem(objects.get(i));
if (item)
{
copy_inventory_item(
gAgent.getID(),
item->getPermissions().getOwner(),
item->getUUID(),
parent_id,
std::string(),
LLPointer<LLInventoryCallback>(NULL));
LLInventoryCategory* cat = model->getCategory(item->getUUID());
if(cat)
{
model->purgeDescendentsOf(mUUID);
}
LLInventoryObject* obj = model->getObject(item->getUUID());
if(!obj) return;
obj->removeFromServer();
LLPreview::hide(item->getUUID());
model->deleteObject(item->getUUID());
model->notifyObservers();
LLInvFVBridge::changeItemParent(
model,
(LLViewerInventoryItem*)item,
mUUID,
FALSE);
}
}
}
+9 -18
View File
@@ -455,8 +455,6 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
void (*callback)(const LLSD&, void*),
void* user_data)
{
llassert_always(NULL != callback);
LLUUID id;
if(!isInventoryUsable())
@@ -464,7 +462,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
llwarns << "Inventory is broken." << llendl;
LLSD result;
result["failure"] = true;
callback(result, user_data);
if (callback)
callback(result, user_data);
}
@@ -473,7 +472,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
LL_DEBUGS("Inventory") << "Attempt to create simstate category." << LL_ENDL;
LLSD result;
result["failure"] = true;
callback(result, user_data);
if (callback)
callback(result, user_data);
}
id.generate();
@@ -492,10 +492,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
name.assign(NEW_CATEGORY_NAME);
}
if (user_data) // callback required for acked message.
if ((NULL != callback) && (NULL != user_data)) // callback required for acked message.
{
LLViewerRegion* viewer_region = gAgent.getRegion();
if (!viewer_region->capabilitiesReceived())
@@ -537,7 +535,10 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
{
// user_data is a LLCategoryCreate object instantiated in the calling
// function - bug (or low memory - any leaks?).
llwarns << "NULL user_data" << llendl;
// Or, it might just be no problem, since passing the callback in the first place is optional.
// It's really up to the calling function to know what it passed to pass back to the callback.
if (callback)
llwarns << "NULL user_data" << llendl;
}
// Add the category to the internal representation
@@ -1211,7 +1212,6 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
item_array_t items;
update_map_t update;
S32 count = content["items"].size();
bool all_one_folder = true;
LLUUID folder_id;
// Does this loop ever execute more than once?
for(S32 i = 0; i < count; ++i)
@@ -1244,10 +1244,6 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
{
folder_id = titem->getParentUUID();
}
else
{
all_one_folder = false;
}
}
U32 changes = 0x0;
@@ -2960,7 +2956,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
item_array_t items;
update_map_t update;
S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
bool all_one_folder = true;
LLUUID folder_id;
// Does this loop ever execute more than once?
for(S32 i = 0; i < count; ++i)
@@ -2992,10 +2987,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
{
folder_id = titem->getParentUUID();
}
else
{
all_one_folder = false;
}
}
if(account)
{
-1
View File
@@ -1652,7 +1652,6 @@ void LLManipRotate::highlightManipulators( S32 x, S32 y )
return;
}
LLQuaternion object_rot = first_object->getRenderRotation();
LLVector3 rotation_center = gAgent.getPosAgentFromGlobal(mRotationCenter);
LLVector3 mouse_dir_x;
LLVector3 mouse_dir_y;
-5
View File
@@ -1172,9 +1172,6 @@ void LLManipScale::dragFace( S32 x, S32 y )
mInSnapRegime = FALSE;
}
BOOL send_scale_update = FALSE;
BOOL send_position_update = FALSE;
LLVector3 dir_agent;
if( part_dir_local.mV[VX] )
{
@@ -1191,8 +1188,6 @@ void LLManipScale::dragFace( S32 x, S32 y )
stretchFace(
projected_vec(drag_start_dir_f, dir_agent) + drag_start_center_agent,
projected_vec(drag_delta, dir_agent));
send_position_update = TRUE;
send_scale_update = TRUE;
mDragPointGlobal = drag_point_global;
}
+3 -18
View File
@@ -487,9 +487,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
}
}
// Throttle updates to 10 per second.
BOOL send_update = FALSE;
LLVector3 axis_f;
LLVector3d axis_d;
@@ -701,10 +698,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
LLVector3 new_position_local = selectNode->mSavedPositionLocal + (clamped_relative_move_f * objWorldRotation);
// move and clamp root object first, before adjusting children
if (new_position_local != old_position_local)
{
send_update = TRUE;
}
//RN: I forget, but we need to do this because of snapping which doesn't often result
// in position changes even when the mouse moves
object->setPosition(new_position_local);
@@ -714,8 +708,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
if (selectNode->mIndividualSelection)
{
send_update = FALSE;
// counter-translate child objects if we are moving the root as an individual
object->resetChildrenPosition(old_position_local - new_position_local, TRUE) ;
}
@@ -752,7 +744,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
}
// PR: Only update if changed
LLVector3d old_position_global = object->getPositionGlobal();
LLVector3 old_position_agent = object->getPositionAgent();
LLVector3 new_position_agent = gAgent.getPosAgentFromGlobal(new_position_global);
if (object->isRootEdit())
@@ -774,11 +765,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
{
// counter-translate child objects if we are moving the root as an individual
object->resetChildrenPosition(old_position_agent - new_position_agent, TRUE) ;
send_update = FALSE;
}
else if (old_position_global != new_position_global)
{
send_update = TRUE;
}
}
selectNode->mLastPositionLocal = object->getPosition();
@@ -1302,7 +1288,7 @@ void LLManipTranslate::renderSnapGuides()
// add in off-axis offset
tick_start += (mSnapOffsetAxis * mSnapOffsetMeters);
BOOL is_sub_tick = FALSE;
// BOOL is_sub_tick = FALSE;
F32 tick_scale = 1.f;
for (F32 division_level = max_subdivisions; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f)
{
@@ -1311,7 +1297,7 @@ void LLManipTranslate::renderSnapGuides()
break;
}
tick_scale *= 0.7f;
is_sub_tick = TRUE;
// is_sub_tick = TRUE;
}
// S32 num_ticks_to_fade = is_sub_tick ? num_ticks_per_side / 2 : num_ticks_per_side;
@@ -1533,7 +1519,6 @@ void LLManipTranslate::renderSnapGuides()
float a = line_alpha;
LLColor4 col = gColors.getColor("SilhouetteChildColor");
{
//draw grid behind objects
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
+813
View File
@@ -0,0 +1,813 @@
/**
* @file llmediadataclient.cpp
* @brief class for queueing up requests for media data
*
* $LicenseInfo:firstyear=2001&license=viewergpl$
*
* Copyright (c) 2001-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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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 "llmediadataclient.h"
#if LL_MSVC
// disable boost::lexical_cast warning
#pragma warning (disable:4702)
#endif
#include <boost/lexical_cast.hpp>
#include "llhttpstatuscodes.h"
#include "llsdutil.h"
#include "llmediaentry.h"
#include "lltextureentry.h"
#include "llviewerregion.h"
//
// When making a request
// - obtain the "overall interest score" of the object.
// This would be the sum of the impls' interest scores.
// - put the request onto a queue sorted by this score
// (highest score at the front of the queue)
// - On a timer, once a second, pull off the head of the queue and send
// the request.
// - Any request that gets a 503 still goes through the retry logic
//
//
// Forward decls
//
const F32 LLMediaDataClient::QUEUE_TIMER_DELAY = 1.0; // seconds(s)
const F32 LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY = 10.0; // secs
const U32 LLMediaDataClient::MAX_RETRIES = 10;
const U32 LLMediaDataClient::MAX_SORTED_QUEUE_SIZE = 10000;
const U32 LLMediaDataClient::MAX_ROUND_ROBIN_QUEUE_SIZE = 10000;
// << operators
std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q);
std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &q);
//////////////////////////////////////////////////////////////////////////////////////
//
// LLMediaDataClient
//
//////////////////////////////////////////////////////////////////////////////////////
LLMediaDataClient::LLMediaDataClient(F32 queue_timer_delay,
F32 retry_timer_delay,
U32 max_retries,
U32 max_sorted_queue_size,
U32 max_round_robin_queue_size)
: mQueueTimerDelay(queue_timer_delay),
mRetryTimerDelay(retry_timer_delay),
mMaxNumRetries(max_retries),
mMaxSortedQueueSize(max_sorted_queue_size),
mMaxRoundRobinQueueSize(max_round_robin_queue_size),
mQueueTimerIsRunning(false),
mCurrentQueueIsTheSortedQueue(true)
{
}
LLMediaDataClient::~LLMediaDataClient()
{
stopQueueTimer();
// This should clear the queue, and hopefully call all the destructors.
LL_DEBUGS("LLMediaDataClient") << "~LLMediaDataClient destructor: queue: " <<
(isEmpty() ? "<empty> " : "<not empty> ") << LL_ENDL;
mSortedQueue.clear();
mRoundRobinQueue.clear();
}
bool LLMediaDataClient::isEmpty() const
{
return mSortedQueue.empty() && mRoundRobinQueue.empty();
}
bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)
{
return (LLMediaDataClient::findOrRemove(mSortedQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()
|| (LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()));
}
bool LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
{
bool removedFromSortedQueue = LLMediaDataClient::findOrRemove(mSortedQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
bool removedFromRoundRobinQueue = LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
return removedFromSortedQueue || removedFromRoundRobinQueue;
}
//static
LLMediaDataClient::request_ptr_t LLMediaDataClient::findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, LLMediaDataClient::Request::Type type)
{
request_ptr_t result;
request_queue_t::iterator iter = queue.begin();
request_queue_t::iterator end = queue.end();
while (iter != end)
{
if (obj->getID() == (*iter)->getObject()->getID() && (type == LLMediaDataClient::Request::ANY || type == (*iter)->getType()))
{
result = *iter;
if (remove) queue.erase(iter);
break;
}
iter++;
}
return result;
}
void LLMediaDataClient::request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload)
{
if (object.isNull() || ! object->hasMedia()) return;
// Push the object on the queue
enqueue(new Request(getCapabilityName(), payload, object, this));
}
void LLMediaDataClient::enqueue(const Request *request)
{
if (request->isNew())
{
// Add to sorted queue
if (LLMediaDataClient::findOrRemove(mSortedQueue, request->getObject(), true/*remove*/, request->getType()).notNull())
{
LL_DEBUGS("LLMediaDataClient") << "REMOVING OLD request for " << *request << " ALREADY THERE!" << LL_ENDL;
}
LL_DEBUGS("LLMediaDataClient") << "Queuing SORTED request for " << *request << LL_ENDL;
// Sadly, we have to const-cast because items put into the queue are not const
mSortedQueue.push_back(const_cast<LLMediaDataClient::Request*>(request));
LL_DEBUGS("LLMediaDataClientQueue") << "SORTED queue:" << mSortedQueue << LL_ENDL;
}
else {
if (mRoundRobinQueue.size() > mMaxRoundRobinQueueSize)
{
LL_INFOS_ONCE("LLMediaDataClient") << "RR QUEUE MAXED OUT!!!" << LL_ENDL;
LL_DEBUGS("LLMediaDataClient") << "Not queuing " << *request << LL_ENDL;
return;
}
// ROUND ROBIN: if it is there, and it is a GET request, leave it. If not, put at front!
request_ptr_t existing_request;
if (request->getType() == Request::GET)
{
existing_request = LLMediaDataClient::findOrRemove(mRoundRobinQueue, request->getObject(), false/*remove*/, request->getType());
}
if (existing_request.isNull())
{
LL_DEBUGS("LLMediaDataClient") << "Queuing RR request for " << *request << LL_ENDL;
// Push the request on the pending queue
// Sadly, we have to const-cast because items put into the queue are not const
mRoundRobinQueue.push_front(const_cast<LLMediaDataClient::Request*>(request));
LL_DEBUGS("LLMediaDataClientQueue") << "RR queue:" << mRoundRobinQueue << LL_ENDL;
}
else
{
LL_DEBUGS("LLMediaDataClient") << "ALREADY THERE: NOT Queuing request for " << *request << LL_ENDL;
existing_request->markSent(false);
}
}
// Start the timer if not already running
startQueueTimer();
}
void LLMediaDataClient::startQueueTimer()
{
if (! mQueueTimerIsRunning)
{
LL_DEBUGS("LLMediaDataClient") << "starting queue timer (delay=" << mQueueTimerDelay << " seconds)" << LL_ENDL;
// LLEventTimer automagically takes care of the lifetime of this object
new QueueTimer(mQueueTimerDelay, this);
}
else {
LL_DEBUGS("LLMediaDataClient") << "not starting queue timer (it's already running, right???)" << LL_ENDL;
}
}
void LLMediaDataClient::stopQueueTimer()
{
mQueueTimerIsRunning = false;
}
bool LLMediaDataClient::processQueueTimer()
{
sortQueue();
if(!isEmpty())
{
LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, SORTED queue size is: " << mSortedQueue.size()
<< ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL;
LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, SORTED queue is: " << mSortedQueue << LL_ENDL;
LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, RR queue is: " << mRoundRobinQueue << LL_ENDL;
}
serviceQueue();
LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() finished, SORTED queue size is: " << mSortedQueue.size()
<< ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL;
LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, SORTED queue is: " << mSortedQueue << LL_ENDL;
LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, RR queue is: " << mRoundRobinQueue << LL_ENDL;
return isEmpty();
}
void LLMediaDataClient::sortQueue()
{
if(!mSortedQueue.empty())
{
// Score all items first
request_queue_t::iterator iter = mSortedQueue.begin();
request_queue_t::iterator end = mSortedQueue.end();
while (iter != end)
{
(*iter)->updateScore();
iter++;
}
// Re-sort the list...
// NOTE: should this be a stable_sort? If so we need to change to using a vector.
mSortedQueue.sort(LLMediaDataClient::compareRequests);
// ...then cull items over the max
U32 size = mSortedQueue.size();
if (size > mMaxSortedQueueSize)
{
U32 num_to_cull = (size - mMaxSortedQueueSize);
LL_INFOS_ONCE("LLMediaDataClient") << "sorted queue MAXED OUT! Culling "
<< num_to_cull << " items" << LL_ENDL;
while (num_to_cull-- > 0)
{
mSortedQueue.pop_back();
}
}
}
}
// static
bool LLMediaDataClient::compareRequests(const request_ptr_t &o1, const request_ptr_t &o2)
{
if (o2.isNull()) return true;
if (o1.isNull()) return false;
return ( o1->getScore() > o2->getScore() );
}
void LLMediaDataClient::serviceQueue()
{
request_queue_t *queue_p = getCurrentQueue();
// quick retry loop for cases where we shouldn't wait for the next timer tick
while(true)
{
if (queue_p->empty())
{
LL_DEBUGS("LLMediaDataClient") << "queue empty: " << (*queue_p) << LL_ENDL;
break;
}
// Peel one off of the items from the queue, and execute request
request_ptr_t request = queue_p->front();
llassert(!request.isNull());
const LLMediaDataClientObject *object = (request.isNull()) ? NULL : request->getObject();
llassert(NULL != object);
// Check for conditions that would make us just pop and rapidly loop through
// the queue.
if(request.isNull() ||
request->isMarkedSent() ||
NULL == object ||
object->isDead() ||
!object->hasMedia())
{
if (request.isNull())
{
LL_WARNS("LLMediaDataClient") << "Skipping NULL request" << LL_ENDL;
}
else {
LL_INFOS("LLMediaDataClient") << "Skipping : " << *request << " "
<< ((request->isMarkedSent()) ? " request is marked sent" :
((NULL == object) ? " object is NULL " :
((object->isDead()) ? "object is dead" :
((!object->hasMedia()) ? "object has no media!" : "BADNESS!")))) << LL_ENDL;
}
queue_p->pop_front();
continue; // jump back to the start of the quick retry loop
}
// Next, ask if this is "interesting enough" to fetch. If not, just stop
// and wait for the next timer go-round. Only do this for the sorted
// queue.
if (mCurrentQueueIsTheSortedQueue && !object->isInterestingEnough())
{
LL_DEBUGS("LLMediaDataClient") << "Not fetching " << *request << ": not interesting enough" << LL_ENDL;
break;
}
// Finally, try to send the HTTP message to the cap url
std::string url = request->getCapability();
bool maybe_retry = false;
if (!url.empty())
{
const LLSD &sd_payload = request->getPayload();
LL_INFOS("LLMediaDataClient") << "Sending request for " << *request << LL_ENDL;
// Call the subclass for creating the responder
LLHTTPClient::post(url, sd_payload, createResponder(request));
}
else {
LL_INFOS("LLMediaDataClient") << "NOT Sending request for " << *request << ": empty cap url!" << LL_ENDL;
maybe_retry = true;
}
bool exceeded_retries = request->getRetryCount() > mMaxNumRetries;
if (maybe_retry && ! exceeded_retries) // Try N times before giving up
{
// We got an empty cap, but in that case we will retry again next
// timer fire.
request->incRetryCount();
}
else {
if (exceeded_retries)
{
LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " for "
<< mMaxNumRetries << " tries...popping object id " << object->getID() << LL_ENDL;
// XXX Should we bring up a warning dialog??
}
queue_p->pop_front();
if (! mCurrentQueueIsTheSortedQueue) {
// Round robin
request->markSent(true);
mRoundRobinQueue.push_back(request);
}
}
// end of quick loop -- any cases where we want to loop will use 'continue' to jump back to the start.
break;
}
swapCurrentQueue();
}
void LLMediaDataClient::swapCurrentQueue()
{
// Swap
mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
// If its empty, swap back
if (getCurrentQueue()->empty())
{
mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
}
}
LLMediaDataClient::request_queue_t *LLMediaDataClient::getCurrentQueue()
{
return (mCurrentQueueIsTheSortedQueue) ? &mSortedQueue : &mRoundRobinQueue;
}
// dump the queue
std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q)
{
int i = 0;
LLMediaDataClient::request_queue_t::const_iterator iter = q.begin();
LLMediaDataClient::request_queue_t::const_iterator end = q.end();
while (iter != end)
{
s << "\t" << i << "]: " << (*iter)->getObject()->getID().asString() << "(" << (*iter)->getObject()->getMediaInterest() << ")";
iter++;
i++;
}
return s;
}
//////////////////////////////////////////////////////////////////////////////////////
//
// LLMediaDataClient::QueueTimer
// Queue of LLMediaDataClientObject smart pointers to request media for.
//
//////////////////////////////////////////////////////////////////////////////////////
LLMediaDataClient::QueueTimer::QueueTimer(F32 time, LLMediaDataClient *mdc)
: LLEventTimer(time), mMDC(mdc)
{
mMDC->setIsRunning(true);
}
LLMediaDataClient::QueueTimer::~QueueTimer()
{
LL_DEBUGS("LLMediaDataClient") << "~QueueTimer" << LL_ENDL;
mMDC->setIsRunning(false);
mMDC = NULL;
}
// virtual
BOOL LLMediaDataClient::QueueTimer::tick()
{
if (mMDC.isNull()) return TRUE;
return mMDC->processQueueTimer();
}
//////////////////////////////////////////////////////////////////////////////////////
//
// LLMediaDataClient::Responder::RetryTimer
//
//////////////////////////////////////////////////////////////////////////////////////
LLMediaDataClient::Responder::RetryTimer::RetryTimer(F32 time, Responder *mdr)
: LLEventTimer(time), mResponder(mdr)
{
}
// virtual
LLMediaDataClient::Responder::RetryTimer::~RetryTimer()
{
LL_DEBUGS("LLMediaDataClient") << "~RetryTimer" << *(mResponder->getRequest()) << LL_ENDL;
// XXX This is weird: Instead of doing the work in tick() (which re-schedules
// a timer, which might be risky), do it here, in the destructor. Yes, it is very odd.
// Instead of retrying, we just put the request back onto the queue
LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *(mResponder->getRequest()) << " retrying" << LL_ENDL;
mResponder->getRequest()->reEnqueue();
// Release the ref to the responder.
mResponder = NULL;
}
// virtual
BOOL LLMediaDataClient::Responder::RetryTimer::tick()
{
// Don't fire again
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////////
//
// LLMediaDataClient::Request
//
//////////////////////////////////////////////////////////////////////////////////////
/*static*/U32 LLMediaDataClient::Request::sNum = 0;
LLMediaDataClient::Request::Request(const char *cap_name,
const LLSD& sd_payload,
LLMediaDataClientObject *obj,
LLMediaDataClient *mdc)
: mCapName(cap_name),
mPayload(sd_payload),
mObject(obj),
mNum(++sNum),
mRetryCount(0),
mMDC(mdc),
mMarkedSent(false),
mScore((F64)0.0)
{
}
LLMediaDataClient::Request::~Request()
{
LL_DEBUGS("LLMediaDataClient") << "~Request" << (*this) << LL_ENDL;
mMDC = NULL;
mObject = NULL;
}
std::string LLMediaDataClient::Request::getCapability() const
{
return getObject()->getCapabilityUrl(getCapName());
}
// Helper function to get the "type" of request, which just pokes around to
// discover it.
LLMediaDataClient::Request::Type LLMediaDataClient::Request::getType() const
{
if (0 == strcmp(mCapName, "ObjectMediaNavigate"))
{
return NAVIGATE;
}
else if (0 == strcmp(mCapName, "ObjectMedia"))
{
const std::string &verb = mPayload["verb"];
if (verb == "GET")
{
return GET;
}
else if (verb == "UPDATE")
{
return UPDATE;
}
}
llassert(false);
return GET;
}
const char *LLMediaDataClient::Request::getTypeAsString() const
{
Type t = getType();
switch (t)
{
case GET:
return "GET";
break;
case UPDATE:
return "UPDATE";
break;
case NAVIGATE:
return "NAVIGATE";
break;
case ANY:
return "ANY";
break;
}
return "";
}
void LLMediaDataClient::Request::reEnqueue() const
{
// I sure hope this doesn't deref a bad pointer:
mMDC->enqueue(this);
}
F32 LLMediaDataClient::Request::getRetryTimerDelay() const
{
return (mMDC == NULL) ? LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY :
mMDC->mRetryTimerDelay;
}
U32 LLMediaDataClient::Request::getMaxNumRetries() const
{
return (mMDC == NULL) ? LLMediaDataClient::MAX_RETRIES : mMDC->mMaxNumRetries;
}
void LLMediaDataClient::Request::markSent(bool flag)
{
if (mMarkedSent != flag)
{
mMarkedSent = flag;
if (!mMarkedSent)
{
mNum = ++sNum;
}
}
}
void LLMediaDataClient::Request::updateScore()
{
F64 tmp = mObject->getMediaInterest();
if (tmp != mScore)
{
LL_DEBUGS("LLMediaDataClient") << "Score for " << mObject->getID() << " changed from " << mScore << " to " << tmp << LL_ENDL;
mScore = tmp;
}
}
std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &r)
{
s << "request: num=" << r.getNum()
<< " type=" << r.getTypeAsString()
<< " ID=" << r.getObject()->getID()
<< " #retries=" << r.getRetryCount();
return s;
}
//////////////////////////////////////////////////////////////////////////////////////
//
// LLMediaDataClient::Responder
//
//////////////////////////////////////////////////////////////////////////////////////
LLMediaDataClient::Responder::Responder(const request_ptr_t &request)
: mRequest(request)
{
}
LLMediaDataClient::Responder::~Responder()
{
LL_DEBUGS("LLMediaDataClient") << "~Responder" << *(getRequest()) << LL_ENDL;
mRequest = NULL;
}
/*virtual*/
void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)
{
if (status == HTTP_SERVICE_UNAVAILABLE)
{
F32 retry_timeout = mRequest->getRetryTimerDelay();
mRequest->incRetryCount();
if (mRequest->getRetryCount() < mRequest->getMaxNumRetries())
{
LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retrying in " << retry_timeout << " seconds" << LL_ENDL;
// Start timer (instances are automagically tracked by
// InstanceTracker<> and LLEventTimer)
new RetryTimer(F32(retry_timeout/*secs*/), this);
}
else {
LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retry count "
<< mRequest->getRetryCount() << " exceeds " << mRequest->getMaxNumRetries() << ", not retrying" << LL_ENDL;
}
}
else {
std::string msg = boost::lexical_cast<std::string>(status) + ": " + reason;
LL_WARNS("LLMediaDataClient") << *mRequest << " http error(" << msg << ")" << LL_ENDL;
}
}
/*virtual*/
void LLMediaDataClient::Responder::result(const LLSD& content)
{
LL_DEBUGS("LLMediaDataClientResponse") << *mRequest << " result : " << ll_print_sd(content) << LL_ENDL;
}
//////////////////////////////////////////////////////////////////////////////////////
//
// LLObjectMediaDataClient
// Subclass of LLMediaDataClient for the ObjectMedia cap
//
//////////////////////////////////////////////////////////////////////////////////////
LLMediaDataClient::Responder *LLObjectMediaDataClient::createResponder(const request_ptr_t &request) const
{
return new LLObjectMediaDataClient::Responder(request);
}
const char *LLObjectMediaDataClient::getCapabilityName() const
{
return "ObjectMedia";
}
void LLObjectMediaDataClient::fetchMedia(LLMediaDataClientObject *object)
{
LLSD sd_payload;
sd_payload["verb"] = "GET";
sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
request(object, sd_payload);
}
void LLObjectMediaDataClient::updateMedia(LLMediaDataClientObject *object)
{
LLSD sd_payload;
sd_payload["verb"] = "UPDATE";
sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
LLSD object_media_data;
int i = 0;
int end = object->getMediaDataCount();
for ( ; i < end ; ++i)
{
object_media_data.append(object->getMediaDataLLSD(i));
}
sd_payload[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data;
LL_DEBUGS("LLMediaDataClient") << "update media data: " << object->getID() << " " << ll_print_sd(sd_payload) << LL_ENDL;
request(object, sd_payload);
}
/*virtual*/
void LLObjectMediaDataClient::Responder::result(const LLSD& content)
{
const LLMediaDataClient::Request::Type type = getRequest()->getType();
llassert(type == LLMediaDataClient::Request::GET || type == LLMediaDataClient::Request::UPDATE)
if (type == LLMediaDataClient::Request::GET)
{
LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " GET returned: " << ll_print_sd(content) << LL_ENDL;
// Look for an error
if (content.has("error"))
{
const LLSD &error = content["error"];
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error getting media data for object: code=" <<
error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
// XXX Warn user?
}
else {
// Check the data
const LLUUID &object_id = content[LLTextureEntry::OBJECT_ID_KEY];
if (object_id != getRequest()->getObject()->getID())
{
// NOT good, wrong object id!!
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " DROPPING response with wrong object id (" << object_id << ")" << LL_ENDL;
return;
}
// Otherwise, update with object media data
getRequest()->getObject()->updateObjectMediaData(content[LLTextureEntry::OBJECT_MEDIA_DATA_KEY],
content[LLTextureEntry::MEDIA_VERSION_KEY]);
}
}
else if (type == LLMediaDataClient::Request::UPDATE)
{
// just do what our superclass does
LLMediaDataClient::Responder::result(content);
}
}
//////////////////////////////////////////////////////////////////////////////////////
//
// LLObjectMediaNavigateClient
// Subclass of LLMediaDataClient for the ObjectMediaNavigate cap
//
//////////////////////////////////////////////////////////////////////////////////////
LLMediaDataClient::Responder *LLObjectMediaNavigateClient::createResponder(const request_ptr_t &request) const
{
return new LLObjectMediaNavigateClient::Responder(request);
}
const char *LLObjectMediaNavigateClient::getCapabilityName() const
{
return "ObjectMediaNavigate";
}
void LLObjectMediaNavigateClient::navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url)
{
LLSD sd_payload;
sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
sd_payload[LLMediaEntry::CURRENT_URL_KEY] = url;
sd_payload[LLTextureEntry::TEXTURE_INDEX_KEY] = (LLSD::Integer)texture_index;
LL_INFOS("LLMediaDataClient") << "navigate() initiated: " << ll_print_sd(sd_payload) << LL_ENDL;
request(object, sd_payload);
}
/*virtual*/
void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string& reason)
{
// Bounce back (unless HTTP_SERVICE_UNAVAILABLE, in which case call base
// class
if (status == HTTP_SERVICE_UNAVAILABLE)
{
LLMediaDataClient::Responder::error(status, reason);
}
else {
// bounce the face back
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: http code=" << status << LL_ENDL;
const LLSD &payload = getRequest()->getPayload();
// bounce the face back
getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]);
}
}
/*virtual*/
void LLObjectMediaNavigateClient::Responder::result(const LLSD& content)
{
LL_INFOS("LLMediaDataClient") << *(getRequest()) << " NAVIGATE returned " << ll_print_sd(content) << LL_ENDL;
if (content.has("error"))
{
const LLSD &error = content["error"];
int error_code = error["code"];
if (ERROR_PERMISSION_DENIED_CODE == error_code)
{
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Navigation denied: bounce back" << LL_ENDL;
const LLSD &payload = getRequest()->getPayload();
// bounce the face back
getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]);
}
else {
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: code=" <<
error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
}
// XXX Warn user?
}
else {
// just do what our superclass does
LLMediaDataClient::Responder::result(content);
}
}
+341
View File
@@ -0,0 +1,341 @@
/**
* @file llmediadataclient.h
* @brief class for queueing up requests to the media service
*
* $LicenseInfo:firstyear=2007&license=viewergpl$
*
* Copyright (c) 2007-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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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_LLMEDIADATACLIENT_H
#define LL_LLMEDIADATACLIENT_H
#include "llhttpclient.h"
#include <queue>
//#include "llrefcount.h"
//#include "llpointer.h"
//#include "lleventtimer.h"
// Link seam for LLVOVolume
class LLMediaDataClientObject : public LLRefCount
{
public:
// Get the number of media data items
virtual U8 getMediaDataCount() const = 0;
// Get the media data at index, as an LLSD
virtual LLSD getMediaDataLLSD(U8 index) const = 0;
// Get this object's UUID
virtual LLUUID getID() const = 0;
// Navigate back to previous URL
virtual void mediaNavigateBounceBack(U8 index) = 0;
// Does this object have media?
virtual bool hasMedia() const = 0;
// Update the object's media data to the given array
virtual void updateObjectMediaData(LLSD const &media_data_array, const std::string &version_string) = 0;
// Return the total "interest" of the media (on-screen area)
virtual F64 getMediaInterest() const = 0;
// Return the given cap url
virtual std::string getCapabilityUrl(const std::string &name) const = 0;
// Return whether the object has been marked dead
virtual bool isDead() const = 0;
// Returns a media version number for the object
virtual U32 getMediaVersion() const = 0;
// Returns whether the object is "interesting enough" to fetch
virtual bool isInterestingEnough() const = 0;
// Returns whether we've seen this object yet or not
virtual bool isNew() const = 0;
// smart pointer
typedef LLPointer<LLMediaDataClientObject> ptr_t;
};
// This object creates a priority queue for requests.
// Abstracts the Cap URL, the request, and the responder
class LLMediaDataClient : public LLRefCount
{
public:
LOG_CLASS(LLMediaDataClient);
const static F32 QUEUE_TIMER_DELAY;// = 1.0; // seconds(s)
const static F32 UNAVAILABLE_RETRY_TIMER_DELAY;// = 5.0; // secs
const static U32 MAX_RETRIES;// = 4;
const static U32 MAX_SORTED_QUEUE_SIZE;// = 10000;
const static U32 MAX_ROUND_ROBIN_QUEUE_SIZE;// = 10000;
// Constructor
LLMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
U32 max_retries = MAX_RETRIES,
U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE);
// Make the request
void request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload);
F32 getRetryTimerDelay() const { return mRetryTimerDelay; }
// Returns true iff the queue is empty
bool isEmpty() const;
// Returns true iff the given object is in the queue
bool isInQueue(const LLMediaDataClientObject::ptr_t &object);
// Remove the given object from the queue. Returns true iff the given object is removed.
bool removeFromQueue(const LLMediaDataClientObject::ptr_t &object);
// Called only by the Queue timer and tests (potentially)
bool processQueueTimer();
protected:
// Destructor
virtual ~LLMediaDataClient(); // use unref
// Request
class Request : public LLRefCount
{
public:
enum Type {
GET,
UPDATE,
NAVIGATE,
ANY
};
Request(const char *cap_name, const LLSD& sd_payload, LLMediaDataClientObject *obj, LLMediaDataClient *mdc);
const char *getCapName() const { return mCapName; }
const LLSD &getPayload() const { return mPayload; }
LLMediaDataClientObject *getObject() const { return mObject; }
U32 getNum() const { return mNum; }
U32 getRetryCount() const { return mRetryCount; }
void incRetryCount() { mRetryCount++; }
// Note: may return empty string!
std::string getCapability() const;
Type getType() const;
const char *getTypeAsString() const;
// Re-enqueue thyself
void reEnqueue() const;
F32 getRetryTimerDelay() const;
U32 getMaxNumRetries() const;
bool isNew() const { return mObject.notNull() ? mObject->isNew() : false; }
void markSent(bool flag);
bool isMarkedSent() const { return mMarkedSent; }
void updateScore();
F64 getScore() const { return mScore; }
public:
friend std::ostream& operator<<(std::ostream &s, const Request &q);
protected:
virtual ~Request(); // use unref();
private:
const char *mCapName;
LLSD mPayload;
LLMediaDataClientObject::ptr_t mObject;
// Simple tracking
U32 mNum;
static U32 sNum;
U32 mRetryCount;
F64 mScore;
bool mMarkedSent;
// Back pointer to the MDC...not a ref!
LLMediaDataClient *mMDC;
};
typedef LLPointer<Request> request_ptr_t;
// Responder
class Responder : public LLHTTPClient::Responder
{
public:
Responder(const request_ptr_t &request);
//If we get back an error (not found, etc...), handle it here
virtual void error(U32 status, const std::string& reason);
//If we get back a normal response, handle it here. Default just logs it.
virtual void result(const LLSD& content);
const request_ptr_t &getRequest() const { return mRequest; }
protected:
virtual ~Responder();
private:
class RetryTimer : public LLEventTimer
{
public:
RetryTimer(F32 time, Responder *);
virtual ~RetryTimer();
virtual BOOL tick();
private:
// back-pointer
boost::intrusive_ptr<Responder> mResponder;
};
request_ptr_t mRequest;
};
protected:
// Subclasses must override this factory method to return a new responder
virtual Responder *createResponder(const request_ptr_t &request) const = 0;
// Subclasses must override to return a cap name
virtual const char *getCapabilityName() const = 0;
virtual void sortQueue();
virtual void serviceQueue();
private:
typedef std::list<request_ptr_t> request_queue_t;
void enqueue(const Request*);
// Return whether the given object is/was in the queue
static LLMediaDataClient::request_ptr_t findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, Request::Type type);
// Comparator for sorting
static bool compareRequests(const request_ptr_t &o1, const request_ptr_t &o2);
static F64 getObjectScore(const LLMediaDataClientObject::ptr_t &obj);
friend std::ostream& operator<<(std::ostream &s, const Request &q);
friend std::ostream& operator<<(std::ostream &s, const request_queue_t &q);
class QueueTimer : public LLEventTimer
{
public:
QueueTimer(F32 time, LLMediaDataClient *mdc);
virtual BOOL tick();
protected:
virtual ~QueueTimer();
private:
// back-pointer
LLPointer<LLMediaDataClient> mMDC;
};
void startQueueTimer();
void stopQueueTimer();
void setIsRunning(bool val) { mQueueTimerIsRunning = val; }
void swapCurrentQueue();
request_queue_t *getCurrentQueue();
const F32 mQueueTimerDelay;
const F32 mRetryTimerDelay;
const U32 mMaxNumRetries;
const U32 mMaxSortedQueueSize;
const U32 mMaxRoundRobinQueueSize;
bool mQueueTimerIsRunning;
request_queue_t mSortedQueue;
request_queue_t mRoundRobinQueue;
bool mCurrentQueueIsTheSortedQueue;
};
// MediaDataClient specific for the ObjectMedia cap
class LLObjectMediaDataClient : public LLMediaDataClient
{
public:
LLObjectMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
U32 max_retries = MAX_RETRIES,
U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
: LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
{}
virtual ~LLObjectMediaDataClient() {}
void fetchMedia(LLMediaDataClientObject *object);
void updateMedia(LLMediaDataClientObject *object);
protected:
// Subclasses must override this factory method to return a new responder
virtual Responder *createResponder(const request_ptr_t &request) const;
// Subclasses must override to return a cap name
virtual const char *getCapabilityName() const;
class Responder : public LLMediaDataClient::Responder
{
public:
Responder(const request_ptr_t &request)
: LLMediaDataClient::Responder(request) {}
virtual void result(const LLSD &content);
};
};
// MediaDataClient specific for the ObjectMediaNavigate cap
class LLObjectMediaNavigateClient : public LLMediaDataClient
{
public:
// NOTE: from llmediaservice.h
static const int ERROR_PERMISSION_DENIED_CODE = 8002;
LLObjectMediaNavigateClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
U32 max_retries = MAX_RETRIES,
U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
: LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
{}
virtual ~LLObjectMediaNavigateClient() {}
void navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url);
protected:
// Subclasses must override this factory method to return a new responder
virtual Responder *createResponder(const request_ptr_t &request) const;
// Subclasses must override to return a cap name
virtual const char *getCapabilityName() const;
class Responder : public LLMediaDataClient::Responder
{
public:
Responder(const request_ptr_t &request)
: LLMediaDataClient::Responder(request) {}
virtual void error(U32 status, const std::string& reason);
virtual void result(const LLSD &content);
private:
void mediaNavigateBounceBack();
};
};
#endif // LL_LLMEDIADATACLIENT_H
+5 -5
View File
@@ -1321,11 +1321,11 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
{
if (avatar_id.isNull()) return;
BOOL avatar_changed = FALSE;
if (avatar_id != mAvatarID)
{
avatar_changed = TRUE;
}
// BOOL avatar_changed = FALSE;
// if (avatar_id != mAvatarID)
// {
// avatar_changed = TRUE;
// }
mAvatarID = avatar_id;
// Determine if we have their calling card.
-2
View File
@@ -83,8 +83,6 @@
BOOL LLPanelContents::postBuild()
{
LLRect rect = this->getRect();
setMouseOpaque(FALSE);
childSetAction("button new script",&LLPanelContents::onClickNewScript, this);
-1
View File
@@ -74,7 +74,6 @@
BOOL LLPanelFace::postBuild()
{
LLRect rect = this->getRect();
LLTextureCtrl* mTextureCtrl;
LLColorSwatchCtrl* mColorSwatch;
@@ -1390,13 +1390,11 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
S32 cur_land_tax;
S32 cur_group_tax;
S32 cur_parcel_dir_fee;
S32 cur_total_tax;
S32 proj_object_tax;
S32 proj_light_tax;
S32 proj_land_tax;
S32 proj_group_tax;
S32 proj_parcel_dir_fee;
S32 proj_total_tax;
S32 non_exempt_members;
msg->getS32Fast(_PREHASH_MoneyData, _PREHASH_IntervalDays, interval_days );
@@ -1420,9 +1418,6 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
msg->getStringFast(_PREHASH_MoneyData, _PREHASH_LastTaxDate, last_stipend_date);
msg->getStringFast(_PREHASH_MoneyData, _PREHASH_TaxDate, next_stipend_date);
cur_total_tax = cur_object_tax + cur_light_tax + cur_land_tax + cur_group_tax + cur_parcel_dir_fee;
proj_total_tax = proj_object_tax + proj_light_tax + proj_land_tax + proj_group_tax + proj_parcel_dir_fee;
if (interval_days != mImplementationp->mIntervalLength ||
current_interval != mImplementationp->mCurrentInterval)
{
+2 -3
View File
@@ -602,18 +602,17 @@ void LLPanelLogin::addServer(const std::string& server)
const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick();
LLComboBox *grids = sInstance->getChild<LLComboBox>("server_combo");
S32 selectIndex = -1, i = 0;
S32 i = 0;
grids->removeall();
if (defaultGrid != "") {
grids->add(defaultGrid);
selectIndex = i++;
i++;
}
HippoGridManager::GridIterator it, end = gHippoGridManager->endGrid();
for (it = gHippoGridManager->beginGrid(); it != end; ++it) {
const std::string &grid = it->second->getGridNick();
if (grid != defaultGrid) {
grids->add(grid);
//if (grid == mCurGrid) selectIndex = i;
i++;
}
}
-1
View File
@@ -356,7 +356,6 @@ void LLPanelMediaHUD::updateShape()
media_hud_rect.mRight += getRect().getWidth() - media_region->getRect().mRight;
LLRect old_hud_rect = media_hud_rect;
// keep all parts of HUD on-screen
media_hud_rect.intersectWith(getParent()->getLocalRect());
+2 -2
View File
@@ -520,10 +520,10 @@ void LLPanelObject::getState( )
mBtnPasteRot->setEnabled( enable_rotate );
mBtnPasteRotClip->setEnabled( enable_rotate );
BOOL owners_identical;
LLUUID owner_id;
std::string owner_name;
owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
// This is still needed for the side effects, though the result is not.
LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
// BUG? Check for all objects being editable?
S32 roots_selected = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
+3 -2
View File
@@ -541,7 +541,7 @@ void LLPanelPermissions::refresh()
// TODO: Creator permissions
BOOL valid_base_perms = FALSE;
BOOL valid_owner_perms = FALSE;
//BOOL valid_owner_perms = FALSE;
BOOL valid_group_perms = FALSE;
BOOL valid_everyone_perms = FALSE;
BOOL valid_next_perms = FALSE;
@@ -561,7 +561,8 @@ void LLPanelPermissions::refresh()
&base_mask_on,
&base_mask_off);
valid_owner_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER,
// TODO - seems odd, but this is not actually used, except to set owner_mask_*.
/*valid_owner_perms =*/ LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER,
&owner_mask_on,
&owner_mask_off);
+2 -2
View File
@@ -181,10 +181,10 @@ void LLPanelVolume::getState( )
return;
}
BOOL owners_identical;
LLUUID owner_id;
std::string owner_name;
owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
// This is still needed for the side effects, though the result is not.
LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
// BUG? Check for all objects being editable?
BOOL editable = root_objectp->permModify();
-2
View File
@@ -1072,7 +1072,6 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount())
{
//LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
LLBBox bbox = mSavedSelectionBBox;
mGridOrigin = mSavedSelectionBBox.getCenterAgent();
mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f;
@@ -1090,7 +1089,6 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull())
{
mGridRotation = first_grid_object->getRenderRotation();
LLVector3 first_grid_obj_pos = first_grid_object->getRenderPosition();
LLVector3 min_extents(F32_MAX, F32_MAX, F32_MAX);
LLVector3 max_extents(-F32_MAX, -F32_MAX, -F32_MAX);
@@ -2617,9 +2617,6 @@ public:
return;
}
LLVector3 nodeCenter = group->mBounds[0];
LLVector3 octCenter = LLVector3(group->mOctreeNode->getCenter());
for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i)
{
LLDrawable* drawable = *i;
@@ -2860,9 +2857,6 @@ public:
virtual bool check(LLDrawable* drawable)
{
LLVector3 local_start = mStart;
LLVector3 local_end = mEnd;
if (!gPipeline.hasRenderType(drawable->getRenderType()) || !drawable->isVisible())
{
return false;
+18 -18
View File
@@ -206,6 +206,8 @@
#include "rlvhandler.h"
// [/RLVa:KB]
#include "rcmoapradar.h"
#if LL_WINDOWS
#include "llwindebug.h"
#include "lldxhardware.h"
@@ -346,7 +348,6 @@ bool idle_startup()
const F32 TIMEOUT_SECONDS = 10.f; // changed from 5 to 10 seconds for OpenSim lag -- MC
const S32 MAX_TIMEOUT_COUNT = 3;
static LLTimer timeout;
static S32 timeout_count = 0;
static LLTimer login_time;
static LLTimer connecting_region_timer;
@@ -378,11 +379,10 @@ bool idle_startup()
// last location by default
static S32 agent_location_id = START_LOCATION_ID_LAST;
static S32 location_which = START_LOCATION_ID_LAST;
static bool show_connect_box = true;
static bool stipend_since_login = false;
//static bool stipend_since_login = false;
static bool samename = false;
@@ -797,8 +797,6 @@ bool idle_startup()
gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
timeout_count = 0;
if (LLStartUp::shouldAutoLogin())
{
show_connect_box = false;
@@ -1111,7 +1109,6 @@ bool idle_startup()
{
// Force login at the last location
agent_location_id = START_LOCATION_ID_LAST;
location_which = START_LOCATION_ID_LAST;
gSavedSettings.setBOOL("LoginLastLocation", FALSE);
// Clear some things that would cause us to divert to a user-specified location
@@ -1123,21 +1120,14 @@ bool idle_startup()
{
// a startup URL was specified
agent_location_id = START_LOCATION_ID_URL;
// doesn't really matter what location_which is, since
// agent_start_look_at will be overwritten when the
// UserLoginLocationReply arrives
location_which = START_LOCATION_ID_LAST;
}
else if (gSavedSettings.getBOOL("LoginLastLocation"))
{
agent_location_id = START_LOCATION_ID_LAST; // last location
location_which = START_LOCATION_ID_LAST;
}
else
{
agent_location_id = START_LOCATION_ID_HOME; // home
location_which = START_LOCATION_ID_HOME;
}
gViewerWindow->getWindow()->setCursor(UI_CURSOR_WAIT);
@@ -1783,11 +1773,11 @@ bool idle_startup()
if((*it).second == "N") gAgent.setFirstLogin(TRUE);
else gAgent.setFirstLogin(FALSE);
}
it = options[0].find("stipend_since_login");
if(it != no_flag)
{
if((*it).second == "Y") stipend_since_login = true;
}
//it = options[0].find("stipend_since_login");
//if(it != no_flag)
//{
// if((*it).second == "Y") stipend_since_login = true;
//}
it = options[0].find("gendered");
if(it != no_flag)
{
@@ -2079,6 +2069,16 @@ bool idle_startup()
LLRect window(0, gViewerWindow->getWindowHeight(), gViewerWindow->getWindowWidth(), 0);
gViewerWindow->adjustControlRectanglesForFirstUse(window);
if (gSavedSettings.getBOOL("ShowRadar"))
{
LLFloaterAvatarList::showInstance();
}
if (gSavedSettings.getBOOL("ShowMOAPRadar"))
{
LLFloaterMOAPRadar::showInstance();
}
if(gSavedSettings.getBOOL("ShowMiniMap"))
{
LLFloaterMap::showInstance();
-2
View File
@@ -1262,8 +1262,6 @@ BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y,
y_end = tex_width;
}
LLVector3d origin_global = from_region_handle(getRegion()->getHandle());
// OK, for now, just have the composition value equal the height at the point.
LLVector3 location;
LLColor4U coloru;
+3 -1
View File
@@ -40,10 +40,12 @@
#include "llviewerwindow.h"
#include "lltoolcomp.h"
#include "lltoolface.h"
#include "lltoolfocus.h"
#include "llfocusmgr.h"
#include "llagent.h"
#include "llviewerjoystick.h"
#include "qtoolalign.h"
extern BOOL gDebugClicks;
@@ -187,7 +189,7 @@ LLTool* LLTool::getOverrideTool(MASK mask)
{
return NULL;
}
if (mask & MASK_ALT)
else if (mask & MASK_ALT)
{
return LLToolCamera::getInstance();
}
+32 -51
View File
@@ -43,6 +43,7 @@
#include "llmaniptranslate.h"
#include "llmenugl.h" // for right-click menu hack
#include "llselectmgr.h"
#include "lltoolface.h"
#include "lltoolfocus.h"
#include "lltoolgrab.h"
#include "lltoolgun.h"
@@ -131,6 +132,36 @@ void LLToolComposite::handleSelect()
mSelected = TRUE;
}
LLTool* LLToolComposite::getOverrideTool(MASK mask)
{
if (gKeyboard->getKeyDown('M') &&
((mask == (MASK_ALT | MASK_CONTROL)) || (mask == (MASK_ALT | MASK_CONTROL | MASK_SHIFT))))
{
return QToolAlign::getInstance();
}
else if (gKeyboard->getKeyDown('P') &&
(mask == (MASK_CONTROL | MASK_SHIFT)))
{
return LLToolCompTranslate::getInstance();
}
else if (gKeyboard->getKeyDown('F') &&
(mask == (MASK_ALT | MASK_CONTROL)))
{
return LLToolFace::getInstance();
}
else if (mask == (MASK_CONTROL | MASK_SHIFT))
{
return LLToolCompScale::getInstance();
}
else if (mask == MASK_CONTROL)
{
return LLToolCompRotate::getInstance();
}
return LLTool::getOverrideTool(mask);
}
//----------------------------------------------------------------------------
// LLToolCompInspect
//----------------------------------------------------------------------------
@@ -277,24 +308,6 @@ BOOL LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask)
return LLToolComposite::handleMouseUp(x, y, mask);
}
LLTool* LLToolCompTranslate::getOverrideTool(MASK mask)
{
if (gKeyboard->getKeyDown('A') &&
((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
{
return QToolAlign::getInstance();
}
else if (mask == MASK_CONTROL)
{
return LLToolCompRotate::getInstance();
}
else if (mask == (MASK_CONTROL | MASK_SHIFT))
{
return LLToolCompScale::getInstance();
}
return LLToolComposite::getOverrideTool(mask);
}
BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask)
{
if (mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
@@ -401,22 +414,6 @@ BOOL LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask)
return LLToolComposite::handleMouseUp(x, y, mask);
}
LLTool* LLToolCompScale::getOverrideTool(MASK mask)
{
if (gKeyboard->getKeyDown('A') &&
((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
{
return QToolAlign::getInstance();
}
else if (mask == MASK_CONTROL)
{
return LLToolCompRotate::getInstance();
}
return LLToolComposite::getOverrideTool(mask);
}
BOOL LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask)
{
if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
@@ -471,18 +468,16 @@ LLToolCompCreate::~LLToolCompCreate()
BOOL LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask)
{
BOOL handled = FALSE;
mMouseDown = TRUE;
if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) )
{
gViewerWindow->pickAsync(x, y, mask, pickCallback);
handled = TRUE;
}
else
{
setCurrentTool( mPlacer );
handled = mPlacer->placeObject( x, y, mask );
mPlacer->placeObject( x, y, mask );
}
mObjectPlacedOnMouseDown = TRUE;
@@ -606,20 +601,6 @@ BOOL LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask)
return LLToolComposite::handleMouseUp(x, y, mask);
}
LLTool* LLToolCompRotate::getOverrideTool(MASK mask)
{
if (gKeyboard->getKeyDown('A') &&
((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
{
return QToolAlign::getInstance();
}
else if (mask == (MASK_CONTROL | MASK_SHIFT))
{
return LLToolCompScale::getInstance();
}
return LLToolComposite::getOverrideTool(mask);
}
BOOL LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask)
{
if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
+15 -20
View File
@@ -84,6 +84,9 @@ public:
{ mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); }
BOOL isSelecting();
virtual LLTool* getOverrideTool(MASK mask);
protected:
void setCurrentTool( LLTool* new_tool );
LLTool* getCurrentTool() { return mCur; }
@@ -113,8 +116,8 @@ public:
virtual ~LLToolCompInspect();
// Overridden from LLToolComposite
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
static void pickCallback(const LLPickInfo& pick_info);
};
@@ -135,8 +138,6 @@ public:
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
virtual void render();
virtual LLTool* getOverrideTool(MASK mask);
static void pickCallback(const LLPickInfo& pick_info);
};
@@ -150,14 +151,12 @@ public:
virtual ~LLToolCompScale();
// Overridden from LLToolComposite
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
virtual void render();
virtual LLTool* getOverrideTool(MASK mask);
static void pickCallback(const LLPickInfo& pick_info);
};
@@ -172,17 +171,13 @@ public:
virtual ~LLToolCompRotate();
// Overridden from LLToolComposite
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual void render();
virtual LLTool* getOverrideTool(MASK mask);
static void pickCallback(const LLPickInfo& pick_info);
protected:
};
//-----------------------------------------------------------------------
@@ -195,14 +190,14 @@ public:
virtual ~LLToolCompCreate();
// Overridden from LLToolComposite
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
static void pickCallback(const LLPickInfo& pick_info);
protected:
LLToolPlacer* mPlacer;
BOOL mObjectPlacedOnMouseDown;
BOOL mObjectPlacedOnMouseDown;
};
@@ -220,7 +215,7 @@ public:
virtual ~LLToolCompGun();
// Overridden from LLToolComposite
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
@@ -1521,18 +1521,6 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
gFloaterTools->dirty();
}
struct LLGiveInventoryInfo
{
LLUUID mToAgentID;
LLUUID mInventoryObjectID;
LLUUID mIMSessionID;
LLGiveInventoryInfo(const LLUUID& to_agent, const LLUUID& obj_id, const LLUUID &im_session_id = LLUUID::null) :
mToAgentID(to_agent),
mInventoryObjectID(obj_id),
mIMSessionID(im_session_id)
{}
};
void LLToolDragAndDrop::giveInventory(const LLUUID& to_agent,
LLInventoryItem* item,
const LLUUID& im_session_id)
@@ -1701,8 +1689,6 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,
}
else
{
LLGiveInventoryInfo* info = NULL;
info = new LLGiveInventoryInfo(to_agent, cat->getUUID(), im_session_id);
LLSD args;
args["COUNT"] = llformat("%d",giveable.countNoCopy());
LLSD payload;
+2 -1
View File
@@ -57,7 +57,7 @@
//
LLToolFace::LLToolFace()
: LLTool(std::string("Texture"))
: LLToolComposite(std::string("Texture"))
{ }
@@ -156,6 +156,7 @@ void LLToolFace::pickCallback(const LLPickInfo& pick_info)
void LLToolFace::handleSelect()
{
gFloaterTools->setStatusText("selectface");
// From now on, draw faces
LLSelectMgr::getInstance()->setTEMode(TRUE);
}
+2 -1
View File
@@ -34,12 +34,13 @@
#define LL_LLTOOLFACE_H
#include "lltool.h"
#include "lltoolcomp.h"
class LLViewerObject;
class LLPickInfo;
class LLToolFace
: public LLTool, public LLSingleton<LLToolFace>
: public LLToolComposite, public LLSingleton<LLToolFace>
{
public:
LLToolFace();
-10
View File
@@ -318,8 +318,6 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
S32 dx = gViewerWindow->getCurrentMouseDX();
S32 dy = gViewerWindow->getCurrentMouseDY();
BOOL moved_outside_slop = FALSE;
if (hasMouseCapture() && mValidClickPoint)
{
mAccumX += llabs(dx);
@@ -327,19 +325,11 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
if (mAccumX >= SLOP_RANGE)
{
if (!mOutsideSlopX)
{
moved_outside_slop = TRUE;
}
mOutsideSlopX = TRUE;
}
if (mAccumY >= SLOP_RANGE)
{
if (!mOutsideSlopY)
{
moved_outside_slop = TRUE;
}
mOutsideSlopY = TRUE;
}
}
+1 -1
View File
@@ -193,7 +193,7 @@ LLTool* LLToolMgr::getCurrentTool()
else
{
// due to window management weirdness we can get here with gToolNull
bool can_override = mBaseTool && (mBaseTool != gToolNull) ;
bool can_override = mBaseTool && (mBaseTool != gToolNull);
mOverrideTool = can_override ? mBaseTool->getOverrideTool(override_mask) : NULL;
// use keyboard-override tool if available otherwise drop back to base tool
-2
View File
@@ -119,8 +119,6 @@ void LLURLHistory::addURL(const std::string& collection, const std::string& url)
// static
void LLURLHistory::removeURL(const std::string& collection, const std::string& url)
{
LLSD::array_iterator iter = sHistorySD[collection].beginArray();
LLSD::array_iterator end = sHistorySD[collection].endArray();
for(int index = 0; index < sHistorySD[collection].size(); index++)
{
if(sHistorySD[collection].get(index).asString() == url)
+1 -5
View File
@@ -131,9 +131,6 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 &center,
mLastPointOfInterest = point_of_interest;
// constrain to max distance from avatar
LLVector3 camera_offset = center - gAgent.getPositionAgent();
LLViewerRegion * regp = gAgent.getRegion();
F32 water_height = (NULL != regp) ? regp->getWaterHeight() : 0.f;
@@ -306,7 +303,7 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
{
F32 fov_y, aspect;
fov_y = RAD_TO_DEG * getView();
BOOL z_default_near, z_default_far = FALSE;
BOOL z_default_far = FALSE;
if (z_far <= 0)
{
z_default_far = TRUE;
@@ -314,7 +311,6 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
}
if (z_near <= 0)
{
z_default_near = TRUE;
z_near = getNear();
}
aspect = getAspect();
-1
View File
@@ -977,7 +977,6 @@ void render_hud_attachments()
if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices())
{
LLCamera hud_cam = *LLViewerCamera::getInstance();
LLVector3 origin = hud_cam.getOrigin();
hud_cam.setOrigin(-1.f,0,0);
hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1));
LLViewerCamera::updateFrustumPlanes(hud_cam, TRUE);
@@ -39,7 +39,7 @@
#include "message.h"
#include "llagent.h"
#include "lluuid.h"
#include "lightshare.h"
#include "llettherebelight.h"
LLDispatcher gGenericDispatcher;
+36 -17
View File
@@ -238,6 +238,8 @@
#include "llfloaterteleporthistory.h"
#include "slfloatermediafilter.h"
#include "rcmoapradar.h"
using namespace LLVOAvatarDefines;
void init_client_menu(LLMenuGL* menu);
void init_server_menu(LLMenuGL* menu);
@@ -1096,10 +1098,10 @@ void init_debug_ui_menu(LLMenuGL* menu)
menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui));
menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr));
menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory));
menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL));
menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT ));
menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus));
menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info));
menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs));
menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics));
menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
menu_toggle_control, NULL, menu_check_control,
(void*)"DoubleClickAutoPilot"));
@@ -1256,7 +1258,6 @@ void init_debug_rendering_menu(LLMenuGL* menu)
sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL,
&LLPipeline::toggleRenderDebugControl,
(void*)LLPipeline::RENDER_DEBUG_OCTREE));
// For Imprudence 1.3 - need to XUIfy
sub_menu->append(new LLMenuItemCheckGL("Shadow Frusta", &LLPipeline::toggleRenderDebug, NULL,
&LLPipeline::toggleRenderDebugControl,
(void*)LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA));
@@ -5216,6 +5217,24 @@ class LLViewEnableLastChatter : public view_listener_t
}
};
class LLViewToggleRadar: public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
LLFloaterAvatarList::toggle(0);
return true;
}
};
class LLViewToggleMOAPRadar: public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
LLFloaterMOAPRadar::toggle(0);
return true;
}
};
class LLEditEnableDeselect : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -8946,12 +8965,6 @@ class LLAdvancedToggleAssetBrowser: public view_listener_t
{
//open the floater
LLFloaterAssetBrowser::show(0);
bool vis = false;
if(LLFloaterAssetBrowser::getInstance())
{
vis = (bool)LLFloaterAssetBrowser::getInstance()->getVisible();
}
return true;
}
};
@@ -9058,7 +9071,7 @@ class LLAdvancedToggleRenderType : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
U32 render_type = render_type_from_string( userdata.asString() );
intptr_t render_type = render_type_from_string( userdata.asString() );
if ( render_type != 0 )
{
LLPipeline::toggleRenderTypeControl( (void*)render_type );
@@ -9072,7 +9085,7 @@ class LLAdvancedCheckRenderType : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
U32 render_type = render_type_from_string( userdata["data"].asString() );
intptr_t render_type = render_type_from_string( userdata["data"].asString() );
bool new_value = false;
if ( render_type != 0 )
@@ -9138,7 +9151,7 @@ class LLAdvancedToggleFeature : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
U32 feature = feature_from_string( userdata.asString() );
intptr_t feature = feature_from_string( userdata.asString() );
if ( feature != 0 )
{
@@ -9154,7 +9167,7 @@ class LLAdvancedCheckFeature : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
U32 feature = feature_from_string( userdata["data"].asString() );
intptr_t feature = feature_from_string( userdata["data"].asString() );
bool new_value = false;
if ( feature != 0 )
@@ -9249,6 +9262,10 @@ U32 info_display_from_string(std::string info_display)
{
return LLPipeline::RENDER_DEBUG_SCULPTED;
}
else if ("shadow frusta" == info_display)
{
return LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA;
}
else
{
return 0;
@@ -9260,7 +9277,7 @@ class LLAdvancedToggleInfoDisplay : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
U32 info_display = info_display_from_string( userdata.asString() );
intptr_t info_display = info_display_from_string( userdata.asString() );
if ( info_display != 0 )
{
@@ -9276,7 +9293,7 @@ class LLAdvancedCheckInfoDisplay : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
U32 info_display = info_display_from_string( userdata["data"].asString() );
intptr_t info_display = info_display_from_string( userdata["data"].asString() );
bool new_value = false;
if ( info_display != 0 )
@@ -11215,6 +11232,8 @@ void initialize_menus()
addMenu(new LLViewEnableMouselook(), "View.EnableMouselook");
addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam");
addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter");
addMenu(new LLViewToggleRadar(), "View.ToggleAvatarList");
addMenu(new LLViewToggleMOAPRadar(), "View.ToggleMOAPList");
addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode");
addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam");
+1 -4
View File
@@ -65,7 +65,7 @@
#include "lltimer.h"
#include "llmd5.h"
#include "lightshare.h"
#include "llettherebelight.h"
#include "llagent.h"
#include "llcallingcard.h"
#include "llconsole.h"
@@ -653,7 +653,6 @@ void send_sound_trigger(const LLUUID& sound_id, F32 gain)
bool join_group_response(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotification::getSelectedOption(notification, response);
BOOL delete_context_data = TRUE;
bool accept_invite = false;
LLUUID group_id = notification["payload"]["group_id"].asUUID();
@@ -682,7 +681,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
}
else
{
delete_context_data = FALSE;
LLSD args;
args["NAME"] = name;
args["INVITE"] = message;
@@ -696,7 +694,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
// sure the user is sure they want to join.
if (fee > 0)
{
delete_context_data = FALSE;
LLSD args;
args["COST"] = llformat("%d", fee);
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
-3
View File
@@ -2046,9 +2046,6 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
if (HJT_HINGE == mJointInfo->mJointType)
{
// hinge = uniform circular motion
LLVector3 parent_pivot = getVelocity();
LLVector3 parent_axis = getAcceleration();
angle = dt * (ang_vel * mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis
dQ.setQuat(angle, mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis
LLVector3 pivot_offset = pos - mJointInfo->mPivot; // pos in pivot-frame
+7 -1
View File
@@ -157,7 +157,13 @@ public:
enum { MEDIA_TYPE_NONE = 0, MEDIA_TYPE_WEB_PAGE = 1 };
// Return codes for processUpdateMessage
enum { MEDIA_URL_REMOVED = 0x1, MEDIA_URL_ADDED = 0x2, MEDIA_URL_UPDATED = 0x4, INVALID_UPDATE = 0x80000000 };
enum {
MEDIA_URL_REMOVED = 0x1,
MEDIA_URL_ADDED = 0x2,
MEDIA_URL_UPDATED = 0x4,
MEDIA_FLAGS_CHANGED = 0x8,
INVALID_UPDATE = 0x80000000
};
virtual U32 processUpdateMessage(LLMessageSystem *mesgsys,
void **user_data,
+18 -19
View File
@@ -288,7 +288,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
{
LLFastTimer t(LLFastTimer::FTM_PROCESS_OBJECTS);
LLVector3d camera_global = gAgent.getCameraPositionGlobal();
LLViewerObject *objectp;
S32 num_objects;
U32 local_id;
@@ -305,28 +304,28 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
if (!cached && !compressed && update_type != OUT_FULL)
{
gTerseObjectUpdates += num_objects;
S32 size;
if (mesgsys->getReceiveCompressedSize())
{
size = mesgsys->getReceiveCompressedSize();
}
else
{
size = mesgsys->getReceiveSize();
}
// S32 size;
// if (mesgsys->getReceiveCompressedSize())
// {
// size = mesgsys->getReceiveCompressedSize();
// }
// else
// {
// size = mesgsys->getReceiveSize();
// }
// llinfos << "Received terse " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
}
else
{
S32 size;
if (mesgsys->getReceiveCompressedSize())
{
size = mesgsys->getReceiveCompressedSize();
}
else
{
size = mesgsys->getReceiveSize();
}
// S32 size;
// if (mesgsys->getReceiveCompressedSize())
// {
// size = mesgsys->getReceiveCompressedSize();
// }
// else
// {
// size = mesgsys->getReceiveSize();
// }
// llinfos << "Received " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
gFullObjectUpdates += num_objects;
+2 -4
View File
@@ -101,12 +101,11 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
sMediaRegionID = LLUUID() ;
stop() ;
LL_DEBUGS("Media") << "no agent region, bailing out." << LL_ENDL;
return ;
return ;
}
// we're in a parcel
bool new_parcel = false;
S32 parcelid = parcel->getLocalID();
S32 parcelid = parcel->getLocalID();
LLUUID regionid = gAgent.getRegion()->getRegionID();
if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID)
@@ -114,7 +113,6 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
LL_DEBUGS("Media") << "New parcel, parcel id = " << parcelid << ", region id = " << regionid << LL_ENDL;
sMediaParcelLocalID = parcelid;
sMediaRegionID = regionid;
new_parcel = true;
}
std::string mediaUrl = std::string ( parcel->getMediaURL () );

Some files were not shown because too many files have changed in this diff Show More