aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDavid Walter Seikel2013-07-15 03:59:58 +1000
committerDavid Walter Seikel2013-07-15 03:59:58 +1000
commitc7f06e9e63a54874696fe89e2ef24c809bef51f3 (patch)
tree3eb207f344435fbeb82b142000980416d50690cd
parentMore Windlight refactoring, including moving the new stuff back to lightshare.c. (diff)
parentFix Align tool conflicts with Edit Linked Parts - http://redmine.kokuaviewer.... (diff)
downloadmeta-impy-c7f06e9e63a54874696fe89e2ef24c809bef51f3.zip
meta-impy-c7f06e9e63a54874696fe89e2ef24c809bef51f3.tar.gz
meta-impy-c7f06e9e63a54874696fe89e2ef24c809bef51f3.tar.bz2
meta-impy-c7f06e9e63a54874696fe89e2ef24c809bef51f3.tar.xz
Merge remote-tracking branch 'origin/next' into WL-refactor
-rw-r--r--RELEASE_NOTES.txt91
-rw-r--r--linden/etc/message.xml6
-rw-r--r--linden/indra/cmake/00-Common.cmake5
-rwxr-xr-xlinden/indra/develop.py204
-rw-r--r--linden/indra/llcommon/llsdserialize.cpp5
-rw-r--r--linden/indra/llmath/llsdutil_math.cpp14
-rw-r--r--linden/indra/llmath/llvolume.cpp9
-rw-r--r--linden/indra/llmessage/llhttpassetstorage.cpp3
-rwxr-xr-xlinden/indra/llplugin/slplugin/CMakeLists.txt2
-rwxr-xr-xlinden/indra/llprimitive/llmaterialtable.cpp10
-rw-r--r--linden/indra/llrender/llfont.cpp2
-rw-r--r--linden/indra/llrender/llgl.cpp13
-rw-r--r--linden/indra/llrender/llimagegl.cpp4
-rw-r--r--linden/indra/llui/llfloater.cpp16
-rw-r--r--linden/indra/llui/llfunctorregistry.h2
-rw-r--r--linden/indra/llui/llkeywords.cpp2
-rw-r--r--linden/indra/llui/llmenugl.cpp2
-rw-r--r--linden/indra/llui/llpanel.cpp1
-rw-r--r--linden/indra/llui/llprogressbar.cpp3
-rw-r--r--linden/indra/llui/llslider.cpp1
-rw-r--r--linden/indra/llui/lltexteditor.cpp4
-rw-r--r--linden/indra/llui/llui.h2
-rw-r--r--linden/indra/llwindow/GL/glh_extensions.h4
-rw-r--r--linden/indra/llwindow/llwindowsdl.cpp3
-rw-r--r--linden/indra/lscript/lscript_compile/CMakeLists.txt6
-rw-r--r--linden/indra/lscript/lscript_compile/indra.l24
-rw-r--r--linden/indra/lscript/lscript_execute/lscript_execute.cpp11
-rw-r--r--linden/indra/lscript/lscript_execute/lscript_readlso.cpp6
-rw-r--r--linden/indra/mac_crash_logger/CMakeLists.txt2
-rw-r--r--linden/indra/mac_updater/CMakeLists.txt2
-rwxr-xr-xlinden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp7
-rw-r--r--linden/indra/media_plugins/webkit/CMakeLists.txt4
-rw-r--r--linden/indra/newview/CMakeLists.txt68
-rw-r--r--linden/indra/newview/app_settings/default_grids.xml396
-rw-r--r--linden/indra/newview/app_settings/high_graphics.xml39
-rw-r--r--linden/indra/newview/app_settings/low_graphics.xml39
-rw-r--r--linden/indra/newview/app_settings/mid_graphics.xml39
-rw-r--r--linden/indra/newview/app_settings/settings.xml128
-rw-r--r--linden/indra/newview/app_settings/ultra_graphics.xml39
-rw-r--r--linden/indra/newview/chatbar_as_cmdline.cpp1
-rw-r--r--linden/indra/newview/featuretable.txt26
-rw-r--r--linden/indra/newview/featuretable_linux.txt24
-rw-r--r--linden/indra/newview/featuretable_mac.txt78
-rw-r--r--linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss12
-rw-r--r--linden/indra/newview/installers/windows/imprudence_installer_template.iss8
-rwxr-xr-xlinden/indra/newview/linux_tools/register_secondlifeprotocol.sh21
-rw-r--r--linden/indra/newview/llagent.cpp23
-rw-r--r--linden/indra/newview/lldrawable.cpp3
-rw-r--r--linden/indra/newview/llettherebelight.cpp (renamed from linden/indra/newview/lightshare.cpp)4
-rw-r--r--linden/indra/newview/llettherebelight.h (renamed from linden/indra/newview/lightshare.h)2
-rw-r--r--linden/indra/newview/llflexibleobject.cpp3
-rw-r--r--linden/indra/newview/llfloateractivespeakers.cpp2
-rw-r--r--linden/indra/newview/llfloaterbeacons.cpp3
-rw-r--r--linden/indra/newview/llfloaterbuildoptions.cpp17
-rw-r--r--linden/indra/newview/llfloaterchat.cpp2
-rw-r--r--linden/indra/newview/llfloaterjoystick.cpp1
-rw-r--r--linden/indra/newview/llfloatertools.cpp1
-rw-r--r--linden/indra/newview/llfloaterwater.cpp2
-rw-r--r--linden/indra/newview/llfloaterwindlight.cpp2
-rw-r--r--linden/indra/newview/llfolderview.cpp6
-rw-r--r--linden/indra/newview/llgesturemgr.cpp241
-rw-r--r--linden/indra/newview/llhoverview.cpp9
-rw-r--r--linden/indra/newview/llinventorybridge.cpp24
-rw-r--r--linden/indra/newview/llinventorymodel.cpp27
-rw-r--r--linden/indra/newview/llmaniprotate.cpp1
-rw-r--r--linden/indra/newview/llmanipscale.cpp5
-rw-r--r--linden/indra/newview/llmaniptranslate.cpp21
-rw-r--r--linden/indra/newview/llmediadataclient.cpp813
-rw-r--r--linden/indra/newview/llmediadataclient.h341
-rw-r--r--linden/indra/newview/llpanelavatar.cpp10
-rw-r--r--linden/indra/newview/llpanelcontents.cpp2
-rw-r--r--linden/indra/newview/llpanelface.cpp1
-rw-r--r--linden/indra/newview/llpanelgrouplandmoney.cpp5
-rw-r--r--linden/indra/newview/llpanellogin.cpp5
-rw-r--r--linden/indra/newview/llpanelmediahud.cpp1
-rw-r--r--linden/indra/newview/llpanelobject.cpp4
-rw-r--r--linden/indra/newview/llpanelpermissions.cpp5
-rw-r--r--linden/indra/newview/llpanelvolume.cpp4
-rw-r--r--linden/indra/newview/llselectmgr.cpp2
-rw-r--r--linden/indra/newview/llspatialpartition.cpp6
-rw-r--r--linden/indra/newview/llstartup.cpp36
-rw-r--r--linden/indra/newview/llsurface.cpp2
-rw-r--r--linden/indra/newview/lltool.cpp4
-rw-r--r--linden/indra/newview/lltoolcomp.cpp83
-rw-r--r--linden/indra/newview/lltoolcomp.h35
-rw-r--r--linden/indra/newview/lltooldraganddrop.cpp14
-rw-r--r--linden/indra/newview/lltoolface.cpp3
-rw-r--r--linden/indra/newview/lltoolface.h3
-rw-r--r--linden/indra/newview/lltoolfocus.cpp10
-rw-r--r--linden/indra/newview/lltoolmgr.cpp2
-rw-r--r--linden/indra/newview/llurlhistory.cpp2
-rw-r--r--linden/indra/newview/llviewercamera.cpp6
-rw-r--r--linden/indra/newview/llviewerdisplay.cpp1
-rw-r--r--linden/indra/newview/llviewergenericmessage.cpp2
-rw-r--r--linden/indra/newview/llviewermenu.cpp53
-rw-r--r--[-rwxr-xr-x]linden/indra/newview/llviewermessage.cpp5
-rw-r--r--linden/indra/newview/llviewerobject.cpp3
-rw-r--r--linden/indra/newview/llviewerobject.h8
-rw-r--r--linden/indra/newview/llviewerobjectlist.cpp37
-rw-r--r--linden/indra/newview/llviewerparcelmedia.cpp6
-rw-r--r--linden/indra/newview/llviewerregion.cpp2
-rw-r--r--linden/indra/newview/llvlcomposition.cpp8
-rw-r--r--linden/indra/newview/llvoavatar.cpp12
-rw-r--r--linden/indra/newview/llvoiceclient.cpp10
-rw-r--r--linden/indra/newview/llvosurfacepatch.cpp10
-rw-r--r--linden/indra/newview/llvovolume.cpp398
-rw-r--r--linden/indra/newview/llvovolume.h53
-rw-r--r--linden/indra/newview/llvowlsky.cpp25
-rw-r--r--linden/indra/newview/llwaterparammanager.cpp2
-rw-r--r--linden/indra/newview/llwaterparamset.cpp2
-rw-r--r--linden/indra/newview/llwlparammanager.cpp2
-rw-r--r--linden/indra/newview/llworldmapview.cpp3
-rw-r--r--linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings4
-rw-r--r--linden/indra/newview/panelradar.cpp3
-rw-r--r--linden/indra/newview/pipeline.cpp69
-rw-r--r--linden/indra/newview/pipeline.h5
-rw-r--r--linden/indra/newview/qtoolalign.cpp19
-rw-r--r--linden/indra/newview/qtoolalign.h4
-rw-r--r--linden/indra/newview/rcmoapradar.cpp440
-rw-r--r--linden/indra/newview/rcmoapradar.h58
-rw-r--r--linden/indra/newview/res/viewerRes.rc4
-rw-r--r--linden/indra/newview/skins/default/textures/cakeisalie.pngbin124929 -> 0 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/ceilingcat.pngbin139515 -> 0 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/easteregg.pngbin395345 -> 0 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/hugs.pngbin204219 -> 0 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/nomnom.pngbin380325 -> 0 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/octopus.pngbin442610 -> 0 bytes
-rw-r--r--linden/indra/newview/skins/default/textures/zombiecat.pngbin334660 -> 0 bytes
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_about.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml5
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml31
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_moap_radar.xml54
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_tools.xml25
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml16
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_login.xml12
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml46
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/notifications.xml12
-rw-r--r--linden/indra/newview/skins/default/xui/zh/notifications.xml18
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py104
-rw-r--r--linden/indra/newview/viewerinfo.cpp3
-rw-r--r--linden/indra/newview/wlfloatermanager.cpp2
-rw-r--r--linden/indra/newview/wlretrievesettings.cpp2
-rw-r--r--linden/indra/test_apps/llplugintest/CMakeLists.txt4
-rwxr-xr-xlinden/install.xml8
-rwxr-xr-xlinden/scripts/install.py49
-rwxr-xr-xlinden/scripts/linux/0-patch-SL-source2
-rwxr-xr-xlinden/scripts/linux/1-get-libraries-from-SL11
-rwxr-xr-xlinden/scripts/linux/3-compile-SL-source27
-rwxr-xr-xlinden/scripts/linux/4-package-viewer11
-rw-r--r--linden/scripts/linux/config-SL-source22
-rwxr-xr-xlinden/scripts/viewer_info.py3
151 files changed, 3470 insertions, 1437 deletions
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index b2532be..55e04c3 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -4,6 +4,97 @@
4 4
5 5
6 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 6 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
7 =- 1.4.0 beta 2 -=
8 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
9
10
11 CHANGES
12
13 This version of Imprudence mostly contains bug fixes, as
14 Imprudence went into a feature freeze in anticipation of an RC
15 release to come later.
16
17
18 IMPROVEMENTS
19
20 * Selective cache clearing: now you can selectively delete
21 different types of disk cache separately.
22
23 BUG FIXES
24
25 Many bug fixes that are listed here -
26
27 http://wiki.kokuaviewer.org/wiki/Imprudence:Release_Notes/1.4.0_Beta_2
28
29
30
31 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
32 =- 1.4.0 beta 1 -=
33 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
34
35 There was very many changes in 1.4.0 beta 1 compared to Imprudence
36 1.3.2, this file only summarizes some of them. A more complete list
37 is here -
38
39 http://wiki.kokuaviewer.org/wiki/Imprudence:Release_Notes/1.4.0_Beta_1
40
41
42 RELEASE HIGHLIGHTS
43
44 Compared to Imprudence 1.3, Imprudence 1.4 adds a mind-blowing
45 number of new features, UI improvements, and bug fixes. We
46 recommend Imprudence 1.3 users also upgrade to Imprudence 1.4
47 soon, unless you require streaming audio support on Mac.
48
49 Here is a brief overview of some of the most notable new features,
50 grouped by category:
51
52 * General: Support for WindLight notecards; Updated Chinese,
53 French, German, and Japanese UIs; Derender object/avatar; Gestures
54 can use more keys; Reload $ Balance; Animation Overrider starts
55 working sooner.
56
57 * Communication: Spell Checking; AutoCorrect; Chat Translation;
58 Chatbar Commands; Display Names support; Highlight chat from
59 friends; Highlight chat mentioning your name or nickname(s);
60 Search bar in Friends and Groups lists.
61
62 * Content Creation: Support for Alpha and Tattoo layers; new Prim
63 Alignment tool; Local Textures (real-time preview of textures on
64 your computer without uploading); Object texture export from SL
65 (with TPVP-compliant permission checks); Upload support for
66 Photoshop PSD image files (available on Mac only); Copy/Paste
67 buttons in Build tools.
68
69 * Login, Grids, and OpenSim: Login name and password saved
70 per-grid; Support for variable sized regions (i.e. bigger than
71 256m) when available; Support for the OpenRegionInfo capability.
72
73 * Map, Radar, and Teleport: Full Radar; Teleport History; Estate
74 Managers’ minimap radar distance is no longer limited; Right
75 clicking objects in Area Object Search to teleport to/cam to/edit
76 them.
77
78 * Media, Browser, and Networking: Media system revamped with
79 SLPlugin; Media Filters; Interaction and zoom with streaming
80 media/webpages; Improved XMLPRC and SOCKS5 proxy support; Parcel
81 media URLs are no longer hidden.
82
83 * Preferences: Reorganized Preferences window; New UI skins (Dark
84 and Gemini); Sliders for draw distance, etc. allow typing in exact
85 values; Search bar in Debug Settings.
86
87 * Texture Loading: Many, many texture loading improvements from
88 Robin Cornelius, Thickbrick Sleaford, and others; Various
89 improvements to help prevent unloaded (cloud) avatars.
90
91 * Development: Many, many, many code improvements and cleanup
92 under the hood. Special thanks to Aleric Inglewood and others for
93 their work on this.
94
95
96
97 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
7 =- 1.3.2 -= 98 =- 1.3.2 -=
8 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 99 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
9 100
diff --git a/linden/etc/message.xml b/linden/etc/message.xml
index 8d34dd8..f86ca8b 100644
--- a/linden/etc/message.xml
+++ b/linden/etc/message.xml
@@ -702,6 +702,12 @@
702 702
703 <key>FetchLib</key> 703 <key>FetchLib</key>
704 <boolean>true</boolean> 704 <boolean>true</boolean>
705
706 <key>ObjectMedia</key>
707 <boolean>false</boolean>
708
709 <key>ObjectMediaNavigate</key>
710 <boolean>false</boolean>
705 </map> 711 </map>
706 712
707 <key>messageBans</key> 713 <key>messageBans</key>
diff --git a/linden/indra/cmake/00-Common.cmake b/linden/indra/cmake/00-Common.cmake
index 81bfbdf..ea21ba0 100644
--- a/linden/indra/cmake/00-Common.cmake
+++ b/linden/indra/cmake/00-Common.cmake
@@ -24,6 +24,11 @@ list(REMOVE_DUPLICATES TYPES)
24set(CMAKE_CONFIGURATION_TYPES ${TYPES} CACHE STRING "Supported build types." FORCE) 24set(CMAKE_CONFIGURATION_TYPES ${TYPES} CACHE STRING "Supported build types." FORCE)
25unset(TYPES) 25unset(TYPES)
26 26
27# Work around nmake / VS difference.
28set(VIEWER_CFG_INTDIR ${CMAKE_CFG_INTDIR})
29if (NMAKE)
30 set(VIEWER_CFG_INTDIR ${CMAKE_BUILD_TYPE})
31endif(NMAKE)
27 32
28# Determine the number of bits of this processor 33# Determine the number of bits of this processor
29 34
diff --git a/linden/indra/develop.py b/linden/indra/develop.py
index 3760609..af633b2 100755
--- a/linden/indra/develop.py
+++ b/linden/indra/develop.py
@@ -408,7 +408,7 @@ class LinuxSetup(UnixSetup):
408 print 'Running %r' % cmd 408 print 'Running %r' % cmd
409 self.run(cmd) 409 self.run(cmd)
410 410
411 411
412class DarwinSetup(UnixSetup): 412class DarwinSetup(UnixSetup):
413 def __init__(self): 413 def __init__(self):
414 super(DarwinSetup, self).__init__() 414 super(DarwinSetup, self).__init__()
@@ -485,6 +485,10 @@ class WindowsSetup(PlatformSetup):
485 'vc100' : { 485 'vc100' : {
486 'gen' : r'Visual Studio 10', 486 'gen' : r'Visual Studio 10',
487 'ver' : r'10.0' 487 'ver' : r'10.0'
488 },
489 'nmake' : {
490 'gen' : r'NMake Makefiles',
491 'ver' : r''
488 } 492 }
489 } 493 }
490 gens['vs2003'] = gens['vc71'] 494 gens['vs2003'] = gens['vc71']
@@ -500,6 +504,41 @@ class WindowsSetup(PlatformSetup):
500 self._generator = None 504 self._generator = None
501 self.incredibuild = False 505 self.incredibuild = False
502 506
507 def find_visual_studio(self, gen=None):
508 if gen is None:
509 gen = self._generator
510 gen = gen.lower()
511 try:
512 import _winreg
513 key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
514 self.gens[gen]['ver'])
515 value_str = (r'EnvironmentDirectory')
516 reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
517 key = _winreg.OpenKey(reg, key_str)
518 value = _winreg.QueryValueEx(key, value_str)[0]
519 print 'Found: %s' % value
520 return value
521 except WindowsError, err:
522 return ''
523
524 def find_visual_studio_express(self, gen=None):
525 if gen is None:
526 gen = self._generator
527 gen = gen.lower()
528 try:
529 import _winreg
530 key_str = (r'SOFTWARE\Microsoft\VCExpress\%s\Setup\VC' %
531 self.gens[gen]['ver'])
532 value_str = (r'ProductDir')
533 reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
534 key = _winreg.OpenKey(reg, key_str)
535 value = _winreg.QueryValueEx(key, value_str)[0]+"vcpackages"
536 print 'Found: %s' % value
537 self.using_express = True
538 return value
539 except WindowsError, err:
540 return ''
541
503 def _get_generator(self): 542 def _get_generator(self):
504 if self._generator is None: 543 if self._generator is None:
505 for version in 'vc80 vc90 vc100 vc71'.split(): 544 for version in 'vc80 vc90 vc100 vc71'.split():
@@ -508,9 +547,8 @@ class WindowsSetup(PlatformSetup):
508 print 'Building with ', self.gens[version]['gen'] 547 print 'Building with ', self.gens[version]['gen']
509 break 548 break
510 else: 549 else:
511 print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions'
512 for version in 'vc80 vc90 vc100 vc71'.split(): 550 for version in 'vc80 vc90 vc100 vc71'.split():
513 if self.find_visual_studio_express(version): 551 if self.find_visual_studio_express(version) != '':
514 self._generator = version 552 self._generator = version
515 self.using_express = True 553 self.using_express = True
516 print 'Building with ', self.gens[version]['gen'] , "Express edition" 554 print 'Building with ', self.gens[version]['gen'] , "Express edition"
@@ -521,6 +559,8 @@ class WindowsSetup(PlatformSetup):
521 return self._generator 559 return self._generator
522 560
523 def _set_generator(self, gen): 561 def _set_generator(self, gen):
562 if gen == 'nmake':
563 self._get_generator()
524 self._generator = gen 564 self._generator = gen
525 565
526 generator = property(_get_generator, _set_generator) 566 generator = property(_get_generator, _set_generator)
@@ -538,83 +578,58 @@ class WindowsSetup(PlatformSetup):
538 opts=quote(opts), 578 opts=quote(opts),
539 standalone=self.standalone, 579 standalone=self.standalone,
540 unattended=self.unattended, 580 unattended=self.unattended,
541 project_name=self.project_name 581 project_name=self.project_name,
582 type=self.build_type,
583 use_vstool='ON',
584 nmake=''
542 ) 585 )
586 if self.generator == 'nmake':
587 args['use_vstool'] = 'OFF'
588 args['nmake'] = '-DNMAKE:BOOL=ON'
589 if self.using_express:
590 args['using_express'] = 'ON'
591 args['use_vstool'] = 'OFF'
592 else:
593 args['using_express'] = 'OFF'
543 # default to packaging disabled 594 # default to packaging disabled
544 # if simple: 595 # if simple:
545 # return 'cmake %(opts)s "%(dir)s"' % args 596 # return 'cmake %(opts)s "%(dir)s"' % args
546 return ('cmake -G "%(generator)s" ' 597 return ('cmake -G "%(generator)s" '
598 '-DCMAKE_BUILD_TYPE:STRING=%(type)s '
547 '-DSTANDALONE:BOOL=%(standalone)s ' 599 '-DSTANDALONE:BOOL=%(standalone)s '
548 '-DUNATTENDED:BOOL=%(unattended)s ' 600 '-DUNATTENDED:BOOL=%(unattended)s '
549 '-DROOT_PROJECT_NAME:STRING=%(project_name)s ' 601 '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
550 #'-DPACKAGE:BOOL=ON ' 602 '-DUSING_EXPRESS:BOOL=%(using_express)s '
603 '-DUSE_VSTOOL:BOOL=%(use_vstool)s '
604 '%(nmake)s '
551 '%(opts)s "%(dir)s"' % args) 605 '%(opts)s "%(dir)s"' % args)
552 606
553 def find_visual_studio(self, gen=None):
554 if gen is None:
555 gen = self._generator
556 gen = gen.lower()
557 try:
558 import _winreg
559 key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
560 self.gens[gen]['ver'])
561 value_str = (r'EnvironmentDirectory')
562 print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
563 (key_str, value_str))
564 print key_str
565
566 reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
567 key = _winreg.OpenKey(reg, key_str)
568 value = _winreg.QueryValueEx(key, value_str)[0]
569 print 'Found: %s' % value
570 return value
571 except WindowsError, err:
572 print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
573 return ''
574
575 def find_visual_studio_express(self, gen=None):
576 if gen is None:
577 gen = self._generator
578 gen = gen.lower()
579 try:
580 import _winreg
581 key_str = (r'SOFTWARE\Microsoft\VCExpress\%s\Setup\VC' %
582 self.gens[gen]['ver'])
583 value_str = (r'ProductDir')
584 print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
585 (key_str, value_str))
586 print key_str
587
588 reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
589 key = _winreg.OpenKey(reg, key_str)
590 value = _winreg.QueryValueEx(key, value_str)[0]+"IDE"
591 print 'Found: %s' % value
592 self.using_express = True
593 return value
594 except WindowsError, err:
595 print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
596 return ''
597
598 def get_build_cmd(self): 607 def get_build_cmd(self):
599 if self.incredibuild: 608 if self.incredibuild:
600 config = self.build_type 609 config = self.build_type
601 if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0', r'10.0', r'7.1' ]: 610 if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0', r'10.0', r'7.1' ]:
602 config = '\"%s|Win32\"' % config 611 config = '\"%s|Win32\"' % config
603
604 return "buildconsole %s.sln /build %s" % (self.project_name, config) 612 return "buildconsole %s.sln /build %s" % (self.project_name, config)
605 613
606 environment = self.find_visual_studio() 614 environment = self.find_visual_studio(self.generator)
607 if environment == '': 615 if environment == '':
608 environment = self.find_visual_studio_express() 616 environment = self.find_visual_studio_express(self.generator)
609 if environment == '': 617 if self.generator != 'nmake':
610 print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?" 618 if environment == '':
611 else: 619 print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?"
612 print >> sys.stderr, "\nSolution generation complete, as you are using an express edition the final\n stages will need to be completed by hand" 620 else:
613 build_dirs=self.build_dirs(); 621 build_dirs=self.build_dirs();
614 print >> sys.stderr, "Solution can now be found in:", build_dirs[0] 622 return("\"\"%s\\vcbuild\" /useenv %s.sln \"%s|win32\"\"" % (environment, self.project_name, self.build_type))
615 print >> sys.stderr, "Set %s as startup project" % self.project_name 623
616 print >> sys.stderr, "Set build target is Release or RelWithDbgInfo" 624 if self.generator == 'nmake':
617 exit(0) 625 # Hack around a bug in cmake that I'm surprised did not hit GUI controlled builds.
626 self.run(r'sed -i "s|\(^RC_FLAGS .* \) /GS .*$|\1|" build-nmake/win_crash_logger/CMakeFiles/windows-crash-logger.dir/flags.make')
627 self.run(r'sed -i "s|\(^RC_FLAGS .* \) /GS .*$|\1|" build-nmake/newview/CMakeFiles/imprudence-bin.dir/flags.make')
628 self.run(r'sed -i "s|\(^RC_FLAGS .* \) /EHsc .*/Zm1000 \($\)|\1\2|" build-nmake/win_crash_logger/CMakeFiles/windows-crash-logger.dir/flags.make')
629 self.run(r'sed -i "s|\(^RC_FLAGS .* \) /EHsc .*/Zm1000 \($\)|\1\2|" build-nmake/newview/CMakeFiles/imprudence-bin.dir/flags.make')
630 # Evil hack.
631 self.run(r'touch newview/touched.bat')
632 return 'nmake'
618 633
619 # devenv.com is CLI friendly, devenv.exe... not so much. 634 # devenv.com is CLI friendly, devenv.exe... not so much.
620 return ('"%sdevenv.com" %s.sln /build %s' % 635 return ('"%sdevenv.com" %s.sln /build %s' %
@@ -634,55 +649,29 @@ class WindowsSetup(PlatformSetup):
634 raise CommandError('the command %r %s' % 649 raise CommandError('the command %r %s' %
635 (name, ret)) 650 (name, ret))
636 651
637 def run_cmake(self, args=[]):
638 '''Override to add the vstool.exe call after running cmake.'''
639 PlatformSetup.run_cmake(self, args)
640 if self.unattended == 'OFF':
641 if self.using_express == False:
642 self.run_vstool()
643
644 def run_vstool(self):
645 for build_dir in self.build_dirs():
646 stamp = os.path.join(build_dir, 'vstool.txt')
647 try:
648 prev_build = open(stamp).read().strip()
649 except IOError:
650 prev_build = ''
651 if prev_build == self.build_type:
652 # Only run vstool if the build type has changed.
653 continue
654 vstool_cmd = (os.path.join('tools','vstool','VSTool.exe') +
655 ' --solution ' +
656 os.path.join(build_dir,'Imprudence.sln') +
657 ' --config ' + self.build_type +
658 ' --startup imprudence-bin')
659 print 'Running %r in %r' % (vstool_cmd, getcwd())
660 self.run(vstool_cmd)
661 print >> open(stamp, 'w'), self.build_type
662
663 def run_build(self, opts, targets): 652 def run_build(self, opts, targets):
664 cwd = getcwd() 653 cwd = getcwd()
665 build_cmd = self.get_build_cmd() 654 build_cmd = self.get_build_cmd()
666 655 if build_cmd != "":
667 for d in self.build_dirs(): 656 for d in self.build_dirs():
668 try: 657 try:
669 os.chdir(d) 658 os.chdir(d)
670 if targets: 659 if targets:
671 for t in targets: 660 for t in targets:
672 cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts)) 661 cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts))
662 print 'Running %r in %r' % (cmd, d)
663 self.run(cmd)
664 else:
665 cmd = '%s %s' % (build_cmd, ' '.join(opts))
673 print 'Running %r in %r' % (cmd, d) 666 print 'Running %r in %r' % (cmd, d)
674 self.run(cmd) 667 self.run(cmd)
675 else: 668 finally:
676 cmd = '%s %s' % (build_cmd, ' '.join(opts)) 669 os.chdir(cwd)
677 print 'Running %r in %r' % (cmd, d) 670
678 self.run(cmd)
679 finally:
680 os.chdir(cwd)
681
682class CygwinSetup(WindowsSetup): 671class CygwinSetup(WindowsSetup):
683 def __init__(self): 672 def __init__(self):
684 super(CygwinSetup, self).__init__() 673 super(CygwinSetup, self).__init__()
685 self.generator = 'vc80' 674 self.generator = 'nmake'
686 675
687 def cmake_commandline(self, src_dir, build_dir, opts, simple): 676 def cmake_commandline(self, src_dir, build_dir, opts, simple):
688 dos_dir = commands.getoutput("cygpath -w %s" % src_dir) 677 dos_dir = commands.getoutput("cygpath -w %s" % src_dir)
@@ -692,11 +681,13 @@ class CygwinSetup(WindowsSetup):
692 opts=quote(opts), 681 opts=quote(opts),
693 standalone=self.standalone, 682 standalone=self.standalone,
694 unattended=self.unattended, 683 unattended=self.unattended,
695 project_name=self.project_name 684 project_name=self.project_name,
685 type=self.build_type
696 ) 686 )
697 #if simple: 687 #if simple:
698 # return 'cmake %(opts)s "%(dir)s"' % args 688 # return 'cmake %(opts)s "%(dir)s"' % args
699 return ('cmake -G "%(generator)s" ' 689 return ('cmake -G "%(generator)s" '
690 '-DCMAKE_BUILD_TYPE:STRING=%(type)s '
700 '-DUNATTENDED:BOOl=%(unattended)s ' 691 '-DUNATTENDED:BOOl=%(unattended)s '
701 '-DSTANDALONE:BOOL=%(standalone)s ' 692 '-DSTANDALONE:BOOL=%(standalone)s '
702 '-DROOT_PROJECT_NAME:STRING=%(project_name)s ' 693 '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
@@ -723,7 +714,7 @@ Options:
723 -m32 | -m64 build architecture (32-bit or 64-bit) 714 -m32 | -m64 build architecture (32-bit or 64-bit)
724 -N | --no-distcc disable use of distcc 715 -N | --no-distcc disable use of distcc
725 -G | --generator=NAME generator name 716 -G | --generator=NAME generator name
726 Windows: VC80 (VS2005--default), VC71 (VS2003), 717 Windows: NMake, VC80 (VS2005--default), VC71 (VS2003),
727 VC90 (VS2008), or VC100 (VS2010) 718 VC90 (VS2008), or VC100 (VS2010)
728 Mac OS X: Xcode (default), Unix Makefiles 719 Mac OS X: Xcode (default), Unix Makefiles
729 Linux: Unix Makefiles (default), KDevelop3 720 Linux: Unix Makefiles (default), KDevelop3
@@ -806,7 +797,6 @@ For example: develop.py configure -DSERVER:BOOL=OFF"""
806 for d in setup.build_dirs(): 797 for d in setup.build_dirs():
807 if not os.path.exists(d): 798 if not os.path.exists(d):
808 raise CommandError('run "develop.py cmake" first') 799 raise CommandError('run "develop.py cmake" first')
809 setup.run_cmake()
810 opts, targets = setup.parse_build_opts(args) 800 opts, targets = setup.parse_build_opts(args)
811 setup.run_build(opts, targets) 801 setup.run_build(opts, targets)
812 elif cmd == 'clean': 802 elif cmd == 'clean':
diff --git a/linden/indra/llcommon/llsdserialize.cpp b/linden/indra/llcommon/llsdserialize.cpp
index e2be922..f648c5c 100644
--- a/linden/indra/llcommon/llsdserialize.cpp
+++ b/linden/indra/llcommon/llsdserialize.cpp
@@ -1447,9 +1447,12 @@ S32 LLSDBinaryFormatter::format(const LLSD& data, std::ostream& ostr, U32 option
1447 } 1447 }
1448 1448
1449 case LLSD::TypeUUID: 1449 case LLSD::TypeUUID:
1450 {
1450 ostr.put('u'); 1451 ostr.put('u');
1451 ostr.write((const char*)(&(data.asUUID().mData)), UUID_BYTES); 1452 U8 *value = data.asUUID().mData;
1453 ostr.write((const char*)(&value), UUID_BYTES);
1452 break; 1454 break;
1455 }
1453 1456
1454 case LLSD::TypeString: 1457 case LLSD::TypeString:
1455 ostr.put('s'); 1458 ostr.put('s');
diff --git a/linden/indra/llmath/llsdutil_math.cpp b/linden/indra/llmath/llsdutil_math.cpp
index 073cb2e..8ec8661 100644
--- a/linden/indra/llmath/llsdutil_math.cpp
+++ b/linden/indra/llmath/llsdutil_math.cpp
@@ -6,7 +6,7 @@
6 * 6 *
7 * $LicenseInfo:firstyear=2006&license=viewergpl$ 7 * $LicenseInfo:firstyear=2006&license=viewergpl$
8 * 8 *
9 * Copyright (c) 2006-2009, Linden Research, Inc. 9 * Copyright (c) 2006-2010, Linden Research, Inc.
10 * 10 *
11 * Second Life Viewer Source Code 11 * Second Life Viewer Source Code
12 * The source code in this file ("Source Code") is provided by Linden Lab 12 * The source code in this file ("Source Code") is provided by Linden Lab
@@ -14,13 +14,13 @@
14 * ("GPL"), unless you have obtained a separate licensing agreement 14 * ("GPL"), unless you have obtained a separate licensing agreement
15 * ("Other License"), formally executed by you and Linden Lab. Terms of 15 * ("Other License"), formally executed by you and Linden Lab. Terms of
16 * the GPL can be found in doc/GPL-license.txt in this distribution, or 16 * the GPL can be found in doc/GPL-license.txt in this distribution, or
17 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 17 * online at http://secondlife.com/developers/opensource/gplv2
18 * 18 *
19 * There are special exceptions to the terms and conditions of the GPL as 19 * There are special exceptions to the terms and conditions of the GPL as
20 * it is applied to this Source Code. View the full text of the exception 20 * it is applied to this Source Code. View the full text of the exception
21 * in the file doc/FLOSS-exception.txt in this software distribution, or 21 * in the file doc/FLOSS-exception.txt in this software distribution, or
22 * online at 22 * online at
23 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 23 * http://secondlife.com/developers/opensource/flossexception
24 * 24 *
25 * By copying, modifying or distributing this software, you acknowledge 25 * By copying, modifying or distributing this software, you acknowledge
26 * that you have read and understood your obligations described above, 26 * that you have read and understood your obligations described above,
@@ -30,11 +30,12 @@
30 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 30 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
31 * COMPLETENESS OR PERFORMANCE. 31 * COMPLETENESS OR PERFORMANCE.
32 * $/LicenseInfo$ 32 * $/LicenseInfo$
33 *
33 */ 34 */
34 35
35#include "linden_common.h" 36#include "linden_common.h"
36 37
37#include "llsdutil.h" 38#include "llsdutil_math.h"
38 39
39#include "v3math.h" 40#include "v3math.h"
40#include "v4math.h" 41#include "v4math.h"
@@ -165,9 +166,6 @@ LLSD ll_sd_from_color4(const LLColor4& c)
165LLColor4 ll_color4_from_sd(const LLSD& sd) 166LLColor4 ll_color4_from_sd(const LLSD& sd)
166{ 167{
167 LLColor4 c; 168 LLColor4 c;
168 c.mV[0] = (F32)sd[0].asReal(); 169 c.setValue(sd);
169 c.mV[1] = (F32)sd[1].asReal();
170 c.mV[2] = (F32)sd[2].asReal();
171 c.mV[3] = (F32)sd[3].asReal();
172 return c; 170 return c;
173} 171}
diff --git a/linden/indra/llmath/llvolume.cpp b/linden/indra/llmath/llvolume.cpp
index 618048c..9dc3746 100644
--- a/linden/indra/llmath/llvolume.cpp
+++ b/linden/indra/llmath/llvolume.cpp
@@ -4437,14 +4437,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
4437 const std::vector<LLVector3>& profile = volume->getProfile().mProfile; 4437 const std::vector<LLVector3>& profile = volume->getProfile().mProfile;
4438 S32 max_s = volume->getProfile().getTotal(); 4438 S32 max_s = volume->getProfile().getTotal();
4439 S32 max_t = volume->getPath().mPath.size(); 4439 S32 max_t = volume->getPath().mPath.size();
4440 4440 S32 grid_size = (profile.size() - 1) / 4;
4441 // S32 i;
4442 S32 num_vertices = 0, num_indices = 0;
4443 S32 grid_size = (profile.size()-1)/4;
4444 S32 quad_count = (grid_size * grid_size);
4445
4446 num_vertices = (grid_size+1)*(grid_size+1);
4447 num_indices = quad_count * 4;
4448 4441
4449 LLVector3& min = mExtents[0]; 4442 LLVector3& min = mExtents[0];
4450 LLVector3& max = mExtents[1]; 4443 LLVector3& max = mExtents[1];
diff --git a/linden/indra/llmessage/llhttpassetstorage.cpp b/linden/indra/llmessage/llhttpassetstorage.cpp
index 49dbdbd..fcdb354 100644
--- a/linden/indra/llmessage/llhttpassetstorage.cpp
+++ b/linden/indra/llmessage/llhttpassetstorage.cpp
@@ -743,7 +743,8 @@ LLAssetRequest* LLHTTPAssetStorage::findNextRequest(LLAssetStorage::request_list
743 request_list_t::iterator running_end = running.end(); 743 request_list_t::iterator running_end = running.end();
744 744
745 request_list_t::iterator pending_iter = pending.begin(); 745 request_list_t::iterator pending_iter = pending.begin();
746 request_list_t::iterator pending_end = pending.end(); 746 // 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.
747 //request_list_t::iterator pending_end = pending.end();
747 // Loop over all pending requests until we miss finding it in the running list. 748 // Loop over all pending requests until we miss finding it in the running list.
748 for (; pending_iter != pending.end(); ++pending_iter) 749 for (; pending_iter != pending.end(); ++pending_iter)
749 { 750 {
diff --git a/linden/indra/llplugin/slplugin/CMakeLists.txt b/linden/indra/llplugin/slplugin/CMakeLists.txt
index 81d9299..f794dae 100755
--- a/linden/indra/llplugin/slplugin/CMakeLists.txt
+++ b/linden/indra/llplugin/slplugin/CMakeLists.txt
@@ -75,7 +75,7 @@ if (DARWIN)
75 COMMAND mkdir 75 COMMAND mkdir
76 ARGS 76 ARGS
77 -p 77 -p
78 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/SLPlugin.app/Contents/Resources 78 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/SLPlugin.app/Contents/Resources
79 ) 79 )
80endif (DARWIN) 80endif (DARWIN)
81 81
diff --git a/linden/indra/llprimitive/llmaterialtable.cpp b/linden/indra/llprimitive/llmaterialtable.cpp
index 7dd764e..f06bfe8 100755
--- a/linden/indra/llprimitive/llmaterialtable.cpp
+++ b/linden/indra/llprimitive/llmaterialtable.cpp
@@ -40,16 +40,6 @@
40 40
41LLMaterialTable LLMaterialTable::basic(1); 41LLMaterialTable LLMaterialTable::basic(1);
42 42
43// Material UUIDs.
44LLUUID const LL_DEFAULT_STONE_UUID("87c5765b-aa26-43eb-b8c6-c09a1ca6208e");
45LLUUID const LL_DEFAULT_METAL_UUID("6f3c53e9-ba60-4010-8f3e-30f51a762476");
46LLUUID const LL_DEFAULT_GLASS_UUID("b4ba225c-373f-446d-9f7e-6cb7b5cf9b3d");
47LLUUID const LL_DEFAULT_WOOD_UUID("89556747-24cb-43ed-920b-47caed15465f");
48LLUUID const LL_DEFAULT_FLESH_UUID("80736669-e4b9-450e-8890-d5169f988a50");
49LLUUID const LL_DEFAULT_PLASTIC_UUID("304fcb4e-7d33-4339-ba80-76d3d22dc11a");
50LLUUID const LL_DEFAULT_RUBBER_UUID("9fae0bc5-666d-477e-9f70-84e8556ec867");
51LLUUID const LL_DEFAULT_LIGHT_UUID("00000000-0000-0000-0000-000000000000");
52
53/* 43/*
54 Old Havok 1 constants 44 Old Havok 1 constants
55 45
diff --git a/linden/indra/llrender/llfont.cpp b/linden/indra/llrender/llfont.cpp
index 5ee3929..1cad593 100644
--- a/linden/indra/llrender/llfont.cpp
+++ b/linden/indra/llrender/llfont.cpp
@@ -535,6 +535,8 @@ void LLFont::renderGlyph(const U32 glyph_index) const
535 int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_DEFAULT ); 535 int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_DEFAULT );
536 llassert(!error); 536 llassert(!error);
537 537
538 // Work around the compiler warning about error not being used when llassert() is compiled out.
539 error = error + 0;
538 error = FT_Render_Glyph(mFTFace->glyph, gFontRenderMode); 540 error = FT_Render_Glyph(mFTFace->glyph, gFontRenderMode);
539 541
540 mRenderGlyphCount++; 542 mRenderGlyphCount++;
diff --git a/linden/indra/llrender/llgl.cpp b/linden/indra/llrender/llgl.cpp
index 4a4ff1b..b57a562 100644
--- a/linden/indra/llrender/llgl.cpp
+++ b/linden/indra/llrender/llgl.cpp
@@ -383,11 +383,10 @@ bool LLGLManager::initGL()
383 if (mGLVendor.substr(0,4) == "ATI ") 383 if (mGLVendor.substr(0,4) == "ATI ")
384 { 384 {
385 mGLVendorShort = "ATI"; 385 mGLVendorShort = "ATI";
386 BOOL mobile = FALSE; 386 // This is not used anywhere.
387 if (mGLRenderer.find("MOBILITY") != std::string::npos) 387 //BOOL mobile = FALSE;
388 { 388 //if (mGLRenderer.find("MOBILITY") != std::string::npos)
389 mobile = TRUE; 389 // mobile = TRUE;
390 }
391 mIsATI = TRUE; 390 mIsATI = TRUE;
392 391
393#if LL_WINDOWS && !LL_MESA_HEADLESS 392#if LL_WINDOWS && !LL_MESA_HEADLESS
@@ -1014,8 +1013,8 @@ void assert_glerror()
1014void clear_glerror() 1013void clear_glerror()
1015{ 1014{
1016 // Create or update texture to be used with this data 1015 // Create or update texture to be used with this data
1017 GLenum error; 1016 //GLenum error;
1018 error = glGetError(); 1017 /*error =*/ glGetError();
1019} 1018}
1020 1019
1021/////////////////////////////////////////////////////////////// 1020///////////////////////////////////////////////////////////////
diff --git a/linden/indra/llrender/llimagegl.cpp b/linden/indra/llrender/llimagegl.cpp
index c63d7ad..f99d4a9 100644
--- a/linden/indra/llrender/llimagegl.cpp
+++ b/linden/indra/llrender/llimagegl.cpp
@@ -711,7 +711,9 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
711 { 711 {
712 S32 bytes = w * h * mComponents; 712 S32 bytes = w * h * mComponents;
713 llassert(prev_mip_data); 713 llassert(prev_mip_data);
714 llassert(prev_mip_size == bytes*4); 714 llassert(prev_mip_size == (bytes*4));
715 // Work around llassert() being compiled out and prev_mip_size not otherwise being used.
716 prev_mip_size = prev_mip_size + 0;
715 U8* new_data = new U8[bytes]; 717 U8* new_data = new U8[bytes];
716 llassert_always(new_data); 718 llassert_always(new_data);
717 LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents); 719 LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents);
diff --git a/linden/indra/llui/llfloater.cpp b/linden/indra/llui/llfloater.cpp
index 58c717a..4c4aeaf 100644
--- a/linden/indra/llui/llfloater.cpp
+++ b/linden/indra/llui/llfloater.cpp
@@ -277,30 +277,14 @@ void LLFloater::initFloater(const std::string& title,
277 mMinimized = FALSE; 277 mMinimized = FALSE;
278 mExpandedRect.set(0,0,0,0); 278 mExpandedRect.set(0,0,0,0);
279 279
280 S32 close_pad; // space to the right of close box
281 S32 close_box_size; // For layout purposes, how big is the close box? 280 S32 close_box_size; // For layout purposes, how big is the close box?
282 if (close_btn) 281 if (close_btn)
283 { 282 {
284 close_box_size = LLFLOATER_CLOSE_BOX_SIZE; 283 close_box_size = LLFLOATER_CLOSE_BOX_SIZE;
285 close_pad = 0;
286 } 284 }
287 else 285 else
288 { 286 {
289 close_box_size = 0; 287 close_box_size = 0;
290 close_pad = 0;
291 }
292
293 S32 minimize_box_size;
294 S32 minimize_pad;
295 if (minimizable && !drag_on_left)
296 {
297 minimize_box_size = LLFLOATER_CLOSE_BOX_SIZE;
298 minimize_pad = 0;
299 }
300 else
301 {
302 minimize_box_size = 0;
303 minimize_pad = 0;
304 } 288 }
305 289
306 // Drag Handle 290 // Drag Handle
diff --git a/linden/indra/llui/llfunctorregistry.h b/linden/indra/llui/llfunctorregistry.h
index 8864f7a..7c03f2f 100644
--- a/linden/indra/llui/llfunctorregistry.h
+++ b/linden/indra/llui/llfunctorregistry.h
@@ -75,7 +75,6 @@ public:
75 bool registerFunctor(const std::string& name, ResponseFunctor f) 75 bool registerFunctor(const std::string& name, ResponseFunctor f)
76 { 76 {
77 bool retval = true; 77 bool retval = true;
78 typename FunctorMap::iterator it = mMap.find(name);
79 if (mMap.count(name) == 0) 78 if (mMap.count(name) == 0)
80 { 79 {
81 mMap[name] = f; 80 mMap[name] = f;
@@ -102,7 +101,6 @@ public:
102 101
103 FUNCTOR_TYPE getFunctor(const std::string& name) 102 FUNCTOR_TYPE getFunctor(const std::string& name)
104 { 103 {
105 typename FunctorMap::iterator it = mMap.find(name);
106 if (mMap.count(name) != 0) 104 if (mMap.count(name) != 0)
107 { 105 {
108 return mMap[name]; 106 return mMap[name];
diff --git a/linden/indra/llui/llkeywords.cpp b/linden/indra/llui/llkeywords.cpp
index 93da44c..a50dbff 100644
--- a/linden/indra/llui/llkeywords.cpp
+++ b/linden/indra/llui/llkeywords.cpp
@@ -288,7 +288,6 @@ void LLKeywords::findSegments(std::vector<LLTextSegment *>* seg_list, const LLWS
288 288
289 const llwchar* base = wtext.c_str(); 289 const llwchar* base = wtext.c_str();
290 const llwchar* cur = base; 290 const llwchar* cur = base;
291 const llwchar* line = NULL;
292 291
293 while( *cur ) 292 while( *cur )
294 { 293 {
@@ -304,7 +303,6 @@ void LLKeywords::findSegments(std::vector<LLTextSegment *>* seg_list, const LLWS
304 } 303 }
305 304
306 // Start of a new line 305 // Start of a new line
307 line = cur;
308 306
309 // Skip white space 307 // Skip white space
310 while( *cur && isspace(*cur) && (*cur != '\n') ) 308 while( *cur && isspace(*cur) && (*cur != '\n') )
diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp
index 2d4a2f1..6850891 100644
--- a/linden/indra/llui/llmenugl.cpp
+++ b/linden/indra/llui/llmenugl.cpp
@@ -3095,8 +3095,6 @@ void LLMenuGL::draw( void )
3095 LLUI::sConfigGroup->getS32("DropShadowFloater") ); 3095 LLUI::sConfigGroup->getS32("DropShadowFloater") );
3096 } 3096 }
3097 3097
3098 LLColor4 bg_color = mBackgroundColor;
3099
3100 if( mBgVisible ) 3098 if( mBgVisible )
3101 { 3099 {
3102 gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0, mBackgroundColor ); 3100 gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0, mBackgroundColor );
diff --git a/linden/indra/llui/llpanel.cpp b/linden/indra/llui/llpanel.cpp
index 07e78ed..361e4f3 100644
--- a/linden/indra/llui/llpanel.cpp
+++ b/linden/indra/llui/llpanel.cpp
@@ -1078,7 +1078,6 @@ struct LLLayoutStack::LLEmbeddedPanel
1078 mVisibleAmt(1.f) // default to fully visible 1078 mVisibleAmt(1.f) // default to fully visible
1079 { 1079 {
1080 LLResizeBar::Side side = (orientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM; 1080 LLResizeBar::Side side = (orientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
1081 LLRect resize_bar_rect = panelp->getRect();
1082 1081
1083 S32 min_dim; 1082 S32 min_dim;
1084 if (orientation == HORIZONTAL) 1083 if (orientation == HORIZONTAL)
diff --git a/linden/indra/llui/llprogressbar.cpp b/linden/indra/llui/llprogressbar.cpp
index d148733..0000d77 100644
--- a/linden/indra/llui/llprogressbar.cpp
+++ b/linden/indra/llui/llprogressbar.cpp
@@ -83,9 +83,6 @@ void LLProgressBar::draw()
83 bar_bg_imagep->draw(getLocalRect(), 83 bar_bg_imagep->draw(getLocalRect(),
84 background_color); 84 background_color);
85 85
86 F32 alpha = 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32()));
87 LLColor4 bar_color = LLUI::sColorsGroup->getColor("LoginProgressBarFgColor");
88 bar_color.mV[3] = alpha;
89 LLRect progress_rect = getLocalRect(); 86 LLRect progress_rect = getLocalRect();
90 progress_rect.mRight = llround(getRect().getWidth() * (mPercentDone / 100.f)); 87 progress_rect.mRight = llround(getRect().getWidth() * (mPercentDone / 100.f));
91 bar_fg_imagep->draw(progress_rect); 88 bar_fg_imagep->draw(progress_rect);
diff --git a/linden/indra/llui/llslider.cpp b/linden/indra/llui/llslider.cpp
index 5c17baa..c8f5935 100644
--- a/linden/indra/llui/llslider.cpp
+++ b/linden/indra/llui/llslider.cpp
@@ -283,7 +283,6 @@ void LLSlider::draw()
283 283
284 F32 opacity = getEnabled() ? 1.f : 0.3f; 284 F32 opacity = getEnabled() ? 1.f : 0.3f;
285 LLColor4 center_color = (mThumbCenterColor % opacity); 285 LLColor4 center_color = (mThumbCenterColor % opacity);
286 LLColor4 track_color = (mTrackColor % opacity);
287 286
288 // Track 287 // Track
289 LLRect track_rect(mThumbImage->getWidth() / 2, 288 LLRect track_rect(mThumbImage->getWidth() / 2,
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index c8ca5bf..1c12ff3 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -3077,7 +3077,6 @@ void LLTextEditor::drawSelectionBackground()
3077 S32 selection_right_x = mTextRect.mRight; 3077 S32 selection_right_x = mTextRect.mRight;
3078 S32 selection_right_y = mTextRect.mBottom; 3078 S32 selection_right_y = mTextRect.mBottom;
3079 3079
3080 BOOL selection_left_visible = FALSE;
3081 BOOL selection_right_visible = FALSE; 3080 BOOL selection_right_visible = FALSE;
3082 3081
3083 // Skip through the lines we aren't drawing. 3082 // Skip through the lines we aren't drawing.
@@ -3085,7 +3084,6 @@ void LLTextEditor::drawSelectionBackground()
3085 3084
3086 S32 left_line_num = cur_line; 3085 S32 left_line_num = cur_line;
3087 S32 num_lines = getLineCount(); 3086 S32 num_lines = getLineCount();
3088 S32 right_line_num = num_lines - 1;
3089 3087
3090 S32 line_start = -1; 3088 S32 line_start = -1;
3091 if (cur_line >= num_lines) 3089 if (cur_line >= num_lines)
@@ -3119,13 +3117,11 @@ void LLTextEditor::drawSelectionBackground()
3119 if( line_start <= selection_left && selection_left <= line_end ) 3117 if( line_start <= selection_left && selection_left <= line_end )
3120 { 3118 {
3121 left_line_num = cur_line; 3119 left_line_num = cur_line;
3122 selection_left_visible = TRUE;
3123 selection_left_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_left - line_start, mAllowEmbeddedItems); 3120 selection_left_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_left - line_start, mAllowEmbeddedItems);
3124 selection_left_y = text_y; 3121 selection_left_y = text_y;
3125 } 3122 }
3126 if( line_start <= selection_right && selection_right <= line_end ) 3123 if( line_start <= selection_right && selection_right <= line_end )
3127 { 3124 {
3128 right_line_num = cur_line;
3129 selection_right_visible = TRUE; 3125 selection_right_visible = TRUE;
3130 selection_right_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_right - line_start, mAllowEmbeddedItems); 3126 selection_right_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_right - line_start, mAllowEmbeddedItems);
3131 if (selection_right == line_end) 3127 if (selection_right == line_end)
diff --git a/linden/indra/llui/llui.h b/linden/indra/llui/llui.h
index ebcc730..466d2c7 100644
--- a/linden/indra/llui/llui.h
+++ b/linden/indra/llui/llui.h
@@ -706,10 +706,12 @@ public:
706 706
707 // this avoids a MSVC bug where non-referenced static members are "optimized" away 707 // this avoids a MSVC bug where non-referenced static members are "optimized" away
708 // even if their constructors have side effects 708 // even if their constructors have side effects
709 // Then we avoid a compiler warning that dummy is never used. lol
709 void reference() 710 void reference()
710 { 711 {
711 S32 dummy; 712 S32 dummy;
712 dummy = 0; 713 dummy = 0;
714 dummy = dummy + 0;
713 } 715 }
714}; 716};
715 717
diff --git a/linden/indra/llwindow/GL/glh_extensions.h b/linden/indra/llwindow/GL/glh_extensions.h
index 5b149c9..ce2865b 100644
--- a/linden/indra/llwindow/GL/glh_extensions.h
+++ b/linden/indra/llwindow/GL/glh_extensions.h
@@ -111,7 +111,9 @@ static const char* EatNonWhiteSpace(const char *str)
111int glh_init_extensions(const char *origReqExts) 111int glh_init_extensions(const char *origReqExts)
112{ 112{
113 // Length of requested extensions string 113 // Length of requested extensions string
114 /*
114 unsigned reqExtsLen; 115 unsigned reqExtsLen;
116 */
115 char *reqExts; 117 char *reqExts;
116 // Ptr for individual extensions within reqExts 118 // Ptr for individual extensions within reqExts
117 char *reqExt; 119 char *reqExt;
@@ -153,8 +155,8 @@ int glh_init_extensions(const char *origReqExts)
153 return TRUE; 155 return TRUE;
154 } 156 }
155 reqExts = strdup(origReqExts); 157 reqExts = strdup(origReqExts);
156 reqExtsLen = (S32)strlen(reqExts);
157 /* 158 /*
159 reqExtsLen = (S32)strlen(reqExts);
158 if (NULL == gGLHExts.mUnsupportedExts) 160 if (NULL == gGLHExts.mUnsupportedExts)
159 { 161 {
160 gGLHExts.mUnsupportedExts = (char*)malloc(reqExtsLen + 1); 162 gGLHExts.mUnsupportedExts = (char*)malloc(reqExtsLen + 1);
diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp
index 2f9de6b..69ec3b3 100644
--- a/linden/indra/llwindow/llwindowsdl.cpp
+++ b/linden/indra/llwindow/llwindowsdl.cpp
@@ -2521,9 +2521,10 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
2521 sortpat = FcNameParse((FcChar8*) sort_order.c_str()); 2521 sortpat = FcNameParse((FcChar8*) sort_order.c_str());
2522 if (sortpat) 2522 if (sortpat)
2523 { 2523 {
2524 FcResult dummyResult;
2524 // Sort the list of system fonts from most-to-least-desirable. 2525 // Sort the list of system fonts from most-to-least-desirable.
2525 fs = FcFontSort(NULL, sortpat, elide_unicode_coverage, 2526 fs = FcFontSort(NULL, sortpat, elide_unicode_coverage,
2526 NULL, NULL); 2527 NULL, &dummyResult);
2527 FcPatternDestroy(sortpat); 2528 FcPatternDestroy(sortpat);
2528 } 2529 }
2529 2530
diff --git a/linden/indra/lscript/lscript_compile/CMakeLists.txt b/linden/indra/lscript/lscript_compile/CMakeLists.txt
index 252085b..f6d5212 100644
--- a/linden/indra/lscript/lscript_compile/CMakeLists.txt
+++ b/linden/indra/lscript/lscript_compile/CMakeLists.txt
@@ -103,7 +103,7 @@ if (WINDOWS)
103 PROPERTIES COMPILE_FLAGS /DYY_NO_UNISTD_H) 103 PROPERTIES COMPILE_FLAGS /DYY_NO_UNISTD_H)
104endif (WINDOWS) 104endif (WINDOWS)
105 105
106if (WINDOWS) 106if (WINDOWS AND NOT CYGWIN)
107 get_filename_component(M4_PATH ${M4} PATH) 107 get_filename_component(M4_PATH ${M4} PATH)
108 add_custom_command( 108 add_custom_command(
109 OUTPUT 109 OUTPUT
@@ -118,7 +118,7 @@ if (WINDOWS)
118 ${CMAKE_CURRENT_SOURCE_DIR}/indra.y 118 ${CMAKE_CURRENT_SOURCE_DIR}/indra.y
119 ) 119 )
120 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/windows) 120 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/windows)
121else (WINDOWS) 121else (WINDOWS AND NOT CYGWIN)
122 add_custom_command( 122 add_custom_command(
123 OUTPUT 123 OUTPUT
124 ${CMAKE_CURRENT_BINARY_DIR}/indra.y.cpp 124 ${CMAKE_CURRENT_BINARY_DIR}/indra.y.cpp
@@ -131,7 +131,7 @@ else (WINDOWS)
131 DEPENDS 131 DEPENDS
132 ${CMAKE_CURRENT_SOURCE_DIR}/indra.y 132 ${CMAKE_CURRENT_SOURCE_DIR}/indra.y
133 ) 133 )
134endif (WINDOWS) 134endif (WINDOWS AND NOT CYGWIN)
135 135
136if (DARWIN) 136if (DARWIN)
137 # Mac OS X 10.4 compatibility 137 # Mac OS X 10.4 compatibility
diff --git a/linden/indra/lscript/lscript_compile/indra.l b/linden/indra/lscript/lscript_compile/indra.l
index 584087e..7f4cdc5 100644
--- a/linden/indra/lscript/lscript_compile/indra.l
+++ b/linden/indra/lscript/lscript_compile/indra.l
@@ -53,9 +53,16 @@ void parse_string();
53#define ECHO do { } while (0) 53#define ECHO do { } while (0)
54 54
55#if defined(__cplusplus) 55#if defined(__cplusplus)
56extern "C" { int yylex( void ); } 56extern "C" {
57extern "C" { int yyparse( void ); } 57#endif
58extern "C" { int yyerror(const char *fmt, ...); } 58int yyerror(const char *fmt, ...);
59int yylex( void );
60// Windows defines this in indra.y.hpp, which is included above, and defines it differently.
61#ifndef LL_WINDOWS
62int yyparse( void );
63#endif
64#if defined(__cplusplus)
65}
59#endif 66#endif
60 67
61%} 68%}
@@ -722,9 +729,6 @@ L?\"(\\.|[^\\"])*\" { parse_string(); count(); return(STRING_CONSTANT); }
722LLScriptAllocationManager *gAllocationManager; 729LLScriptAllocationManager *gAllocationManager;
723LLScriptScript *gScriptp; 730LLScriptScript *gScriptp;
724 731
725// Prototype for the yacc parser entry point
726int yyparse(void);
727
728int yyerror(const char *fmt, ...) 732int yyerror(const char *fmt, ...)
729{ 733{
730 gErrorToText.writeError(yyout, gLine, gColumn, LSERROR_SYNTAX_ERROR); 734 gErrorToText.writeError(yyout, gLine, gColumn, LSERROR_SYNTAX_ERROR);
@@ -760,7 +764,13 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename,
760 764
761 yyrestart(yyin); 765 yyrestart(yyin);
762 766
763 b_parse_ok = !yyparse(); 767// TODO - Try to fix this, but for now, no compiling LSL for Windows in SL.
768// Actually, this seems to not actually be needed anymore?
769// 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?
770// If that's the case, we don't need any of this stuff.
771#ifndef LL_WINDOWS
772// b_parse_ok = !yyparse();
773#endif
764 774
765 if (b_parse_ok) 775 if (b_parse_ok)
766 { 776 {
diff --git a/linden/indra/lscript/lscript_execute/lscript_execute.cpp b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
index b2b54cd..7af407f 100644
--- a/linden/indra/lscript/lscript_execute/lscript_execute.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
@@ -809,16 +809,7 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,
809 // is there a fault? 809 // is there a fault?
810 // if yes, print out message and exit 810 // if yes, print out message and exit
811 S32 value = getVersion(); 811 S32 value = getVersion();
812 S32 major_version = 0; 812 if ((value != LSL2_VERSION1_END_NUMBER) && (value != LSL2_VERSION_NUMBER))
813 if (value == LSL2_VERSION1_END_NUMBER)
814 {
815 major_version = 1;
816 }
817 else if (value == LSL2_VERSION_NUMBER)
818 {
819 major_version = 2;
820 }
821 else
822 { 813 {
823 setFault(LSRF_VERSION_MISMATCH); 814 setFault(LSRF_VERSION_MISMATCH);
824 } 815 }
diff --git a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
index 3b10cc6..05eb826 100644
--- a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
@@ -150,7 +150,9 @@ void LLScriptLSOParse::printGlobals(LLFILE *fp)
150 150
151 // get offset to skip past name 151 // get offset to skip past name
152 varoffset = global_v_offset; 152 varoffset = global_v_offset;
153 // 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?
153 offset = bytestream2integer(mRawData, global_v_offset); 154 offset = bytestream2integer(mRawData, global_v_offset);
155 offset = offset + 0;
154 156
155 // get typeexport 157 // get typeexport
156 type = *(mRawData + global_v_offset++); 158 type = *(mRawData + global_v_offset++);
@@ -268,8 +270,6 @@ void LLScriptLSOParse::printGlobalFunctions(LLFILE *fp)
268 fprintf(fp, "[Function #%d] [0x%X] %s\n", function_number, orig_function_offset, name); 270 fprintf(fp, "[Function #%d] [0x%X] %s\n", function_number, orig_function_offset, name);
269 fprintf(fp, "\tReturn Type: %s\n", LSCRIPTTypeNames[type]); 271 fprintf(fp, "\tReturn Type: %s\n", LSCRIPTTypeNames[type]);
270 type = *(mRawData + function_offset++); 272 type = *(mRawData + function_offset++);
271 S32 params;
272 params = 0;
273 S32 pcount = 0; 273 S32 pcount = 0;
274 while (type) 274 while (type)
275 { 275 {
@@ -362,7 +362,9 @@ void LLScriptLSOParse::printStates(LLFILE *fp)
362 if (event_handlers & LSCRIPTStateBitField[k]) 362 if (event_handlers & LSCRIPTStateBitField[k])
363 { 363 {
364 temp_end = bytestream2integer(mRawData, read_ahead); 364 temp_end = bytestream2integer(mRawData, read_ahead);
365 // 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.
365 dummy = bytestream2integer(mRawData, read_ahead); 366 dummy = bytestream2integer(mRawData, read_ahead);
367 dummy = dummy + 0;
366 if ( (temp_end < opcode_end) 368 if ( (temp_end < opcode_end)
367 &&(temp_end > event_offset)) 369 &&(temp_end > event_offset))
368 { 370 {
diff --git a/linden/indra/mac_crash_logger/CMakeLists.txt b/linden/indra/mac_crash_logger/CMakeLists.txt
index daf3e10..ee1dc93 100644
--- a/linden/indra/mac_crash_logger/CMakeLists.txt
+++ b/linden/indra/mac_crash_logger/CMakeLists.txt
@@ -71,6 +71,6 @@ add_custom_command(
71 -E 71 -E
72 copy_directory 72 copy_directory
73 ${CMAKE_CURRENT_SOURCE_DIR}/CrashReporter.nib 73 ${CMAKE_CURRENT_SOURCE_DIR}/CrashReporter.nib
74 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib 74 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib
75 ) 75 )
76 76
diff --git a/linden/indra/mac_updater/CMakeLists.txt b/linden/indra/mac_updater/CMakeLists.txt
index 0eac76f..5ae7dd8 100644
--- a/linden/indra/mac_updater/CMakeLists.txt
+++ b/linden/indra/mac_updater/CMakeLists.txt
@@ -74,6 +74,6 @@ add_custom_command(
74 -E 74 -E
75 copy_directory 75 copy_directory
76 ${CMAKE_CURRENT_SOURCE_DIR}/AutoUpdater.nib 76 ${CMAKE_CURRENT_SOURCE_DIR}/AutoUpdater.nib
77 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib 77 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib
78 ) 78 )
79 79
diff --git a/linden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp b/linden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
index e194bf7..49bf6f9 100755
--- a/linden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
+++ b/linden/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
@@ -312,12 +312,9 @@ gst_slvideo_set_caps (GstBaseSink * bsink, GstCaps * caps)
312static gboolean 312static gboolean
313gst_slvideo_start (GstBaseSink * bsink) 313gst_slvideo_start (GstBaseSink * bsink)
314{ 314{
315 GstSLVideo *slvideo; 315 GST_SLVIDEO(bsink);
316 gboolean ret = TRUE;
317
318 slvideo = GST_SLVIDEO(bsink);
319 316
320 return ret; 317 return TRUE;
321} 318}
322 319
323static gboolean 320static gboolean
diff --git a/linden/indra/media_plugins/webkit/CMakeLists.txt b/linden/indra/media_plugins/webkit/CMakeLists.txt
index 303a774..f589c61 100644
--- a/linden/indra/media_plugins/webkit/CMakeLists.txt
+++ b/linden/indra/media_plugins/webkit/CMakeLists.txt
@@ -112,8 +112,8 @@ if (DARWIN)
112 # copy the webkit dylib to the build directory 112 # copy the webkit dylib to the build directory
113 add_custom_command( 113 add_custom_command(
114 TARGET media_plugin_webkit POST_BUILD 114 TARGET media_plugin_webkit POST_BUILD
115# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib 115# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/libllqtwebkit.dylib
116 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ 116 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/
117 DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib 117 DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
118 ) 118 )
119 119
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt
index 4050d80..1fc5f42 100644
--- a/linden/indra/newview/CMakeLists.txt
+++ b/linden/indra/newview/CMakeLists.txt
@@ -92,7 +92,7 @@ set(viewer_SOURCE_FILES
92 jcfloaterareasearch.cpp 92 jcfloaterareasearch.cpp
93 kokuastreamingaudio.cpp 93 kokuastreamingaudio.cpp
94 kowopenregionsettings.cpp 94 kowopenregionsettings.cpp
95 lightshare.cpp 95 llettherebelight.cpp
96 llagent.cpp 96 llagent.cpp
97 llagentaccess.cpp 97 llagentaccess.cpp
98 llagentdata.cpp 98 llagentdata.cpp
@@ -274,6 +274,7 @@ set(viewer_SOURCE_FILES
274 llmaniprotate.cpp 274 llmaniprotate.cpp
275 llmanipscale.cpp 275 llmanipscale.cpp
276 llmaniptranslate.cpp 276 llmaniptranslate.cpp
277 llmediadataclient.cpp
277 llmapresponders.cpp 278 llmapresponders.cpp
278 llmediaremotectrl.cpp 279 llmediaremotectrl.cpp
279 llmemoryview.cpp 280 llmemoryview.cpp
@@ -506,6 +507,7 @@ set(viewer_SOURCE_FILES
506 wlfloatermanager.cpp 507 wlfloatermanager.cpp
507 wlfloaterwindlightsend.cpp 508 wlfloaterwindlightsend.cpp
508 wlretrievesettings.cpp 509 wlretrievesettings.cpp
510 rcmoapradar.cpp
509 ) 511 )
510 512
511set(VIEWER_BINARY_NAME "imprudence-bin" CACHE STRING 513set(VIEWER_BINARY_NAME "imprudence-bin" CACHE STRING
@@ -529,7 +531,7 @@ set(viewer_HEADER_FILES
529 CMakeLists.txt 531 CMakeLists.txt
530 ViewerInstall.cmake 532 ViewerInstall.cmake
531 aoremotectrl.h 533 aoremotectrl.h
532 chatbar_as_cmdline.h 534 chatbar_as_cmdline.h
533 emeraldboobutils.h 535 emeraldboobutils.h
534 floaterao.h 536 floaterao.h
535 floaterbusy.h 537 floaterbusy.h
@@ -548,11 +550,11 @@ set(viewer_HEADER_FILES
548 jcfloater_animation_list.h 550 jcfloater_animation_list.h
549 jcfloaterareasearch.h 551 jcfloaterareasearch.h
550 kokuastreamingaudio.h 552 kokuastreamingaudio.h
551 lightshare.h 553 llettherebelight.h
552 lggautocorrectfloater.h 554 lggautocorrectfloater.h
553 lggautocorrect.h 555 lggautocorrect.h
554 lggdicdownload.h 556 lggdicdownload.h
555 lgghunspell_wrapper.h 557 lgghunspell_wrapper.h
556 llagent.h 558 llagent.h
557 llagentaccess.h 559 llagentaccess.h
558 llagentdata.h 560 llagentdata.h
@@ -735,6 +737,7 @@ set(viewer_HEADER_FILES
735 llmaniprotate.h 737 llmaniprotate.h
736 llmanipscale.h 738 llmanipscale.h
737 llmaniptranslate.h 739 llmaniptranslate.h
740 llmediadataclient.h
738 llmapresponders.h 741 llmapresponders.h
739 llmediaremotectrl.h 742 llmediaremotectrl.h
740 llmemoryview.h 743 llmemoryview.h
@@ -978,6 +981,7 @@ set(viewer_HEADER_FILES
978 wlfloatermanager.h 981 wlfloatermanager.h
979 wlfloaterwindlightsend.h 982 wlfloaterwindlightsend.h
980 wlretrievesettings.h 983 wlretrievesettings.h
984 rcmoapradar.h
981 ) 985 )
982 986
983source_group("CMake Rules" FILES ViewerInstall.cmake) 987source_group("CMake Rules" FILES ViewerInstall.cmake)
@@ -1197,19 +1201,15 @@ set(viewer_APPSETTINGS_FILES
1197 app_settings/cmd_line.xml 1201 app_settings/cmd_line.xml
1198 app_settings/default_grids.xml 1202 app_settings/default_grids.xml
1199 app_settings/grass.xml 1203 app_settings/grass.xml
1200 app_settings/high_graphics.xml
1201 app_settings/keys.ini 1204 app_settings/keys.ini
1202 app_settings/keywords.ini 1205 app_settings/keywords.ini
1203 app_settings/logcontrol.xml 1206 app_settings/logcontrol.xml
1204 app_settings/low_graphics.xml
1205 app_settings/mid_graphics.xml
1206 app_settings/settings.xml 1207 app_settings/settings.xml
1207 app_settings/settings_crash_behavior.xml 1208 app_settings/settings_crash_behavior.xml
1208 app_settings/settings_files.xml 1209 app_settings/settings_files.xml
1209 app_settings/settings_per_account.xml 1210 app_settings/settings_per_account.xml
1210 app_settings/std_bump.ini 1211 app_settings/std_bump.ini
1211 app_settings/trees.xml 1212 app_settings/trees.xml
1212 app_settings/ultra_graphics.xml
1213 app_settings/viewerart.xml 1213 app_settings/viewerart.xml
1214 ${CMAKE_SOURCE_DIR}/../etc/message.xml 1214 ${CMAKE_SOURCE_DIR}/../etc/message.xml
1215 ${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg 1215 ${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
@@ -1319,7 +1319,7 @@ if (WINDOWS)
1319 1319
1320 # sets the 'working directory' for debugging from visual studio. 1320 # sets the 'working directory' for debugging from visual studio.
1321 if (NOT UNATTENDED) 1321 if (NOT UNATTENDED)
1322 if (NOT self.using_express) 1322 if (USE_VSTOOL)
1323 add_custom_command( 1323 add_custom_command(
1324 TARGET ${VIEWER_BINARY_NAME} PRE_BUILD 1324 TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
1325 COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe 1325 COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
@@ -1331,7 +1331,7 @@ if (WINDOWS)
1331 ${CMAKE_CURRENT_SOURCE_DIR} 1331 ${CMAKE_CURRENT_SOURCE_DIR}
1332 COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging." 1332 COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging."
1333 ) 1333 )
1334 endif (NOT self.using_express) 1334 endif (USE_VSTOOL)
1335 endif (NOT UNATTENDED) 1335 endif (NOT UNATTENDED)
1336 1336
1337 add_custom_command( 1337 add_custom_command(
@@ -1341,7 +1341,7 @@ if (WINDOWS)
1341 -E 1341 -E
1342 copy_if_different 1342 copy_if_different
1343 ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg 1343 ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg
1344 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message_template.msg 1344 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings/message_template.msg
1345 COMMENT "Copying message_template.msg to the runtime folder." 1345 COMMENT "Copying message_template.msg to the runtime folder."
1346 ) 1346 )
1347 1347
@@ -1352,7 +1352,7 @@ if (WINDOWS)
1352 -E 1352 -E
1353 copy_if_different 1353 copy_if_different
1354 ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml 1354 ${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml
1355 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml 1355 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings/message.xml
1356 COMMENT "Copying message.xml to the runtime folder." 1356 COMMENT "Copying message.xml to the runtime folder."
1357 ) 1357 )
1358 1358
@@ -1363,11 +1363,11 @@ if (WINDOWS)
1363 endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) 1363 endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
1364 1364
1365 add_custom_command( 1365 add_custom_command(
1366 OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat 1366 OUTPUT ${VIEWER_CFG_INTDIR}/touched.bat
1367 COMMAND ${PYTHON_EXECUTABLE} 1367 COMMAND ${PYTHON_EXECUTABLE}
1368 ARGS 1368 ARGS
1369 ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py 1369 ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
1370 --configuration=${CMAKE_CFG_INTDIR} 1370 --configuration=${VIEWER_CFG_INTDIR}
1371 --channel=${VIEWER_CHANNEL} 1371 --channel=${VIEWER_CHANNEL}
1372 --login_channel=${VIEWER_LOGIN_CHANNEL} 1372 --login_channel=${VIEWER_LOGIN_CHANNEL}
1373 --standalone=${STANDALONE} 1373 --standalone=${STANDALONE}
@@ -1376,15 +1376,15 @@ if (WINDOWS)
1376 --source=${CMAKE_CURRENT_SOURCE_DIR} 1376 --source=${CMAKE_CURRENT_SOURCE_DIR}
1377 --artwork=${ARTWORK_DIR} 1377 --artwork=${ARTWORK_DIR}
1378 --build=${CMAKE_CURRENT_BINARY_DIR} 1378 --build=${CMAKE_CURRENT_BINARY_DIR}
1379 --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/package 1379 --dest=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/package
1380 --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat 1380 --touch=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/touched.bat
1381 DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py 1381 DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
1382 ) 1382 )
1383 1383
1384 add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit media_plugin_gstreamer010) 1384 add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit media_plugin_gstreamer010)
1385 1385
1386 if (PACKAGE) 1386 if (PACKAGE)
1387 add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat) 1387 add_custom_target(package ALL DEPENDS ${VIEWER_CFG_INTDIR}/touched.bat)
1388 add_dependencies(package windows-updater windows-crash-logger) 1388 add_dependencies(package windows-updater windows-crash-logger)
1389 endif (PACKAGE) 1389 endif (PACKAGE)
1390endif (WINDOWS) 1390endif (WINDOWS)
@@ -1519,8 +1519,8 @@ if (DARWIN)
1519 --artwork=${ARTWORK_DIR} 1519 --artwork=${ARTWORK_DIR}
1520 --build=${CMAKE_CURRENT_BINARY_DIR} 1520 --build=${CMAKE_CURRENT_BINARY_DIR}
1521 --buildtype=${CMAKE_BUILD_TYPE} 1521 --buildtype=${CMAKE_BUILD_TYPE}
1522 --configuration=${CMAKE_CFG_INTDIR} 1522 --configuration=${VIEWER_CFG_INTDIR}
1523 --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app 1523 --dest=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/${product}.app
1524 --grid=${GRID} 1524 --grid=${GRID}
1525 --source=${CMAKE_CURRENT_SOURCE_DIR} 1525 --source=${CMAKE_CURRENT_SOURCE_DIR}
1526 --standalone=${STANDALONE} 1526 --standalone=${STANDALONE}
@@ -1551,8 +1551,8 @@ if (WINDOWS)
1551 -E 1551 -E
1552 copy_if_different 1552 copy_if_different
1553 ${BUILT_LLCOMMON} 1553 ${BUILT_LLCOMMON}
1554 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} 1554 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}
1555 COMMENT "Copying llcommon.dll to the runtime folder." 1555 COMMENT "Copying llcommon.dll to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}."
1556 ) 1556 )
1557 1557
1558 get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION) 1558 get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
@@ -1563,8 +1563,8 @@ if (WINDOWS)
1563 -E 1563 -E
1564 copy_if_different 1564 copy_if_different
1565 ${BUILT_SLPLUGIN} 1565 ${BUILT_SLPLUGIN}
1566 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} 1566 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}
1567 COMMENT "Copying SLPlugin executable to the runtime folder." 1567 COMMENT "Copying SLPlugin executable to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}."
1568 ) 1568 )
1569 1569
1570 get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION) 1570 get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
@@ -1575,8 +1575,8 @@ if (WINDOWS)
1575 -E 1575 -E
1576 copy_if_different 1576 copy_if_different
1577 ${BUILT_WEBKIT_PLUGIN} 1577 ${BUILT_WEBKIT_PLUGIN}
1578 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin 1578 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
1579 COMMENT "Copying WebKit Plugin to the runtime folder." 1579 COMMENT "Copying WebKit Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
1580 ) 1580 )
1581 1581
1582 get_target_property(BUILT_GSTREAMER_PLUGIN media_plugin_gstreamer010 LOCATION) 1582 get_target_property(BUILT_GSTREAMER_PLUGIN media_plugin_gstreamer010 LOCATION)
@@ -1587,8 +1587,8 @@ if (WINDOWS)
1587 -E 1587 -E
1588 copy_if_different 1588 copy_if_different
1589 ${BUILT_GSTREAMER_PLUGIN} 1589 ${BUILT_GSTREAMER_PLUGIN}
1590 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin 1590 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
1591 COMMENT "Copying Gstreamer Plugin to the runtime folder." 1591 COMMENT "Copying Gstreamer Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
1592 ) 1592 )
1593 1593
1594 get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION) 1594 get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
@@ -1599,13 +1599,13 @@ if (WINDOWS)
1599 -E 1599 -E
1600 copy_if_different 1600 copy_if_different
1601 ${BUILT_QUICKTIME_PLUGIN} 1601 ${BUILT_QUICKTIME_PLUGIN}
1602 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin 1602 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
1603 COMMENT "Copying Quicktime Plugin to the runtime folder." 1603 COMMENT "Copying Quicktime Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
1604 ) 1604 )
1605 1605
1606 # Copying the mime_types.xml file to app_settings 1606 # Copying the mime_types.xml file to app_settings
1607 set(mime_types_source "${CMAKE_SOURCE_DIR}/newview/skins/default/xui/en-us") 1607 set(mime_types_source "${CMAKE_SOURCE_DIR}/newview/skins/default/xui/en-us")
1608 set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings") 1608 set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings")
1609 add_custom_command( 1609 add_custom_command(
1610 TARGET ${VIEWER_BINARY_NAME} POST_BUILD 1610 TARGET ${VIEWER_BINARY_NAME} POST_BUILD
1611 COMMAND ${CMAKE_COMMAND} 1611 COMMAND ${CMAKE_COMMAND}
@@ -1622,7 +1622,7 @@ endif (WINDOWS)
1622if (DARWIN) 1622if (DARWIN)
1623# Don't do this here -- it's taken care of by viewer_manifest.py 1623# Don't do this here -- it's taken care of by viewer_manifest.py
1624# add_custom_command(TARGET ${VIEWER_BINARY_NAME} POST_BUILD 1624# add_custom_command(TARGET ${VIEWER_BINARY_NAME} POST_BUILD
1625# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/ 1625# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin/
1626# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib 1626# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
1627# ) 1627# )
1628endif (DARWIN) 1628endif (DARWIN)
diff --git a/linden/indra/newview/app_settings/default_grids.xml b/linden/indra/newview/app_settings/default_grids.xml
index c5ef948..46a77f0 100644
--- a/linden/indra/newview/app_settings/default_grids.xml
+++ b/linden/indra/newview/app_settings/default_grids.xml
@@ -1,199 +1,285 @@
1<llsd> 1<llsd>
2 <array> 2 <array>
3 <map> 3 <map>
4 <key>default_grids_version</key><string>38</string> 4 <key>default_grids_version</key><string>39</string>
5 </map> 5 </map>
6 6
7 <!-- Second Life --> 7 <!-- 3rd Rock Grid -->
8 <map> 8 <map>
9 <key>gridnick</key><string>secondlife</string> 9 <key>gridname</key><string>3rd Rock Grid</string>
10 <key>gridname</key><string>Second Life</string> 10 <key>gridnick</key><string>3rdRock</string>
11 <key>platform</key><string>SecondLife</string> 11 <key>platform</key><string>OpenSim</string>
12 <key>loginuri</key><string>https://login.agni.lindenlab.com/cgi-bin/login.cgi</string> 12 <key>about</key><string>http://3rdrockgrid.com/</string>
13 <key>loginpage</key><string>http://imprudenceviewer.org/app/splash/</string> 13 <key>help</key><string>http://3rdrockgrid.com/</string>
14 <key>helperuri</key><string>https://secondlife.com/helpers/</string> 14 <key>helperuri</key><string>http://grid.3rdrockgrid.com/3rg_money/</string>
15 <key>website</key><string>http://secondlife.com/</string> 15 <key>loginuri</key><string>http://grid.3rdrockgrid.com:8002/</string>
16 <key>support</key><string>http://secondlife.com/support/</string> 16 <key>loginpage</key><string>http://3rdrockgrid.com/startpage.php</string>
17 <key>register</key><string>http://secondlife.com/registration/</string> 17 <key>website</key><string>http://3rdrockgrid.com/</string>
18 <key>password</key><string>http://secondlife.com/account/request.php</string> 18 <key>register</key><string>http://3rdrockgrid.com/</string>
19 <key>version</key><string>2</string> 19 <key>password</key><string>http://3rdrockgrid.com/</string>
20 <key>support</key><string>http://3rdrockgrid.com/</string>
21 <key>version</key><string>1</string>
20 </map> 22 </map>
21 23
22 <!-- Second Life Beta --> 24 <!-- Avination -->
25 <map>
26 <key>gridname</key><string>Avination</string>
27 <key>gridnick</key><string>Avination</string>
28 <key>platform</key><string>OpenSim</string>
29 <key>about</key><string>http://login.avination.net</string>
30 <key>helperuri</key><string>https://secure.3dhosting.de/</string>
31 <key>loginpage</key><string>https://www.avination.com/welcome.php</string>
32 <key>loginuri</key><string>https://login.avination.com</string>
33 <key>name</key><string>login.avination.net</string>
34 <key>password</key><string>https://www.avination.com/pwrecover.php</string>
35 <key>register</key><string>https://www.avination.com/join.php</string>
36 </map>
37
38 <!-- Craft (offspring of Cyberlandia) -->
39 <map>
40 <key>gridname</key><string>Craft - The Friendly World</string>
41 <key>gridnick</key><string>Craft</string>
42 <key>platform</key><string>OpenSim</string>
43 <key>about</key><string>http://www.craft-world.org/</string>
44 <key>loginuri</key><string>http://craft-world.org:8002/</string>
45 <key>loginpage</key><string>http://www.craft-world.org/loginscreen.php</string>
46 <key>helperuri</key><string>http://webapp.craft-world.org/economy/</string>
47 <key>website</key><string>http://www.craft-world.org/</string>
48 <key>register</key><string>http://craft-world.org:8002/wifi/user/account/</string>
49 <key>password</key><string>http://craft-world.org:8002/wifi/forgotpassword</string>
50 <key>version</key><string>0</string>
51 </map>
52
53 <!-- FrancoGrid -->
23 <map> 54 <map>
24 <key>gridnick</key><string>secondlifebeta</string> 55 <key>gridname</key><string>Metavers Francophone FrancoGrid</string>
25 <key>gridname</key><string>Second Life Beta Grid</string> 56 <key>gridnick</key><string>francogrid</string>
26 <key>platform</key><string>SecondLife</string> 57 <key>platform</key><string>OpenSim</string>
27 <key>loginuri</key><string>https://login.aditi.lindenlab.com/cgi-bin/login.cgi</string> 58 <key>about</key><string>http://francogrid.org/</string>
28 <key>loginpage</key><string>http://imprudenceviewer.org/app/splash/</string> 59 <key>help</key><string>http://francogrid.org/aide</string>
29 <key>helperuri</key><string>http://aditi-secondlife.webdev.lindenlab.com/helpers/</string> 60 <key>helperuri</key><string>http://helper.main.francogrid.org/</string>
30 <key>website</key><string>http://secondlife.com/</string> 61 <key>loginpage</key><string>http://viewer.francogrid.org/</string>
31 <key>support</key><string>http://secondlife.com/support/</string> 62 <key>loginuri</key><string>http://login.francogrid.org/</string>
32 <key>register</key><string>http://secondlife.com/registration/</string> 63 <key>name</key><string>login.francogrid.org</string>
33 <key>password</key><string>http://secondlife.com/account/request.php</string> 64 <key>password</key><string>http://francogrid.org/user/password</string>
34 <key>version</key><string>3</string> 65 <key>register</key><string>http://francogrid.org/user/register</string>
66 </map>
67
68 <!-- GiantGrid -->
69 <map>
70 <key>gridname</key><string>GiantGrid</string>
71 <key>gridnick</key><string>GiantGrid</string>
72 <key>platform</key><string>OpenSim</string>
73 <key>loginuri</key><string>http://giantgrid.no-ip.biz:8002/</string>
74 <key>loginpage</key><string>http://www.giantgrid.nl</string>
75 <key>helperuri</key><string>http://giantgrid.no-ip.biz/XoopCube/html/modules/xoopensim/helper/</string>
76 <key>website</key><string>http://www.giantgrid.nl</string>
77 <key>register</key><string>http://giantgrid.no-ip.biz:8002/wifi/user/account/</string>
78 <key>password</key><string>http://giantgrid.no-ip.biz:8002/wifi/forgotpassword</string>
79 <key>support</key><string>http://gianttest.no-ip.biz/ticket/</string>
80 <key>version</key><string>1</string>
81 </map>
82
83 <!-- InWorldz -->
84 <map>
85 <key>gridname</key><string>InWorldz</string>
86 <key>gridnick</key><string>InWorldz</string>
87 <key>platform</key><string>OpenSim</string>
88 <key>about</key><string>http://inworldz.com/</string>
89 <key>help</key><string>http://inworldz.com/faq.php</string>
90 <key>loginuri</key><string>http://inworldz.com:8002/</string>
91 <key>loginpage</key><string>http://inworldz.com/loginscreen.php</string>
92 <key>helperuri</key><string>http://inworldz.com/</string>
93 <key>password</key><string>http://inworldz.com/</string>
94 <key>register</key><string>http://inworldz.com/register.php</string>
95 <key>support</key><string>http://inworldz.com/support.php</string>
96 <key>website</key><string>http://inworldz.com/</string>
97 <key>version</key><string>2</string>
98 </map>
99
100 <!-- Island Oasis -->
101 <map>
102 <key>gridname</key><string>Island Oasis</string>
103 <key>gridnick</key><string>IslandOasis</string>
104 <key>platform</key><string>OpenSim</string>
105 <key>about</key><string>http://www.islandoasis.biz/GridStats.aspx</string>
106 <key>help</key><string>http://www.islandoasis.biz/Support.aspx</string>
107 <key>helperuri</key><string>http://islandoasisgrid.biz:8020/OsCurrency/</string>
108 <key>loginpage</key><string>http://www.islandoasis.biz/welcome.aspx</string>
109 <key>loginuri</key><string>http://islandoasisgrid.biz:8002/</string>
110 <key>name</key><string>islandoasisgrid.biz:8002</string>
111 <key>password</key><string>http://www.islandoasis.biz/Login.aspx</string>
112 <key>register</key><string>http://www.islandoasis.biz/verification.aspx</string>
35 </map> 113 </map>
36 114
37 <!-- Local Host --> 115 <!-- Local Host -->
38 <map> 116 <map>
39 <key>gridnick</key><string>localhost</string> 117 <key>gridname</key><string>Localhost</string>
40 <key>gridname</key><string>Local Host</string> 118 <key>gridnick</key><string>LocalHost</string>
41 <key>platform</key><string>OpenSim</string> 119 <key>platform</key><string>OpenSim</string>
42 <key>loginuri</key><string>http://127.0.0.1:9000/</string> 120 <key>loginuri</key><string>http://127.0.0.1:9000/</string>
43 <key>loginpage</key><string /> 121 <key>loginpage</key><string />
44 <key>helperuri</key><string>http://127.0.0.1:9000/</string> 122 <key>helperuri</key><string>http://127.0.0.1:9000/</string>
45 <key>version</key><string>1</string> 123 <key>version</key><string>1</string>
46 </map> 124 </map>
47 125
48 <!-- OSGrid --> 126 <!-- local Sim-on-a-stick -->
49 <map> 127 <map>
50 <key>gridnick</key><string>osgrid</string> 128 <key>gridname</key><string>Sim-on-a-Stick</string>
51 <key>gridname</key><string>OSGrid</string> 129 <key>gridnick</key><string>SimOnAStick</string>
52 <key>platform</key><string>OpenSim</string> 130 <key>loginpage</key><string>http://127.0.0.1:9100/wifi/welcome.html</string>
53 <key>loginuri</key><string>http://login.osgrid.org/</string> 131 <key>loginuri</key><string>http://localhost:9100</string>
54 <key>loginpage</key><string>http://www.osgrid.org/splash/</string>
55 <key>helperuri</key><string>http://helper.osgrid.org/</string>
56 <key>website</key><string>http://www.osgrid.org/</string>
57 <key>support</key><string>http://www.osgrid.org/</string>
58 <key>register</key>
59 <string>http://www.osgrid.org/index.php/auth/register</string>
60 <key>password</key>
61 <string>http://www.osgrid.org/index.php/auth/forgot_password</string>
62 <key>version</key><string>3</string>
63 </map> 132 </map>
64 133
65 <!-- Your Alternative Life --> 134 <!-- Metropolis Metaversum -->
66 <map> 135 <map>
67 <key>gridnick</key><string>youralternativelife</string> 136 <key>gridname</key><string>Metropolis Metaversum</string>
68 <key>gridname</key><string>Your Alternative Life</string> 137 <key>gridnick</key><string>Metropolis</string>
69 <key>platform</key><string>OpenSim</string> 138 <key>platform</key><string>OpenSim</string>
70 <key>loginuri</key><string>http://grid01.from-ne.com:8002/</string> 139 <key>about</key><string>http://www.hypergrid.org/metropolis/wiki</string>
71 <key>loginpage</key><string>http://grid01.from-ne.com/tios/loginscreen3.php</string> 140 <key>help</key><string>http://metropolis.hypergrid.org</string>
72 <key>helperuri</key><string>http://grid01.from-ne.com/tios/services/</string> 141 <key>helperuri</key><string>http://metropolis.hypergrid.org/currency/helper/</string>
73 <key>website</key><string>http://www.youralternativelife.com</string> 142 <key>loginpage</key><string>http://metropolis.hypergrid.org</string>
74 <key>support</key><string>http://www.youralternativelife.com</string> 143 <key>loginuri</key><string>http://hypergrid.org:8002/</string>
75 <key>register</key><string>http://www.youralternativelife.com</string> 144 <key>name</key><string>hypergrid.org:8002</string>
76 <key>password</key><string>http://www.youralternativelife.com</string> 145 <key>password</key><string>http://metropolis.hypergrid.org/oswi.php</string>
77 <key>version</key><string>0</string> 146 <key>register</key><string>http://www.hypergrid.org/metropolis/metro_rg.php</string>
147 </map>
78 148
149 <!-- New World Grid -->
150 <map>
151 <key>gridname</key><string>New World Grid</string>
152 <key>gridnick</key><string>newworldgrid</string>
153 <key>platform</key><string>OpenSim</string>
154 <key>loginuri</key><string>http://3d.newworldgrid.com:8002/</string>
155 <key>loginpage</key><string>http://www.newworldgrid.com/loginpage/</string>
156 <key>helperuri</key><string>http://3d.newworldgrid.com/services/helper/</string>
157 <key>website</key><string>http://www.newworldgrid.com/</string>
158 <key>support</key><string>http://www.newworldgrid.com/contact/</string>
159 <key>register</key><string>http://www.newworldgrid.com/virreacentral/redirect.php?page=register</string>
160 <key>password</key><string>http://www.newworldgrid.com/virreacentral/redirect.php?page=login</string>
161 <key>version</key><string>0</string>
79 </map> 162 </map>
80 163
81 <!-- The New World Grid --> 164 <!-- OSGrid -->
82 <map> 165 <map>
83 <key>gridnick</key><string>thenewworldgrid</string> 166 <key>gridname</key><string>OSGrid</string>
84 <key>gridname</key><string>The New World Grid</string> 167 <key>gridnick</key><string>OSGrid</string>
85 <key>platform</key><string>OpenSim</string> 168 <key>platform</key><string>OpenSim</string>
86 <key>loginuri</key><string>http://grid.newworldgrid.com:8002/</string> 169 <key>about</key><string>http://www.osgrid.org/</string>
87 <key>loginpage</key><string>http://account.newworldgrid.com/loginscreen.php</string> 170 <key>help</key><string>http://www.osgrid.org/</string>
88 <key>helperuri</key><string>http://account.newworldgrid.com/</string> 171 <key>loginuri</key><string>http://login.osgrid.org/</string>
89 <key>website</key><string>http://www.newworldgrid.com/</string> 172 <key>loginpage</key><string>http://www.osgrid.org/splash/</string>
90 <key>support</key><string>http://www.newworldgrid.com/</string> 173 <key>helperuri</key><string>http://helper.osgrid.org/</string>
91 <key>register</key><string>http://www.newworldgrid.com/register</string> 174 <key>website</key><string>http://www.osgrid.org/</string>
92 <key>password</key><string>http://account.newworldgrid.com/</string> 175 <key>support</key><string>http://www.osgrid.org/</string>
93 <key>version</key><string>0</string> 176 <key>register</key><string>http://www.osgrid.org/</string>
177 <key>password</key><string>http://www.osgrid.org/</string>
178 <key>version</key><string>3</string>
94 </map> 179 </map>
95 180
96 <!-- ReactionGrid --> 181 <!-- ReactionGrid -->
97 <map> 182 <map>
98 <key>gridnick</key><string>reactiongrid</string> 183 <key>gridname</key><string>ReactionGrid</string>
99 <key>gridname</key><string>ReactionGrid</string> 184 <key>gridnick</key><string>ReactionGrid</string>
100 <key>platform</key><string>OpenSim</string> 185 <key>platform</key><string>OpenSim</string>
101 <key>loginuri</key><string>http://reactiongrid.com:8008/</string> 186 <key>about</key><string>http://reactiongrid.com/Default.aspx</string>
102 <key>loginpage</key><string>http://gsquared.info/portal</string> 187 <key>help</key><string>http://reactiongrid.com/Support.aspx</string>
103 <key>website</key><string>http://reactiongrid.com/Default.aspx</string> 188 <key>loginuri</key><string>http://reactiongrid.com:8008/</string>
104 <key>support</key><string>http://reactiongrid.com/Support.aspx</string> 189 <key>loginpage</key><string>http://gsquared.info/portal</string>
105 <key>register</key><string>http://reactiongrid.com/Register.aspx</string> 190 <key>helperuri</key><string>http://reactiongrid.com:9000/</string>
106 <key>password</key><string>http://reactiongrid.com/Support/ResetPassword.aspx</string> 191 <key>website</key><string>http://reactiongrid.com/Default.aspx</string>
107 <key>version</key><string>0</string> 192 <key>support</key><string>http://reactiongrid.com/Support.aspx</string>
193 <key>register</key><string>http://reactiongrid.com/Register.aspx</string>
194 <key>password</key><string>http://www.reactiongrid.com/Support/PasswordReset.aspx</string>
195 <key>version</key><string>0</string>
108 </map> 196 </map>
109 197
110 <!-- Craft (offspring of Cyberlandia) --> 198 <!-- ScienceSim -->
111 <map> 199 <map>
112 <key>gridnick</key><string>craft</string> 200 <key>gridname</key><string>IEEE/ACM ScienceSim Virtual World</string>
113 <key>gridname</key><string>Craft</string> 201 <key>gridnick</key><string>ScienceSim</string>
114 <key>platform</key><string>OpenSim</string> 202 <key>platform</key><string>OpenSim</string>
115 <key>loginuri</key><string>http://craft-world.org:8002/</string> 203 <key>loginuri</key><string>http://grid.sciencesim.com/</string>
116 <key>loginpage</key><string>http://www.craft-world.org/loginscreen.php</string> 204 <key>loginpage</key><string>http://island.sciencesim.com/scisim/loginscreen.php</string>
117 <key>helperuri</key><string>http://webapp.craft-world.org/</string> 205 <key>helperuri</key><string></string>
118 <key>website</key><string>http://www.craft-world.org/</string> 206 <key>password</key><string>http://island.sciencesim.com/scisim</string>
119 <key>register</key><string>http://craft-world.org:8002/wifi/user/account/</string> 207 <key>register</key><string>http://island.sciencesim.com/scisim</string>
120 <key>password</key><string>http://craft-world.org:8002/wifi/forgotpassword</string> 208 <key>support</key><string>http://island.sciencesim.com/wiki</string>
121 <key>version</key><string>0</string> 209 <key>website</key><string>http://island.sciencesim.com/about/</string>
122 </map> 210 <key>version</key><string>0</string>
123
124 <!-- Role Play Worlds -->
125 <map>
126 <key>gridnick</key><string>roleplayworlds</string>
127 <key>gridname</key><string>Role Play Worlds</string>
128 <key>platform</key><string>OpenSim</string>
129 <key>loginuri</key><string>http://grid.roleplayworlds.net:8002/</string>
130 <key>loginpage</key><string>http://roleplayworlds.net/loginscreen</string>
131 <key>helperuri</key><string>http://grid.roleplayworlds.net/</string>
132 <key>website</key><string>http://roleplayworlds.net/</string>
133 <key>support</key><string>http://roleplayworlds.net/help</string>
134 <key>register</key><string>http://roleplayworlds.net/register</string>
135 <key>password</key><string>http://roleplayworlds.net/password</string>
136 <key>version</key><string>1</string>
137 </map> 211 </map>
138 212
139 <!-- GiantGrid --> 213 <!-- Second Life -->
140 <map> 214 <map>
141 <key>gridnick</key><string>giantgrid</string> 215 <key>gridname</key><string>Second Life</string>
142 <key>gridname</key><string>GiantGrid</string> 216 <key>gridnick</key><string>SL</string>
143 <key>platform</key><string>OpenSim</string> 217 <key>platform</key><string>SecondLife</string>
144 <key>loginuri</key><string>http://giantgrid.no-ip.biz:8002/</string> 218 <key>loginuri</key><string>https://login.agni.lindenlab.com/cgi-bin/login.cgi</string>
145 <key>loginpage</key><string>http://www.giantgrid.nl</string> 219 <key>loginpage</key><string>http://viewer-login.agni.lindenlab.com/</string>
146 <key>helperuri</key><string>http://giantgrid.no-ip.biz/XoopCube/html/modules/xoopensim/helper/</string> 220 <key>helperuri</key><string>https://secondlife.com/helpers/</string>
147 <key>website</key><string>http://www.giantgrid.nl</string> 221 <key>website</key><string>http://secondlife.com/</string>
148 <key>register</key><string>http://giantgrid.no-ip.biz:8002/wifi/user/account/</string> 222 <key>support</key><string>http://secondlife.com/support/</string>
149 <key>password</key><string>http://giantgrid.no-ip.biz:8002/wifi/forgotpassword</string> 223 <key>register</key><string>http://secondlife.com/registration/</string>
150 <key>support</key><string>http://gianttest.no-ip.biz/ticket/</string> 224 <key>password</key><string>http://secondlife.com/account/request.php</string>
151 <key>version</key><string>1</string> 225 <key>version</key><string>2</string>
152 </map> 226 </map>
153 227
154 <!-- 3rd Rock Grid --> 228 <!-- Second Life Beta -->
155 <map> 229 <map>
156 <key>gridnick</key><string>3rdrock</string> 230 <key>gridname</key><string>Second Life Beta Grid</string>
157 <key>gridname</key><string>3rd Rock Grid</string> 231 <key>gridnick</key><string>SLBeta</string>
158 <key>platform</key><string>OpenSim</string> 232 <key>platform</key><string>SecondLife</string>
159 <key>loginuri</key><string>http://grid.3rdrockgrid.com:8002/</string> 233 <key>loginuri</key><string>https://login.aditi.lindenlab.com/cgi-bin/login.cgi</string>
160 <key>loginpage</key><string>http://3rdrockgrid.com/startpage.php</string> 234 <key>loginpage</key><string>http://viewer-login.agni.lindenlab.com</string>
161 <key>helperuri</key><string>http://grid.3rdrockgrid.com/money/</string> 235 <key>helperuri</key><string>http://aditi-secondlife.webdev.lindenlab.com/helpers/</string>
162 <key>website</key><string>http://3rdrockgrid.com/</string> 236 <key>website</key><string>http://secondlife.com/</string>
163 <key>register</key><string>http://3rdrockgrid.com/</string> 237 <key>support</key><string>http://secondlife.com/support/</string>
164 <key>password</key><string>http://3rdrockgrid.com/</string> 238 <key>register</key><string>http://secondlife.com/registration/</string>
165 <key>support</key><string>http://3rdrockgrid.com/</string> 239 <key>password</key><string>http://secondlife.com/account/request.php</string>
166 <key>version</key><string>1</string> 240 <key>version</key><string>3</string>
167 </map> 241 </map>
168 242
169 <!-- InWorldz --> 243 <!-- Virtual Highway -->
170 <map> 244 <map>
171 <key>gridname</key> <string>InWorldz</string> 245 <key>gridname</key><string>Virtual Highway</string>
172 <key>gridnick</key> <string>inworldz</string> 246 <key>gridnick</key><string>VirtualHighway</string>
173 <key>platform</key> <string>OpenSim</string> 247 <key>platform</key><string>OpenSim</string>
174 <key>loginuri</key> <string>http://inworldz.com:8002/</string> 248 <key>about</key><string>http://www.virtualhighway.us/about.php</string>
175 <key>loginpage</key> <string>http://inworldz.com/loginscreen.php</string> 249 <key>helperuri</key><string>http://www.virtualhighway.us/griddal/</string>
176 <key>helperuri</key> <string>http://inworldz.com/</string> 250 <key>loginpage</key><string>http://www.virtualhighway.us/welcome.php</string>
177 <key>password</key> <string>http://inworldz.com/loginerror.php?error=2</string> 251 <key>loginuri</key><string>http://login.virtualhighway.us:8002/</string>
178 <key>register</key> <string>http://inworldz.com/register.php</string> 252 <key>name</key><string>login.virtualhighway.us:8002</string>
179 <key>support</key> <string>http://inworldz.com/support.php</string> 253 <key>password</key><string>http://www.virtualhighway.us/users/lostPassword</string>
180 <key>website</key> <string>http://inworldz.com/</string> 254 <key>register</key><string>http://www.virtualhighway.us/users/register</string>
181 <key>version</key> <string>2</string> 255 </map>
182 </map>
183 256
184 <!-- ScienceSim --> 257 <!-- virtyou -->
258 <map>
259 <key>gridname</key><string>virtyou MainGrid</string>
260 <key>gridnick</key><string>virtyou</string>
261 <key>platform</key><string>OpenSim</string>
262 <key>help</key><string>http://virtyou.com/q/howto/</string>
263 <key>loginpage</key><string>http://virtyou.com/welcome/</string>
264 <key>loginuri</key><string>http://go.virtyou.com</string>
265 <key>password</key><string>http://virtyou.com/user/forgotten.html</string>
266 <key>register</key><string>http://virtyou.com/user/</string>
267 </map>
268
269 <!-- Your Alternative Life -->
185 <map> 270 <map>
186 <key>gridname</key> <string>IEEE/ACM ScienceSim Virtual World</string> 271 <key>gridname</key><string>Your Alternative Life</string>
187 <key>gridnick</key> <string>sciencesim</string> 272 <key>gridnick</key><string>YourAlternativeLife</string>
188 <key>platform</key> <string>OpenSim</string> 273 <key>platform</key><string>OpenSim</string>
189 <key>loginuri</key> <string>http://grid.sciencesim.com/</string> 274 <key>about</key><string>http://www.youralternativelife.com</string>
190 <key>loginpage</key> <string>http://island.sciencesim.com/scisim/loginscreen.php</string> 275 <key>loginuri</key><string>http://grid01.from-ne.com:8002/</string>
191 <key>helperuri</key> <string></string> 276 <key>loginpage</key><string>http://grid01.from-ne.com/tios/loginscreen3.php</string>
192 <key>password</key> <string>http://island.sciencesim.com/scisim</string> 277 <key>helperuri</key><string>http://grid01.from-ne.com/tios/services/</string>
193 <key>register</key> <string>http://island.sciencesim.com/scisim</string> 278 <key>website</key><string>http://www.youralternativelife.com</string>
194 <key>support</key> <string>http://island.sciencesim.com/wiki</string> 279 <key>support</key><string>http://www.youralternativelife.com</string>
195 <key>website</key> <string>http://island.sciencesim.com/about/</string> 280 <key>register</key><string>http://www.youralternativelife.com</string>
196 <key>version</key> <string>0</string> 281 <key>password</key><string>http://www.youralternativelife.com</string>
282 <key>version</key><string>0</string>
197 </map> 283 </map>
198 284
199 </array> 285 </array>
diff --git a/linden/indra/newview/app_settings/high_graphics.xml b/linden/indra/newview/app_settings/high_graphics.xml
deleted file mode 100644
index 6368f70..0000000
--- a/linden/indra/newview/app_settings/high_graphics.xml
+++ /dev/null
@@ -1,39 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes"?>
2<settings version = "101">
3 <!--NO SHADERS-->
4 <RenderAvatarCloth value="FALSE"/>
5 <!--Default for now-->
6 <RenderAvatarLODFactor value="1.0"/>
7 <!--NO SHADERS-->
8 <RenderAvatarVP value="TRUE"/>
9 <!--Short Range-->
10 <RenderFarClip value="128"/>
11 <!--Default for now-->
12 <RenderFlexTimeFactor value="1"/>
13 <!--256... but they don't use this-->
14 <RenderGlowResolutionPow value="9"/>
15 <!--Sun/Moon only-->
16 <RenderLightingDetail value="1"/>
17 <!--Low number-->
18 <RenderMaxPartCount value="4096"/>
19 <!--bump okay-->
20 <RenderObjectBump value="TRUE"/>
21 <!--NO SHADERS-->
22 <RenderReflectionDetail value="2"/>
23 <!--Simple-->
24 <RenderTerrainDetail value="1"/>
25 <!--Default for now-->
26 <RenderTerrainLODFactor value="2"/>
27 <!--Default for now-->
28 <RenderTreeLODFactor value="0.5"/>
29 <!--Try Impostors-->
30 <RenderUseImpostors value="TRUE"/>
31 <!--Default for now-->
32 <RenderVolumeLODFactor value="1.125"/>
33 <!--NO SHADERS-->
34 <RenderWaterReflections value="FALSE"/>
35 <!--NO SHADERS-->
36 <VertexShaderEnable value="TRUE"/>
37 <!--NO SHADERS-->
38 <WindLightUseAtmosShaders value="TRUE"/>
39</settings>
diff --git a/linden/indra/newview/app_settings/low_graphics.xml b/linden/indra/newview/app_settings/low_graphics.xml
deleted file mode 100644
index 3f67a70..0000000
--- a/linden/indra/newview/app_settings/low_graphics.xml
+++ /dev/null
@@ -1,39 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes"?>
2<settings version = "101">
3 <!--NO SHADERS-->
4 <RenderAvatarCloth value="FALSE"/>
5 <!--Default for now-->
6 <RenderAvatarLODFactor value="0.5"/>
7 <!--NO SHADERS-->
8 <RenderAvatarVP value="FALSE"/>
9 <!--Short Range-->
10 <RenderFarClip value="64"/>
11 <!--Default for now-->
12 <RenderFlexTimeFactor value="0.5"/>
13 <!--256... but they don't use this-->
14 <RenderGlowResolutionPow value="8"/>
15 <!--Sun/Moon only-->
16 <RenderLightingDetail value="0"/>
17 <!--Low number-->
18 <RenderMaxPartCount value="1024"/>
19 <!--bump okay-->
20 <RenderObjectBump value="FALSE"/>
21 <!--NO SHADERS-->
22 <RenderReflectionDetail value="0"/>
23 <!--Simple-->
24 <RenderTerrainDetail value="0"/>
25 <!--Default for now-->
26 <RenderTerrainLODFactor value="1.0"/>
27 <!--Default for now-->
28 <RenderTreeLODFactor value="0.5"/>
29 <!--Try Impostors-->
30 <RenderUseImpostors value="TRUE"/>
31 <!--Default for now-->
32 <RenderVolumeLODFactor value="1.125"/>
33 <!--NO SHADERS-->
34 <RenderWaterReflections value="FALSE"/>
35 <!--NO SHADERS-->
36 <VertexShaderEnable value="FALSE"/>
37 <!--NO SHADERS-->
38 <WindLightUseAtmosShaders value="FALSE"/>
39</settings>
diff --git a/linden/indra/newview/app_settings/mid_graphics.xml b/linden/indra/newview/app_settings/mid_graphics.xml
deleted file mode 100644
index 12da77d..0000000
--- a/linden/indra/newview/app_settings/mid_graphics.xml
+++ /dev/null
@@ -1,39 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes"?>
2<settings version = "101">
3 <!--NO SHADERS-->
4 <RenderAvatarCloth value="FALSE"/>
5 <!--Default for now-->
6 <RenderAvatarLODFactor value="0.5"/>
7 <!--NO SHADERS-->
8 <RenderAvatarVP value="TRUE"/>
9 <!--Short Range-->
10 <RenderFarClip value="96"/>
11 <!--Default for now-->
12 <RenderFlexTimeFactor value="1"/>
13 <!--256... but they don't use this-->
14 <RenderGlowResolutionPow value="8"/>
15 <!--Sun/Moon only-->
16 <RenderLightingDetail value="1"/>
17 <!--Low number-->
18 <RenderMaxPartCount value="2048"/>
19 <!--bump okay-->
20 <RenderObjectBump value="TRUE"/>
21 <!--NO SHADERS-->
22 <RenderReflectionDetail value="0"/>
23 <!--Simple-->
24 <RenderTerrainDetail value="1"/>
25 <!--Default for now-->
26 <RenderTerrainLODFactor value="1.0"/>
27 <!--Default for now-->
28 <RenderTreeLODFactor value="0.5"/>
29 <!--Try Impostors-->
30 <RenderUseImpostors value="TRUE"/>
31 <!--Default for now-->
32 <RenderVolumeLODFactor value="1.125"/>
33 <!--NO SHADERS-->
34 <RenderWaterReflections value="FALSE"/>
35 <!--NO SHADERS-->
36 <VertexShaderEnable value="TRUE"/>
37 <!--NO SHADERS-->
38 <WindLightUseAtmosShaders value="FALSE"/>
39</settings>
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 2ec4832..1451aef 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -2,6 +2,123 @@
2<llsd> 2<llsd>
3<map> 3<map>
4 4
5 <!-- begin RC hacking -->
6 <key>PrimMediaMasterEnabled</key>
7 <map>
8 <key>Comment</key>
9 <string>Whether or not Media on a Prim is enabled.</string>
10 <key>Persist</key>
11 <integer>1</integer>
12 <key>Type</key>
13 <string>Boolean</string>
14 <key>Value</key>
15 <integer>1</integer>
16 </map>
17 <key>PrimMediaMaxRetries</key>
18 <map>
19 <key>Comment</key>
20 <string>Maximum number of retries for media queries.</string>
21 <key>Persist</key>
22 <integer>1</integer>
23 <key>Type</key>
24 <string>U32</string>
25 <key>Value</key>
26 <integer>4</integer>
27 </map>
28 <key>PrimMediaRequestQueueDelay</key>
29 <map>
30 <key>Comment</key>
31 <string>Timer delay for fetching media from the queue (in seconds).</string>
32 <key>Persist</key>
33 <integer>1</integer>
34 <key>Type</key>
35 <string>F32</string>
36 <key>Value</key>
37 <real>1.0</real>
38 </map>
39 <key>PrimMediaRetryTimerDelay</key>
40 <map>
41 <key>Comment</key>
42 <string>Timer delay for retrying on media queries (in seconds).</string>
43 <key>Persist</key>
44 <integer>1</integer>
45 <key>Type</key>
46 <string>F32</string>
47 <key>Value</key>
48 <real>5.0</real>
49 </map>
50 <key>PrimMediaMaxSortedQueueSize</key>
51 <map>
52 <key>Comment</key>
53 <string>Maximum number of objects the viewer will load media for initially</string>
54 <key>Persist</key>
55 <integer>1</integer>
56 <key>Type</key>
57 <string>U32</string>
58 <key>Value</key>
59 <integer>100000</integer>
60 </map>
61 <key>PrimMediaMaxRoundRobinQueueSize</key>
62 <map>
63 <key>Comment</key>
64 <string>Maximum number of objects the viewer will continuously update media for</string>
65 <key>Persist</key>
66 <integer>1</integer>
67 <key>Type</key>
68 <string>U32</string>
69 <key>Value</key>
70 <integer>100000</integer>
71 </map>
72 <key>ShowMOAPRadar</key>
73 <map>
74 <key>Comment</key>
75 <string>Show the MOAP radar</string>
76 <key>Persist</key>
77 <integer>1</integer>
78 <key>Type</key>
79 <string>Boolean</string>
80 <key>Value</key>
81 <integer>0</integer>
82 </map>
83 <key>FloaterMOAPRadarRect</key>
84 <map>
85 <key>Comment</key>
86 <string>Rectangle for MOAP Radar</string>
87 <key>Persist</key>
88 <integer>1</integer>
89 <key>Type</key>
90 <string>Rect</string>
91 <key>Value</key>
92 <array>
93 <integer>0</integer>
94 <integer>400</integer>
95 <integer>200</integer>
96 <integer>0</integer>
97 </array>
98 </map>
99 <key>MOAPRadarKeepOpen</key>
100 <map>
101 <key>Comment</key>
102 <string>Keeps MOAP radar updates running in background</string>
103 <key>Persist</key>
104 <integer>1</integer>
105 <key>Type</key>
106 <string>Boolean</string>
107 <key>Value</key>
108 <integer>0</integer>
109 </map>
110 <key>MOAPRadarUpdateRate</key>
111 <map>
112 <key>Comment</key>
113 <string>MOAP Radar update rate (0 = high, 1 = medium, 2 = low)</string>
114 <key>Persist</key>
115 <integer>1</integer>
116 <key>Type</key>
117 <string>U32</string>
118 <key>Value</key>
119 <integer>1</integer>
120 </map>
121
5 <!-- BEGIN IMPRUDENCE-SPECIFIC SETTINGS --> 122 <!-- BEGIN IMPRUDENCE-SPECIFIC SETTINGS -->
6 123
7 <!-- begin Aurora-specific settings --> 124 <!-- begin Aurora-specific settings -->
@@ -14645,6 +14762,17 @@
14645 <real>1.0</real> 14762 <real>1.0</real>
14646 </array> 14763 </array>
14647 </map> 14764 </map>
14765 <key>moapbeacon</key>
14766 <map>
14767 <key>Comment</key>
14768 <string>Beacon / Highlight MOAP sources</string>
14769 <key>Persist</key>
14770 <integer>1</integer>
14771 <key>Type</key>
14772 <string>Boolean</string>
14773 <key>Value</key>
14774 <integer>0</integer>
14775 </map>
14648 <key>particlesbeacon</key> 14776 <key>particlesbeacon</key>
14649 <map> 14777 <map>
14650 <key>Comment</key> 14778 <key>Comment</key>
diff --git a/linden/indra/newview/app_settings/ultra_graphics.xml b/linden/indra/newview/app_settings/ultra_graphics.xml
deleted file mode 100644
index f16ec6c..0000000
--- a/linden/indra/newview/app_settings/ultra_graphics.xml
+++ /dev/null
@@ -1,39 +0,0 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes"?>
2<settings version = "101">
3 <!--NO SHADERS-->
4 <RenderAvatarCloth value="TRUE"/>
5 <!--Default for now-->
6 <RenderAvatarLODFactor value="1.0"/>
7 <!--NO SHADERS-->
8 <RenderAvatarVP value="TRUE"/>
9 <!--Short Range-->
10 <RenderFarClip value="256"/>
11 <!--Default for now-->
12 <RenderFlexTimeFactor value="1"/>
13 <!--256... but they don't use this-->
14 <RenderGlowResolutionPow value="9"/>
15 <!--Sun/Moon only-->
16 <RenderLightingDetail value="1"/>
17 <!--Low number-->
18 <RenderMaxPartCount value="4096"/>
19 <!--bump okay-->
20 <RenderObjectBump value="TRUE"/>
21 <!--NO SHADERS-->
22 <RenderReflectionDetail value="3"/>
23 <!--Simple-->
24 <RenderTerrainDetail value="1"/>
25 <!--Default for now-->
26 <RenderTerrainLODFactor value="2.0"/>
27 <!--Default for now-->
28 <RenderTreeLODFactor value="1.0"/>
29 <!--Try Impostors-->
30 <RenderUseImpostors value="TRUE"/>
31 <!--Default for now-->
32 <RenderVolumeLODFactor value="2.0"/>
33 <!--NO SHADERS-->
34 <RenderWaterReflections value="TRUE"/>
35 <!--NO SHADERS-->
36 <VertexShaderEnable value="TRUE"/>
37 <!--NO SHADERS-->
38 <WindLightUseAtmosShaders value="TRUE"/>
39</settings>
diff --git a/linden/indra/newview/chatbar_as_cmdline.cpp b/linden/indra/newview/chatbar_as_cmdline.cpp
index 9777114..e1314f7 100644
--- a/linden/indra/newview/chatbar_as_cmdline.cpp
+++ b/linden/indra/newview/chatbar_as_cmdline.cpp
@@ -302,7 +302,6 @@ bool cmd_line_chat(std::string revised_text, EChatType type)
302 { 302 {
303 if (i >> z) 303 if (i >> z)
304 { 304 {
305 LLVector3 agentPos = gAgent.getPositionAgent();
306 LLViewerRegion* agentRegionp = gAgent.getRegion(); 305 LLViewerRegion* agentRegionp = gAgent.getRegion();
307 if(agentRegionp) 306 if(agentRegionp)
308 { 307 {
diff --git a/linden/indra/newview/featuretable.txt b/linden/indra/newview/featuretable.txt
index a31cd71..6da62f0 100644
--- a/linden/indra/newview/featuretable.txt
+++ b/linden/indra/newview/featuretable.txt
@@ -28,7 +28,7 @@ RenderAvatarCloth 1 1
28RenderAvatarLODFactor 1 1.0 28RenderAvatarLODFactor 1 1.0
29RenderAvatarVP 1 1 29RenderAvatarVP 1 1
30RenderCubeMap 1 1 30RenderCubeMap 1 1
31RenderFarClip 1 256 31RenderFarClip 1 1024
32RenderFlexTimeFactor 1 1.0 32RenderFlexTimeFactor 1 1.0
33RenderFogRatio 1 4.0 33RenderFogRatio 1 4.0
34RenderGamma 1 0 34RenderGamma 1 0
@@ -41,10 +41,10 @@ RenderObjectBump 1 1
41RenderReflectionDetail 1 3 41RenderReflectionDetail 1 3
42RenderTerrainDetail 1 1 42RenderTerrainDetail 1 1
43RenderTerrainLODFactor 1 2.0 43RenderTerrainLODFactor 1 2.0
44RenderTreeLODFactor 1 1.0 44RenderTreeLODFactor 1 12.0
45RenderUseImpostors 1 1 45RenderUseImpostors 1 1
46RenderVBOEnable 1 1 46RenderVBOEnable 1 1
47RenderVolumeLODFactor 1 2.0 47RenderVolumeLODFactor 1 4.0
48RenderWaterReflections 1 1 48RenderWaterReflections 1 1
49UseStartScreen 1 1 49UseStartScreen 1 1
50UseOcclusion 1 1 50UseOcclusion 1 1
@@ -54,8 +54,6 @@ WLSkyDetail 1 128
54Disregard128DefaultDrawDistance 1 1 54Disregard128DefaultDrawDistance 1 1
55Disregard96DefaultDrawDistance 1 1 55Disregard96DefaultDrawDistance 1 1
56RenderTextureMemoryMultiple 1 1.0 56RenderTextureMemoryMultiple 1 1.0
57RenderShaderLightingMaxLevel 1 3
58
59 57
60// 58//
61// Low Graphics Settings 59// Low Graphics Settings
@@ -74,7 +72,7 @@ RenderObjectBump 1 0
74RenderReflectionDetail 1 0 72RenderReflectionDetail 1 0
75RenderTerrainDetail 1 0 73RenderTerrainDetail 1 0
76RenderTerrainLODFactor 1 1 74RenderTerrainLODFactor 1 1
77RenderTreeLODFactor 1 0.5 75RenderTreeLODFactor 1 2.0
78RenderUseImpostors 1 1 76RenderUseImpostors 1 1
79RenderVolumeLODFactor 1 1.125 77RenderVolumeLODFactor 1 1.125
80RenderWaterReflections 1 0 78RenderWaterReflections 1 0
@@ -90,7 +88,7 @@ RenderAnisotropic 1 0
90RenderAvatarCloth 1 0 88RenderAvatarCloth 1 0
91RenderAvatarLODFactor 1 0.5 89RenderAvatarLODFactor 1 0.5
92RenderAvatarVP 1 1 90RenderAvatarVP 1 1
93RenderFarClip 1 96 91RenderFarClip 1 128
94RenderFlexTimeFactor 1 1.0 92RenderFlexTimeFactor 1 1.0
95RenderGlowResolutionPow 1 8 93RenderGlowResolutionPow 1 8
96RenderLightingDetail 1 1 94RenderLightingDetail 1 1
@@ -99,7 +97,7 @@ RenderObjectBump 1 1
99RenderReflectionDetail 1 0 97RenderReflectionDetail 1 0
100RenderTerrainDetail 1 1 98RenderTerrainDetail 1 1
101RenderTerrainLODFactor 1 1.0 99RenderTerrainLODFactor 1 1.0
102RenderTreeLODFactor 1 0.5 100RenderTreeLODFactor 1 4.0
103RenderUseImpostors 1 1 101RenderUseImpostors 1 1
104RenderVolumeLODFactor 1 1.125 102RenderVolumeLODFactor 1 1.125
105RenderWaterReflections 1 0 103RenderWaterReflections 1 0
@@ -115,7 +113,7 @@ RenderAnisotropic 1 1
115RenderAvatarCloth 1 0 113RenderAvatarCloth 1 0
116RenderAvatarLODFactor 1 1.0 114RenderAvatarLODFactor 1 1.0
117RenderAvatarVP 1 1 115RenderAvatarVP 1 1
118RenderFarClip 1 128 116RenderFarClip 1 256
119RenderFlexTimeFactor 1 1.0 117RenderFlexTimeFactor 1 1.0
120RenderGlowResolutionPow 1 9 118RenderGlowResolutionPow 1 9
121RenderLightingDetail 1 1 119RenderLightingDetail 1 1
@@ -124,9 +122,9 @@ RenderObjectBump 1 1
124RenderReflectionDetail 1 2 122RenderReflectionDetail 1 2
125RenderTerrainDetail 1 1 123RenderTerrainDetail 1 1
126RenderTerrainLODFactor 1 2.0 124RenderTerrainLODFactor 1 2.0
127RenderTreeLODFactor 1 0.5 125RenderTreeLODFactor 1 8.0
128RenderUseImpostors 1 1 126RenderUseImpostors 1 1
129RenderVolumeLODFactor 1 1.125 127RenderVolumeLODFactor 1 2.0
130RenderWaterReflections 1 0 128RenderWaterReflections 1 0
131VertexShaderEnable 1 1 129VertexShaderEnable 1 1
132WindLightUseAtmosShaders 1 1 130WindLightUseAtmosShaders 1 1
@@ -140,7 +138,7 @@ RenderAnisotropic 1 1
140RenderAvatarCloth 1 1 138RenderAvatarCloth 1 1
141RenderAvatarLODFactor 1 1.0 139RenderAvatarLODFactor 1 1.0
142RenderAvatarVP 1 1 140RenderAvatarVP 1 1
143RenderFarClip 1 256 141RenderFarClip 1 1024
144RenderFlexTimeFactor 1 1.0 142RenderFlexTimeFactor 1 1.0
145RenderGlowResolutionPow 1 9 143RenderGlowResolutionPow 1 9
146RenderLightingDetail 1 1 144RenderLightingDetail 1 1
@@ -149,9 +147,9 @@ RenderObjectBump 1 1
149RenderReflectionDetail 1 3 147RenderReflectionDetail 1 3
150RenderTerrainDetail 1 1 148RenderTerrainDetail 1 1
151RenderTerrainLODFactor 1 2.0 149RenderTerrainLODFactor 1 2.0
152RenderTreeLODFactor 1 1.0 150RenderTreeLODFactor 1 12.0
153RenderUseImpostors 1 1 151RenderUseImpostors 1 1
154RenderVolumeLODFactor 1 2.0 152RenderVolumeLODFactor 1 4.0
155RenderWaterReflections 1 1 153RenderWaterReflections 1 1
156VertexShaderEnable 1 1 154VertexShaderEnable 1 1
157WindLightUseAtmosShaders 1 1 155WindLightUseAtmosShaders 1 1
diff --git a/linden/indra/newview/featuretable_linux.txt b/linden/indra/newview/featuretable_linux.txt
index 57d712e..c5c685c 100644
--- a/linden/indra/newview/featuretable_linux.txt
+++ b/linden/indra/newview/featuretable_linux.txt
@@ -28,7 +28,7 @@ RenderAvatarCloth 1 1
28RenderAvatarLODFactor 1 1.0 28RenderAvatarLODFactor 1 1.0
29RenderAvatarVP 1 1 29RenderAvatarVP 1 1
30RenderCubeMap 1 1 30RenderCubeMap 1 1
31RenderFarClip 1 256 31RenderFarClip 1 1024
32RenderFlexTimeFactor 1 1.0 32RenderFlexTimeFactor 1 1.0
33RenderFogRatio 1 4.0 33RenderFogRatio 1 4.0
34RenderGamma 1 0 34RenderGamma 1 0
@@ -41,10 +41,10 @@ RenderObjectBump 1 1
41RenderReflectionDetail 1 3 41RenderReflectionDetail 1 3
42RenderTerrainDetail 1 1 42RenderTerrainDetail 1 1
43RenderTerrainLODFactor 1 2.0 43RenderTerrainLODFactor 1 2.0
44RenderTreeLODFactor 1 1.0 44RenderTreeLODFactor 1 12.0
45RenderUseImpostors 1 1 45RenderUseImpostors 1 1
46RenderVBOEnable 1 1 46RenderVBOEnable 1 1
47RenderVolumeLODFactor 1 2.0 47RenderVolumeLODFactor 1 4.0
48RenderWaterReflections 1 1 48RenderWaterReflections 1 1
49UseStartScreen 1 1 49UseStartScreen 1 1
50UseOcclusion 1 1 50UseOcclusion 1 1
@@ -72,7 +72,7 @@ RenderObjectBump 1 0
72RenderReflectionDetail 1 0 72RenderReflectionDetail 1 0
73RenderTerrainDetail 1 0 73RenderTerrainDetail 1 0
74RenderTerrainLODFactor 1 1 74RenderTerrainLODFactor 1 1
75RenderTreeLODFactor 1 0.5 75RenderTreeLODFactor 1 2.0
76RenderUseImpostors 1 1 76RenderUseImpostors 1 1
77RenderVolumeLODFactor 1 1.125 77RenderVolumeLODFactor 1 1.125
78RenderWaterReflections 1 0 78RenderWaterReflections 1 0
@@ -88,7 +88,7 @@ RenderAnisotropic 1 0
88RenderAvatarCloth 1 0 88RenderAvatarCloth 1 0
89RenderAvatarLODFactor 1 0.5 89RenderAvatarLODFactor 1 0.5
90RenderAvatarVP 1 1 90RenderAvatarVP 1 1
91RenderFarClip 1 96 91RenderFarClip 1 128
92RenderFlexTimeFactor 1 1.0 92RenderFlexTimeFactor 1 1.0
93RenderGlowResolutionPow 1 8 93RenderGlowResolutionPow 1 8
94RenderLightingDetail 1 1 94RenderLightingDetail 1 1
@@ -97,7 +97,7 @@ RenderObjectBump 1 1
97RenderReflectionDetail 1 0 97RenderReflectionDetail 1 0
98RenderTerrainDetail 1 1 98RenderTerrainDetail 1 1
99RenderTerrainLODFactor 1 1.0 99RenderTerrainLODFactor 1 1.0
100RenderTreeLODFactor 1 0.5 100RenderTreeLODFactor 1 4.0
101RenderUseImpostors 1 1 101RenderUseImpostors 1 1
102RenderVolumeLODFactor 1 1.125 102RenderVolumeLODFactor 1 1.125
103RenderWaterReflections 1 0 103RenderWaterReflections 1 0
@@ -113,7 +113,7 @@ RenderAnisotropic 1 1
113RenderAvatarCloth 1 0 113RenderAvatarCloth 1 0
114RenderAvatarLODFactor 1 1.0 114RenderAvatarLODFactor 1 1.0
115RenderAvatarVP 1 1 115RenderAvatarVP 1 1
116RenderFarClip 1 128 116RenderFarClip 1 256
117RenderFlexTimeFactor 1 1.0 117RenderFlexTimeFactor 1 1.0
118RenderGlowResolutionPow 1 9 118RenderGlowResolutionPow 1 9
119RenderLightingDetail 1 1 119RenderLightingDetail 1 1
@@ -122,9 +122,9 @@ RenderObjectBump 1 1
122RenderReflectionDetail 1 2 122RenderReflectionDetail 1 2
123RenderTerrainDetail 1 1 123RenderTerrainDetail 1 1
124RenderTerrainLODFactor 1 2.0 124RenderTerrainLODFactor 1 2.0
125RenderTreeLODFactor 1 0.5 125RenderTreeLODFactor 1 8.0
126RenderUseImpostors 1 1 126RenderUseImpostors 1 1
127RenderVolumeLODFactor 1 1.125 127RenderVolumeLODFactor 1 2.0
128RenderWaterReflections 1 0 128RenderWaterReflections 1 0
129VertexShaderEnable 1 1 129VertexShaderEnable 1 1
130WindLightUseAtmosShaders 1 1 130WindLightUseAtmosShaders 1 1
@@ -138,7 +138,7 @@ RenderAnisotropic 1 1
138RenderAvatarCloth 1 1 138RenderAvatarCloth 1 1
139RenderAvatarLODFactor 1 1.0 139RenderAvatarLODFactor 1 1.0
140RenderAvatarVP 1 1 140RenderAvatarVP 1 1
141RenderFarClip 1 256 141RenderFarClip 1 1024
142RenderFlexTimeFactor 1 1.0 142RenderFlexTimeFactor 1 1.0
143RenderGlowResolutionPow 1 9 143RenderGlowResolutionPow 1 9
144RenderLightingDetail 1 1 144RenderLightingDetail 1 1
@@ -147,9 +147,9 @@ RenderObjectBump 1 1
147RenderReflectionDetail 1 3 147RenderReflectionDetail 1 3
148RenderTerrainDetail 1 1 148RenderTerrainDetail 1 1
149RenderTerrainLODFactor 1 2.0 149RenderTerrainLODFactor 1 2.0
150RenderTreeLODFactor 1 1.0 150RenderTreeLODFactor 1 12.0
151RenderUseImpostors 1 1 151RenderUseImpostors 1 1
152RenderVolumeLODFactor 1 2.0 152RenderVolumeLODFactor 1 4.0
153RenderWaterReflections 1 1 153RenderWaterReflections 1 1
154VertexShaderEnable 1 1 154VertexShaderEnable 1 1
155WindLightUseAtmosShaders 1 1 155WindLightUseAtmosShaders 1 1
diff --git a/linden/indra/newview/featuretable_mac.txt b/linden/indra/newview/featuretable_mac.txt
index 15974c0..dec533b 100644
--- a/linden/indra/newview/featuretable_mac.txt
+++ b/linden/indra/newview/featuretable_mac.txt
@@ -23,39 +23,37 @@ version 20
23// NOTE: All settings are set to the MIN of applied values, including 'all'! 23// NOTE: All settings are set to the MIN of applied values, including 'all'!
24// 24//
25list all 25list all
26RenderAnisotropic 1 0 26RenderAnisotropic 1 0
27RenderAvatarCloth 0 0 27RenderAvatarCloth 1 1
28RenderAvatarLODFactor 1 1.0 28RenderAvatarLODFactor 1 1.0
29RenderAvatarVP 1 0 29RenderAvatarVP 1 1
30RenderCubeMap 1 1 30RenderCubeMap 1 1
31RenderFarClip 1 256 31RenderFarClip 1 1024
32RenderFlexTimeFactor 1 1.0 32RenderFlexTimeFactor 1 1.0
33RenderFogRatio 1 4.0 33RenderFogRatio 1 4.0
34RenderGamma 1 0 34RenderGamma 1 0
35RenderGlowResolutionPow 1 9 35RenderGlowResolutionPow 1 9
36RenderGround 1 1 36RenderGround 1 1
37RenderLightingDetail 1 1 37RenderLightingDetail 1 1
38RenderMaxPartCount 1 8192 38RenderMaxPartCount 1 8192
39RenderNightBrightness 1 1.0 39RenderNightBrightness 1 1.0
40RenderObjectBump 1 1 40RenderObjectBump 1 1
41RenderReflectionDetail 1 3 41RenderReflectionDetail 1 3
42RenderTerrainDetail 1 1 42RenderTerrainDetail 1 1
43RenderTerrainLODFactor 1 2.0 43RenderTerrainLODFactor 1 2.0
44RenderTreeLODFactor 1 1.0 44RenderTreeLODFactor 1 12.0
45RenderUseImpostors 1 1 45RenderUseImpostors 1 1
46RenderVBOEnable 1 1 46RenderVBOEnable 1 1
47RenderVolumeLODFactor 1 2.0 47RenderVolumeLODFactor 1 4.0
48RenderWaterReflections 1 1 48RenderWaterReflections 1 1
49UseOcclusion 1 1 49UseStartScreen 1 1
50VertexShaderEnable 1 1 50UseOcclusion 1 1
51WindLightUseAtmosShaders 1 1 51VertexShaderEnable 1 1
52WLSkyDetail 1 128 52WindLightUseAtmosShaders 1 1
53RenderUseCleverUI 1 1 53WLSkyDetail 1 128
54Disregard128DefaultDrawDistance 1 1
55Disregard96DefaultDrawDistance 1 1
56RenderTextureMemoryMultiple 1 0.5
57Disregard128DefaultDrawDistance 1 1 54Disregard128DefaultDrawDistance 1 1
58Disregard96DefaultDrawDistance 1 1 55Disregard96DefaultDrawDistance 1 1
56RenderTextureMemoryMultiple 1 1.0
59 57
60// 58//
61// Low Graphics Settings 59// Low Graphics Settings
@@ -74,7 +72,7 @@ RenderObjectBump 1 0
74RenderReflectionDetail 1 0 72RenderReflectionDetail 1 0
75RenderTerrainDetail 1 0 73RenderTerrainDetail 1 0
76RenderTerrainLODFactor 1 1 74RenderTerrainLODFactor 1 1
77RenderTreeLODFactor 1 0.5 75RenderTreeLODFactor 1 2.0
78RenderUseImpostors 1 1 76RenderUseImpostors 1 1
79RenderVolumeLODFactor 1 1.125 77RenderVolumeLODFactor 1 1.125
80RenderWaterReflections 1 0 78RenderWaterReflections 1 0
@@ -90,7 +88,7 @@ RenderAnisotropic 1 0
90RenderAvatarCloth 1 0 88RenderAvatarCloth 1 0
91RenderAvatarLODFactor 1 0.5 89RenderAvatarLODFactor 1 0.5
92RenderAvatarVP 1 1 90RenderAvatarVP 1 1
93RenderFarClip 1 96 91RenderFarClip 1 128
94RenderFlexTimeFactor 1 1.0 92RenderFlexTimeFactor 1 1.0
95RenderGlowResolutionPow 1 8 93RenderGlowResolutionPow 1 8
96RenderLightingDetail 1 1 94RenderLightingDetail 1 1
@@ -99,7 +97,7 @@ RenderObjectBump 1 1
99RenderReflectionDetail 1 0 97RenderReflectionDetail 1 0
100RenderTerrainDetail 1 1 98RenderTerrainDetail 1 1
101RenderTerrainLODFactor 1 1.0 99RenderTerrainLODFactor 1 1.0
102RenderTreeLODFactor 1 0.5 100RenderTreeLODFactor 1 4.0
103RenderUseImpostors 1 1 101RenderUseImpostors 1 1
104RenderVolumeLODFactor 1 1.125 102RenderVolumeLODFactor 1 1.125
105RenderWaterReflections 1 0 103RenderWaterReflections 1 0
@@ -115,7 +113,7 @@ RenderAnisotropic 1 1
115RenderAvatarCloth 1 0 113RenderAvatarCloth 1 0
116RenderAvatarLODFactor 1 1.0 114RenderAvatarLODFactor 1 1.0
117RenderAvatarVP 1 1 115RenderAvatarVP 1 1
118RenderFarClip 1 128 116RenderFarClip 1 256
119RenderFlexTimeFactor 1 1.0 117RenderFlexTimeFactor 1 1.0
120RenderGlowResolutionPow 1 9 118RenderGlowResolutionPow 1 9
121RenderLightingDetail 1 1 119RenderLightingDetail 1 1
@@ -124,9 +122,9 @@ RenderObjectBump 1 1
124RenderReflectionDetail 1 2 122RenderReflectionDetail 1 2
125RenderTerrainDetail 1 1 123RenderTerrainDetail 1 1
126RenderTerrainLODFactor 1 2.0 124RenderTerrainLODFactor 1 2.0
127RenderTreeLODFactor 1 0.5 125RenderTreeLODFactor 1 8.0
128RenderUseImpostors 1 1 126RenderUseImpostors 1 1
129RenderVolumeLODFactor 1 1.125 127RenderVolumeLODFactor 1 2.0
130RenderWaterReflections 1 0 128RenderWaterReflections 1 0
131VertexShaderEnable 1 1 129VertexShaderEnable 1 1
132WindLightUseAtmosShaders 1 1 130WindLightUseAtmosShaders 1 1
@@ -140,7 +138,7 @@ RenderAnisotropic 1 1
140RenderAvatarCloth 1 1 138RenderAvatarCloth 1 1
141RenderAvatarLODFactor 1 1.0 139RenderAvatarLODFactor 1 1.0
142RenderAvatarVP 1 1 140RenderAvatarVP 1 1
143RenderFarClip 1 256 141RenderFarClip 1 1024
144RenderFlexTimeFactor 1 1.0 142RenderFlexTimeFactor 1 1.0
145RenderGlowResolutionPow 1 9 143RenderGlowResolutionPow 1 9
146RenderLightingDetail 1 1 144RenderLightingDetail 1 1
@@ -149,9 +147,9 @@ RenderObjectBump 1 1
149RenderReflectionDetail 1 3 147RenderReflectionDetail 1 3
150RenderTerrainDetail 1 1 148RenderTerrainDetail 1 1
151RenderTerrainLODFactor 1 2.0 149RenderTerrainLODFactor 1 2.0
152RenderTreeLODFactor 1 1.0 150RenderTreeLODFactor 1 12.0
153RenderUseImpostors 1 1 151RenderUseImpostors 1 1
154RenderVolumeLODFactor 1 2.0 152RenderVolumeLODFactor 1 4.0
155RenderWaterReflections 1 1 153RenderWaterReflections 1 1
156VertexShaderEnable 1 1 154VertexShaderEnable 1 1
157WindLightUseAtmosShaders 1 1 155WindLightUseAtmosShaders 1 1
diff --git a/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss b/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss
index c551919..a396381 100644
--- a/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss
+++ b/linden/indra/newview/installers/windows/imprudence_installer_script_experimental.iss
@@ -9,15 +9,15 @@
9; These will change 9; These will change
10AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460} 10AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460}
11AppName=Imprudence Viewer Experimental 11AppName=Imprudence Viewer Experimental
12AppVerName=Imprudence Viewer 1.4.0 beta 1.5 windows test release 12AppVerName=Imprudence Viewer 1.4.0.3 exp 1 windows test release
13DefaultDirName={pf}\ImprudenceExperimental 13DefaultDirName={pf}\ImprudenceExperimental
14DefaultGroupName=Imprudence Viewer Experimental 14DefaultGroupName=Imprudence Viewer Experimental
15VersionInfoProductName=Imprudence Viewer Experimental 15VersionInfoProductName=Imprudence Viewer Experimental
16OutputBaseFilename=Imprudence-1.4.0-beta-1.5-windows-test 16OutputBaseFilename=Imprudence-1.4.0.3-exp-1-windows-test
17VersionInfoVersion=1.4.0 17VersionInfoVersion=1.4.0.3
18VersionInfoTextVersion=1.4.0 18VersionInfoTextVersion=1.4.0.3
19VersionInfoProductVersion=1.4.0 19VersionInfoProductVersion=1.4.0.3
20AppVersion=1.4.0 20AppVersion=1.4.0.3
21VersionInfoCopyright=2011 21VersionInfoCopyright=2011
22 22
23; These won't change 23; These won't change
diff --git a/linden/indra/newview/installers/windows/imprudence_installer_template.iss b/linden/indra/newview/installers/windows/imprudence_installer_template.iss
index 558b7ec..6ae437e 100644
--- a/linden/indra/newview/installers/windows/imprudence_installer_template.iss
+++ b/linden/indra/newview/installers/windows/imprudence_installer_template.iss
@@ -8,16 +8,16 @@
8; Imp Experimental ID: 1B3E68BC-13EB-4277-9439-CB5FF9259460 8; Imp Experimental ID: 1B3E68BC-13EB-4277-9439-CB5FF9259460
9 9
10; These will change 10; These will change
11AppId={{D7736EE8-AFCE-4735-BBE3-652CDFBBFCA8} 11AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460}
12AppName=%%APPNAME%% 12AppName=%%APPNAME%%
13AppVerName=%%APPVERNAME%% 13AppVerName=%%APPVERNAME%%
14DefaultDirName={pf}\Imprudence 14DefaultDirName={pf}\Imprudence
15DefaultGroupName=Imprudence Viewer 15DefaultGroupName=Imprudence Viewer
16VersionInfoProductName=%%APPNAME%% 16VersionInfoProductName=%%APPNAME%%
17OutputBaseFilename=%%INSTALLERFILENAME%% 17OutputBaseFilename=%%INSTALLERFILENAME%%
18VersionInfoVersion=%%VERSION%% 18VersionInfoVersion=%%VERSIONNUMBER%%
19VersionInfoTextVersion=%%VERSION%% 19VersionInfoTextVersion=%%VERSION%%
20VersionInfoProductVersion=%%VERSION%% 20VersionInfoProductVersion=%%VERSIONNUMBER%%
21AppVersion=%%VERSION%% 21AppVersion=%%VERSION%%
22VersionInfoCopyright=2011 22VersionInfoCopyright=2011
23 23
@@ -307,7 +307,7 @@ begin
307 Success := RegQueryDWordValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V); 307 Success := RegQueryDWordValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V);
308 end else begin 308 end else begin
309 Success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V); 309 Success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V);
310 end 310 end;
311 311
312 if Success = TRUE then begin 312 if Success = TRUE then begin
313 if V = 1 then begin 313 if V = 1 then begin
diff --git a/linden/indra/newview/linux_tools/register_secondlifeprotocol.sh b/linden/indra/newview/linux_tools/register_secondlifeprotocol.sh
index 338fc26..3f2378a 100755
--- a/linden/indra/newview/linux_tools/register_secondlifeprotocol.sh
+++ b/linden/indra/newview/linux_tools/register_secondlifeprotocol.sh
@@ -22,13 +22,12 @@ else
22fi 22fi
23 23
24# Register handler for KDE-aware apps 24# Register handler for KDE-aware apps
25if [ -z "$KDEHOME" ]; then 25for LLKDECONFIG in kde-config kde4-config; do
26 KDEHOME=~/.kde 26 if [ `which $LLKDECONFIG` ]; then
27fi 27 LLKDEPROTODIR=`$LLKDECONFIG --path services | cut -d ':' -f 1`
28LLKDEPROTDIR=${KDEHOME}/share/services 28 if [ -d "$LLKDEPROTODIR" ]; then
29if [ -d "$LLKDEPROTDIR" ]; then 29 LLKDEPROTOFILE=${LLKDEPROTODIR}/secondlife.protocol
30 LLKDEPROTFILE=${LLKDEPROTDIR}/secondlife.protocol 30 cat > ${LLKDEPROTOFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTOFILE}
31 cat > ${LLKDEPROTFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTFILE}
32[Protocol] 31[Protocol]
33exec=${HANDLER} '%u' 32exec=${HANDLER} '%u'
34protocol=secondlife 33protocol=secondlife
@@ -41,6 +40,8 @@ writing=false
41makedir=false 40makedir=false
42deleting=false 41deleting=false
43EOF 42EOF
44else 43 else
45 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. 44 echo Warning: Did not register secondlife:// handler with KDE: Directory $LLKDEPROTODIR does not exist.
46fi 45 fi
46 fi
47done
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 09d65d1..54b71eb 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -1613,8 +1613,6 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
1613 abs_target_offset.abs(); 1613 abs_target_offset.abs();
1614 1614
1615 LLVector3 target_offset_dir = target_offset_origin; 1615 LLVector3 target_offset_dir = target_offset_origin;
1616 F32 object_radius = mFocusObject->getVObjRadius();
1617
1618 BOOL target_outside_object_extents = FALSE; 1616 BOOL target_outside_object_extents = FALSE;
1619 1617
1620 for (U32 i = VX; i <= VZ; i++) 1618 for (U32 i = VX; i <= VZ; i++)
@@ -1708,18 +1706,6 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
1708 1706
1709 LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent()); 1707 LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent());
1710 1708
1711 // length projected orthogonal to target offset
1712 F32 camera_offset_dist = (camera_offset_object - target_offset_dir * (camera_offset_object * target_offset_dir)).magVec();
1713
1714 // calculate whether the target point would be "visible" if it were outside the bounding box
1715 // on the opposite of the splitting plane defined by object_split_axis;
1716 BOOL exterior_target_visible = FALSE;
1717 if (camera_offset_dist > object_radius)
1718 {
1719 // target is visible from camera, so turn off fov zoom
1720 exterior_target_visible = TRUE;
1721 }
1722
1723 F32 camera_offset_clip = camera_offset_object * object_split_axis; 1709 F32 camera_offset_clip = camera_offset_object * object_split_axis;
1724 F32 target_offset_clip = target_offset_dir * object_split_axis; 1710 F32 target_offset_clip = target_offset_dir * object_split_axis;
1725 1711
@@ -2538,12 +2524,10 @@ void LLAgent::autoPilot(F32 *delta_yaw)
2538 *delta_yaw = yaw; 2524 *delta_yaw = yaw;
2539 2525
2540 // Compute when to start slowing down and when to stop 2526 // Compute when to start slowing down and when to stop
2541 F32 stop_distance = mAutoPilotStopDistance;
2542 F32 slow_distance; 2527 F32 slow_distance;
2543 if (getFlying()) 2528 if (getFlying())
2544 { 2529 {
2545 slow_distance = llmax(6.f, mAutoPilotStopDistance + 5.f); 2530 slow_distance = llmax(6.f, mAutoPilotStopDistance + 5.f);
2546 stop_distance = llmax(2.f, mAutoPilotStopDistance);
2547 } 2531 }
2548 else 2532 else
2549 { 2533 {
@@ -3719,7 +3703,6 @@ F32 LLAgent::calcCameraFOVZoomFactor()
3719 else if (mFocusObject.notNull() && !mFocusObject->isAvatar()) 3703 else if (mFocusObject.notNull() && !mFocusObject->isAvatar())
3720 { 3704 {
3721 // don't FOV zoom on mostly transparent objects 3705 // don't FOV zoom on mostly transparent objects
3722 LLVector3 focus_offset = mFocusObjectOffset;
3723 F32 obj_min_dist = 0.f; 3706 F32 obj_min_dist = 0.f;
3724 if (!gSavedSettings.getBOOL("DisableMinZoomDist")) 3707 if (!gSavedSettings.getBOOL("DisableMinZoomDist"))
3725 calcCameraMinDistance(obj_min_dist); 3708 calcCameraMinDistance(obj_min_dist);
@@ -3746,9 +3729,8 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
3746 // Compute base camera position and look-at points. 3729 // Compute base camera position and look-at points.
3747 F32 camera_land_height; 3730 F32 camera_land_height;
3748 LLVector3d frame_center_global = mAvatarObject.isNull() ? getPositionGlobal() 3731 LLVector3d frame_center_global = mAvatarObject.isNull() ? getPositionGlobal()
3749 : getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition()); 3732 : getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition());
3750 3733
3751 LLVector3 upAxis = getUpAxis();
3752 BOOL isConstrained = FALSE; 3734 BOOL isConstrained = FALSE;
3753 LLVector3d head_offset; 3735 LLVector3d head_offset;
3754 head_offset.setVec(mThirdPersonHeadOffset); 3736 head_offset.setVec(mThirdPersonHeadOffset);
@@ -3883,7 +3865,6 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
3883 // set the global camera position 3865 // set the global camera position
3884 LLVector3d camera_offset; 3866 LLVector3d camera_offset;
3885 3867
3886 LLVector3 av_pos = mAvatarObject.isNull() ? LLVector3::zero : mAvatarObject->getRenderPosition();
3887 camera_offset.setVec( local_camera_offset ); 3868 camera_offset.setVec( local_camera_offset );
3888 camera_position_global = frame_center_global + head_offset + camera_offset; 3869 camera_position_global = frame_center_global + head_offset + camera_offset;
3889 3870
diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp
index 5a383bc..ee49752 100644
--- a/linden/indra/newview/lldrawable.cpp
+++ b/linden/indra/newview/lldrawable.cpp
@@ -494,7 +494,6 @@ F32 LLDrawable::updateXform(BOOL undamped)
494 //scaling 494 //scaling
495 LLVector3 target_scale = mVObjp->getScale(); 495 LLVector3 target_scale = mVObjp->getScale();
496 LLVector3 old_scale = mCurrentScale; 496 LLVector3 old_scale = mCurrentScale;
497 LLVector3 dest_scale = target_scale;
498 497
499 // Damping 498 // Damping
500 F32 dist_squared = 0.f; 499 F32 dist_squared = 0.f;
@@ -834,7 +833,6 @@ const LLVector3* LLDrawable::getSpatialExtents() const
834 833
835void LLDrawable::setSpatialExtents(LLVector3 min, LLVector3 max) 834void LLDrawable::setSpatialExtents(LLVector3 min, LLVector3 max)
836{ 835{
837 LLVector3 size = max - min;
838 mExtents[0] = min; 836 mExtents[0] = min;
839 mExtents[1] = max; 837 mExtents[1] = max;
840} 838}
@@ -1098,7 +1096,6 @@ LLCamera LLSpatialBridge::transformCamera(LLCamera& camera)
1098 LLCamera ret = camera; 1096 LLCamera ret = camera;
1099 LLXformMatrix* mat = mDrawable->getXform(); 1097 LLXformMatrix* mat = mDrawable->getXform();
1100 LLVector3 center = LLVector3(0,0,0) * mat->getWorldMatrix(); 1098 LLVector3 center = LLVector3(0,0,0) * mat->getWorldMatrix();
1101 LLQuaternion rotation = LLQuaternion(mat->getWorldMatrix());
1102 1099
1103 LLVector3 delta = ret.getOrigin() - center; 1100 LLVector3 delta = ret.getOrigin() - center;
1104 LLQuaternion rot = ~mat->getRotation(); 1101 LLQuaternion rot = ~mat->getRotation();
diff --git a/linden/indra/newview/lightshare.cpp b/linden/indra/newview/llettherebelight.cpp
index db391f5..7fc2a3d 100644
--- a/linden/indra/newview/lightshare.cpp
+++ b/linden/indra/newview/llettherebelight.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file lightshare.cpp 2 * @file llettherebelight.cpp
3 * @brief Handler for Meta7 Lightshare (region-side Windlight settings), and other methods of sharing WindLight. 3 * @brief Handler for Meta7 Lightshare (region-side Windlight settings), and other methods of sharing WindLight.
4 * 4 *
5 * Copyright (c) 2010, Tom Grimshaw (Tom Meta) 5 * Copyright (c) 2010, Tom Grimshaw (Tom Meta)
@@ -38,7 +38,7 @@
38#include "message.h" 38#include "message.h"
39#include "meta7windlight.h" 39#include "meta7windlight.h"
40 40
41#include "lightshare.h" 41#include "llettherebelight.h"
42 42
43#include "llagent.h" 43#include "llagent.h"
44#include "llworld.h" 44#include "llworld.h"
diff --git a/linden/indra/newview/lightshare.h b/linden/indra/newview/llettherebelight.h
index 3561a91..3c997e5 100644
--- a/linden/indra/newview/lightshare.h
+++ b/linden/indra/newview/llettherebelight.h
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file lightshare.h 2 * @file llettherebelight.h
3 * @brief WindlightMessage class definition. 3 * @brief WindlightMessage class definition.
4 * 4 *
5 * Copyright (c) 2010, Jacek Antonelli 5 * Copyright (c) 2010, Jacek Antonelli
diff --git a/linden/indra/newview/llflexibleobject.cpp b/linden/indra/newview/llflexibleobject.cpp
index 8f2c6d5..ad4341c 100644
--- a/linden/indra/newview/llflexibleobject.cpp
+++ b/linden/indra/newview/llflexibleobject.cpp
@@ -233,9 +233,6 @@ void LLVolumeImplFlexible::setAttributesOfAllSections(LLVector3* inScale)
233 mSection[0].mVelocity.setVec(0,0,0); 233 mSection[0].mVelocity.setVec(0,0,0);
234 mSection[0].mAxisRotation.setQuat(begin_rot,0,0,1); 234 mSection[0].mAxisRotation.setQuat(begin_rot,0,0,1);
235 235
236 LLVector3 parentSectionPosition = mSection[0].mPosition;
237 LLVector3 last_direction = mSection[0].mDirection;
238
239 remapSections(mSection, mInitializedRes, mSection, mSimulateRes); 236 remapSections(mSection, mInitializedRes, mSection, mSimulateRes);
240 mInitializedRes = mSimulateRes; 237 mInitializedRes = mSimulateRes;
241 238
diff --git a/linden/indra/newview/llfloateractivespeakers.cpp b/linden/indra/newview/llfloateractivespeakers.cpp
index 75cf176..c1ba5da 100644
--- a/linden/indra/newview/llfloateractivespeakers.cpp
+++ b/linden/indra/newview/llfloateractivespeakers.cpp
@@ -1010,7 +1010,7 @@ void LLSpeakerMgr::update(BOOL resort_ok)
1010 LLUUID speaker_id = speaker_it->first; 1010 LLUUID speaker_id = speaker_it->first;
1011 LLSpeaker* speakerp = speaker_it->second; 1011 LLSpeaker* speakerp = speaker_it->second;
1012 1012
1013 speaker_map_t::iterator cur_speaker_it = speaker_it++; 1013 speaker_it++;
1014 1014
1015 if (voice_channel_active && gVoiceClient->getVoiceEnabled(speaker_id)) 1015 if (voice_channel_active && gVoiceClient->getVoiceEnabled(speaker_id))
1016 { 1016 {
diff --git a/linden/indra/newview/llfloaterbeacons.cpp b/linden/indra/newview/llfloaterbeacons.cpp
index aa89780..7c40931 100644
--- a/linden/indra/newview/llfloaterbeacons.cpp
+++ b/linden/indra/newview/llfloaterbeacons.cpp
@@ -54,6 +54,7 @@ LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed)
54 LLPipeline::setRenderScriptedTouchBeacons(gSavedSettings.getBOOL("scripttouchbeacon")); 54 LLPipeline::setRenderScriptedTouchBeacons(gSavedSettings.getBOOL("scripttouchbeacon"));
55 LLPipeline::setRenderScriptedBeacons( gSavedSettings.getBOOL("scriptsbeacon")); 55 LLPipeline::setRenderScriptedBeacons( gSavedSettings.getBOOL("scriptsbeacon"));
56 LLPipeline::setRenderPhysicalBeacons( gSavedSettings.getBOOL("physicalbeacon")); 56 LLPipeline::setRenderPhysicalBeacons( gSavedSettings.getBOOL("physicalbeacon"));
57 LLPipeline::setRenderMOAPBeacons( gSavedSettings.getBOOL("moapbeacon"));
57 LLPipeline::setRenderSoundBeacons( gSavedSettings.getBOOL("soundsbeacon")); 58 LLPipeline::setRenderSoundBeacons( gSavedSettings.getBOOL("soundsbeacon"));
58 LLPipeline::setRenderParticleBeacons( gSavedSettings.getBOOL("particlesbeacon")); 59 LLPipeline::setRenderParticleBeacons( gSavedSettings.getBOOL("particlesbeacon"));
59 LLPipeline::setRenderHighlights( gSavedSettings.getBOOL("renderhighlights")); 60 LLPipeline::setRenderHighlights( gSavedSettings.getBOOL("renderhighlights"));
@@ -67,6 +68,7 @@ BOOL LLFloaterBeacons::postBuild()
67 childSetCommitCallback("physical", onClickUICheck, this); 68 childSetCommitCallback("physical", onClickUICheck, this);
68 childSetCommitCallback("sounds", onClickUICheck, this); 69 childSetCommitCallback("sounds", onClickUICheck, this);
69 childSetCommitCallback("particles", onClickUICheck, this); 70 childSetCommitCallback("particles", onClickUICheck, this);
71 childSetCommitCallback("moap", onClickUICheck, this);
70 childSetCommitCallback("highlights", onClickUICheck, this); 72 childSetCommitCallback("highlights", onClickUICheck, this);
71 childSetCommitCallback("beacons", onClickUICheck, this); 73 childSetCommitCallback("beacons", onClickUICheck, this);
72 return TRUE; 74 return TRUE;
@@ -132,6 +134,7 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl, void* data)
132 else if(name == "physical") LLPipeline::setRenderPhysicalBeacons(check->get()); 134 else if(name == "physical") LLPipeline::setRenderPhysicalBeacons(check->get());
133 else if(name == "sounds") LLPipeline::setRenderSoundBeacons(check->get()); 135 else if(name == "sounds") LLPipeline::setRenderSoundBeacons(check->get());
134 else if(name == "particles") LLPipeline::setRenderParticleBeacons(check->get()); 136 else if(name == "particles") LLPipeline::setRenderParticleBeacons(check->get());
137 else if(name == "moap") LLPipeline::setRenderMOAPBeacons(check->get());
135 else if(name == "highlights") 138 else if(name == "highlights")
136 { 139 {
137 LLPipeline::toggleRenderHighlights(NULL); 140 LLPipeline::toggleRenderHighlights(NULL);
diff --git a/linden/indra/newview/llfloaterbuildoptions.cpp b/linden/indra/newview/llfloaterbuildoptions.cpp
index 8c6c5f3..b6c15b6 100644
--- a/linden/indra/newview/llfloaterbuildoptions.cpp
+++ b/linden/indra/newview/llfloaterbuildoptions.cpp
@@ -115,6 +115,9 @@ BOOL LLFloaterBuildOptions::postBuild()
115 getChild<LLTextureCtrl>("texture control")->setImageAssetID(LLUUID(gSavedPerAccountSettings.getString("BuildPrefs_Texture"))); 115 getChild<LLTextureCtrl>("texture control")->setImageAssetID(LLUUID(gSavedPerAccountSettings.getString("BuildPrefs_Texture")));
116 116
117 childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getBOOL("RenderHighlightSelections") ); 117 childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getBOOL("RenderHighlightSelections") );
118 childSetValue("BuildPrefsRenderHidden_toggle", gSavedSettings.getBOOL("RenderHiddenSelections") );
119 childSetValue("BuildPrefsRenderLightRadius_toggle", gSavedSettings.getBOOL("RenderLightRadius") );
120 childSetValue("BuildPrefsShowSelectionBeam_toggle", gSavedSettings.getBOOL("ShowSelectionBeam") );
118 childSetValue("grouplandrez", gSavedSettings.getBOOL("RezWithLandGroup") ); 121 childSetValue("grouplandrez", gSavedSettings.getBOOL("RezWithLandGroup") );
119 childSetValue("GridSubUnit", gSavedSettings.getBOOL("GridSubUnit") ); 122 childSetValue("GridSubUnit", gSavedSettings.getBOOL("GridSubUnit") );
120 childSetValue("GridCrossSection", gSavedSettings.getBOOL("GridCrossSections") ); 123 childSetValue("GridCrossSection", gSavedSettings.getBOOL("GridCrossSections") );
@@ -293,6 +296,17 @@ void LLFloaterBuildOptions::apply()
293 LLSelectMgr::sRenderSelectionHighlights = !LLSelectMgr::sRenderSelectionHighlights; 296 LLSelectMgr::sRenderSelectionHighlights = !LLSelectMgr::sRenderSelectionHighlights;
294 gSavedSettings.setBOOL("RenderHighlightSelections", LLSelectMgr::sRenderSelectionHighlights); 297 gSavedSettings.setBOOL("RenderHighlightSelections", LLSelectMgr::sRenderSelectionHighlights);
295 } 298 }
299 if (gSavedSettings.getBOOL("RenderHiddenSelections") != (BOOL)(childGetValue("BuildPrefsRenderHidden_toggle").asBoolean()))
300 {
301 LLSelectMgr::sRenderHiddenSelections = !LLSelectMgr::sRenderHiddenSelections;
302 gSavedSettings.setBOOL("RenderHiddenSelections", LLSelectMgr::sRenderHiddenSelections);
303 }
304 if (gSavedSettings.getBOOL("RenderLightRadius") != (BOOL)(childGetValue("BuildPrefsRenderLightRadius_toggle").asBoolean()))
305 {
306 LLSelectMgr::sRenderLightRadius = !LLSelectMgr::sRenderLightRadius;
307 gSavedSettings.setBOOL("RenderLightRadius", LLSelectMgr::sRenderLightRadius);
308 }
309 gSavedSettings.setBOOL("ShowSelectionBeam", childGetValue("BuildPrefsShowSelectionBeam_toggle").asBoolean() );
296 310
297 gSavedSettings.setBOOL("RezWithLandGroup", childGetValue("grouplandrez").asBoolean() ); 311 gSavedSettings.setBOOL("RezWithLandGroup", childGetValue("grouplandrez").asBoolean() );
298 gSavedSettings.setBOOL("GridSubUnit", childGetValue("GridSubUnit").asBoolean() ); 312 gSavedSettings.setBOOL("GridSubUnit", childGetValue("GridSubUnit").asBoolean() );
@@ -340,6 +354,9 @@ void LLFloaterBuildOptions::reset()
340 mBuildTextureUUID = (LLUUID)gSavedPerAccountSettings.getControl("BuildPrefs_Texture")->getDefault().asString(); 354 mBuildTextureUUID = (LLUUID)gSavedPerAccountSettings.getControl("BuildPrefs_Texture")->getDefault().asString();
341 355
342 childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getControl("RenderHighlightSelections")->getDefault() ); 356 childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getControl("RenderHighlightSelections")->getDefault() );
357 childSetValue("BuildPrefsRenderHidden_toggle", gSavedSettings.getControl("RenderHiddenSelections")->getDefault() );
358 childSetValue("BuildPrefsRenderLightRadius_toggle", gSavedSettings.getControl("RenderLightRadius")->getDefault() );
359 childSetValue("BuildPrefsShowSelectionBeam_toggle", gSavedSettings.getControl("ShowSelectionBeam")->getDefault() );
343 childSetValue("grouplandrez", gSavedSettings.getControl("RezWithLandGroup")->getDefault() ); 360 childSetValue("grouplandrez", gSavedSettings.getControl("RezWithLandGroup")->getDefault() );
344 childSetValue("GridSubUnit", gSavedSettings.getControl("GridSubUnit")->getDefault() ); 361 childSetValue("GridSubUnit", gSavedSettings.getControl("GridSubUnit")->getDefault() );
345 childSetValue("GridCrossSection", gSavedSettings.getControl("GridCrossSections")->getDefault() ); 362 childSetValue("GridCrossSection", gSavedSettings.getControl("GridCrossSections")->getDefault() );
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index 2cca8ce..2efdf18 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -364,7 +364,7 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
364 { 364 {
365 // desaturate muted chat 365 // desaturate muted chat
366 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f); 366 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f);
367 add_timestamped_line(history_editor_with_mute, chat, color); 367 add_timestamped_line(history_editor_with_mute, chat, muted_color);
368 } 368 }
369 369
370 // add objects as transient speakers that can be muted 370 // add objects as transient speakers that can be muted
diff --git a/linden/indra/newview/llfloaterjoystick.cpp b/linden/indra/newview/llfloaterjoystick.cpp
index 960eebb..4584abc 100644
--- a/linden/indra/newview/llfloaterjoystick.cpp
+++ b/linden/indra/newview/llfloaterjoystick.cpp
@@ -100,7 +100,6 @@ BOOL LLFloaterJoystick::postBuild()
100 if (child) 100 if (child)
101 { 101 {
102 LLRect r = child->getRect(); 102 LLRect r = child->getRect();
103 LLRect f = getRect();
104 rect = LLRect(350, r.mTop, r.mRight + 200, 0); 103 rect = LLRect(350, r.mTop, r.mRight + 200, 0);
105 } 104 }
106 105
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index e22de66..2bf4b31 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -393,6 +393,7 @@ BOOL LLFloaterTools::postBuild()
393 mStatusText["rotate"] = getString("status_rotate"); 393 mStatusText["rotate"] = getString("status_rotate");
394 mStatusText["scale"] = getString("status_scale"); 394 mStatusText["scale"] = getString("status_scale");
395 mStatusText["move"] = getString("status_move"); 395 mStatusText["move"] = getString("status_move");
396 mStatusText["selectface"] = getString("status_selectface");
396 mStatusText["align"] = getString("status_align"); 397 mStatusText["align"] = getString("status_align");
397 mStatusText["modifyland"] = getString("status_modifyland"); 398 mStatusText["modifyland"] = getString("status_modifyland");
398 mStatusText["camera"] = getString("status_camera"); 399 mStatusText["camera"] = getString("status_camera");
diff --git a/linden/indra/newview/llfloaterwater.cpp b/linden/indra/newview/llfloaterwater.cpp
index cbf62e1..9dd3aab 100644
--- a/linden/indra/newview/llfloaterwater.cpp
+++ b/linden/indra/newview/llfloaterwater.cpp
@@ -761,13 +761,11 @@ bool LLFloaterWater::deleteAlertCallback(const LLSD& notification, const LLSD& r
761 LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo"); 761 LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
762 LLFloaterDayCycle* day_cycle = NULL; 762 LLFloaterDayCycle* day_cycle = NULL;
763 LLComboBox* key_combo = NULL; 763 LLComboBox* key_combo = NULL;
764 LLMultiSliderCtrl* mult_sldr = NULL;
765 764
766 if(LLFloaterDayCycle::isOpen()) 765 if(LLFloaterDayCycle::isOpen())
767 { 766 {
768 day_cycle = LLFloaterDayCycle::instance(); 767 day_cycle = LLFloaterDayCycle::instance();
769 key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets"); 768 key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets");
770 mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WaterDayCycleKeys");
771 } 769 }
772 770
773 std::string name = combo_box->getSelectedValue().asString(); 771 std::string name = combo_box->getSelectedValue().asString();
diff --git a/linden/indra/newview/llfloaterwindlight.cpp b/linden/indra/newview/llfloaterwindlight.cpp
index 9955783..52d6e14 100644
--- a/linden/indra/newview/llfloaterwindlight.cpp
+++ b/linden/indra/newview/llfloaterwindlight.cpp
@@ -973,14 +973,12 @@ bool LLFloaterWindLight::deleteAlertCallback(const LLSD& notification, const LLS
973 "WLPresetsCombo"); 973 "WLPresetsCombo");
974 LLFloaterDayCycle* day_cycle = NULL; 974 LLFloaterDayCycle* day_cycle = NULL;
975 LLComboBox* key_combo = NULL; 975 LLComboBox* key_combo = NULL;
976 LLMultiSliderCtrl* mult_sldr = NULL;
977 976
978 if(LLFloaterDayCycle::isOpen()) 977 if(LLFloaterDayCycle::isOpen())
979 { 978 {
980 day_cycle = LLFloaterDayCycle::instance(); 979 day_cycle = LLFloaterDayCycle::instance();
981 key_combo = day_cycle->getChild<LLComboBox>( 980 key_combo = day_cycle->getChild<LLComboBox>(
982 "WLKeyPresets"); 981 "WLKeyPresets");
983 mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
984 } 982 }
985 983
986 std::string name(combo_box->getSelectedValue().asString()); 984 std::string name(combo_box->getSelectedValue().asString());
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index ce2b2b4..489a5d5 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -3767,12 +3767,6 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
3767 LLMenuGL::sMenuContainer->hideMenus(); 3767 LLMenuGL::sMenuContainer->hideMenus();
3768 } 3768 }
3769 3769
3770 LLView *item = NULL;
3771 if (getChildCount() > 0)
3772 {
3773 item = *(getChildList()->begin());
3774 }
3775
3776 switch( key ) 3770 switch( key )
3777 { 3771 {
3778 case KEY_F2: 3772 case KEY_F2:
diff --git a/linden/indra/newview/llgesturemgr.cpp b/linden/indra/newview/llgesturemgr.cpp
index bd05cb3..f806ccc 100644
--- a/linden/indra/newview/llgesturemgr.cpp
+++ b/linden/indra/newview/llgesturemgr.cpp
@@ -531,7 +531,6 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s
531 gesture = NULL; 531 gesture = NULL;
532 } 532 }
533 533
534
535 if (matching.size() > 0) 534 if (matching.size() > 0)
536 { 535 {
537 // choose one at random 536 // choose one at random
@@ -565,246 +564,8 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s
565 found_gestures = TRUE; 564 found_gestures = TRUE;
566 } 565 }
567 } 566 }
568 else if (LLStringUtil::compareInsensitive("/icanhaseasteregg", cur_token) == 0 ||
569 LLStringUtil::compareInsensitive("/icanhaseastereggs", cur_token) == 0)
570 {
571 LLViewerImage* kitteh = gImageList.getImageFromFile("easteregg.png", TRUE, TRUE);
572 if (kitteh)
573 {
574 S32 left, top;
575 gFloaterView->getNewFloaterPosition(&left, &top);
576 LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
577 rect.translate(left - rect.mLeft, top - rect.mTop);
578
579 LLPreviewTexture* preview;
580 preview = new LLPreviewTexture(rect, "Easter Egg!", kitteh);
581 preview->setSourceID(LLUUID::generateNewID());
582 preview->setFocus(TRUE);
583 preview->center();
584 gFloaterView->adjustToFitScreen(preview, FALSE);
585 }
586 return TRUE;
587 }
588 else if (LLStringUtil::compareInsensitive("/icanhascookie", cur_token) == 0 ||
589 LLStringUtil::compareInsensitive("/icanhascookies", cur_token) == 0)
590 {
591 LLChat chat;
592 chat.mText = "I made you a cookie but I eated it :(";
593 chat.mSourceType = CHAT_SOURCE_SYSTEM;
594 LLFloaterChat::addChat(chat);
595 if (revised_string)
596 {
597 revised_string->assign(LLStringUtil::null);
598 }
599 return TRUE;
600 }
601 else if (LLStringUtil::compareInsensitive("/icanhasfailbook", cur_token) == 0)
602 {
603 LLWeb::loadURLInternal("http://failbook.failblog.org/");
604 return TRUE;
605 }
606 else if (LLStringUtil::compareInsensitive("/icanhaszombie", cur_token) == 0 ||
607 LLStringUtil::compareInsensitive("/icanhaszombies", cur_token) == 0)
608 {
609 LLViewerImage* kitteh = gImageList.getImageFromFile("zombiecat.png", TRUE, TRUE);
610 if (kitteh)
611 {
612 S32 left, top;
613 gFloaterView->getNewFloaterPosition(&left, &top);
614 LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
615 rect.translate(left - rect.mLeft, top - rect.mTop);
616
617 LLPreviewTexture* preview;
618 preview = new LLPreviewTexture(rect, "Zombiecat!", kitteh);
619 preview->setSourceID(LLUUID::generateNewID());
620 preview->setFocus(TRUE);
621 preview->center();
622 gFloaterView->adjustToFitScreen(preview, FALSE);
623 }
624 return TRUE;
625 }
626 else if (LLStringUtil::compareInsensitive("/icanhassupport", cur_token) == 0 ||
627 LLStringUtil::compareInsensitive("/icanhashelp", cur_token) == 0 ||
628 LLStringUtil::compareInsensitive("/icanhashalp", cur_token) == 0)
629 {
630 LLWeb::loadURLInternal("http://support.kokuaviewer.org/");
631 return TRUE;
632 }
633 else if (LLStringUtil::compareInsensitive("/icanhasblog", cur_token) == 0)
634 {
635 LLWeb::loadURLInternal("http://kokuaviewer.org/");
636 return TRUE;
637 }
638 else if (LLStringUtil::compareInsensitive("/icanhascodie", cur_token) == 0)
639 {
640 LLChat chat;
641 chat.mText = "All work and no play makes Codie a dull girl. All work and no play...";
642 chat.mSourceType = CHAT_SOURCE_SYSTEM;
643 LLFloaterChat::addChat(chat);
644 if (revised_string)
645 {
646 revised_string->assign(LLStringUtil::null);
647 }
648 return TRUE;
649 }
650 else if (LLStringUtil::compareInsensitive("/icanhasfail", cur_token) == 0)
651 {
652 LLWeb::loadURLInternal("http://www.failblog.org/");
653 return TRUE;
654 }
655 else if (LLStringUtil::compareInsensitive("/icanhasdownload", cur_token) == 0 ||
656 LLStringUtil::compareInsensitive("/icanhasdownloads", cur_token) == 0 ||
657 LLStringUtil::compareInsensitive("/icanhasupdate", cur_token) == 0 ||
658 LLStringUtil::compareInsensitive("/icanhasupdates", cur_token) == 0 )
659 {
660 LLWeb::loadURLInternal("http://wiki.kokuaviewer.org/wiki/Imprudence:Downloads");
661 return TRUE;
662 }
663 else if (LLStringUtil::compareInsensitive("/icanhasfeatures", cur_token) == 0)
664 {
665 LLWeb::loadURLInternal("http://wiki.kokuaviewer.org/wiki/Imprudence:Features");
666 return TRUE;
667 }
668 else if (LLStringUtil::compareInsensitive("/icanhaswiki", cur_token) == 0)
669 {
670 LLWeb::loadURLInternal("http://wiki.kokuaviewer.org/wiki/");
671 return TRUE;
672 }
673 else if (LLStringUtil::compareInsensitive("/icanhasbugs", cur_token) == 0 ||
674 LLStringUtil::compareInsensitive("/icanhasbug", cur_token) == 0 )
675 {
676 LLWeb::loadURLInternal("http://redmine.kokuaviewer.org/");
677 return TRUE;
678 }
679 else if (LLStringUtil::compareInsensitive("/icanhasgit", cur_token) == 0)
680 {
681 LLWeb::loadURLInternal("http://github.com/imprudence/imprudence/");
682 return TRUE;
683 }
684 else if (LLStringUtil::compareInsensitive("/icanhasplurk", cur_token) == 0)
685 {
686 LLWeb::loadURLInternal("http://plurk.com/imprudence");
687 return TRUE;
688 }
689 else if (LLStringUtil::compareInsensitive("/icanhastwitter", cur_token) == 0)
690 {
691 LLWeb::loadURLInternal("http://twitter.com/ImpViewer");
692 return TRUE;
693 }
694
695 else if (LLStringUtil::compareInsensitive("/icanhasimprudence", cur_token) == 0)
696 {
697 LLChat chat;
698 chat.mText = "You are using it right now, silly!...";
699 chat.mSourceType = CHAT_SOURCE_SYSTEM;
700 LLFloaterChat::addChat(chat);
701 if (revised_string)
702 {
703 revised_string->assign(LLStringUtil::null);
704 }
705 return TRUE;
706 }
707 else if (LLStringUtil::compareInsensitive("/icanhasnoms", cur_token) == 0 ||
708 LLStringUtil::compareInsensitive("/icanhasnom", cur_token) == 0)
709 {
710 LLViewerImage* kitteh = gImageList.getImageFromFile("nomnom.png", TRUE, TRUE);
711 if (kitteh)
712 {
713 S32 left, top;
714 gFloaterView->getNewFloaterPosition(&left, &top);
715 LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
716 rect.translate(left - rect.mLeft, top - rect.mTop);
717
718 LLPreviewTexture* preview;
719 preview = new LLPreviewTexture(rect, "Om nom nom!", kitteh);
720 preview->setSourceID(LLUUID::generateNewID());
721 preview->setFocus(TRUE);
722 preview->center();
723 gFloaterView->adjustToFitScreen(preview, FALSE);
724 }
725 return TRUE;
726 }
727 else if (LLStringUtil::compareInsensitive("/icanhasceilingcat", cur_token) == 0 ||
728 LLStringUtil::compareInsensitive("/icanhascielingcat", cur_token) == 0)
729 {
730 LLViewerImage* kitteh = gImageList.getImageFromFile("ceilingcat.png", TRUE, TRUE);
731 if (kitteh)
732 {
733 S32 left, top;
734 gFloaterView->getNewFloaterPosition(&left, &top);
735 LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
736 rect.translate(left - rect.mLeft, top - rect.mTop);
737
738 LLPreviewTexture* preview;
739 preview = new LLPreviewTexture(rect, "Ceiling Cat is watching you!", kitteh);
740 preview->setSourceID(LLUUID::generateNewID());
741 preview->setFocus(TRUE);
742 preview->center();
743 gFloaterView->adjustToFitScreen(preview, FALSE);
744 }
745 return TRUE;
746 }
747 else if (LLStringUtil::compareInsensitive("/icanhascake", cur_token) == 0 )
748 {
749 LLViewerImage* kitteh = gImageList.getImageFromFile("cakeisalie.png", TRUE, TRUE);
750 if (kitteh)
751 {
752 S32 left, top;
753 gFloaterView->getNewFloaterPosition(&left, &top);
754 LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
755 rect.translate(left - rect.mLeft, top - rect.mTop);
756
757 LLPreviewTexture* preview;
758 preview = new LLPreviewTexture(rect, "THE CAKE IS A LIE!", kitteh);
759 preview->setSourceID(LLUUID::generateNewID());
760 preview->setFocus(TRUE);
761 preview->center();
762 gFloaterView->adjustToFitScreen(preview, FALSE);
763 }
764 return TRUE;
765 }
766 else if (LLStringUtil::compareInsensitive("/icanhastentacles", cur_token) == 0 )
767 {
768 LLViewerImage* kitteh = gImageList.getImageFromFile("octopus.png", TRUE, TRUE);
769 if (kitteh)
770 {
771 S32 left, top;
772 gFloaterView->getNewFloaterPosition(&left, &top);
773 LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
774 rect.translate(left - rect.mLeft, top - rect.mTop);
775
776 LLPreviewTexture* preview;
777 preview = new LLPreviewTexture(rect, "All hail the mighty octopus!", kitteh);
778 preview->setSourceID(LLUUID::generateNewID());
779 preview->setFocus(TRUE);
780 preview->center();
781 gFloaterView->adjustToFitScreen(preview, FALSE);
782 }
783 return TRUE;
784 }
785 else if (LLStringUtil::compareInsensitive("/icanhashugs", cur_token) == 0 ||
786 LLStringUtil::compareInsensitive("/icanhashug", cur_token) == 0)
787 {
788 LLViewerImage* kitteh = gImageList.getImageFromFile("hugs.png", TRUE, TRUE);
789 if (kitteh)
790 {
791 S32 left, top;
792 gFloaterView->getNewFloaterPosition(&left, &top);
793 LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
794 rect.translate(left - rect.mLeft, top - rect.mTop);
795
796 LLPreviewTexture* preview;
797 preview = new LLPreviewTexture(rect, "Yes, you can has hugs!", kitteh);
798 preview->setSourceID(LLUUID::generateNewID());
799 preview->setFocus(TRUE);
800 preview->center();
801 gFloaterView->adjustToFitScreen(preview, FALSE);
802 }
803 return TRUE;
804 }
805
806 } 567 }
807 568
808 if(!gesture) 569 if(!gesture)
809 { 570 {
810 // This token doesn't match a gesture. Pass it through to the output. 571 // This token doesn't match a gesture. Pass it through to the output.
diff --git a/linden/indra/newview/llhoverview.cpp b/linden/indra/newview/llhoverview.cpp
index 4f248e4..91cb8a5 100644
--- a/linden/indra/newview/llhoverview.cpp
+++ b/linden/indra/newview/llhoverview.cpp
@@ -546,14 +546,15 @@ void LLHoverView::updateText()
546 546
547 LLParcel* hover_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel(); 547 LLParcel* hover_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel();
548 LLUUID owner; 548 LLUUID owner;
549 S32 width = 0; 549 // Their use is commented out below. No doubt both will get deleted on a later clean up pass.
550 S32 height = 0; 550 //S32 width = 0;
551 //S32 height = 0;
551 552
552 if ( hover_parcel ) 553 if ( hover_parcel )
553 { 554 {
554 owner = hover_parcel->getOwnerID(); 555 owner = hover_parcel->getOwnerID();
555 width = S32(LLViewerParcelMgr::getInstance()->getHoverParcelWidth()); 556 // width = S32(LLViewerParcelMgr::getInstance()->getHoverParcelWidth());
556 height = S32(LLViewerParcelMgr::getInstance()->getHoverParcelHeight()); 557 // height = S32(LLViewerParcelMgr::getInstance()->getHoverParcelHeight());
557 } 558 }
558 559
559 // Line: "Land" 560 // Line: "Land"
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp
index 23d864e..6e6b39c 100644
--- a/linden/indra/newview/llinventorybridge.cpp
+++ b/linden/indra/newview/llinventorybridge.cpp
@@ -1439,7 +1439,6 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
1439 if(drop && accept) 1439 if(drop && accept)
1440 { 1440 {
1441 it = inventory_objects.begin(); 1441 it = inventory_objects.begin();
1442 InventoryObjectList::iterator first_it = inventory_objects.begin();
1443 LLMoveInv* move_inv = new LLMoveInv; 1442 LLMoveInv* move_inv = new LLMoveInv;
1444 move_inv->mObjectID = object_id; 1443 move_inv->mObjectID = object_id;
1445 move_inv->mCategoryID = category_id; 1444 move_inv->mCategoryID = category_id;
@@ -1922,24 +1921,11 @@ void LLFolderBridge::pasteFromClipboard()
1922 item = model->getItem(objects.get(i)); 1921 item = model->getItem(objects.get(i));
1923 if (item) 1922 if (item)
1924 { 1923 {
1925 copy_inventory_item( 1924 LLInvFVBridge::changeItemParent(
1926 gAgent.getID(), 1925 model,
1927 item->getPermissions().getOwner(), 1926 (LLViewerInventoryItem*)item,
1928 item->getUUID(), 1927 mUUID,
1929 parent_id, 1928 FALSE);
1930 std::string(),
1931 LLPointer<LLInventoryCallback>(NULL));
1932 LLInventoryCategory* cat = model->getCategory(item->getUUID());
1933 if(cat)
1934 {
1935 model->purgeDescendentsOf(mUUID);
1936 }
1937 LLInventoryObject* obj = model->getObject(item->getUUID());
1938 if(!obj) return;
1939 obj->removeFromServer();
1940 LLPreview::hide(item->getUUID());
1941 model->deleteObject(item->getUUID());
1942 model->notifyObservers();
1943 } 1929 }
1944 } 1930 }
1945 } 1931 }
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp
index 3f74965..8b98782 100644
--- a/linden/indra/newview/llinventorymodel.cpp
+++ b/linden/indra/newview/llinventorymodel.cpp
@@ -455,8 +455,6 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
455 void (*callback)(const LLSD&, void*), 455 void (*callback)(const LLSD&, void*),
456 void* user_data) 456 void* user_data)
457{ 457{
458 llassert_always(NULL != callback);
459
460 LLUUID id; 458 LLUUID id;
461 459
462 if(!isInventoryUsable()) 460 if(!isInventoryUsable())
@@ -464,7 +462,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
464 llwarns << "Inventory is broken." << llendl; 462 llwarns << "Inventory is broken." << llendl;
465 LLSD result; 463 LLSD result;
466 result["failure"] = true; 464 result["failure"] = true;
467 callback(result, user_data); 465 if (callback)
466 callback(result, user_data);
468 } 467 }
469 468
470 469
@@ -473,7 +472,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
473 LL_DEBUGS("Inventory") << "Attempt to create simstate category." << LL_ENDL; 472 LL_DEBUGS("Inventory") << "Attempt to create simstate category." << LL_ENDL;
474 LLSD result; 473 LLSD result;
475 result["failure"] = true; 474 result["failure"] = true;
476 callback(result, user_data); 475 if (callback)
476 callback(result, user_data);
477 } 477 }
478 478
479 id.generate(); 479 id.generate();
@@ -492,10 +492,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
492 name.assign(NEW_CATEGORY_NAME); 492 name.assign(NEW_CATEGORY_NAME);
493 } 493 }
494 494
495 if (user_data) // callback required for acked message. 495 if ((NULL != callback) && (NULL != user_data)) // callback required for acked message.
496 { 496 {
497
498
499 LLViewerRegion* viewer_region = gAgent.getRegion(); 497 LLViewerRegion* viewer_region = gAgent.getRegion();
500 498
501 if (!viewer_region->capabilitiesReceived()) 499 if (!viewer_region->capabilitiesReceived())
@@ -537,7 +535,10 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
537 { 535 {
538 // user_data is a LLCategoryCreate object instantiated in the calling 536 // user_data is a LLCategoryCreate object instantiated in the calling
539 // function - bug (or low memory - any leaks?). 537 // function - bug (or low memory - any leaks?).
540 llwarns << "NULL user_data" << llendl; 538 // Or, it might just be no problem, since passing the callback in the first place is optional.
539 // It's really up to the calling function to know what it passed to pass back to the callback.
540 if (callback)
541 llwarns << "NULL user_data" << llendl;
541 } 542 }
542 543
543 // Add the category to the internal representation 544 // Add the category to the internal representation
@@ -1211,7 +1212,6 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
1211 item_array_t items; 1212 item_array_t items;
1212 update_map_t update; 1213 update_map_t update;
1213 S32 count = content["items"].size(); 1214 S32 count = content["items"].size();
1214 bool all_one_folder = true;
1215 LLUUID folder_id; 1215 LLUUID folder_id;
1216 // Does this loop ever execute more than once? 1216 // Does this loop ever execute more than once?
1217 for(S32 i = 0; i < count; ++i) 1217 for(S32 i = 0; i < count; ++i)
@@ -1244,10 +1244,6 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
1244 { 1244 {
1245 folder_id = titem->getParentUUID(); 1245 folder_id = titem->getParentUUID();
1246 } 1246 }
1247 else
1248 {
1249 all_one_folder = false;
1250 }
1251 } 1247 }
1252 1248
1253 U32 changes = 0x0; 1249 U32 changes = 0x0;
@@ -2960,7 +2956,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
2960 item_array_t items; 2956 item_array_t items;
2961 update_map_t update; 2957 update_map_t update;
2962 S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData); 2958 S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
2963 bool all_one_folder = true;
2964 LLUUID folder_id; 2959 LLUUID folder_id;
2965 // Does this loop ever execute more than once? 2960 // Does this loop ever execute more than once?
2966 for(S32 i = 0; i < count; ++i) 2961 for(S32 i = 0; i < count; ++i)
@@ -2992,10 +2987,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
2992 { 2987 {
2993 folder_id = titem->getParentUUID(); 2988 folder_id = titem->getParentUUID();
2994 } 2989 }
2995 else
2996 {
2997 all_one_folder = false;
2998 }
2999 } 2990 }
3000 if(account) 2991 if(account)
3001 { 2992 {
diff --git a/linden/indra/newview/llmaniprotate.cpp b/linden/indra/newview/llmaniprotate.cpp
index 77c8bd5..fa5ab56 100644
--- a/linden/indra/newview/llmaniprotate.cpp
+++ b/linden/indra/newview/llmaniprotate.cpp
@@ -1652,7 +1652,6 @@ void LLManipRotate::highlightManipulators( S32 x, S32 y )
1652 return; 1652 return;
1653 } 1653 }
1654 1654
1655 LLQuaternion object_rot = first_object->getRenderRotation();
1656 LLVector3 rotation_center = gAgent.getPosAgentFromGlobal(mRotationCenter); 1655 LLVector3 rotation_center = gAgent.getPosAgentFromGlobal(mRotationCenter);
1657 LLVector3 mouse_dir_x; 1656 LLVector3 mouse_dir_x;
1658 LLVector3 mouse_dir_y; 1657 LLVector3 mouse_dir_y;
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp
index 33ee1b9..593f765 100644
--- a/linden/indra/newview/llmanipscale.cpp
+++ b/linden/indra/newview/llmanipscale.cpp
@@ -1172,9 +1172,6 @@ void LLManipScale::dragFace( S32 x, S32 y )
1172 mInSnapRegime = FALSE; 1172 mInSnapRegime = FALSE;
1173 } 1173 }
1174 1174
1175 BOOL send_scale_update = FALSE;
1176 BOOL send_position_update = FALSE;
1177
1178 LLVector3 dir_agent; 1175 LLVector3 dir_agent;
1179 if( part_dir_local.mV[VX] ) 1176 if( part_dir_local.mV[VX] )
1180 { 1177 {
@@ -1191,8 +1188,6 @@ void LLManipScale::dragFace( S32 x, S32 y )
1191 stretchFace( 1188 stretchFace(
1192 projected_vec(drag_start_dir_f, dir_agent) + drag_start_center_agent, 1189 projected_vec(drag_start_dir_f, dir_agent) + drag_start_center_agent,
1193 projected_vec(drag_delta, dir_agent)); 1190 projected_vec(drag_delta, dir_agent));
1194 send_position_update = TRUE;
1195 send_scale_update = TRUE;
1196 1191
1197 mDragPointGlobal = drag_point_global; 1192 mDragPointGlobal = drag_point_global;
1198} 1193}
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp
index 53578ca..4816eac 100644
--- a/linden/indra/newview/llmaniptranslate.cpp
+++ b/linden/indra/newview/llmaniptranslate.cpp
@@ -487,9 +487,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
487 } 487 }
488 } 488 }
489 489
490 // Throttle updates to 10 per second.
491 BOOL send_update = FALSE;
492
493 LLVector3 axis_f; 490 LLVector3 axis_f;
494 LLVector3d axis_d; 491 LLVector3d axis_d;
495 492
@@ -701,10 +698,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
701 LLVector3 new_position_local = selectNode->mSavedPositionLocal + (clamped_relative_move_f * objWorldRotation); 698 LLVector3 new_position_local = selectNode->mSavedPositionLocal + (clamped_relative_move_f * objWorldRotation);
702 699
703 // move and clamp root object first, before adjusting children 700 // move and clamp root object first, before adjusting children
704 if (new_position_local != old_position_local) 701
705 {
706 send_update = TRUE;
707 }
708 //RN: I forget, but we need to do this because of snapping which doesn't often result 702 //RN: I forget, but we need to do this because of snapping which doesn't often result
709 // in position changes even when the mouse moves 703 // in position changes even when the mouse moves
710 object->setPosition(new_position_local); 704 object->setPosition(new_position_local);
@@ -714,8 +708,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
714 708
715 if (selectNode->mIndividualSelection) 709 if (selectNode->mIndividualSelection)
716 { 710 {
717 send_update = FALSE;
718
719 // counter-translate child objects if we are moving the root as an individual 711 // counter-translate child objects if we are moving the root as an individual
720 object->resetChildrenPosition(old_position_local - new_position_local, TRUE) ; 712 object->resetChildrenPosition(old_position_local - new_position_local, TRUE) ;
721 } 713 }
@@ -752,7 +744,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
752 } 744 }
753 745
754 // PR: Only update if changed 746 // PR: Only update if changed
755 LLVector3d old_position_global = object->getPositionGlobal();
756 LLVector3 old_position_agent = object->getPositionAgent(); 747 LLVector3 old_position_agent = object->getPositionAgent();
757 LLVector3 new_position_agent = gAgent.getPosAgentFromGlobal(new_position_global); 748 LLVector3 new_position_agent = gAgent.getPosAgentFromGlobal(new_position_global);
758 if (object->isRootEdit()) 749 if (object->isRootEdit())
@@ -774,11 +765,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
774 { 765 {
775 // counter-translate child objects if we are moving the root as an individual 766 // counter-translate child objects if we are moving the root as an individual
776 object->resetChildrenPosition(old_position_agent - new_position_agent, TRUE) ; 767 object->resetChildrenPosition(old_position_agent - new_position_agent, TRUE) ;
777 send_update = FALSE;
778 }
779 else if (old_position_global != new_position_global)
780 {
781 send_update = TRUE;
782 } 768 }
783 } 769 }
784 selectNode->mLastPositionLocal = object->getPosition(); 770 selectNode->mLastPositionLocal = object->getPosition();
@@ -1302,7 +1288,7 @@ void LLManipTranslate::renderSnapGuides()
1302 // add in off-axis offset 1288 // add in off-axis offset
1303 tick_start += (mSnapOffsetAxis * mSnapOffsetMeters); 1289 tick_start += (mSnapOffsetAxis * mSnapOffsetMeters);
1304 1290
1305 BOOL is_sub_tick = FALSE; 1291// BOOL is_sub_tick = FALSE;
1306 F32 tick_scale = 1.f; 1292 F32 tick_scale = 1.f;
1307 for (F32 division_level = max_subdivisions; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f) 1293 for (F32 division_level = max_subdivisions; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f)
1308 { 1294 {
@@ -1311,7 +1297,7 @@ void LLManipTranslate::renderSnapGuides()
1311 break; 1297 break;
1312 } 1298 }
1313 tick_scale *= 0.7f; 1299 tick_scale *= 0.7f;
1314 is_sub_tick = TRUE; 1300// is_sub_tick = TRUE;
1315 } 1301 }
1316 1302
1317// S32 num_ticks_to_fade = is_sub_tick ? num_ticks_per_side / 2 : num_ticks_per_side; 1303// S32 num_ticks_to_fade = is_sub_tick ? num_ticks_per_side / 2 : num_ticks_per_side;
@@ -1533,7 +1519,6 @@ void LLManipTranslate::renderSnapGuides()
1533 1519
1534 float a = line_alpha; 1520 float a = line_alpha;
1535 1521
1536 LLColor4 col = gColors.getColor("SilhouetteChildColor");
1537 { 1522 {
1538 //draw grid behind objects 1523 //draw grid behind objects
1539 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); 1524 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
diff --git a/linden/indra/newview/llmediadataclient.cpp b/linden/indra/newview/llmediadataclient.cpp
new file mode 100644
index 0000000..e2fa700
--- /dev/null
+++ b/linden/indra/newview/llmediadataclient.cpp
@@ -0,0 +1,813 @@
1/**
2 * @file llmediadataclient.cpp
3 * @brief class for queueing up requests for media data
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2010, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlife.com/developers/opensource/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at
21 * http://secondlife.com/developers/opensource/flossexception
22 *
23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations.
26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE.
30 * $/LicenseInfo$
31 *
32 */
33
34#include "llviewerprecompiledheaders.h"
35
36#include "llmediadataclient.h"
37
38#if LL_MSVC
39// disable boost::lexical_cast warning
40#pragma warning (disable:4702)
41#endif
42
43#include <boost/lexical_cast.hpp>
44
45#include "llhttpstatuscodes.h"
46#include "llsdutil.h"
47#include "llmediaentry.h"
48#include "lltextureentry.h"
49#include "llviewerregion.h"
50
51//
52// When making a request
53// - obtain the "overall interest score" of the object.
54// This would be the sum of the impls' interest scores.
55// - put the request onto a queue sorted by this score
56// (highest score at the front of the queue)
57// - On a timer, once a second, pull off the head of the queue and send
58// the request.
59// - Any request that gets a 503 still goes through the retry logic
60//
61
62//
63// Forward decls
64//
65const F32 LLMediaDataClient::QUEUE_TIMER_DELAY = 1.0; // seconds(s)
66const F32 LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY = 10.0; // secs
67const U32 LLMediaDataClient::MAX_RETRIES = 10;
68const U32 LLMediaDataClient::MAX_SORTED_QUEUE_SIZE = 10000;
69const U32 LLMediaDataClient::MAX_ROUND_ROBIN_QUEUE_SIZE = 10000;
70
71// << operators
72std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q);
73std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &q);
74
75//////////////////////////////////////////////////////////////////////////////////////
76//
77// LLMediaDataClient
78//
79//////////////////////////////////////////////////////////////////////////////////////
80
81LLMediaDataClient::LLMediaDataClient(F32 queue_timer_delay,
82 F32 retry_timer_delay,
83 U32 max_retries,
84 U32 max_sorted_queue_size,
85 U32 max_round_robin_queue_size)
86 : mQueueTimerDelay(queue_timer_delay),
87 mRetryTimerDelay(retry_timer_delay),
88 mMaxNumRetries(max_retries),
89 mMaxSortedQueueSize(max_sorted_queue_size),
90 mMaxRoundRobinQueueSize(max_round_robin_queue_size),
91 mQueueTimerIsRunning(false),
92 mCurrentQueueIsTheSortedQueue(true)
93{
94}
95
96LLMediaDataClient::~LLMediaDataClient()
97{
98 stopQueueTimer();
99
100 // This should clear the queue, and hopefully call all the destructors.
101 LL_DEBUGS("LLMediaDataClient") << "~LLMediaDataClient destructor: queue: " <<
102 (isEmpty() ? "<empty> " : "<not empty> ") << LL_ENDL;
103
104 mSortedQueue.clear();
105 mRoundRobinQueue.clear();
106}
107
108bool LLMediaDataClient::isEmpty() const
109{
110 return mSortedQueue.empty() && mRoundRobinQueue.empty();
111}
112
113bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)
114{
115 return (LLMediaDataClient::findOrRemove(mSortedQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()
116 || (LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()));
117}
118
119bool LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
120{
121 bool removedFromSortedQueue = LLMediaDataClient::findOrRemove(mSortedQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
122 bool removedFromRoundRobinQueue = LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
123 return removedFromSortedQueue || removedFromRoundRobinQueue;
124}
125
126//static
127LLMediaDataClient::request_ptr_t LLMediaDataClient::findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, LLMediaDataClient::Request::Type type)
128{
129 request_ptr_t result;
130 request_queue_t::iterator iter = queue.begin();
131 request_queue_t::iterator end = queue.end();
132 while (iter != end)
133 {
134 if (obj->getID() == (*iter)->getObject()->getID() && (type == LLMediaDataClient::Request::ANY || type == (*iter)->getType()))
135 {
136 result = *iter;
137 if (remove) queue.erase(iter);
138 break;
139 }
140 iter++;
141 }
142 return result;
143}
144
145void LLMediaDataClient::request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload)
146{
147 if (object.isNull() || ! object->hasMedia()) return;
148
149 // Push the object on the queue
150 enqueue(new Request(getCapabilityName(), payload, object, this));
151}
152
153void LLMediaDataClient::enqueue(const Request *request)
154{
155 if (request->isNew())
156 {
157 // Add to sorted queue
158 if (LLMediaDataClient::findOrRemove(mSortedQueue, request->getObject(), true/*remove*/, request->getType()).notNull())
159 {
160 LL_DEBUGS("LLMediaDataClient") << "REMOVING OLD request for " << *request << " ALREADY THERE!" << LL_ENDL;
161 }
162
163 LL_DEBUGS("LLMediaDataClient") << "Queuing SORTED request for " << *request << LL_ENDL;
164
165 // Sadly, we have to const-cast because items put into the queue are not const
166 mSortedQueue.push_back(const_cast<LLMediaDataClient::Request*>(request));
167
168 LL_DEBUGS("LLMediaDataClientQueue") << "SORTED queue:" << mSortedQueue << LL_ENDL;
169 }
170 else {
171 if (mRoundRobinQueue.size() > mMaxRoundRobinQueueSize)
172 {
173 LL_INFOS_ONCE("LLMediaDataClient") << "RR QUEUE MAXED OUT!!!" << LL_ENDL;
174 LL_DEBUGS("LLMediaDataClient") << "Not queuing " << *request << LL_ENDL;
175 return;
176 }
177
178 // ROUND ROBIN: if it is there, and it is a GET request, leave it. If not, put at front!
179 request_ptr_t existing_request;
180 if (request->getType() == Request::GET)
181 {
182 existing_request = LLMediaDataClient::findOrRemove(mRoundRobinQueue, request->getObject(), false/*remove*/, request->getType());
183 }
184 if (existing_request.isNull())
185 {
186 LL_DEBUGS("LLMediaDataClient") << "Queuing RR request for " << *request << LL_ENDL;
187 // Push the request on the pending queue
188 // Sadly, we have to const-cast because items put into the queue are not const
189 mRoundRobinQueue.push_front(const_cast<LLMediaDataClient::Request*>(request));
190
191 LL_DEBUGS("LLMediaDataClientQueue") << "RR queue:" << mRoundRobinQueue << LL_ENDL;
192 }
193 else
194 {
195 LL_DEBUGS("LLMediaDataClient") << "ALREADY THERE: NOT Queuing request for " << *request << LL_ENDL;
196
197 existing_request->markSent(false);
198 }
199 }
200 // Start the timer if not already running
201 startQueueTimer();
202}
203
204void LLMediaDataClient::startQueueTimer()
205{
206 if (! mQueueTimerIsRunning)
207 {
208 LL_DEBUGS("LLMediaDataClient") << "starting queue timer (delay=" << mQueueTimerDelay << " seconds)" << LL_ENDL;
209 // LLEventTimer automagically takes care of the lifetime of this object
210 new QueueTimer(mQueueTimerDelay, this);
211 }
212 else {
213 LL_DEBUGS("LLMediaDataClient") << "not starting queue timer (it's already running, right???)" << LL_ENDL;
214 }
215}
216
217void LLMediaDataClient::stopQueueTimer()
218{
219 mQueueTimerIsRunning = false;
220}
221
222bool LLMediaDataClient::processQueueTimer()
223{
224 sortQueue();
225
226 if(!isEmpty())
227 {
228 LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, SORTED queue size is: " << mSortedQueue.size()
229 << ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL;
230 LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, SORTED queue is: " << mSortedQueue << LL_ENDL;
231 LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, RR queue is: " << mRoundRobinQueue << LL_ENDL;
232 }
233
234 serviceQueue();
235
236 LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() finished, SORTED queue size is: " << mSortedQueue.size()
237 << ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL;
238 LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, SORTED queue is: " << mSortedQueue << LL_ENDL;
239 LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, RR queue is: " << mRoundRobinQueue << LL_ENDL;
240
241 return isEmpty();
242}
243
244void LLMediaDataClient::sortQueue()
245{
246 if(!mSortedQueue.empty())
247 {
248 // Score all items first
249 request_queue_t::iterator iter = mSortedQueue.begin();
250 request_queue_t::iterator end = mSortedQueue.end();
251 while (iter != end)
252 {
253 (*iter)->updateScore();
254 iter++;
255 }
256
257 // Re-sort the list...
258 // NOTE: should this be a stable_sort? If so we need to change to using a vector.
259 mSortedQueue.sort(LLMediaDataClient::compareRequests);
260
261 // ...then cull items over the max
262 U32 size = mSortedQueue.size();
263 if (size > mMaxSortedQueueSize)
264 {
265 U32 num_to_cull = (size - mMaxSortedQueueSize);
266 LL_INFOS_ONCE("LLMediaDataClient") << "sorted queue MAXED OUT! Culling "
267 << num_to_cull << " items" << LL_ENDL;
268 while (num_to_cull-- > 0)
269 {
270 mSortedQueue.pop_back();
271 }
272 }
273 }
274}
275
276// static
277bool LLMediaDataClient::compareRequests(const request_ptr_t &o1, const request_ptr_t &o2)
278{
279 if (o2.isNull()) return true;
280 if (o1.isNull()) return false;
281 return ( o1->getScore() > o2->getScore() );
282}
283
284void LLMediaDataClient::serviceQueue()
285{
286 request_queue_t *queue_p = getCurrentQueue();
287
288 // quick retry loop for cases where we shouldn't wait for the next timer tick
289 while(true)
290 {
291 if (queue_p->empty())
292 {
293 LL_DEBUGS("LLMediaDataClient") << "queue empty: " << (*queue_p) << LL_ENDL;
294 break;
295 }
296
297 // Peel one off of the items from the queue, and execute request
298 request_ptr_t request = queue_p->front();
299 llassert(!request.isNull());
300 const LLMediaDataClientObject *object = (request.isNull()) ? NULL : request->getObject();
301 llassert(NULL != object);
302
303 // Check for conditions that would make us just pop and rapidly loop through
304 // the queue.
305 if(request.isNull() ||
306 request->isMarkedSent() ||
307 NULL == object ||
308 object->isDead() ||
309 !object->hasMedia())
310 {
311 if (request.isNull())
312 {
313 LL_WARNS("LLMediaDataClient") << "Skipping NULL request" << LL_ENDL;
314 }
315 else {
316 LL_INFOS("LLMediaDataClient") << "Skipping : " << *request << " "
317 << ((request->isMarkedSent()) ? " request is marked sent" :
318 ((NULL == object) ? " object is NULL " :
319 ((object->isDead()) ? "object is dead" :
320 ((!object->hasMedia()) ? "object has no media!" : "BADNESS!")))) << LL_ENDL;
321 }
322 queue_p->pop_front();
323 continue; // jump back to the start of the quick retry loop
324 }
325
326 // Next, ask if this is "interesting enough" to fetch. If not, just stop
327 // and wait for the next timer go-round. Only do this for the sorted
328 // queue.
329 if (mCurrentQueueIsTheSortedQueue && !object->isInterestingEnough())
330 {
331 LL_DEBUGS("LLMediaDataClient") << "Not fetching " << *request << ": not interesting enough" << LL_ENDL;
332 break;
333 }
334
335 // Finally, try to send the HTTP message to the cap url
336 std::string url = request->getCapability();
337 bool maybe_retry = false;
338 if (!url.empty())
339 {
340 const LLSD &sd_payload = request->getPayload();
341 LL_INFOS("LLMediaDataClient") << "Sending request for " << *request << LL_ENDL;
342
343 // Call the subclass for creating the responder
344 LLHTTPClient::post(url, sd_payload, createResponder(request));
345 }
346 else {
347 LL_INFOS("LLMediaDataClient") << "NOT Sending request for " << *request << ": empty cap url!" << LL_ENDL;
348 maybe_retry = true;
349 }
350
351 bool exceeded_retries = request->getRetryCount() > mMaxNumRetries;
352 if (maybe_retry && ! exceeded_retries) // Try N times before giving up
353 {
354 // We got an empty cap, but in that case we will retry again next
355 // timer fire.
356 request->incRetryCount();
357 }
358 else {
359 if (exceeded_retries)
360 {
361 LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " for "
362 << mMaxNumRetries << " tries...popping object id " << object->getID() << LL_ENDL;
363 // XXX Should we bring up a warning dialog??
364 }
365
366 queue_p->pop_front();
367
368 if (! mCurrentQueueIsTheSortedQueue) {
369 // Round robin
370 request->markSent(true);
371 mRoundRobinQueue.push_back(request);
372 }
373 }
374
375 // end of quick loop -- any cases where we want to loop will use 'continue' to jump back to the start.
376 break;
377 }
378
379 swapCurrentQueue();
380}
381
382void LLMediaDataClient::swapCurrentQueue()
383{
384 // Swap
385 mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
386 // If its empty, swap back
387 if (getCurrentQueue()->empty())
388 {
389 mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
390 }
391}
392
393LLMediaDataClient::request_queue_t *LLMediaDataClient::getCurrentQueue()
394{
395 return (mCurrentQueueIsTheSortedQueue) ? &mSortedQueue : &mRoundRobinQueue;
396}
397
398// dump the queue
399std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q)
400{
401 int i = 0;
402 LLMediaDataClient::request_queue_t::const_iterator iter = q.begin();
403 LLMediaDataClient::request_queue_t::const_iterator end = q.end();
404 while (iter != end)
405 {
406 s << "\t" << i << "]: " << (*iter)->getObject()->getID().asString() << "(" << (*iter)->getObject()->getMediaInterest() << ")";
407 iter++;
408 i++;
409 }
410 return s;
411}
412
413//////////////////////////////////////////////////////////////////////////////////////
414//
415// LLMediaDataClient::QueueTimer
416// Queue of LLMediaDataClientObject smart pointers to request media for.
417//
418//////////////////////////////////////////////////////////////////////////////////////
419
420LLMediaDataClient::QueueTimer::QueueTimer(F32 time, LLMediaDataClient *mdc)
421: LLEventTimer(time), mMDC(mdc)
422{
423 mMDC->setIsRunning(true);
424}
425
426LLMediaDataClient::QueueTimer::~QueueTimer()
427{
428 LL_DEBUGS("LLMediaDataClient") << "~QueueTimer" << LL_ENDL;
429 mMDC->setIsRunning(false);
430 mMDC = NULL;
431}
432
433// virtual
434BOOL LLMediaDataClient::QueueTimer::tick()
435{
436 if (mMDC.isNull()) return TRUE;
437 return mMDC->processQueueTimer();
438}
439
440
441//////////////////////////////////////////////////////////////////////////////////////
442//
443// LLMediaDataClient::Responder::RetryTimer
444//
445//////////////////////////////////////////////////////////////////////////////////////
446
447LLMediaDataClient::Responder::RetryTimer::RetryTimer(F32 time, Responder *mdr)
448: LLEventTimer(time), mResponder(mdr)
449{
450}
451
452// virtual
453LLMediaDataClient::Responder::RetryTimer::~RetryTimer()
454{
455 LL_DEBUGS("LLMediaDataClient") << "~RetryTimer" << *(mResponder->getRequest()) << LL_ENDL;
456
457 // XXX This is weird: Instead of doing the work in tick() (which re-schedules
458 // a timer, which might be risky), do it here, in the destructor. Yes, it is very odd.
459 // Instead of retrying, we just put the request back onto the queue
460 LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *(mResponder->getRequest()) << " retrying" << LL_ENDL;
461 mResponder->getRequest()->reEnqueue();
462
463 // Release the ref to the responder.
464 mResponder = NULL;
465}
466
467// virtual
468BOOL LLMediaDataClient::Responder::RetryTimer::tick()
469{
470 // Don't fire again
471 return TRUE;
472}
473
474
475//////////////////////////////////////////////////////////////////////////////////////
476//
477// LLMediaDataClient::Request
478//
479//////////////////////////////////////////////////////////////////////////////////////
480/*static*/U32 LLMediaDataClient::Request::sNum = 0;
481
482LLMediaDataClient::Request::Request(const char *cap_name,
483 const LLSD& sd_payload,
484 LLMediaDataClientObject *obj,
485 LLMediaDataClient *mdc)
486: mCapName(cap_name),
487 mPayload(sd_payload),
488 mObject(obj),
489 mNum(++sNum),
490 mRetryCount(0),
491 mMDC(mdc),
492 mMarkedSent(false),
493 mScore((F64)0.0)
494{
495}
496
497LLMediaDataClient::Request::~Request()
498{
499 LL_DEBUGS("LLMediaDataClient") << "~Request" << (*this) << LL_ENDL;
500 mMDC = NULL;
501 mObject = NULL;
502}
503
504
505std::string LLMediaDataClient::Request::getCapability() const
506{
507 return getObject()->getCapabilityUrl(getCapName());
508}
509
510// Helper function to get the "type" of request, which just pokes around to
511// discover it.
512LLMediaDataClient::Request::Type LLMediaDataClient::Request::getType() const
513{
514 if (0 == strcmp(mCapName, "ObjectMediaNavigate"))
515 {
516 return NAVIGATE;
517 }
518 else if (0 == strcmp(mCapName, "ObjectMedia"))
519 {
520 const std::string &verb = mPayload["verb"];
521 if (verb == "GET")
522 {
523 return GET;
524 }
525 else if (verb == "UPDATE")
526 {
527 return UPDATE;
528 }
529 }
530 llassert(false);
531 return GET;
532}
533
534const char *LLMediaDataClient::Request::getTypeAsString() const
535{
536 Type t = getType();
537 switch (t)
538 {
539 case GET:
540 return "GET";
541 break;
542 case UPDATE:
543 return "UPDATE";
544 break;
545 case NAVIGATE:
546 return "NAVIGATE";
547 break;
548 case ANY:
549 return "ANY";
550 break;
551 }
552 return "";
553}
554
555
556void LLMediaDataClient::Request::reEnqueue() const
557{
558 // I sure hope this doesn't deref a bad pointer:
559 mMDC->enqueue(this);
560}
561
562F32 LLMediaDataClient::Request::getRetryTimerDelay() const
563{
564 return (mMDC == NULL) ? LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY :
565 mMDC->mRetryTimerDelay;
566}
567
568U32 LLMediaDataClient::Request::getMaxNumRetries() const
569{
570 return (mMDC == NULL) ? LLMediaDataClient::MAX_RETRIES : mMDC->mMaxNumRetries;
571}
572
573void LLMediaDataClient::Request::markSent(bool flag)
574{
575 if (mMarkedSent != flag)
576 {
577 mMarkedSent = flag;
578 if (!mMarkedSent)
579 {
580 mNum = ++sNum;
581 }
582 }
583}
584
585void LLMediaDataClient::Request::updateScore()
586{
587 F64 tmp = mObject->getMediaInterest();
588 if (tmp != mScore)
589 {
590 LL_DEBUGS("LLMediaDataClient") << "Score for " << mObject->getID() << " changed from " << mScore << " to " << tmp << LL_ENDL;
591 mScore = tmp;
592 }
593}
594
595std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &r)
596{
597 s << "request: num=" << r.getNum()
598 << " type=" << r.getTypeAsString()
599 << " ID=" << r.getObject()->getID()
600 << " #retries=" << r.getRetryCount();
601 return s;
602}
603
604
605//////////////////////////////////////////////////////////////////////////////////////
606//
607// LLMediaDataClient::Responder
608//
609//////////////////////////////////////////////////////////////////////////////////////
610
611LLMediaDataClient::Responder::Responder(const request_ptr_t &request)
612: mRequest(request)
613{
614}
615
616LLMediaDataClient::Responder::~Responder()
617{
618 LL_DEBUGS("LLMediaDataClient") << "~Responder" << *(getRequest()) << LL_ENDL;
619 mRequest = NULL;
620}
621
622/*virtual*/
623void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)
624{
625 if (status == HTTP_SERVICE_UNAVAILABLE)
626 {
627 F32 retry_timeout = mRequest->getRetryTimerDelay();
628
629 mRequest->incRetryCount();
630
631 if (mRequest->getRetryCount() < mRequest->getMaxNumRetries())
632 {
633 LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retrying in " << retry_timeout << " seconds" << LL_ENDL;
634
635 // Start timer (instances are automagically tracked by
636 // InstanceTracker<> and LLEventTimer)
637 new RetryTimer(F32(retry_timeout/*secs*/), this);
638 }
639 else {
640 LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retry count "
641 << mRequest->getRetryCount() << " exceeds " << mRequest->getMaxNumRetries() << ", not retrying" << LL_ENDL;
642 }
643 }
644 else {
645 std::string msg = boost::lexical_cast<std::string>(status) + ": " + reason;
646 LL_WARNS("LLMediaDataClient") << *mRequest << " http error(" << msg << ")" << LL_ENDL;
647 }
648}
649
650/*virtual*/
651void LLMediaDataClient::Responder::result(const LLSD& content)
652{
653 LL_DEBUGS("LLMediaDataClientResponse") << *mRequest << " result : " << ll_print_sd(content) << LL_ENDL;
654}
655
656//////////////////////////////////////////////////////////////////////////////////////
657//
658// LLObjectMediaDataClient
659// Subclass of LLMediaDataClient for the ObjectMedia cap
660//
661//////////////////////////////////////////////////////////////////////////////////////
662
663LLMediaDataClient::Responder *LLObjectMediaDataClient::createResponder(const request_ptr_t &request) const
664{
665 return new LLObjectMediaDataClient::Responder(request);
666}
667
668const char *LLObjectMediaDataClient::getCapabilityName() const
669{
670 return "ObjectMedia";
671}
672
673void LLObjectMediaDataClient::fetchMedia(LLMediaDataClientObject *object)
674{
675 LLSD sd_payload;
676 sd_payload["verb"] = "GET";
677 sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
678 request(object, sd_payload);
679}
680
681void LLObjectMediaDataClient::updateMedia(LLMediaDataClientObject *object)
682{
683 LLSD sd_payload;
684 sd_payload["verb"] = "UPDATE";
685 sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
686 LLSD object_media_data;
687 int i = 0;
688 int end = object->getMediaDataCount();
689 for ( ; i < end ; ++i)
690 {
691 object_media_data.append(object->getMediaDataLLSD(i));
692 }
693 sd_payload[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data;
694
695 LL_DEBUGS("LLMediaDataClient") << "update media data: " << object->getID() << " " << ll_print_sd(sd_payload) << LL_ENDL;
696
697 request(object, sd_payload);
698}
699
700/*virtual*/
701void LLObjectMediaDataClient::Responder::result(const LLSD& content)
702{
703 const LLMediaDataClient::Request::Type type = getRequest()->getType();
704 llassert(type == LLMediaDataClient::Request::GET || type == LLMediaDataClient::Request::UPDATE)
705 if (type == LLMediaDataClient::Request::GET)
706 {
707 LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " GET returned: " << ll_print_sd(content) << LL_ENDL;
708
709 // Look for an error
710 if (content.has("error"))
711 {
712 const LLSD &error = content["error"];
713 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error getting media data for object: code=" <<
714 error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
715
716 // XXX Warn user?
717 }
718 else {
719 // Check the data
720 const LLUUID &object_id = content[LLTextureEntry::OBJECT_ID_KEY];
721 if (object_id != getRequest()->getObject()->getID())
722 {
723 // NOT good, wrong object id!!
724 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " DROPPING response with wrong object id (" << object_id << ")" << LL_ENDL;
725 return;
726 }
727
728 // Otherwise, update with object media data
729 getRequest()->getObject()->updateObjectMediaData(content[LLTextureEntry::OBJECT_MEDIA_DATA_KEY],
730 content[LLTextureEntry::MEDIA_VERSION_KEY]);
731 }
732 }
733 else if (type == LLMediaDataClient::Request::UPDATE)
734 {
735 // just do what our superclass does
736 LLMediaDataClient::Responder::result(content);
737 }
738}
739
740//////////////////////////////////////////////////////////////////////////////////////
741//
742// LLObjectMediaNavigateClient
743// Subclass of LLMediaDataClient for the ObjectMediaNavigate cap
744//
745//////////////////////////////////////////////////////////////////////////////////////
746LLMediaDataClient::Responder *LLObjectMediaNavigateClient::createResponder(const request_ptr_t &request) const
747{
748 return new LLObjectMediaNavigateClient::Responder(request);
749}
750
751const char *LLObjectMediaNavigateClient::getCapabilityName() const
752{
753 return "ObjectMediaNavigate";
754}
755
756void LLObjectMediaNavigateClient::navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url)
757{
758 LLSD sd_payload;
759 sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
760 sd_payload[LLMediaEntry::CURRENT_URL_KEY] = url;
761 sd_payload[LLTextureEntry::TEXTURE_INDEX_KEY] = (LLSD::Integer)texture_index;
762
763 LL_INFOS("LLMediaDataClient") << "navigate() initiated: " << ll_print_sd(sd_payload) << LL_ENDL;
764
765 request(object, sd_payload);
766}
767
768/*virtual*/
769void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string& reason)
770{
771 // Bounce back (unless HTTP_SERVICE_UNAVAILABLE, in which case call base
772 // class
773 if (status == HTTP_SERVICE_UNAVAILABLE)
774 {
775 LLMediaDataClient::Responder::error(status, reason);
776 }
777 else {
778 // bounce the face back
779 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: http code=" << status << LL_ENDL;
780 const LLSD &payload = getRequest()->getPayload();
781 // bounce the face back
782 getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]);
783 }
784}
785
786/*virtual*/
787void LLObjectMediaNavigateClient::Responder::result(const LLSD& content)
788{
789 LL_INFOS("LLMediaDataClient") << *(getRequest()) << " NAVIGATE returned " << ll_print_sd(content) << LL_ENDL;
790
791 if (content.has("error"))
792 {
793 const LLSD &error = content["error"];
794 int error_code = error["code"];
795
796 if (ERROR_PERMISSION_DENIED_CODE == error_code)
797 {
798 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Navigation denied: bounce back" << LL_ENDL;
799 const LLSD &payload = getRequest()->getPayload();
800 // bounce the face back
801 getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]);
802 }
803 else {
804 LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: code=" <<
805 error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
806 }
807 // XXX Warn user?
808 }
809 else {
810 // just do what our superclass does
811 LLMediaDataClient::Responder::result(content);
812 }
813}
diff --git a/linden/indra/newview/llmediadataclient.h b/linden/indra/newview/llmediadataclient.h
new file mode 100644
index 0000000..0ed7c57
--- /dev/null
+++ b/linden/indra/newview/llmediadataclient.h
@@ -0,0 +1,341 @@
1/**
2 * @file llmediadataclient.h
3 * @brief class for queueing up requests to the media service
4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 *
7 * Copyright (c) 2007-2010, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlife.com/developers/opensource/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at
21 * http://secondlife.com/developers/opensource/flossexception
22 *
23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations.
26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE.
30 * $/LicenseInfo$
31 *
32 */
33
34#ifndef LL_LLMEDIADATACLIENT_H
35#define LL_LLMEDIADATACLIENT_H
36
37#include "llhttpclient.h"
38#include <queue>
39//#include "llrefcount.h"
40//#include "llpointer.h"
41//#include "lleventtimer.h"
42
43
44// Link seam for LLVOVolume
45class LLMediaDataClientObject : public LLRefCount
46{
47public:
48 // Get the number of media data items
49 virtual U8 getMediaDataCount() const = 0;
50 // Get the media data at index, as an LLSD
51 virtual LLSD getMediaDataLLSD(U8 index) const = 0;
52 // Get this object's UUID
53 virtual LLUUID getID() const = 0;
54 // Navigate back to previous URL
55 virtual void mediaNavigateBounceBack(U8 index) = 0;
56 // Does this object have media?
57 virtual bool hasMedia() const = 0;
58 // Update the object's media data to the given array
59 virtual void updateObjectMediaData(LLSD const &media_data_array, const std::string &version_string) = 0;
60 // Return the total "interest" of the media (on-screen area)
61 virtual F64 getMediaInterest() const = 0;
62 // Return the given cap url
63 virtual std::string getCapabilityUrl(const std::string &name) const = 0;
64 // Return whether the object has been marked dead
65 virtual bool isDead() const = 0;
66 // Returns a media version number for the object
67 virtual U32 getMediaVersion() const = 0;
68 // Returns whether the object is "interesting enough" to fetch
69 virtual bool isInterestingEnough() const = 0;
70 // Returns whether we've seen this object yet or not
71 virtual bool isNew() const = 0;
72
73 // smart pointer
74 typedef LLPointer<LLMediaDataClientObject> ptr_t;
75};
76
77// This object creates a priority queue for requests.
78// Abstracts the Cap URL, the request, and the responder
79class LLMediaDataClient : public LLRefCount
80{
81public:
82 LOG_CLASS(LLMediaDataClient);
83
84 const static F32 QUEUE_TIMER_DELAY;// = 1.0; // seconds(s)
85 const static F32 UNAVAILABLE_RETRY_TIMER_DELAY;// = 5.0; // secs
86 const static U32 MAX_RETRIES;// = 4;
87 const static U32 MAX_SORTED_QUEUE_SIZE;// = 10000;
88 const static U32 MAX_ROUND_ROBIN_QUEUE_SIZE;// = 10000;
89
90 // Constructor
91 LLMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
92 F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
93 U32 max_retries = MAX_RETRIES,
94 U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
95 U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE);
96
97 // Make the request
98 void request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload);
99
100 F32 getRetryTimerDelay() const { return mRetryTimerDelay; }
101
102 // Returns true iff the queue is empty
103 bool isEmpty() const;
104
105 // Returns true iff the given object is in the queue
106 bool isInQueue(const LLMediaDataClientObject::ptr_t &object);
107
108 // Remove the given object from the queue. Returns true iff the given object is removed.
109 bool removeFromQueue(const LLMediaDataClientObject::ptr_t &object);
110
111 // Called only by the Queue timer and tests (potentially)
112 bool processQueueTimer();
113
114protected:
115 // Destructor
116 virtual ~LLMediaDataClient(); // use unref
117
118 // Request
119 class Request : public LLRefCount
120 {
121 public:
122 enum Type {
123 GET,
124 UPDATE,
125 NAVIGATE,
126 ANY
127 };
128
129 Request(const char *cap_name, const LLSD& sd_payload, LLMediaDataClientObject *obj, LLMediaDataClient *mdc);
130 const char *getCapName() const { return mCapName; }
131 const LLSD &getPayload() const { return mPayload; }
132 LLMediaDataClientObject *getObject() const { return mObject; }
133
134 U32 getNum() const { return mNum; }
135
136 U32 getRetryCount() const { return mRetryCount; }
137 void incRetryCount() { mRetryCount++; }
138
139 // Note: may return empty string!
140 std::string getCapability() const;
141
142 Type getType() const;
143 const char *getTypeAsString() const;
144
145 // Re-enqueue thyself
146 void reEnqueue() const;
147
148 F32 getRetryTimerDelay() const;
149 U32 getMaxNumRetries() const;
150
151 bool isNew() const { return mObject.notNull() ? mObject->isNew() : false; }
152 void markSent(bool flag);
153 bool isMarkedSent() const { return mMarkedSent; }
154 void updateScore();
155 F64 getScore() const { return mScore; }
156
157 public:
158 friend std::ostream& operator<<(std::ostream &s, const Request &q);
159
160 protected:
161 virtual ~Request(); // use unref();
162
163 private:
164 const char *mCapName;
165 LLSD mPayload;
166 LLMediaDataClientObject::ptr_t mObject;
167 // Simple tracking
168 U32 mNum;
169 static U32 sNum;
170 U32 mRetryCount;
171 F64 mScore;
172 bool mMarkedSent;
173
174 // Back pointer to the MDC...not a ref!
175 LLMediaDataClient *mMDC;
176 };
177 typedef LLPointer<Request> request_ptr_t;
178
179 // Responder
180 class Responder : public LLHTTPClient::Responder
181 {
182 public:
183 Responder(const request_ptr_t &request);
184 //If we get back an error (not found, etc...), handle it here
185 virtual void error(U32 status, const std::string& reason);
186 //If we get back a normal response, handle it here. Default just logs it.
187 virtual void result(const LLSD& content);
188
189 const request_ptr_t &getRequest() const { return mRequest; }
190
191 protected:
192 virtual ~Responder();
193
194 private:
195
196 class RetryTimer : public LLEventTimer
197 {
198 public:
199 RetryTimer(F32 time, Responder *);
200 virtual ~RetryTimer();
201 virtual BOOL tick();
202 private:
203 // back-pointer
204 boost::intrusive_ptr<Responder> mResponder;
205 };
206
207 request_ptr_t mRequest;
208 };
209
210protected:
211
212 // Subclasses must override this factory method to return a new responder
213 virtual Responder *createResponder(const request_ptr_t &request) const = 0;
214
215 // Subclasses must override to return a cap name
216 virtual const char *getCapabilityName() const = 0;
217
218 virtual void sortQueue();
219 virtual void serviceQueue();
220
221private:
222 typedef std::list<request_ptr_t> request_queue_t;
223
224 void enqueue(const Request*);
225
226 // Return whether the given object is/was in the queue
227 static LLMediaDataClient::request_ptr_t findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, Request::Type type);
228
229 // Comparator for sorting
230 static bool compareRequests(const request_ptr_t &o1, const request_ptr_t &o2);
231 static F64 getObjectScore(const LLMediaDataClientObject::ptr_t &obj);
232
233 friend std::ostream& operator<<(std::ostream &s, const Request &q);
234 friend std::ostream& operator<<(std::ostream &s, const request_queue_t &q);
235
236 class QueueTimer : public LLEventTimer
237 {
238 public:
239 QueueTimer(F32 time, LLMediaDataClient *mdc);
240 virtual BOOL tick();
241 protected:
242 virtual ~QueueTimer();
243 private:
244 // back-pointer
245 LLPointer<LLMediaDataClient> mMDC;
246 };
247
248 void startQueueTimer();
249 void stopQueueTimer();
250 void setIsRunning(bool val) { mQueueTimerIsRunning = val; }
251
252 void swapCurrentQueue();
253 request_queue_t *getCurrentQueue();
254
255 const F32 mQueueTimerDelay;
256 const F32 mRetryTimerDelay;
257 const U32 mMaxNumRetries;
258 const U32 mMaxSortedQueueSize;
259 const U32 mMaxRoundRobinQueueSize;
260
261 bool mQueueTimerIsRunning;
262
263 request_queue_t mSortedQueue;
264 request_queue_t mRoundRobinQueue;
265 bool mCurrentQueueIsTheSortedQueue;
266};
267
268
269// MediaDataClient specific for the ObjectMedia cap
270class LLObjectMediaDataClient : public LLMediaDataClient
271{
272public:
273 LLObjectMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
274 F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
275 U32 max_retries = MAX_RETRIES,
276 U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
277 U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
278 : LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
279 {}
280 virtual ~LLObjectMediaDataClient() {}
281
282 void fetchMedia(LLMediaDataClientObject *object);
283 void updateMedia(LLMediaDataClientObject *object);
284
285protected:
286 // Subclasses must override this factory method to return a new responder
287 virtual Responder *createResponder(const request_ptr_t &request) const;
288
289 // Subclasses must override to return a cap name
290 virtual const char *getCapabilityName() const;
291
292 class Responder : public LLMediaDataClient::Responder
293 {
294 public:
295 Responder(const request_ptr_t &request)
296 : LLMediaDataClient::Responder(request) {}
297 virtual void result(const LLSD &content);
298 };
299};
300
301
302// MediaDataClient specific for the ObjectMediaNavigate cap
303class LLObjectMediaNavigateClient : public LLMediaDataClient
304{
305public:
306 // NOTE: from llmediaservice.h
307 static const int ERROR_PERMISSION_DENIED_CODE = 8002;
308
309 LLObjectMediaNavigateClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
310 F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
311 U32 max_retries = MAX_RETRIES,
312 U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
313 U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
314 : LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
315 {}
316 virtual ~LLObjectMediaNavigateClient() {}
317
318 void navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url);
319
320protected:
321 // Subclasses must override this factory method to return a new responder
322 virtual Responder *createResponder(const request_ptr_t &request) const;
323
324 // Subclasses must override to return a cap name
325 virtual const char *getCapabilityName() const;
326
327 class Responder : public LLMediaDataClient::Responder
328 {
329 public:
330 Responder(const request_ptr_t &request)
331 : LLMediaDataClient::Responder(request) {}
332 virtual void error(U32 status, const std::string& reason);
333 virtual void result(const LLSD &content);
334 private:
335 void mediaNavigateBounceBack();
336 };
337
338};
339
340
341#endif // LL_LLMEDIADATACLIENT_H
diff --git a/linden/indra/newview/llpanelavatar.cpp b/linden/indra/newview/llpanelavatar.cpp
index dc0db8b..f249d2a 100644
--- a/linden/indra/newview/llpanelavatar.cpp
+++ b/linden/indra/newview/llpanelavatar.cpp
@@ -1321,11 +1321,11 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
1321{ 1321{
1322 if (avatar_id.isNull()) return; 1322 if (avatar_id.isNull()) return;
1323 1323
1324 BOOL avatar_changed = FALSE; 1324// BOOL avatar_changed = FALSE;
1325 if (avatar_id != mAvatarID) 1325// if (avatar_id != mAvatarID)
1326 { 1326// {
1327 avatar_changed = TRUE; 1327// avatar_changed = TRUE;
1328 } 1328// }
1329 mAvatarID = avatar_id; 1329 mAvatarID = avatar_id;
1330 1330
1331 // Determine if we have their calling card. 1331 // Determine if we have their calling card.
diff --git a/linden/indra/newview/llpanelcontents.cpp b/linden/indra/newview/llpanelcontents.cpp
index 02befea..c5df81c 100644
--- a/linden/indra/newview/llpanelcontents.cpp
+++ b/linden/indra/newview/llpanelcontents.cpp
@@ -83,8 +83,6 @@
83 83
84BOOL LLPanelContents::postBuild() 84BOOL LLPanelContents::postBuild()
85{ 85{
86 LLRect rect = this->getRect();
87
88 setMouseOpaque(FALSE); 86 setMouseOpaque(FALSE);
89 87
90 childSetAction("button new script",&LLPanelContents::onClickNewScript, this); 88 childSetAction("button new script",&LLPanelContents::onClickNewScript, this);
diff --git a/linden/indra/newview/llpanelface.cpp b/linden/indra/newview/llpanelface.cpp
index b9a40da..d8401de 100644
--- a/linden/indra/newview/llpanelface.cpp
+++ b/linden/indra/newview/llpanelface.cpp
@@ -74,7 +74,6 @@
74 74
75BOOL LLPanelFace::postBuild() 75BOOL LLPanelFace::postBuild()
76{ 76{
77 LLRect rect = this->getRect();
78 LLTextureCtrl* mTextureCtrl; 77 LLTextureCtrl* mTextureCtrl;
79 LLColorSwatchCtrl* mColorSwatch; 78 LLColorSwatchCtrl* mColorSwatch;
80 79
diff --git a/linden/indra/newview/llpanelgrouplandmoney.cpp b/linden/indra/newview/llpanelgrouplandmoney.cpp
index 3f128fe..e15f585 100644
--- a/linden/indra/newview/llpanelgrouplandmoney.cpp
+++ b/linden/indra/newview/llpanelgrouplandmoney.cpp
@@ -1390,13 +1390,11 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
1390 S32 cur_land_tax; 1390 S32 cur_land_tax;
1391 S32 cur_group_tax; 1391 S32 cur_group_tax;
1392 S32 cur_parcel_dir_fee; 1392 S32 cur_parcel_dir_fee;
1393 S32 cur_total_tax;
1394 S32 proj_object_tax; 1393 S32 proj_object_tax;
1395 S32 proj_light_tax; 1394 S32 proj_light_tax;
1396 S32 proj_land_tax; 1395 S32 proj_land_tax;
1397 S32 proj_group_tax; 1396 S32 proj_group_tax;
1398 S32 proj_parcel_dir_fee; 1397 S32 proj_parcel_dir_fee;
1399 S32 proj_total_tax;
1400 S32 non_exempt_members; 1398 S32 non_exempt_members;
1401 1399
1402 msg->getS32Fast(_PREHASH_MoneyData, _PREHASH_IntervalDays, interval_days ); 1400 msg->getS32Fast(_PREHASH_MoneyData, _PREHASH_IntervalDays, interval_days );
@@ -1420,9 +1418,6 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
1420 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_LastTaxDate, last_stipend_date); 1418 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_LastTaxDate, last_stipend_date);
1421 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_TaxDate, next_stipend_date); 1419 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_TaxDate, next_stipend_date);
1422 1420
1423 cur_total_tax = cur_object_tax + cur_light_tax + cur_land_tax + cur_group_tax + cur_parcel_dir_fee;
1424 proj_total_tax = proj_object_tax + proj_light_tax + proj_land_tax + proj_group_tax + proj_parcel_dir_fee;
1425
1426 if (interval_days != mImplementationp->mIntervalLength || 1421 if (interval_days != mImplementationp->mIntervalLength ||
1427 current_interval != mImplementationp->mCurrentInterval) 1422 current_interval != mImplementationp->mCurrentInterval)
1428 { 1423 {
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index 824c5b0..524ecf6 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -602,18 +602,17 @@ void LLPanelLogin::addServer(const std::string& server)
602 const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick(); 602 const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick();
603 603
604 LLComboBox *grids = sInstance->getChild<LLComboBox>("server_combo"); 604 LLComboBox *grids = sInstance->getChild<LLComboBox>("server_combo");
605 S32 selectIndex = -1, i = 0; 605 S32 i = 0;
606 grids->removeall(); 606 grids->removeall();
607 if (defaultGrid != "") { 607 if (defaultGrid != "") {
608 grids->add(defaultGrid); 608 grids->add(defaultGrid);
609 selectIndex = i++; 609 i++;
610 } 610 }
611 HippoGridManager::GridIterator it, end = gHippoGridManager->endGrid(); 611 HippoGridManager::GridIterator it, end = gHippoGridManager->endGrid();
612 for (it = gHippoGridManager->beginGrid(); it != end; ++it) { 612 for (it = gHippoGridManager->beginGrid(); it != end; ++it) {
613 const std::string &grid = it->second->getGridNick(); 613 const std::string &grid = it->second->getGridNick();
614 if (grid != defaultGrid) { 614 if (grid != defaultGrid) {
615 grids->add(grid); 615 grids->add(grid);
616 //if (grid == mCurGrid) selectIndex = i;
617 i++; 616 i++;
618 } 617 }
619 } 618 }
diff --git a/linden/indra/newview/llpanelmediahud.cpp b/linden/indra/newview/llpanelmediahud.cpp
index 39c4b63..c4afe27 100644
--- a/linden/indra/newview/llpanelmediahud.cpp
+++ b/linden/indra/newview/llpanelmediahud.cpp
@@ -356,7 +356,6 @@ void LLPanelMediaHUD::updateShape()
356 media_hud_rect.mRight += getRect().getWidth() - media_region->getRect().mRight; 356 media_hud_rect.mRight += getRect().getWidth() - media_region->getRect().mRight;
357 357
358 358
359 LLRect old_hud_rect = media_hud_rect;
360 // keep all parts of HUD on-screen 359 // keep all parts of HUD on-screen
361 media_hud_rect.intersectWith(getParent()->getLocalRect()); 360 media_hud_rect.intersectWith(getParent()->getLocalRect());
362 361
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp
index cc89e24..bff365d 100644
--- a/linden/indra/newview/llpanelobject.cpp
+++ b/linden/indra/newview/llpanelobject.cpp
@@ -520,10 +520,10 @@ void LLPanelObject::getState( )
520 mBtnPasteRot->setEnabled( enable_rotate ); 520 mBtnPasteRot->setEnabled( enable_rotate );
521 mBtnPasteRotClip->setEnabled( enable_rotate ); 521 mBtnPasteRotClip->setEnabled( enable_rotate );
522 522
523 BOOL owners_identical;
524 LLUUID owner_id; 523 LLUUID owner_id;
525 std::string owner_name; 524 std::string owner_name;
526 owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name); 525 // This is still needed for the side effects, though the result is not.
526 LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
527 527
528 // BUG? Check for all objects being editable? 528 // BUG? Check for all objects being editable?
529 S32 roots_selected = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount(); 529 S32 roots_selected = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
diff --git a/linden/indra/newview/llpanelpermissions.cpp b/linden/indra/newview/llpanelpermissions.cpp
index 6b7bc1b..9799de7 100644
--- a/linden/indra/newview/llpanelpermissions.cpp
+++ b/linden/indra/newview/llpanelpermissions.cpp
@@ -541,7 +541,7 @@ void LLPanelPermissions::refresh()
541 // TODO: Creator permissions 541 // TODO: Creator permissions
542 542
543 BOOL valid_base_perms = FALSE; 543 BOOL valid_base_perms = FALSE;
544 BOOL valid_owner_perms = FALSE; 544 //BOOL valid_owner_perms = FALSE;
545 BOOL valid_group_perms = FALSE; 545 BOOL valid_group_perms = FALSE;
546 BOOL valid_everyone_perms = FALSE; 546 BOOL valid_everyone_perms = FALSE;
547 BOOL valid_next_perms = FALSE; 547 BOOL valid_next_perms = FALSE;
@@ -561,7 +561,8 @@ void LLPanelPermissions::refresh()
561 &base_mask_on, 561 &base_mask_on,
562 &base_mask_off); 562 &base_mask_off);
563 563
564 valid_owner_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER, 564 // TODO - seems odd, but this is not actually used, except to set owner_mask_*.
565 /*valid_owner_perms =*/ LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER,
565 &owner_mask_on, 566 &owner_mask_on,
566 &owner_mask_off); 567 &owner_mask_off);
567 568
diff --git a/linden/indra/newview/llpanelvolume.cpp b/linden/indra/newview/llpanelvolume.cpp
index 6d014a2..e4e30c0 100644
--- a/linden/indra/newview/llpanelvolume.cpp
+++ b/linden/indra/newview/llpanelvolume.cpp
@@ -181,10 +181,10 @@ void LLPanelVolume::getState( )
181 return; 181 return;
182 } 182 }
183 183
184 BOOL owners_identical;
185 LLUUID owner_id; 184 LLUUID owner_id;
186 std::string owner_name; 185 std::string owner_name;
187 owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name); 186 // This is still needed for the side effects, though the result is not.
187 LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
188 188
189 // BUG? Check for all objects being editable? 189 // BUG? Check for all objects being editable?
190 BOOL editable = root_objectp->permModify(); 190 BOOL editable = root_objectp->permModify();
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp
index 4a6c8ed..bfe0e9c 100644
--- a/linden/indra/newview/llselectmgr.cpp
+++ b/linden/indra/newview/llselectmgr.cpp
@@ -1072,7 +1072,6 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
1072 if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount()) 1072 if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount())
1073 { 1073 {
1074 //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject()); 1074 //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
1075 LLBBox bbox = mSavedSelectionBBox;
1076 mGridOrigin = mSavedSelectionBBox.getCenterAgent(); 1075 mGridOrigin = mSavedSelectionBBox.getCenterAgent();
1077 mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f; 1076 mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f;
1078 1077
@@ -1090,7 +1089,6 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
1090 else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull()) 1089 else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull())
1091 { 1090 {
1092 mGridRotation = first_grid_object->getRenderRotation(); 1091 mGridRotation = first_grid_object->getRenderRotation();
1093 LLVector3 first_grid_obj_pos = first_grid_object->getRenderPosition();
1094 1092
1095 LLVector3 min_extents(F32_MAX, F32_MAX, F32_MAX); 1093 LLVector3 min_extents(F32_MAX, F32_MAX, F32_MAX);
1096 LLVector3 max_extents(-F32_MAX, -F32_MAX, -F32_MAX); 1094 LLVector3 max_extents(-F32_MAX, -F32_MAX, -F32_MAX);
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp
index d9fa5b5..a9255b3 100644
--- a/linden/indra/newview/llspatialpartition.cpp
+++ b/linden/indra/newview/llspatialpartition.cpp
@@ -2617,9 +2617,6 @@ public:
2617 return; 2617 return;
2618 } 2618 }
2619 2619
2620 LLVector3 nodeCenter = group->mBounds[0];
2621 LLVector3 octCenter = LLVector3(group->mOctreeNode->getCenter());
2622
2623 for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i) 2620 for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i)
2624 { 2621 {
2625 LLDrawable* drawable = *i; 2622 LLDrawable* drawable = *i;
@@ -2860,9 +2857,6 @@ public:
2860 2857
2861 virtual bool check(LLDrawable* drawable) 2858 virtual bool check(LLDrawable* drawable)
2862 { 2859 {
2863 LLVector3 local_start = mStart;
2864 LLVector3 local_end = mEnd;
2865
2866 if (!gPipeline.hasRenderType(drawable->getRenderType()) || !drawable->isVisible()) 2860 if (!gPipeline.hasRenderType(drawable->getRenderType()) || !drawable->isVisible())
2867 { 2861 {
2868 return false; 2862 return false;
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 922de18..2fd96df 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -206,6 +206,8 @@
206#include "rlvhandler.h" 206#include "rlvhandler.h"
207// [/RLVa:KB] 207// [/RLVa:KB]
208 208
209#include "rcmoapradar.h"
210
209#if LL_WINDOWS 211#if LL_WINDOWS
210#include "llwindebug.h" 212#include "llwindebug.h"
211#include "lldxhardware.h" 213#include "lldxhardware.h"
@@ -346,7 +348,6 @@ bool idle_startup()
346 const F32 TIMEOUT_SECONDS = 10.f; // changed from 5 to 10 seconds for OpenSim lag -- MC 348 const F32 TIMEOUT_SECONDS = 10.f; // changed from 5 to 10 seconds for OpenSim lag -- MC
347 const S32 MAX_TIMEOUT_COUNT = 3; 349 const S32 MAX_TIMEOUT_COUNT = 3;
348 static LLTimer timeout; 350 static LLTimer timeout;
349 static S32 timeout_count = 0;
350 351
351 static LLTimer login_time; 352 static LLTimer login_time;
352 static LLTimer connecting_region_timer; 353 static LLTimer connecting_region_timer;
@@ -378,11 +379,10 @@ bool idle_startup()
378 379
379 // last location by default 380 // last location by default
380 static S32 agent_location_id = START_LOCATION_ID_LAST; 381 static S32 agent_location_id = START_LOCATION_ID_LAST;
381 static S32 location_which = START_LOCATION_ID_LAST;
382 382
383 static bool show_connect_box = true; 383 static bool show_connect_box = true;
384 384
385 static bool stipend_since_login = false; 385 //static bool stipend_since_login = false;
386 386
387 static bool samename = false; 387 static bool samename = false;
388 388
@@ -797,8 +797,6 @@ bool idle_startup()
797 797
798 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); 798 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
799 799
800 timeout_count = 0;
801
802 if (LLStartUp::shouldAutoLogin()) 800 if (LLStartUp::shouldAutoLogin())
803 { 801 {
804 show_connect_box = false; 802 show_connect_box = false;
@@ -1111,7 +1109,6 @@ bool idle_startup()
1111 { 1109 {
1112 // Force login at the last location 1110 // Force login at the last location
1113 agent_location_id = START_LOCATION_ID_LAST; 1111 agent_location_id = START_LOCATION_ID_LAST;
1114 location_which = START_LOCATION_ID_LAST;
1115 gSavedSettings.setBOOL("LoginLastLocation", FALSE); 1112 gSavedSettings.setBOOL("LoginLastLocation", FALSE);
1116 1113
1117 // Clear some things that would cause us to divert to a user-specified location 1114 // Clear some things that would cause us to divert to a user-specified location
@@ -1123,21 +1120,14 @@ bool idle_startup()
1123 { 1120 {
1124 // a startup URL was specified 1121 // a startup URL was specified
1125 agent_location_id = START_LOCATION_ID_URL; 1122 agent_location_id = START_LOCATION_ID_URL;
1126
1127 // doesn't really matter what location_which is, since
1128 // agent_start_look_at will be overwritten when the
1129 // UserLoginLocationReply arrives
1130 location_which = START_LOCATION_ID_LAST;
1131 } 1123 }
1132 else if (gSavedSettings.getBOOL("LoginLastLocation")) 1124 else if (gSavedSettings.getBOOL("LoginLastLocation"))
1133 { 1125 {
1134 agent_location_id = START_LOCATION_ID_LAST; // last location 1126 agent_location_id = START_LOCATION_ID_LAST; // last location
1135 location_which = START_LOCATION_ID_LAST;
1136 } 1127 }
1137 else 1128 else
1138 { 1129 {
1139 agent_location_id = START_LOCATION_ID_HOME; // home 1130 agent_location_id = START_LOCATION_ID_HOME; // home
1140 location_which = START_LOCATION_ID_HOME;
1141 } 1131 }
1142 1132
1143 gViewerWindow->getWindow()->setCursor(UI_CURSOR_WAIT); 1133 gViewerWindow->getWindow()->setCursor(UI_CURSOR_WAIT);
@@ -1783,11 +1773,11 @@ bool idle_startup()
1783 if((*it).second == "N") gAgent.setFirstLogin(TRUE); 1773 if((*it).second == "N") gAgent.setFirstLogin(TRUE);
1784 else gAgent.setFirstLogin(FALSE); 1774 else gAgent.setFirstLogin(FALSE);
1785 } 1775 }
1786 it = options[0].find("stipend_since_login"); 1776 //it = options[0].find("stipend_since_login");
1787 if(it != no_flag) 1777 //if(it != no_flag)
1788 { 1778 //{
1789 if((*it).second == "Y") stipend_since_login = true; 1779 // if((*it).second == "Y") stipend_since_login = true;
1790 } 1780 //}
1791 it = options[0].find("gendered"); 1781 it = options[0].find("gendered");
1792 if(it != no_flag) 1782 if(it != no_flag)
1793 { 1783 {
@@ -2079,6 +2069,16 @@ bool idle_startup()
2079 LLRect window(0, gViewerWindow->getWindowHeight(), gViewerWindow->getWindowWidth(), 0); 2069 LLRect window(0, gViewerWindow->getWindowHeight(), gViewerWindow->getWindowWidth(), 0);
2080 gViewerWindow->adjustControlRectanglesForFirstUse(window); 2070 gViewerWindow->adjustControlRectanglesForFirstUse(window);
2081 2071
2072 if (gSavedSettings.getBOOL("ShowRadar"))
2073 {
2074 LLFloaterAvatarList::showInstance();
2075 }
2076
2077 if (gSavedSettings.getBOOL("ShowMOAPRadar"))
2078 {
2079 LLFloaterMOAPRadar::showInstance();
2080 }
2081
2082 if(gSavedSettings.getBOOL("ShowMiniMap")) 2082 if(gSavedSettings.getBOOL("ShowMiniMap"))
2083 { 2083 {
2084 LLFloaterMap::showInstance(); 2084 LLFloaterMap::showInstance();
diff --git a/linden/indra/newview/llsurface.cpp b/linden/indra/newview/llsurface.cpp
index 5a99e66..8692c80 100644
--- a/linden/indra/newview/llsurface.cpp
+++ b/linden/indra/newview/llsurface.cpp
@@ -1262,8 +1262,6 @@ BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y,
1262 y_end = tex_width; 1262 y_end = tex_width;
1263 } 1263 }
1264 1264
1265 LLVector3d origin_global = from_region_handle(getRegion()->getHandle());
1266
1267 // OK, for now, just have the composition value equal the height at the point. 1265 // OK, for now, just have the composition value equal the height at the point.
1268 LLVector3 location; 1266 LLVector3 location;
1269 LLColor4U coloru; 1267 LLColor4U coloru;
diff --git a/linden/indra/newview/lltool.cpp b/linden/indra/newview/lltool.cpp
index df2191b..f8188e3 100644
--- a/linden/indra/newview/lltool.cpp
+++ b/linden/indra/newview/lltool.cpp
@@ -40,10 +40,12 @@
40 40
41#include "llviewerwindow.h" 41#include "llviewerwindow.h"
42#include "lltoolcomp.h" 42#include "lltoolcomp.h"
43#include "lltoolface.h"
43#include "lltoolfocus.h" 44#include "lltoolfocus.h"
44#include "llfocusmgr.h" 45#include "llfocusmgr.h"
45#include "llagent.h" 46#include "llagent.h"
46#include "llviewerjoystick.h" 47#include "llviewerjoystick.h"
48#include "qtoolalign.h"
47 49
48extern BOOL gDebugClicks; 50extern BOOL gDebugClicks;
49 51
@@ -187,7 +189,7 @@ LLTool* LLTool::getOverrideTool(MASK mask)
187 { 189 {
188 return NULL; 190 return NULL;
189 } 191 }
190 if (mask & MASK_ALT) 192 else if (mask & MASK_ALT)
191 { 193 {
192 return LLToolCamera::getInstance(); 194 return LLToolCamera::getInstance();
193 } 195 }
diff --git a/linden/indra/newview/lltoolcomp.cpp b/linden/indra/newview/lltoolcomp.cpp
index 7bf99f0..2ec1d8e 100644
--- a/linden/indra/newview/lltoolcomp.cpp
+++ b/linden/indra/newview/lltoolcomp.cpp
@@ -43,6 +43,7 @@
43#include "llmaniptranslate.h" 43#include "llmaniptranslate.h"
44#include "llmenugl.h" // for right-click menu hack 44#include "llmenugl.h" // for right-click menu hack
45#include "llselectmgr.h" 45#include "llselectmgr.h"
46#include "lltoolface.h"
46#include "lltoolfocus.h" 47#include "lltoolfocus.h"
47#include "lltoolgrab.h" 48#include "lltoolgrab.h"
48#include "lltoolgun.h" 49#include "lltoolgun.h"
@@ -131,6 +132,36 @@ void LLToolComposite::handleSelect()
131 mSelected = TRUE; 132 mSelected = TRUE;
132} 133}
133 134
135
136LLTool* LLToolComposite::getOverrideTool(MASK mask)
137{
138 if (gKeyboard->getKeyDown('M') &&
139 ((mask == (MASK_ALT | MASK_CONTROL)) || (mask == (MASK_ALT | MASK_CONTROL | MASK_SHIFT))))
140 {
141 return QToolAlign::getInstance();
142 }
143 else if (gKeyboard->getKeyDown('P') &&
144 (mask == (MASK_CONTROL | MASK_SHIFT)))
145 {
146 return LLToolCompTranslate::getInstance();
147 }
148 else if (gKeyboard->getKeyDown('F') &&
149 (mask == (MASK_ALT | MASK_CONTROL)))
150 {
151 return LLToolFace::getInstance();
152 }
153 else if (mask == (MASK_CONTROL | MASK_SHIFT))
154 {
155 return LLToolCompScale::getInstance();
156 }
157 else if (mask == MASK_CONTROL)
158 {
159 return LLToolCompRotate::getInstance();
160 }
161 return LLTool::getOverrideTool(mask);
162}
163
164
134//---------------------------------------------------------------------------- 165//----------------------------------------------------------------------------
135// LLToolCompInspect 166// LLToolCompInspect
136//---------------------------------------------------------------------------- 167//----------------------------------------------------------------------------
@@ -277,24 +308,6 @@ BOOL LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask)
277 return LLToolComposite::handleMouseUp(x, y, mask); 308 return LLToolComposite::handleMouseUp(x, y, mask);
278} 309}
279 310
280LLTool* LLToolCompTranslate::getOverrideTool(MASK mask)
281{
282 if (gKeyboard->getKeyDown('A') &&
283 ((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
284 {
285 return QToolAlign::getInstance();
286 }
287 else if (mask == MASK_CONTROL)
288 {
289 return LLToolCompRotate::getInstance();
290 }
291 else if (mask == (MASK_CONTROL | MASK_SHIFT))
292 {
293 return LLToolCompScale::getInstance();
294 }
295 return LLToolComposite::getOverrideTool(mask);
296}
297
298BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask) 311BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask)
299{ 312{
300 if (mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) 313 if (mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
@@ -401,22 +414,6 @@ BOOL LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask)
401 return LLToolComposite::handleMouseUp(x, y, mask); 414 return LLToolComposite::handleMouseUp(x, y, mask);
402} 415}
403 416
404LLTool* LLToolCompScale::getOverrideTool(MASK mask)
405{
406 if (gKeyboard->getKeyDown('A') &&
407 ((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
408 {
409 return QToolAlign::getInstance();
410 }
411 else if (mask == MASK_CONTROL)
412 {
413 return LLToolCompRotate::getInstance();
414 }
415
416 return LLToolComposite::getOverrideTool(mask);
417}
418
419
420BOOL LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask) 417BOOL LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask)
421{ 418{
422 if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) 419 if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
@@ -471,18 +468,16 @@ LLToolCompCreate::~LLToolCompCreate()
471 468
472BOOL LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask) 469BOOL LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask)
473{ 470{
474 BOOL handled = FALSE;
475 mMouseDown = TRUE; 471 mMouseDown = TRUE;
476 472
477 if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) ) 473 if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) )
478 { 474 {
479 gViewerWindow->pickAsync(x, y, mask, pickCallback); 475 gViewerWindow->pickAsync(x, y, mask, pickCallback);
480 handled = TRUE;
481 } 476 }
482 else 477 else
483 { 478 {
484 setCurrentTool( mPlacer ); 479 setCurrentTool( mPlacer );
485 handled = mPlacer->placeObject( x, y, mask ); 480 mPlacer->placeObject( x, y, mask );
486 } 481 }
487 482
488 mObjectPlacedOnMouseDown = TRUE; 483 mObjectPlacedOnMouseDown = TRUE;
@@ -606,20 +601,6 @@ BOOL LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask)
606 return LLToolComposite::handleMouseUp(x, y, mask); 601 return LLToolComposite::handleMouseUp(x, y, mask);
607} 602}
608 603
609LLTool* LLToolCompRotate::getOverrideTool(MASK mask)
610{
611 if (gKeyboard->getKeyDown('A') &&
612 ((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
613 {
614 return QToolAlign::getInstance();
615 }
616 else if (mask == (MASK_CONTROL | MASK_SHIFT))
617 {
618 return LLToolCompScale::getInstance();
619 }
620 return LLToolComposite::getOverrideTool(mask);
621}
622
623BOOL LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask) 604BOOL LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask)
624{ 605{
625 if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) 606 if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
diff --git a/linden/indra/newview/lltoolcomp.h b/linden/indra/newview/lltoolcomp.h
index 81ed0ba..cb5e544 100644
--- a/linden/indra/newview/lltoolcomp.h
+++ b/linden/indra/newview/lltoolcomp.h
@@ -84,6 +84,9 @@ public:
84 { mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); } 84 { mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); }
85 85
86 BOOL isSelecting(); 86 BOOL isSelecting();
87
88 virtual LLTool* getOverrideTool(MASK mask);
89
87protected: 90protected:
88 void setCurrentTool( LLTool* new_tool ); 91 void setCurrentTool( LLTool* new_tool );
89 LLTool* getCurrentTool() { return mCur; } 92 LLTool* getCurrentTool() { return mCur; }
@@ -113,8 +116,8 @@ public:
113 virtual ~LLToolCompInspect(); 116 virtual ~LLToolCompInspect();
114 117
115 // Overridden from LLToolComposite 118 // Overridden from LLToolComposite
116 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 119 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
117 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 120 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
118 121
119 static void pickCallback(const LLPickInfo& pick_info); 122 static void pickCallback(const LLPickInfo& pick_info);
120}; 123};
@@ -135,8 +138,6 @@ public:
135 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool 138 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
136 virtual void render(); 139 virtual void render();
137 140
138 virtual LLTool* getOverrideTool(MASK mask);
139
140 static void pickCallback(const LLPickInfo& pick_info); 141 static void pickCallback(const LLPickInfo& pick_info);
141}; 142};
142 143
@@ -150,14 +151,12 @@ public:
150 virtual ~LLToolCompScale(); 151 virtual ~LLToolCompScale();
151 152
152 // Overridden from LLToolComposite 153 // Overridden from LLToolComposite
153 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 154 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
154 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 155 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
155 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 156 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
156 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool 157 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
157 virtual void render(); 158 virtual void render();
158 159
159 virtual LLTool* getOverrideTool(MASK mask);
160
161 static void pickCallback(const LLPickInfo& pick_info); 160 static void pickCallback(const LLPickInfo& pick_info);
162}; 161};
163 162
@@ -172,17 +171,13 @@ public:
172 virtual ~LLToolCompRotate(); 171 virtual ~LLToolCompRotate();
173 172
174 // Overridden from LLToolComposite 173 // Overridden from LLToolComposite
175 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 174 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
176 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 175 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
177 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 176 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
178 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 177 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
179 virtual void render(); 178 virtual void render();
180 179
181 virtual LLTool* getOverrideTool(MASK mask);
182
183 static void pickCallback(const LLPickInfo& pick_info); 180 static void pickCallback(const LLPickInfo& pick_info);
184
185protected:
186}; 181};
187 182
188//----------------------------------------------------------------------- 183//-----------------------------------------------------------------------
@@ -195,14 +190,14 @@ public:
195 virtual ~LLToolCompCreate(); 190 virtual ~LLToolCompCreate();
196 191
197 // Overridden from LLToolComposite 192 // Overridden from LLToolComposite
198 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 193 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
199 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 194 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
200 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 195 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
201 196
202 static void pickCallback(const LLPickInfo& pick_info); 197 static void pickCallback(const LLPickInfo& pick_info);
203protected: 198protected:
204 LLToolPlacer* mPlacer; 199 LLToolPlacer* mPlacer;
205 BOOL mObjectPlacedOnMouseDown; 200 BOOL mObjectPlacedOnMouseDown;
206}; 201};
207 202
208 203
@@ -220,7 +215,7 @@ public:
220 virtual ~LLToolCompGun(); 215 virtual ~LLToolCompGun();
221 216
222 // Overridden from LLToolComposite 217 // Overridden from LLToolComposite
223 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 218 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
224 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 219 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
225 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); 220 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
226 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); 221 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
diff --git a/linden/indra/newview/lltooldraganddrop.cpp b/linden/indra/newview/lltooldraganddrop.cpp
index 18c4917..2adcf14 100644
--- a/linden/indra/newview/lltooldraganddrop.cpp
+++ b/linden/indra/newview/lltooldraganddrop.cpp
@@ -1521,18 +1521,6 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
1521 gFloaterTools->dirty(); 1521 gFloaterTools->dirty();
1522} 1522}
1523 1523
1524struct LLGiveInventoryInfo
1525{
1526 LLUUID mToAgentID;
1527 LLUUID mInventoryObjectID;
1528 LLUUID mIMSessionID;
1529 LLGiveInventoryInfo(const LLUUID& to_agent, const LLUUID& obj_id, const LLUUID &im_session_id = LLUUID::null) :
1530 mToAgentID(to_agent),
1531 mInventoryObjectID(obj_id),
1532 mIMSessionID(im_session_id)
1533 {}
1534};
1535
1536void LLToolDragAndDrop::giveInventory(const LLUUID& to_agent, 1524void LLToolDragAndDrop::giveInventory(const LLUUID& to_agent,
1537 LLInventoryItem* item, 1525 LLInventoryItem* item,
1538 const LLUUID& im_session_id) 1526 const LLUUID& im_session_id)
@@ -1701,8 +1689,6 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,
1701 } 1689 }
1702 else 1690 else
1703 { 1691 {
1704 LLGiveInventoryInfo* info = NULL;
1705 info = new LLGiveInventoryInfo(to_agent, cat->getUUID(), im_session_id);
1706 LLSD args; 1692 LLSD args;
1707 args["COUNT"] = llformat("%d",giveable.countNoCopy()); 1693 args["COUNT"] = llformat("%d",giveable.countNoCopy());
1708 LLSD payload; 1694 LLSD payload;
diff --git a/linden/indra/newview/lltoolface.cpp b/linden/indra/newview/lltoolface.cpp
index 735ecd9..834bf76 100644
--- a/linden/indra/newview/lltoolface.cpp
+++ b/linden/indra/newview/lltoolface.cpp
@@ -57,7 +57,7 @@
57// 57//
58 58
59LLToolFace::LLToolFace() 59LLToolFace::LLToolFace()
60: LLTool(std::string("Texture")) 60: LLToolComposite(std::string("Texture"))
61{ } 61{ }
62 62
63 63
@@ -156,6 +156,7 @@ void LLToolFace::pickCallback(const LLPickInfo& pick_info)
156 156
157void LLToolFace::handleSelect() 157void LLToolFace::handleSelect()
158{ 158{
159 gFloaterTools->setStatusText("selectface");
159 // From now on, draw faces 160 // From now on, draw faces
160 LLSelectMgr::getInstance()->setTEMode(TRUE); 161 LLSelectMgr::getInstance()->setTEMode(TRUE);
161} 162}
diff --git a/linden/indra/newview/lltoolface.h b/linden/indra/newview/lltoolface.h
index f2b7d23..fc6f7de 100644
--- a/linden/indra/newview/lltoolface.h
+++ b/linden/indra/newview/lltoolface.h
@@ -34,12 +34,13 @@
34#define LL_LLTOOLFACE_H 34#define LL_LLTOOLFACE_H
35 35
36#include "lltool.h" 36#include "lltool.h"
37#include "lltoolcomp.h"
37 38
38class LLViewerObject; 39class LLViewerObject;
39class LLPickInfo; 40class LLPickInfo;
40 41
41class LLToolFace 42class LLToolFace
42: public LLTool, public LLSingleton<LLToolFace> 43: public LLToolComposite, public LLSingleton<LLToolFace>
43{ 44{
44public: 45public:
45 LLToolFace(); 46 LLToolFace();
diff --git a/linden/indra/newview/lltoolfocus.cpp b/linden/indra/newview/lltoolfocus.cpp
index ae0cd1e..c0dedb6 100644
--- a/linden/indra/newview/lltoolfocus.cpp
+++ b/linden/indra/newview/lltoolfocus.cpp
@@ -318,8 +318,6 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
318 S32 dx = gViewerWindow->getCurrentMouseDX(); 318 S32 dx = gViewerWindow->getCurrentMouseDX();
319 S32 dy = gViewerWindow->getCurrentMouseDY(); 319 S32 dy = gViewerWindow->getCurrentMouseDY();
320 320
321 BOOL moved_outside_slop = FALSE;
322
323 if (hasMouseCapture() && mValidClickPoint) 321 if (hasMouseCapture() && mValidClickPoint)
324 { 322 {
325 mAccumX += llabs(dx); 323 mAccumX += llabs(dx);
@@ -327,19 +325,11 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
327 325
328 if (mAccumX >= SLOP_RANGE) 326 if (mAccumX >= SLOP_RANGE)
329 { 327 {
330 if (!mOutsideSlopX)
331 {
332 moved_outside_slop = TRUE;
333 }
334 mOutsideSlopX = TRUE; 328 mOutsideSlopX = TRUE;
335 } 329 }
336 330
337 if (mAccumY >= SLOP_RANGE) 331 if (mAccumY >= SLOP_RANGE)
338 { 332 {
339 if (!mOutsideSlopY)
340 {
341 moved_outside_slop = TRUE;
342 }
343 mOutsideSlopY = TRUE; 333 mOutsideSlopY = TRUE;
344 } 334 }
345 } 335 }
diff --git a/linden/indra/newview/lltoolmgr.cpp b/linden/indra/newview/lltoolmgr.cpp
index 675412d..9e7bc5c 100644
--- a/linden/indra/newview/lltoolmgr.cpp
+++ b/linden/indra/newview/lltoolmgr.cpp
@@ -193,7 +193,7 @@ LLTool* LLToolMgr::getCurrentTool()
193 else 193 else
194 { 194 {
195 // due to window management weirdness we can get here with gToolNull 195 // due to window management weirdness we can get here with gToolNull
196 bool can_override = mBaseTool && (mBaseTool != gToolNull) ; 196 bool can_override = mBaseTool && (mBaseTool != gToolNull);
197 mOverrideTool = can_override ? mBaseTool->getOverrideTool(override_mask) : NULL; 197 mOverrideTool = can_override ? mBaseTool->getOverrideTool(override_mask) : NULL;
198 198
199 // use keyboard-override tool if available otherwise drop back to base tool 199 // use keyboard-override tool if available otherwise drop back to base tool
diff --git a/linden/indra/newview/llurlhistory.cpp b/linden/indra/newview/llurlhistory.cpp
index b187f3b..1d6c87f 100644
--- a/linden/indra/newview/llurlhistory.cpp
+++ b/linden/indra/newview/llurlhistory.cpp
@@ -119,8 +119,6 @@ void LLURLHistory::addURL(const std::string& collection, const std::string& url)
119// static 119// static
120void LLURLHistory::removeURL(const std::string& collection, const std::string& url) 120void LLURLHistory::removeURL(const std::string& collection, const std::string& url)
121{ 121{
122 LLSD::array_iterator iter = sHistorySD[collection].beginArray();
123 LLSD::array_iterator end = sHistorySD[collection].endArray();
124 for(int index = 0; index < sHistorySD[collection].size(); index++) 122 for(int index = 0; index < sHistorySD[collection].size(); index++)
125 { 123 {
126 if(sHistorySD[collection].get(index).asString() == url) 124 if(sHistorySD[collection].get(index).asString() == url)
diff --git a/linden/indra/newview/llviewercamera.cpp b/linden/indra/newview/llviewercamera.cpp
index fecab65..69a5621 100644
--- a/linden/indra/newview/llviewercamera.cpp
+++ b/linden/indra/newview/llviewercamera.cpp
@@ -131,9 +131,6 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 &center,
131 131
132 mLastPointOfInterest = point_of_interest; 132 mLastPointOfInterest = point_of_interest;
133 133
134 // constrain to max distance from avatar
135 LLVector3 camera_offset = center - gAgent.getPositionAgent();
136
137 LLViewerRegion * regp = gAgent.getRegion(); 134 LLViewerRegion * regp = gAgent.getRegion();
138 F32 water_height = (NULL != regp) ? regp->getWaterHeight() : 0.f; 135 F32 water_height = (NULL != regp) ? regp->getWaterHeight() : 0.f;
139 136
@@ -306,7 +303,7 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
306{ 303{
307 F32 fov_y, aspect; 304 F32 fov_y, aspect;
308 fov_y = RAD_TO_DEG * getView(); 305 fov_y = RAD_TO_DEG * getView();
309 BOOL z_default_near, z_default_far = FALSE; 306 BOOL z_default_far = FALSE;
310 if (z_far <= 0) 307 if (z_far <= 0)
311 { 308 {
312 z_default_far = TRUE; 309 z_default_far = TRUE;
@@ -314,7 +311,6 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
314 } 311 }
315 if (z_near <= 0) 312 if (z_near <= 0)
316 { 313 {
317 z_default_near = TRUE;
318 z_near = getNear(); 314 z_near = getNear();
319 } 315 }
320 aspect = getAspect(); 316 aspect = getAspect();
diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp
index 59a87d5..22c17d9 100644
--- a/linden/indra/newview/llviewerdisplay.cpp
+++ b/linden/indra/newview/llviewerdisplay.cpp
@@ -977,7 +977,6 @@ void render_hud_attachments()
977 if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices()) 977 if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices())
978 { 978 {
979 LLCamera hud_cam = *LLViewerCamera::getInstance(); 979 LLCamera hud_cam = *LLViewerCamera::getInstance();
980 LLVector3 origin = hud_cam.getOrigin();
981 hud_cam.setOrigin(-1.f,0,0); 980 hud_cam.setOrigin(-1.f,0,0);
982 hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1)); 981 hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1));
983 LLViewerCamera::updateFrustumPlanes(hud_cam, TRUE); 982 LLViewerCamera::updateFrustumPlanes(hud_cam, TRUE);
diff --git a/linden/indra/newview/llviewergenericmessage.cpp b/linden/indra/newview/llviewergenericmessage.cpp
index 53549fc..779ed01 100644
--- a/linden/indra/newview/llviewergenericmessage.cpp
+++ b/linden/indra/newview/llviewergenericmessage.cpp
@@ -39,7 +39,7 @@
39#include "message.h" 39#include "message.h"
40#include "llagent.h" 40#include "llagent.h"
41#include "lluuid.h" 41#include "lluuid.h"
42#include "lightshare.h" 42#include "llettherebelight.h"
43 43
44 44
45LLDispatcher gGenericDispatcher; 45LLDispatcher gGenericDispatcher;
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index a83c11b..0f6e5c4 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -238,6 +238,8 @@
238#include "llfloaterteleporthistory.h" 238#include "llfloaterteleporthistory.h"
239#include "slfloatermediafilter.h" 239#include "slfloatermediafilter.h"
240 240
241#include "rcmoapradar.h"
242
241using namespace LLVOAvatarDefines; 243using namespace LLVOAvatarDefines;
242void init_client_menu(LLMenuGL* menu); 244void init_client_menu(LLMenuGL* menu);
243void init_server_menu(LLMenuGL* menu); 245void init_server_menu(LLMenuGL* menu);
@@ -1096,10 +1098,10 @@ void init_debug_ui_menu(LLMenuGL* menu)
1096 menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui)); 1098 menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui));
1097 menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr)); 1099 menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr));
1098 menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory)); 1100 menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory));
1099 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL)); 1101 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus));
1100 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT )); 1102 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info));
1101 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT )); 1103 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs));
1102 menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); 1104 menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics));
1103 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot", 1105 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
1104 menu_toggle_control, NULL, menu_check_control, 1106 menu_toggle_control, NULL, menu_check_control,
1105 (void*)"DoubleClickAutoPilot")); 1107 (void*)"DoubleClickAutoPilot"));
@@ -1256,7 +1258,6 @@ void init_debug_rendering_menu(LLMenuGL* menu)
1256 sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL, 1258 sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL,
1257 &LLPipeline::toggleRenderDebugControl, 1259 &LLPipeline::toggleRenderDebugControl,
1258 (void*)LLPipeline::RENDER_DEBUG_OCTREE)); 1260 (void*)LLPipeline::RENDER_DEBUG_OCTREE));
1259 // For Imprudence 1.3 - need to XUIfy
1260 sub_menu->append(new LLMenuItemCheckGL("Shadow Frusta", &LLPipeline::toggleRenderDebug, NULL, 1261 sub_menu->append(new LLMenuItemCheckGL("Shadow Frusta", &LLPipeline::toggleRenderDebug, NULL,
1261 &LLPipeline::toggleRenderDebugControl, 1262 &LLPipeline::toggleRenderDebugControl,
1262 (void*)LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)); 1263 (void*)LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA));
@@ -5216,6 +5217,24 @@ class LLViewEnableLastChatter : public view_listener_t
5216 } 5217 }
5217}; 5218};
5218 5219
5220class LLViewToggleRadar: public view_listener_t
5221{
5222 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5223 {
5224 LLFloaterAvatarList::toggle(0);
5225 return true;
5226 }
5227};
5228
5229class LLViewToggleMOAPRadar: public view_listener_t
5230{
5231 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5232 {
5233 LLFloaterMOAPRadar::toggle(0);
5234 return true;
5235 }
5236};
5237
5219class LLEditEnableDeselect : public view_listener_t 5238class LLEditEnableDeselect : public view_listener_t
5220{ 5239{
5221 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 5240 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -8946,12 +8965,6 @@ class LLAdvancedToggleAssetBrowser: public view_listener_t
8946 { 8965 {
8947 //open the floater 8966 //open the floater
8948 LLFloaterAssetBrowser::show(0); 8967 LLFloaterAssetBrowser::show(0);
8949
8950 bool vis = false;
8951 if(LLFloaterAssetBrowser::getInstance())
8952 {
8953 vis = (bool)LLFloaterAssetBrowser::getInstance()->getVisible();
8954 }
8955 return true; 8968 return true;
8956 } 8969 }
8957}; 8970};
@@ -9058,7 +9071,7 @@ class LLAdvancedToggleRenderType : public view_listener_t
9058{ 9071{
9059 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9072 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9060 { 9073 {
9061 U32 render_type = render_type_from_string( userdata.asString() ); 9074 intptr_t render_type = render_type_from_string( userdata.asString() );
9062 if ( render_type != 0 ) 9075 if ( render_type != 0 )
9063 { 9076 {
9064 LLPipeline::toggleRenderTypeControl( (void*)render_type ); 9077 LLPipeline::toggleRenderTypeControl( (void*)render_type );
@@ -9072,7 +9085,7 @@ class LLAdvancedCheckRenderType : public view_listener_t
9072{ 9085{
9073 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9086 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9074 { 9087 {
9075 U32 render_type = render_type_from_string( userdata["data"].asString() ); 9088 intptr_t render_type = render_type_from_string( userdata["data"].asString() );
9076 bool new_value = false; 9089 bool new_value = false;
9077 9090
9078 if ( render_type != 0 ) 9091 if ( render_type != 0 )
@@ -9138,7 +9151,7 @@ class LLAdvancedToggleFeature : public view_listener_t
9138{ 9151{
9139 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9152 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9140 { 9153 {
9141 U32 feature = feature_from_string( userdata.asString() ); 9154 intptr_t feature = feature_from_string( userdata.asString() );
9142 9155
9143 if ( feature != 0 ) 9156 if ( feature != 0 )
9144 { 9157 {
@@ -9154,7 +9167,7 @@ class LLAdvancedCheckFeature : public view_listener_t
9154{ 9167{
9155 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9168 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9156 { 9169 {
9157 U32 feature = feature_from_string( userdata["data"].asString() ); 9170 intptr_t feature = feature_from_string( userdata["data"].asString() );
9158 bool new_value = false; 9171 bool new_value = false;
9159 9172
9160 if ( feature != 0 ) 9173 if ( feature != 0 )
@@ -9249,6 +9262,10 @@ U32 info_display_from_string(std::string info_display)
9249 { 9262 {
9250 return LLPipeline::RENDER_DEBUG_SCULPTED; 9263 return LLPipeline::RENDER_DEBUG_SCULPTED;
9251 } 9264 }
9265 else if ("shadow frusta" == info_display)
9266 {
9267 return LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA;
9268 }
9252 else 9269 else
9253 { 9270 {
9254 return 0; 9271 return 0;
@@ -9260,7 +9277,7 @@ class LLAdvancedToggleInfoDisplay : public view_listener_t
9260{ 9277{
9261 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9278 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9262 { 9279 {
9263 U32 info_display = info_display_from_string( userdata.asString() ); 9280 intptr_t info_display = info_display_from_string( userdata.asString() );
9264 9281
9265 if ( info_display != 0 ) 9282 if ( info_display != 0 )
9266 { 9283 {
@@ -9276,7 +9293,7 @@ class LLAdvancedCheckInfoDisplay : public view_listener_t
9276{ 9293{
9277 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 9294 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
9278 { 9295 {
9279 U32 info_display = info_display_from_string( userdata["data"].asString() ); 9296 intptr_t info_display = info_display_from_string( userdata["data"].asString() );
9280 bool new_value = false; 9297 bool new_value = false;
9281 9298
9282 if ( info_display != 0 ) 9299 if ( info_display != 0 )
@@ -11215,6 +11232,8 @@ void initialize_menus()
11215 addMenu(new LLViewEnableMouselook(), "View.EnableMouselook"); 11232 addMenu(new LLViewEnableMouselook(), "View.EnableMouselook");
11216 addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam"); 11233 addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam");
11217 addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter"); 11234 addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter");
11235 addMenu(new LLViewToggleRadar(), "View.ToggleAvatarList");
11236 addMenu(new LLViewToggleMOAPRadar(), "View.ToggleMOAPList");
11218 11237
11219 addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode"); 11238 addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode");
11220 addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam"); 11239 addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam");
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index 3fdfbef..92e3fa9 100755..100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -65,7 +65,7 @@
65#include "lltimer.h" 65#include "lltimer.h"
66#include "llmd5.h" 66#include "llmd5.h"
67 67
68#include "lightshare.h" 68#include "llettherebelight.h"
69#include "llagent.h" 69#include "llagent.h"
70#include "llcallingcard.h" 70#include "llcallingcard.h"
71#include "llconsole.h" 71#include "llconsole.h"
@@ -653,7 +653,6 @@ void send_sound_trigger(const LLUUID& sound_id, F32 gain)
653bool join_group_response(const LLSD& notification, const LLSD& response) 653bool join_group_response(const LLSD& notification, const LLSD& response)
654{ 654{
655 S32 option = LLNotification::getSelectedOption(notification, response); 655 S32 option = LLNotification::getSelectedOption(notification, response);
656 BOOL delete_context_data = TRUE;
657 bool accept_invite = false; 656 bool accept_invite = false;
658 657
659 LLUUID group_id = notification["payload"]["group_id"].asUUID(); 658 LLUUID group_id = notification["payload"]["group_id"].asUUID();
@@ -682,7 +681,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
682 } 681 }
683 else 682 else
684 { 683 {
685 delete_context_data = FALSE;
686 LLSD args; 684 LLSD args;
687 args["NAME"] = name; 685 args["NAME"] = name;
688 args["INVITE"] = message; 686 args["INVITE"] = message;
@@ -696,7 +694,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
696 // sure the user is sure they want to join. 694 // sure the user is sure they want to join.
697 if (fee > 0) 695 if (fee > 0)
698 { 696 {
699 delete_context_data = FALSE;
700 LLSD args; 697 LLSD args;
701 args["COST"] = llformat("%d", fee); 698 args["COST"] = llformat("%d", fee);
702 args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol(); 699 args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp
index 576f312..880e1bb 100644
--- a/linden/indra/newview/llviewerobject.cpp
+++ b/linden/indra/newview/llviewerobject.cpp
@@ -2046,9 +2046,6 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2046 if (HJT_HINGE == mJointInfo->mJointType) 2046 if (HJT_HINGE == mJointInfo->mJointType)
2047 { 2047 {
2048 // hinge = uniform circular motion 2048 // hinge = uniform circular motion
2049 LLVector3 parent_pivot = getVelocity();
2050 LLVector3 parent_axis = getAcceleration();
2051
2052 angle = dt * (ang_vel * mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis 2049 angle = dt * (ang_vel * mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis
2053 dQ.setQuat(angle, mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis 2050 dQ.setQuat(angle, mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis
2054 LLVector3 pivot_offset = pos - mJointInfo->mPivot; // pos in pivot-frame 2051 LLVector3 pivot_offset = pos - mJointInfo->mPivot; // pos in pivot-frame
diff --git a/linden/indra/newview/llviewerobject.h b/linden/indra/newview/llviewerobject.h
index 9b05470..98b7115 100644
--- a/linden/indra/newview/llviewerobject.h
+++ b/linden/indra/newview/llviewerobject.h
@@ -157,7 +157,13 @@ public:
157 enum { MEDIA_TYPE_NONE = 0, MEDIA_TYPE_WEB_PAGE = 1 }; 157 enum { MEDIA_TYPE_NONE = 0, MEDIA_TYPE_WEB_PAGE = 1 };
158 158
159 // Return codes for processUpdateMessage 159 // Return codes for processUpdateMessage
160 enum { MEDIA_URL_REMOVED = 0x1, MEDIA_URL_ADDED = 0x2, MEDIA_URL_UPDATED = 0x4, INVALID_UPDATE = 0x80000000 }; 160 enum {
161 MEDIA_URL_REMOVED = 0x1,
162 MEDIA_URL_ADDED = 0x2,
163 MEDIA_URL_UPDATED = 0x4,
164 MEDIA_FLAGS_CHANGED = 0x8,
165 INVALID_UPDATE = 0x80000000
166 };
161 167
162 virtual U32 processUpdateMessage(LLMessageSystem *mesgsys, 168 virtual U32 processUpdateMessage(LLMessageSystem *mesgsys,
163 void **user_data, 169 void **user_data,
diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp
index d0aa4b1..c82b1ae 100644
--- a/linden/indra/newview/llviewerobjectlist.cpp
+++ b/linden/indra/newview/llviewerobjectlist.cpp
@@ -288,7 +288,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
288{ 288{
289 LLFastTimer t(LLFastTimer::FTM_PROCESS_OBJECTS); 289 LLFastTimer t(LLFastTimer::FTM_PROCESS_OBJECTS);
290 290
291 LLVector3d camera_global = gAgent.getCameraPositionGlobal();
292 LLViewerObject *objectp; 291 LLViewerObject *objectp;
293 S32 num_objects; 292 S32 num_objects;
294 U32 local_id; 293 U32 local_id;
@@ -305,28 +304,28 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
305 if (!cached && !compressed && update_type != OUT_FULL) 304 if (!cached && !compressed && update_type != OUT_FULL)
306 { 305 {
307 gTerseObjectUpdates += num_objects; 306 gTerseObjectUpdates += num_objects;
308 S32 size; 307// S32 size;
309 if (mesgsys->getReceiveCompressedSize()) 308// if (mesgsys->getReceiveCompressedSize())
310 { 309// {
311 size = mesgsys->getReceiveCompressedSize(); 310// size = mesgsys->getReceiveCompressedSize();
312 } 311// }
313 else 312// else
314 { 313// {
315 size = mesgsys->getReceiveSize(); 314// size = mesgsys->getReceiveSize();
316 } 315// }
317// llinfos << "Received terse " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl; 316// llinfos << "Received terse " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
318 } 317 }
319 else 318 else
320 { 319 {
321 S32 size; 320// S32 size;
322 if (mesgsys->getReceiveCompressedSize()) 321// if (mesgsys->getReceiveCompressedSize())
323 { 322// {
324 size = mesgsys->getReceiveCompressedSize(); 323// size = mesgsys->getReceiveCompressedSize();
325 } 324// }
326 else 325// else
327 { 326// {
328 size = mesgsys->getReceiveSize(); 327// size = mesgsys->getReceiveSize();
329 } 328// }
330 329
331// llinfos << "Received " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl; 330// llinfos << "Received " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
332 gFullObjectUpdates += num_objects; 331 gFullObjectUpdates += num_objects;
diff --git a/linden/indra/newview/llviewerparcelmedia.cpp b/linden/indra/newview/llviewerparcelmedia.cpp
index 386a86e..a9ea1e6 100644
--- a/linden/indra/newview/llviewerparcelmedia.cpp
+++ b/linden/indra/newview/llviewerparcelmedia.cpp
@@ -101,12 +101,11 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
101 sMediaRegionID = LLUUID() ; 101 sMediaRegionID = LLUUID() ;
102 stop() ; 102 stop() ;
103 LL_DEBUGS("Media") << "no agent region, bailing out." << LL_ENDL; 103 LL_DEBUGS("Media") << "no agent region, bailing out." << LL_ENDL;
104 return ; 104 return ;
105 } 105 }
106 106
107 // we're in a parcel 107 // we're in a parcel
108 bool new_parcel = false; 108 S32 parcelid = parcel->getLocalID();
109 S32 parcelid = parcel->getLocalID();
110 109
111 LLUUID regionid = gAgent.getRegion()->getRegionID(); 110 LLUUID regionid = gAgent.getRegion()->getRegionID();
112 if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID) 111 if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID)
@@ -114,7 +113,6 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
114 LL_DEBUGS("Media") << "New parcel, parcel id = " << parcelid << ", region id = " << regionid << LL_ENDL; 113 LL_DEBUGS("Media") << "New parcel, parcel id = " << parcelid << ", region id = " << regionid << LL_ENDL;
115 sMediaParcelLocalID = parcelid; 114 sMediaParcelLocalID = parcelid;
116 sMediaRegionID = regionid; 115 sMediaRegionID = regionid;
117 new_parcel = true;
118 } 116 }
119 117
120 std::string mediaUrl = std::string ( parcel->getMediaURL () ); 118 std::string mediaUrl = std::string ( parcel->getMediaURL () );
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp
index 2fafe30..42eb112 100644
--- a/linden/indra/newview/llviewerregion.cpp
+++ b/linden/indra/newview/llviewerregion.cpp
@@ -1436,6 +1436,8 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
1436 capabilityNames.append("EstateChangeInfo"); 1436 capabilityNames.append("EstateChangeInfo");
1437 capabilityNames.append("EventQueueGet"); 1437 capabilityNames.append("EventQueueGet");
1438 capabilityNames.append("FetchInventory"); 1438 capabilityNames.append("FetchInventory");
1439 capabilityNames.append("ObjectMedia");
1440 capabilityNames.append("ObjectMediaNavigate");
1439 capabilityNames.append("FetchLib"); 1441 capabilityNames.append("FetchLib");
1440 capabilityNames.append("FetchLibDescendents"); 1442 capabilityNames.append("FetchLibDescendents");
1441 capabilityNames.append("GetDisplayNames"); 1443 capabilityNames.append("GetDisplayNames");
diff --git a/linden/indra/newview/llvlcomposition.cpp b/linden/indra/newview/llvlcomposition.cpp
index afd9b95..beec1f1 100644
--- a/linden/indra/newview/llvlcomposition.cpp
+++ b/linden/indra/newview/llvlcomposition.cpp
@@ -384,9 +384,6 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
384 LLPointer<LLImageRaw> raw = new LLImageRaw(tex_width, tex_height, tex_comps); 384 LLPointer<LLImageRaw> raw = new LLImageRaw(tex_width, tex_height, tex_comps);
385 U8 *rawp = raw->getData(); 385 U8 *rawp = raw->getData();
386 386
387 F32 tex_width_inv = 1.f/tex_width;
388 F32 tex_height_inv = 1.f/tex_height;
389
390 F32 st_x_stride, st_y_stride; 387 F32 st_x_stride, st_y_stride;
391 st_x_stride = ((F32)st_width / (F32)mTexScaleX)*((F32)mWidth / (F32)tex_width); 388 st_x_stride = ((F32)st_width / (F32)mTexScaleX)*((F32)mWidth / (F32)tex_width);
392 st_y_stride = ((F32)st_height / (F32)mTexScaleY)*((F32)mWidth / (F32)tex_height); 389 st_y_stride = ((F32)st_height / (F32)mTexScaleY)*((F32)mWidth / (F32)tex_height);
@@ -421,11 +418,6 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
421 tex1 = tex0 + 1; 418 tex1 = tex0 + 1;
422 tex1 = llclamp(tex1, 0, 3); 419 tex1 = llclamp(tex1, 0, 3);
423 420
424 F32 xy_int_i, xy_int_j;
425
426 xy_int_i = i * tex_width_inv;
427 xy_int_j = j * tex_height_inv;
428
429 st_offset = (lltrunc(sti) + lltrunc(stj)*st_width) * st_comps; 421 st_offset = (lltrunc(sti) + lltrunc(stj)*st_width) * st_comps;
430 for (U32 k = 0; k < tex_comps; k++) 422 for (U32 k = 0; k < tex_comps; k++)
431 { 423 {
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 11f4857..aac4e41 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -2500,7 +2500,6 @@ void LLVOAvatar::computeBodySize()
2500 2500
2501 // some of the joints have not been cached 2501 // some of the joints have not been cached
2502 LLVector3 skull = mSkullp->getPosition(); 2502 LLVector3 skull = mSkullp->getPosition();
2503 LLVector3 skull_scale = mSkullp->getScale();
2504 2503
2505 LLVector3 neck = mNeckp->getPosition(); 2504 LLVector3 neck = mNeckp->getPosition();
2506 LLVector3 neck_scale = mNeckp->getScale(); 2505 LLVector3 neck_scale = mNeckp->getScale();
@@ -2580,7 +2579,6 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys,
2580{ 2579{
2581 LLMemType mt(LLMemType::MTYPE_AVATAR); 2580 LLMemType mt(LLMemType::MTYPE_AVATAR);
2582 2581
2583 LLVector3 old_vel = getVelocity();
2584 // Do base class updates... 2582 // Do base class updates...
2585 U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp); 2583 U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp);
2586 2584
@@ -3287,6 +3285,11 @@ void LLVOAvatar::resolveClient(LLColor4& avatar_name_color, std::string& client,
3287 avatar_name_color += colour; 3285 avatar_name_color += colour;
3288 avatar_name_color *= 1.0/(cllsd["multiple"].asReal()+1.0f); 3286 avatar_name_color *= 1.0/(cllsd["multiple"].asReal()+1.0f);
3289 } 3287 }
3288 else if(idx == LLUUID("7eab0700-f000-0000-0000-546561706f74"))
3289 {
3290 avatar_name_color = LLColor4(0.69f,0.42f,0.84f,1.0f); // Armins V3 viewer.
3291 client = "Teapot";
3292 }
3290 else if(idx == LLUUID("2a9a406c-f448-68f2-4e38-878f8c46c190") || 3293 else if(idx == LLUUID("2a9a406c-f448-68f2-4e38-878f8c46c190") ||
3291 idx == LLUUID("b6820989-bf42-ff59-ddde-fd3fd3a74fe4")) 3294 idx == LLUUID("b6820989-bf42-ff59-ddde-fd3fd3a74fe4"))
3292 { 3295 {
@@ -3818,8 +3821,6 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
3818 mNameText->setLabel(mNameString); 3821 mNameText->setLabel(mNameString);
3819 } 3822 }
3820 3823
3821 char line[MAX_STRING]; /* Flawfinder: ignore */
3822 line[0] = '\0';
3823 std::deque<LLChat>::iterator chat_iter = mChats.begin(); 3824 std::deque<LLChat>::iterator chat_iter = mChats.begin();
3824 mNameText->clearString(); 3825 mNameText->clearString();
3825 3826
@@ -4282,8 +4283,6 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
4282 xyVel.mV[VZ] = 0.0f; 4283 xyVel.mV[VZ] = 0.0f;
4283 speed = xyVel.length(); 4284 speed = xyVel.length();
4284 4285
4285 BOOL throttle = TRUE;
4286
4287 if (!(mIsSitting && getParent())) 4286 if (!(mIsSitting && getParent()))
4288 { 4287 {
4289 //-------------------------------------------------------------------- 4288 //--------------------------------------------------------------------
@@ -4294,7 +4293,6 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
4294 if (mTimeLast == 0.0f) 4293 if (mTimeLast == 0.0f)
4295 { 4294 {
4296 mTimeLast = animation_time; 4295 mTimeLast = animation_time;
4297 throttle = FALSE;
4298 4296
4299 // put the pelvis at slaved position/mRotation 4297 // put the pelvis at slaved position/mRotation
4300 mRoot.setWorldPosition( getPositionAgent() ); // first frame 4298 mRoot.setWorldPosition( getPositionAgent() ); // first frame
diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp
index 2035b62..703bcc2 100644
--- a/linden/indra/newview/llvoiceclient.cpp
+++ b/linden/indra/newview/llvoiceclient.cpp
@@ -3160,7 +3160,7 @@ void LLVoiceClient::giveUp()
3160 3160
3161static void oldSDKTransform (LLVector3 &left, LLVector3 &up, LLVector3 &at, LLVector3d &pos, LLVector3 &vel) 3161static void oldSDKTransform (LLVector3 &left, LLVector3 &up, LLVector3 &at, LLVector3d &pos, LLVector3 &vel)
3162{ 3162{
3163 F32 nat[3], nup[3], nl[3], nvel[3]; // the new at, up, left vectors and the new position and velocity 3163 F32 nat[3], nup[3], nl[3]; // the new at, up, left vectors and the new position and velocity (velocity was not used, so I deleted it)
3164 F64 npos[3]; 3164 F64 npos[3];
3165 3165
3166 // The original XML command was sent like this: 3166 // The original XML command was sent like this:
@@ -3210,10 +3210,6 @@ static void oldSDKTransform (LLVector3 &left, LLVector3 &up, LLVector3 &at, LLVe
3210 npos[1] = pos.mdV[VZ]; 3210 npos[1] = pos.mdV[VZ];
3211 npos[2] = pos.mdV[VY]; 3211 npos[2] = pos.mdV[VY];
3212 3212
3213 nvel[0] = vel.mV[VX];
3214 nvel[1] = vel.mV[VZ];
3215 nvel[2] = vel.mV[VY];
3216
3217 for(int i=0;i<3;++i) { 3213 for(int i=0;i<3;++i) {
3218 at.mV[i] = nat[i]; 3214 at.mV[i] = nat[i];
3219 up.mV[i] = nup[i]; 3215 up.mV[i] = nup[i];
@@ -3264,10 +3260,6 @@ static void oldSDKTransform (LLVector3 &left, LLVector3 &up, LLVector3 &at, LLVe
3264 npos[1] = pos.mdV[VZ]; 3260 npos[1] = pos.mdV[VZ];
3265 npos[2] = pos.mdV[VY] * -1.0; 3261 npos[2] = pos.mdV[VY] * -1.0;
3266 3262
3267 nvel[0] = vel.mV[VX];
3268 nvel[1] = vel.mV[VZ];
3269 nvel[2] = vel.mV[VY];
3270
3271 for(int i=0;i<3;++i) { 3263 for(int i=0;i<3;++i) {
3272 at.mV[i] = nat[i]; 3264 at.mV[i] = nat[i];
3273 up.mV[i] = nup[i]; 3265 up.mV[i] = nup[i];
diff --git a/linden/indra/newview/llvosurfacepatch.cpp b/linden/indra/newview/llvosurfacepatch.cpp
index 1671880..380eff5 100644
--- a/linden/indra/newview/llvosurfacepatch.cpp
+++ b/linden/indra/newview/llvosurfacepatch.cpp
@@ -423,7 +423,7 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
423 S32 vertex_count = 0; 423 S32 vertex_count = 0;
424 S32 i, x, y; 424 S32 i, x, y;
425 425
426 S32 num_vertices, num_indices; 426 S32 num_vertices;
427 427
428 U32 render_stride = mLastStride; 428 U32 render_stride = mLastStride;
429 S32 patch_size = mPatchp->getSurface()->getGridsPerPatchEdge(); 429 S32 patch_size = mPatchp->getSurface()->getGridsPerPatchEdge();
@@ -441,7 +441,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
441 if (north_stride == render_stride) 441 if (north_stride == render_stride)
442 { 442 {
443 num_vertices = 2 * length + 1; 443 num_vertices = 2 * length + 1;
444 num_indices = length * 6 - 3;
445 444
446 facep->mCenterAgent = (mPatchp->getPointAgent(8, 15) + mPatchp->getPointAgent(8, 16))*0.5f; 445 facep->mCenterAgent = (mPatchp->getPointAgent(8, 15) + mPatchp->getPointAgent(8, 16))*0.5f;
447 446
@@ -494,7 +493,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
494 { 493 {
495 // North stride is longer (has less vertices) 494 // North stride is longer (has less vertices)
496 num_vertices = length + length/2 + 1; 495 num_vertices = length + length/2 + 1;
497 num_indices = half_length*9 - 3;
498 496
499 facep->mCenterAgent = (mPatchp->getPointAgent(7, 15) + mPatchp->getPointAgent(8, 16))*0.5f; 497 facep->mCenterAgent = (mPatchp->getPointAgent(7, 15) + mPatchp->getPointAgent(8, 16))*0.5f;
500 498
@@ -555,7 +553,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
555 length = patch_size / north_stride; 553 length = patch_size / north_stride;
556 half_length = length / 2; 554 half_length = length / 2;
557 num_vertices = length + half_length + 1; 555 num_vertices = length + half_length + 1;
558 num_indices = 9*half_length - 3;
559 556
560 facep->mCenterAgent = (mPatchp->getPointAgent(15, 7) + mPatchp->getPointAgent(16, 8))*0.5f; 557 facep->mCenterAgent = (mPatchp->getPointAgent(15, 7) + mPatchp->getPointAgent(16, 8))*0.5f;
561 558
@@ -629,7 +626,7 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,
629{ 626{
630 S32 i, x, y; 627 S32 i, x, y;
631 628
632 S32 num_vertices, num_indices; 629 S32 num_vertices;
633 630
634 U32 render_stride = mLastStride; 631 U32 render_stride = mLastStride;
635 S32 patch_size = mPatchp->getSurface()->getGridsPerPatchEdge(); 632 S32 patch_size = mPatchp->getSurface()->getGridsPerPatchEdge();
@@ -642,7 +639,6 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,
642 if (east_stride == render_stride) 639 if (east_stride == render_stride)
643 { 640 {
644 num_vertices = 2 * length + 1; 641 num_vertices = 2 * length + 1;
645 num_indices = length * 6 - 3;
646 642
647 facep->mCenterAgent = (mPatchp->getPointAgent(8, 15) + mPatchp->getPointAgent(8, 16))*0.5f; 643 facep->mCenterAgent = (mPatchp->getPointAgent(8, 15) + mPatchp->getPointAgent(8, 16))*0.5f;
648 644
@@ -693,7 +689,6 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,
693 { 689 {
694 // East stride is longer (has less vertices) 690 // East stride is longer (has less vertices)
695 num_vertices = length + half_length + 1; 691 num_vertices = length + half_length + 1;
696 num_indices = half_length*9 - 3;
697 692
698 facep->mCenterAgent = (mPatchp->getPointAgent(7, 15) + mPatchp->getPointAgent(8, 16))*0.5f; 693 facep->mCenterAgent = (mPatchp->getPointAgent(7, 15) + mPatchp->getPointAgent(8, 16))*0.5f;
699 694
@@ -750,7 +745,6 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,
750 length = patch_size / east_stride; 745 length = patch_size / east_stride;
751 half_length = length / 2; 746 half_length = length / 2;
752 num_vertices = length + length/2 + 1; 747 num_vertices = length + length/2 + 1;
753 num_indices = 9*(length/2) - 3;
754 748
755 facep->mCenterAgent = (mPatchp->getPointAgent(15, 7) + mPatchp->getPointAgent(16, 8))*0.5f; 749 facep->mCenterAgent = (mPatchp->getPointAgent(15, 7) + mPatchp->getPointAgent(16, 8))*0.5f;
756 750
diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp
index d580d61..2b9f94c 100644
--- a/linden/indra/newview/llvovolume.cpp
+++ b/linden/indra/newview/llvovolume.cpp
@@ -68,6 +68,9 @@
68#include "rlvhandler.h" 68#include "rlvhandler.h"
69// [/RLVa:KB] 69// [/RLVa:KB]
70 70
71#include "llmediaentry.h"
72#include "llmediadataclient.h"
73
71const S32 MIN_QUIET_FRAMES_COALESCE = 30; 74const S32 MIN_QUIET_FRAMES_COALESCE = 30;
72const F32 FORCE_SIMPLE_RENDER_AREA = 512.f; 75const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;
73const F32 FORCE_CULL_AREA = 8.f; 76const F32 FORCE_CULL_AREA = 8.f;
@@ -79,6 +82,93 @@ F32 LLVOVolume::sLODFactor = 1.f;
79F32 LLVOVolume::sLODSlopDistanceFactor = 0.5f; //Changing this to zero, effectively disables the LOD transition slop 82F32 LLVOVolume::sLODSlopDistanceFactor = 0.5f; //Changing this to zero, effectively disables the LOD transition slop
80F32 LLVOVolume::sDistanceFactor = 1.0f; 83F32 LLVOVolume::sDistanceFactor = 1.0f;
81S32 LLVOVolume::sNumLODChanges = 0; 84S32 LLVOVolume::sNumLODChanges = 0;
85LLPointer<LLObjectMediaDataClient> LLVOVolume::sObjectMediaClient = NULL;
86LLPointer<LLObjectMediaNavigateClient> LLVOVolume::sObjectMediaNavigateClient = NULL;
87
88// Implementation class of LLMediaDataClientObject. See llmediadataclient.h
89class LLMediaDataClientObjectImpl : public LLMediaDataClientObject
90{
91public:
92 LLMediaDataClientObjectImpl(LLVOVolume *obj, bool isNew) : mObject(obj), mNew(isNew) {}
93 LLMediaDataClientObjectImpl() { mObject = NULL; }
94
95 virtual U8 getMediaDataCount() const
96 { return mObject->getNumTEs(); }
97
98 virtual LLSD getMediaDataLLSD(U8 index) const
99 {
100 LLSD result;
101 LLTextureEntry *te = mObject->getTE(index);
102 if (NULL != te)
103 {
104 llassert((te->getMediaData() != NULL) == te->hasMedia());
105 if (te->getMediaData() != NULL)
106 {
107 result = te->getMediaData()->asLLSD();
108 // XXX HACK: workaround bug in asLLSD() where whitelist is not set properly
109 // See DEV-41949
110 if (!result.has(LLMediaEntry::WHITELIST_KEY))
111 {
112 result[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray();
113 }
114 }
115 }
116 return result;
117 }
118
119 virtual LLUUID getID() const
120 { return mObject->getID(); }
121
122 virtual void mediaNavigateBounceBack(U8 index)
123 { mObject->mediaNavigateBounceBack(index); }
124
125 virtual bool hasMedia() const
126 { return mObject->hasMedia();}
127
128 virtual void updateObjectMediaData(LLSD const &data, const std::string &version_string)
129 { mObject->updateObjectMediaData(data, version_string); }
130
131 virtual F64 getMediaInterest() const
132 {
133 //F64 interest = mObject->getTotalMediaInterest();
134 //FIXME
135 F64 interest = 1024;
136 if (interest < (F64)0.0)
137 {
138 // media interest not valid yet, try pixel area
139 interest = mObject->getPixelArea();
140 // HACK: force recalculation of pixel area if interest is the "magic default" of 1024.
141 if (interest == 1024.f)
142 {
143 const_cast<LLVOVolume*>(static_cast<LLVOVolume*>(mObject))->setPixelAreaAndAngle(gAgent);
144 interest = mObject->getPixelArea();
145 }
146 }
147 return interest;
148 }
149
150 virtual bool isInterestingEnough() const
151 {
152 return true; //FUCKEDUP --> LLViewerMedia::isInterestingEnough(mObject, getMediaInterest());
153 }
154
155 virtual std::string getCapabilityUrl(const std::string &name) const
156 { return mObject->getRegion()->getCapability(name); }
157
158 virtual bool isDead() const
159 { return mObject->isDead(); }
160
161 virtual U32 getMediaVersion() const
162 { return LLTextureEntry::getVersionFromMediaVersionString(mObject->getMediaURL()); }
163
164 virtual bool isNew() const
165 { return mNew; }
166
167private:
168 LLPointer<LLVOVolume> mObject;
169 bool mNew;
170};
171
82 172
83LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) 173LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
84 : LLViewerObject(id, pcode, regionp), 174 : LLViewerObject(id, pcode, regionp),
@@ -123,6 +213,18 @@ void LLVOVolume::markDead()
123// static 213// static
124void LLVOVolume::initClass() 214void LLVOVolume::initClass()
125{ 215{
216 // gSavedSettings better be around
217 if (gSavedSettings.getBOOL("PrimMediaMasterEnabled"))
218 {
219 const F32 queue_timer_delay = gSavedSettings.getF32("PrimMediaRequestQueueDelay");
220 const F32 retry_timer_delay = gSavedSettings.getF32("PrimMediaRetryTimerDelay");
221 const U32 max_retries = gSavedSettings.getU32("PrimMediaMaxRetries");
222 const U32 max_sorted_queue_size = gSavedSettings.getU32("PrimMediaMaxSortedQueueSize");
223 const U32 max_round_robin_queue_size = gSavedSettings.getU32("PrimMediaMaxRoundRobinQueueSize");
224
225 sObjectMediaClient = new LLObjectMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries,
226 max_sorted_queue_size, max_round_robin_queue_size);
227 }
126} 228}
127 229
128 230
@@ -132,6 +234,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
132 LLDataPacker *dp) 234 LLDataPacker *dp)
133{ 235{
134 LLColor4U color; 236 LLColor4U color;
237 const S32 teDirtyBits = (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR|TEM_CHANGE_MEDIA);
135 238
136 // Do base class updates... 239 // Do base class updates...
137 U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp); 240 U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp);
@@ -199,10 +302,15 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
199 // 302 //
200 // Unpack texture entry data 303 // Unpack texture entry data
201 // 304 //
202 if (unpackTEMessage(mesgsys, _PREHASH_ObjectData, block_num) & (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR)) 305 S32 result =unpackTEMessage(mesgsys, _PREHASH_ObjectData, block_num);
306 if (result & teDirtyBits)
203 { 307 {
204 updateTEData(); 308 updateTEData();
205 } 309 }
310 if (result & TEM_CHANGE_MEDIA)
311 {
312 retval |= MEDIA_FLAGS_CHANGED;
313 }
206 } 314 }
207 else 315 else
208 { 316 {
@@ -235,9 +343,16 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
235// llerrs << "Bogus TE data in " << getID() << ", crashing!" << llendl; 343// llerrs << "Bogus TE data in " << getID() << ", crashing!" << llendl;
236 llwarns << "Bogus TE data in " << getID() << llendl; 344 llwarns << "Bogus TE data in " << getID() << llendl;
237 } 345 }
238 else if (res2 & (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR)) 346 else
239 { 347 {
240 updateTEData(); 348 if (res2 & teDirtyBits)
349 {
350 updateTEData();
351 }
352 if (res2 & TEM_CHANGE_MEDIA)
353 {
354 retval |= MEDIA_FLAGS_CHANGED;
355 }
241 } 356 }
242 357
243 U32 value = dp->getPassFlags(); 358 U32 value = dp->getPassFlags();
@@ -275,13 +390,39 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
275 U8 tdpbuffer[1024]; 390 U8 tdpbuffer[1024];
276 LLDataPackerBinaryBuffer tdp(tdpbuffer, 1024); 391 LLDataPackerBinaryBuffer tdp(tdpbuffer, 1024);
277 mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureEntry, tdpbuffer, 0, block_num); 392 mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureEntry, tdpbuffer, 0, block_num);
278 if ( unpackTEMessage(tdp) & (TEM_CHANGE_TEXTURE|TEM_CHANGE_COLOR)) 393 S32 result = unpackTEMessage(tdp);
394 if (result & teDirtyBits)
279 { 395 {
280 updateTEData(); 396 updateTEData();
281 } 397 }
398 if (result & TEM_CHANGE_MEDIA)
399 {
400 retval |= MEDIA_FLAGS_CHANGED;
401 }
282 } 402 }
283 } 403 }
284 } 404 }
405
406 if (retval & (MEDIA_URL_REMOVED | MEDIA_URL_ADDED | MEDIA_URL_UPDATED | MEDIA_FLAGS_CHANGED))
407 {
408 // If only the media URL changed, and it isn't a media version URL,
409 // ignore it
410 if ( ! ( retval & (MEDIA_URL_ADDED | MEDIA_URL_UPDATED) &&
411 mMedia && ! mMedia->mMediaURL.empty() &&
412 ! LLTextureEntry::isMediaVersionString(mMedia->mMediaURL) ) )
413 {
414 // If the media changed at all, request new media data
415 LL_DEBUGS("MediaOnAPrim") << "Media update: " << getID() << ": retval=" << retval << " Media URL: " <<
416 ((mMedia) ? mMedia->mMediaURL : std::string("")) << LL_ENDL;
417 requestMediaDataUpdate(retval & MEDIA_FLAGS_CHANGED);
418 }
419 else {
420 LL_INFOS("MediaOnAPrim") << "Ignoring media update for: " << getID() << " Media URL: " <<
421 ((mMedia) ? mMedia->mMediaURL : std::string("")) << LL_ENDL;
422 }
423 }
424 // ...and clean up any media impls
425 cleanUpMediaImpls();
285 426
286 return retval; 427 return retval;
287} 428}
@@ -2894,4 +3035,253 @@ void LLHUDPartition::shift(const LLVector3 &offset)
2894 //HUD objects don't shift with region crossing. That would be silly. 3035 //HUD objects don't shift with region crossing. That would be silly.
2895} 3036}
2896 3037
3038void LLVOVolume::requestMediaDataUpdate(bool isNew)
3039{
3040 if (sObjectMediaClient)
3041 sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this, isNew));
3042}
3043
3044void LLVOVolume::cleanUpMediaImpls()
3045{
3046 // Iterate through our TEs and remove any Impls that are no longer used
3047 const U8 numTEs = getNumTEs();
3048 for (U8 i = 0; i < numTEs; i++)
3049 {
3050 const LLTextureEntry* te = getTE(i);
3051 if( ! te->hasMedia())
3052 {
3053 // Delete the media IMPL!
3054 removeMediaImpl(i) ;
3055 }
3056 }
3057}
3058
3059void LLVOVolume::removeMediaImpl(S32 texture_index)
3060{
3061 if(mMediaImplList.size() <= (U32)texture_index || mMediaImplList[texture_index].isNull())
3062 {
3063 return ;
3064 }
3065
3066 //make the face referencing to mMediaImplList[texture_index] to point back to the old texture.
3067 if(mDrawable)
3068 {
3069 LLFace* facep = mDrawable->getFace(texture_index) ;
3070 if(facep)
3071 {
3072 //LLViewerMediaTexture* media_tex = LLViewerTextureManager::findMediaTexture(mMediaImplList[texture_index]->getMediaTextureID()) ;
3073 //if(media_tex)
3074 //{
3075 // media_tex->removeMediaFromFace(facep) ;
3076 //}
3077 }
3078 }
3079
3080 //check if some other face(s) of this object reference(s)to this media impl.
3081 S32 i ;
3082 S32 end = (S32)mMediaImplList.size() ;
3083 for(i = 0; i < end ; i++)
3084 {
3085 if( i != texture_index && mMediaImplList[i] == mMediaImplList[texture_index])
3086 {
3087 break ;
3088 }
3089 }
3090
3091 if(i == end) //this object does not need this media impl.
3092 {
3093 //mMediaImplList[texture_index]->removeObject(this) ;
3094 }
3095
3096 mMediaImplList[texture_index] = NULL ;
3097 return ;
3098}
3099
3100void LLVOVolume::addMediaImpl(LLViewerMediaImpl* media_impl, S32 texture_index)
3101{
3102 if((S32)mMediaImplList.size() < texture_index + 1)
3103 {
3104 mMediaImplList.resize(texture_index + 1) ;
3105 }
3106
3107 if(mMediaImplList[texture_index].notNull())
3108 {
3109 if(mMediaImplList[texture_index] == media_impl)
3110 {
3111 return ;
3112 }
3113
3114 removeMediaImpl(texture_index) ;
3115 }
3116
3117 mMediaImplList[texture_index] = media_impl;
3118 //media_impl->addObject(this) ;
3119
3120 //add the face to show the media if it is in playing
3121 if(mDrawable)
3122 {
3123 LLFace* facep = mDrawable->getFace(texture_index) ;
3124 if(facep)
3125 {
3126 //LLViewerMediaTexture* media_tex = LLViewerTextureManager::findMediaTexture(mMediaImplList[texture_index]->getMediaTextureID()) ;
3127 //if(media_tex)
3128 //{
3129 // media_tex->addMediaToFace(facep) ;
3130 //}
3131 }
3132 else //the face is not available now, start media on this face later.
3133 {
3134 //media_impl->setUpdated(TRUE) ;
3135 }
3136 }
3137 return ;
3138}
3139
3140void LLVOVolume::sendMediaDataUpdate()
3141{
3142 if (sObjectMediaClient)
3143 sObjectMediaClient->updateMedia(new LLMediaDataClientObjectImpl(this, false));
3144}
3145
3146void LLVOVolume::updateObjectMediaData(const LLSD &media_data_array, const std::string &media_version)
3147{
3148 // media_data_array is an array of media entry maps
3149 // media_version is the version string in the response.
3150 U32 fetched_version = LLTextureEntry::getVersionFromMediaVersionString(media_version);
3151
3152 // Only update it if it is newer!
3153 if ( (S32)fetched_version > mLastFetchedMediaVersion)
3154 {
3155 mLastFetchedMediaVersion = fetched_version;
3156 //llinfos << "updating:" << this->getID() << " " << ll_pretty_print_sd(media_data_array) << llendl;
3157
3158 LLSD::array_const_iterator iter = media_data_array.beginArray();
3159 LLSD::array_const_iterator end = media_data_array.endArray();
3160 U8 texture_index = 0;
3161 for (; iter != end; ++iter, ++texture_index)
3162 {
3163 syncMediaData(texture_index, *iter, false/*merge*/, false/*ignore_agent*/);
3164 }
3165 }
3166}
3167
3168bool LLVOVolume::hasMedia() const
3169{
3170 bool result = false;
3171 const U8 numTEs = getNumTEs();
3172 for (U8 i = 0; i < numTEs; i++)
3173 {
3174 const LLTextureEntry* te = getTE(i);
3175 if(te->hasMedia())
3176 {
3177 result = true;
3178 break;
3179 }
3180 }
3181 return result;
3182}
3183
3184void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool merge, bool ignore_agent)
3185{
3186 if(mDead)
3187 {
3188 // If the object has been marked dead, don't process media updates.
3189 return;
3190 }
3191
3192 LLTextureEntry *te = getTE(texture_index);
3193// LL_DEBUGS("MediaOnAPrim") << "BEFORE: texture_index = " << texture_index
3194// << " hasMedia = " << te->hasMedia() << " : "
3195// << ((NULL == te->getMediaData()) ? "NULL MEDIA DATA" : ll_pretty_print_sd(te->getMediaData()->asLLSD())) << llendl;
2897 3196
3197 std::string previous_url;
3198 LLMediaEntry* mep = te->getMediaData();
3199 if(mep)
3200 {
3201 // Save the "current url" from before the update so we can tell if
3202 // it changes.
3203 previous_url = mep->getCurrentURL();
3204 }
3205
3206 if (merge)
3207 {
3208 te->mergeIntoMediaData(media_data);
3209 }
3210 else {
3211 // XXX Question: what if the media data is undefined LLSD, but the
3212 // update we got above said that we have media flags?? Here we clobber
3213 // that, assuming the data from the service is more up-to-date.
3214 te->updateMediaData(media_data);
3215 }
3216
3217 mep = te->getMediaData();
3218 if(mep)
3219 {
3220 //bool update_from_self = false;
3221 if (!ignore_agent)
3222 {
3223 LLUUID updating_agent = LLTextureEntry::getAgentIDFromMediaVersionString(getMediaURL());
3224 //update_from_self = (updating_agent == gAgent.getID());
3225 }
3226 //viewer_media_t media_impl = LLViewerMedia::updateMediaImpl(mep, previous_url, update_from_self);
3227
3228 //addMediaImpl(media_impl, texture_index) ;
3229 }
3230 else
3231 {
3232 //removeMediaImpl(texture_index);
3233 }
3234
3235// LL_DEBUGS("MediaOnAPrim") << "AFTER: texture_index = " << texture_index
3236// << " hasMedia = " << te->hasMedia() << " : "
3237// << ((NULL == te->getMediaData()) ? "NULL MEDIA DATA" : ll_pretty_print_sd(te->getMediaData()->asLLSD())) << llendl;
3238}
3239
3240
3241void LLVOVolume::mediaNavigateBounceBack(U8 texture_index)
3242{
3243 /*
3244 // Find the media entry for this navigate
3245 const LLMediaEntry* mep = NULL;
3246 viewer_media_t impl = getMediaImpl(texture_index);
3247 LLTextureEntry *te = getTE(texture_index);
3248 if(te)
3249 {
3250 mep = te->getMediaData();
3251 }
3252
3253 if (mep && impl)
3254 {
3255 std::string url = mep->getCurrentURL();
3256 // Look for a ":", if not there, assume "http://"
3257 if (!url.empty() && std::string::npos == url.find(':'))
3258 {
3259 url = "http://" + url;
3260 }
3261 // If the url we're trying to "bounce back" to is either empty or not
3262 // allowed by the whitelist, try the home url. If *that* doesn't work,
3263 // set the media as failed and unload it
3264 if (url.empty() || !mep->checkCandidateUrl(url))
3265 {
3266 url = mep->getHomeURL();
3267 // Look for a ":", if not there, assume "http://"
3268 if (!url.empty() && std::string::npos == url.find(':'))
3269 {
3270 url = "http://" + url;
3271 }
3272 }
3273 if (url.empty() || !mep->checkCandidateUrl(url))
3274 {
3275 // The url to navigate back to is not good, and we have nowhere else
3276 // to go.
3277 LL_WARNS("MediaOnAPrim") << "FAILED to bounce back URL \"" << url << "\" -- unloading impl" << LL_ENDL;
3278 impl->setMediaFailed(true);
3279 }
3280 else {
3281 // Okay, navigate now
3282 LL_INFOS("MediaOnAPrim") << "bouncing back to URL: " << url << LL_ENDL;
3283 impl->navigateTo(url, "", false, true);
3284 }
3285 }
3286 */
3287}
diff --git a/linden/indra/newview/llvovolume.h b/linden/indra/newview/llvovolume.h
index d09a198..39d9227 100644
--- a/linden/indra/newview/llvovolume.h
+++ b/linden/indra/newview/llvovolume.h
@@ -36,6 +36,8 @@
36#include "llviewerobject.h" 36#include "llviewerobject.h"
37#include "llviewerimage.h" 37#include "llviewerimage.h"
38#include "llframetimer.h" 38#include "llframetimer.h"
39#include "llmediadataclient.h"
40#include "llviewermedia.h"
39#include "llapr.h" 41#include "llapr.h"
40#include <map> 42#include <map>
41 43
@@ -43,6 +45,8 @@ class LLViewerTextureAnim;
43class LLDrawPool; 45class LLDrawPool;
44class LLSelectNode; 46class LLSelectNode;
45 47
48typedef std::vector<viewer_media_t> media_list_t;
49
46enum LLVolumeInterfaceType 50enum LLVolumeInterfaceType
47{ 51{
48 INTERFACE_FLEXIBLE = 1, 52 INTERFACE_FLEXIBLE = 1,
@@ -217,6 +221,46 @@ public:
217 221
218 // tag: vaa emerald local_asset_browser 222 // tag: vaa emerald local_asset_browser
219 void setSculptChanged(BOOL has_changed) { mSculptChanged = has_changed; } 223 void setSculptChanged(BOOL has_changed) { mSculptChanged = has_changed; }
224
225
226 // Functions that deal with media, or media navigation
227
228 // Update this object's media data with the given media data array
229 // (typically this is only called upon a response from a server request)
230 void updateObjectMediaData(const LLSD &media_data_array, const std::string &media_version);
231
232 // Bounce back media at the given index to its current URL (or home URL, if current URL is empty)
233 void mediaNavigateBounceBack(U8 texture_index);
234
235 // Returns whether or not this object has permission to navigate or control
236 // the given media entry
237 enum MediaPermType {
238 MEDIA_PERM_INTERACT, MEDIA_PERM_CONTROL
239 };
240 bool hasMediaPermission(const LLMediaEntry* media_entry, MediaPermType perm_type);
241
242 void mediaNavigated(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin, std::string new_location);
243 void mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin, LLViewerMediaObserver::EMediaEvent event);
244
245 // Sync the given media data with the impl and the given te
246 void syncMediaData(S32 te, const LLSD &media_data, bool merge, bool ignore_agent);
247
248 // Send media data update to the simulator.
249 void sendMediaDataUpdate();
250
251 viewer_media_t getMediaImpl(U8 face_id) const;
252 S32 getFaceIndexWithMediaImpl(const LLViewerMediaImpl* media_impl, S32 start_face_id);
253 F64 getTotalMediaInterest() const;
254
255 bool hasMedia() const;
256
257 LLVector3 getApproximateFaceNormal(U8 face_id);
258
259 // Returns 'true' iff the media data for this object is in flight
260 bool isMediaDataBeingFetched() const;
261
262 // Returns the "last fetched" media version, or -1 if not fetched yet
263 S32 getLastFetchedMediaVersion() const { return mLastFetchedMediaVersion; }
220 264
221protected: 265protected:
222 S32 computeLODDetail(F32 distance, F32 radius); 266 S32 computeLODDetail(F32 distance, F32 radius);
@@ -224,6 +268,11 @@ protected:
224 LLFace* addFace(S32 face_index); 268 LLFace* addFace(S32 face_index);
225 void updateTEData(); 269 void updateTEData();
226 270
271 void requestMediaDataUpdate(bool isNew);
272 void cleanUpMediaImpls();
273 void addMediaImpl(LLViewerMediaImpl* media_impl, S32 texture_index) ;
274 void removeMediaImpl(S32 texture_index) ;
275
227public: 276public:
228 LLViewerTextureAnim *mTextureAnimp; 277 LLViewerTextureAnim *mTextureAnimp;
229 U8 mTexAnimMode; 278 U8 mTexAnimMode;
@@ -242,12 +291,16 @@ private:
242 LLVolumeInterface *mVolumeImpl; 291 LLVolumeInterface *mVolumeImpl;
243 LLPointer<LLViewerImage> mSculptTexture; 292 LLPointer<LLViewerImage> mSculptTexture;
244 S32 mIndexInTex; // index of this volume in the texture's volume list 293 S32 mIndexInTex; // index of this volume in the texture's volume list
294 media_list_t mMediaImplList;
295 S32 mLastFetchedMediaVersion; // as fetched from the server, starts as -1
245 296
246 // statics 297 // statics
247public: 298public:
248 static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop 299 static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop
249 static F32 sLODFactor; // LOD scale factor 300 static F32 sLODFactor; // LOD scale factor
250 static F32 sDistanceFactor; // LOD distance factor 301 static F32 sDistanceFactor; // LOD distance factor
302 static LLPointer<LLObjectMediaDataClient> sObjectMediaClient;
303 static LLPointer<LLObjectMediaNavigateClient> sObjectMediaNavigateClient;
251 304
252protected: 305protected:
253 static S32 sNumLODChanges; 306 static S32 sNumLODChanges;
diff --git a/linden/indra/newview/llvowlsky.cpp b/linden/indra/newview/llvowlsky.cpp
index 96bd62e..2f77c7f 100644
--- a/linden/indra/newview/llvowlsky.cpp
+++ b/linden/indra/newview/llvowlsky.cpp
@@ -719,12 +719,13 @@ void LLVOWLSky::updateStarColors()
719{ 719{
720 std::vector<LLColor4>::iterator v_c = mStarColors.begin(); 720 std::vector<LLColor4>::iterator v_c = mStarColors.begin();
721 std::vector<F32>::iterator v_i = mStarIntensities.begin(); 721 std::vector<F32>::iterator v_i = mStarIntensities.begin();
722 std::vector<LLVector3>::iterator v_p = mStarVertices.begin(); 722 // A bunch of stuff here is not used, but looks like it might be useful later, so I'll leave it, but commented out.
723 //std::vector<LLVector3>::iterator v_p = mStarVertices.begin();
723 724
724 const F32 var = 0.15f; 725 const F32 var = 0.15f;
725 const F32 min = 0.5f; //0.75f; 726 const F32 min = 0.5f; //0.75f;
726 const F32 sunclose_max = 0.6f; 727 //const F32 sunclose_max = 0.6f;
727 const F32 sunclose_range = 1 - sunclose_max; 728 //const F32 sunclose_range = 1 - sunclose_max;
728 729
729 //F32 below_horizon = - llmin(0.0f, gSky.mVOSkyp->getToSunLast().mV[2]); 730 //F32 below_horizon = - llmin(0.0f, gSky.mVOSkyp->getToSunLast().mV[2]);
730 //F32 brightness_factor = llmin(1.0f, below_horizon * 20); 731 //F32 brightness_factor = llmin(1.0f, below_horizon * 20);
@@ -738,14 +739,14 @@ void LLVOWLSky::updateStarColors()
738 U32 x; 739 U32 x;
739 for (x = 0; x < getStarsNumVerts(); ++x) 740 for (x = 0; x < getStarsNumVerts(); ++x)
740 { 741 {
741 F32 sundir_factor = 1; 742 //F32 sundir_factor = 1;
742 LLVector3 tostar = *v_p; 743 //LLVector3 tostar = *v_p;
743 tostar.normVec(); 744 //tostar.normVec();
744 const F32 how_close_to_sun = tostar * gSky.mVOSkyp->getToSunLast(); 745 //const F32 how_close_to_sun = tostar * gSky.mVOSkyp->getToSunLast();
745 if (how_close_to_sun > sunclose_max) 746 //if (how_close_to_sun > sunclose_max)
746 { 747 //{
747 sundir_factor = (1 - how_close_to_sun) / sunclose_range; 748 // sundir_factor = (1 - how_close_to_sun) / sunclose_range;
748 } 749 //}
749 intensity = *(v_i); 750 intensity = *(v_i);
750 F32 alpha = v_c->mV[VALPHA] + (ll_frand() - 0.5f) * var * intensity; 751 F32 alpha = v_c->mV[VALPHA] + (ll_frand() - 0.5f) * var * intensity;
751 if (alpha < min * intensity) 752 if (alpha < min * intensity)
@@ -762,7 +763,7 @@ void LLVOWLSky::updateStarColors()
762 v_c->mV[VALPHA] = alpha; 763 v_c->mV[VALPHA] = alpha;
763 v_c++; 764 v_c++;
764 v_i++; 765 v_i++;
765 v_p++; 766 //v_p++;
766 } 767 }
767 } 768 }
768} 769}
diff --git a/linden/indra/newview/llwaterparammanager.cpp b/linden/indra/newview/llwaterparammanager.cpp
index 6e2b420..2386631 100644
--- a/linden/indra/newview/llwaterparammanager.cpp
+++ b/linden/indra/newview/llwaterparammanager.cpp
@@ -69,7 +69,7 @@
69 69
70#include "llwlparammanager.h" 70#include "llwlparammanager.h"
71#include "llwaterparamset.h" 71#include "llwaterparamset.h"
72#include "lightshare.h" 72#include "llettherebelight.h"
73#include "llpostprocess.h" 73#include "llpostprocess.h"
74#include "llfloaterwater.h" 74#include "llfloaterwater.h"
75 75
diff --git a/linden/indra/newview/llwaterparamset.cpp b/linden/indra/newview/llwaterparamset.cpp
index 4b2e426..5825a23 100644
--- a/linden/indra/newview/llwaterparamset.cpp
+++ b/linden/indra/newview/llwaterparamset.cpp
@@ -192,8 +192,6 @@ LLVector3 LLWaterParamSet::getVector3(const std::string& paramName, bool& error)
192LLVector2 LLWaterParamSet::getVector2(const std::string& paramName, bool& error) 192LLVector2 LLWaterParamSet::getVector2(const std::string& paramName, bool& error)
193{ 193{
194 // test to see if right type 194 // test to see if right type
195 int ttest;
196 ttest = mParamValues.size();
197 LLSD cur_val = mParamValues.get(paramName); 195 LLSD cur_val = mParamValues.get(paramName);
198 if (!cur_val.isArray() || cur_val.size() != 2) 196 if (!cur_val.isArray() || cur_val.size() != 2)
199 { 197 {
diff --git a/linden/indra/newview/llwlparammanager.cpp b/linden/indra/newview/llwlparammanager.cpp
index b4d999c..59de0ad 100644
--- a/linden/indra/newview/llwlparammanager.cpp
+++ b/linden/indra/newview/llwlparammanager.cpp
@@ -34,7 +34,7 @@
34 34
35#include "llwlparammanager.h" 35#include "llwlparammanager.h"
36#include "llwaterparammanager.h" 36#include "llwaterparammanager.h"
37#include "lightshare.h" 37#include "llettherebelight.h"
38 38
39#include "pipeline.h" 39#include "pipeline.h"
40#include "llsky.h" 40#include "llsky.h"
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index d7a6838..b2cab52 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -1192,8 +1192,6 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&
1192 S32 text_x = x; 1192 S32 text_x = x;
1193 S32 text_y = (S32)(y - sTrackCircleImage->getHeight()/2 - font->getLineHeight()); 1193 S32 text_y = (S32)(y - sTrackCircleImage->getHeight()/2 - font->getLineHeight());
1194 1194
1195 BOOL is_in_window = true;
1196
1197 if( x < 0 1195 if( x < 0
1198 || y < 0 1196 || y < 0
1199 || x >= getRect().getWidth() 1197 || x >= getRect().getWidth()
@@ -1206,7 +1204,6 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&
1206 text_x = sTrackingArrowX; 1204 text_x = sTrackingArrowX;
1207 text_y = sTrackingArrowY; 1205 text_y = sTrackingArrowY;
1208 } 1206 }
1209 is_in_window = false;
1210 } 1207 }
1211 else if (LLTracker::getTrackingStatus() == LLTracker::TRACKING_LOCATION && 1208 else if (LLTracker::getTrackingStatus() == LLTracker::TRACKING_LOCATION &&
1212 LLTracker::getTrackedLocationType() != LLTracker::LOCATION_NOTHING) 1209 LLTracker::getTrackedLocationType() != LLTracker::LOCATION_NOTHING)
diff --git a/linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings b/linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings
index 1ebe727..e0014d3 100644
--- a/linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings
+++ b/linden/indra/newview/packaging/mac/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
1/* Localized versions of Info.plist keys */ 1/* Localized versions of Info.plist keys */
2 2
3CFBundleName = "Imprudence"; 3CFBundleName = "Imprudence";
4CFBundleShortVersionString = "Imprudence 1.4.0 beta 1"; 4CFBundleShortVersionString = "Imprudence 1.4.0.3 exp 1";
5CFBundleGetInfoString = "Imprudence 1.4.0 beta 1"; 5CFBundleGetInfoString = "Imprudence 1.4.0.3 exp 1";
diff --git a/linden/indra/newview/panelradar.cpp b/linden/indra/newview/panelradar.cpp
index c94c0d1..ad6efc2 100644
--- a/linden/indra/newview/panelradar.cpp
+++ b/linden/indra/newview/panelradar.cpp
@@ -408,7 +408,6 @@ void PanelRadar::updateButtonStates()
408 static bool enable_unmute = false; 408 static bool enable_unmute = false;
409 static bool enable_track = false; 409 static bool enable_track = false;
410 static bool enable_estate = false; 410 static bool enable_estate = false;
411 static bool enable_friend = false;
412 static bool enable_cam = false; 411 static bool enable_cam = false;
413 412
414 if (mRadarTabs->getCurrentPanelIndex() == 0) // Avatar tab 413 if (mRadarTabs->getCurrentPanelIndex() == 0) // Avatar tab
@@ -426,7 +425,6 @@ void PanelRadar::updateButtonStates()
426 enable_estate = isKickable(mSelectedAvatar); 425 enable_estate = isKickable(mSelectedAvatar);
427 enable_unmute = LLMuteList::getInstance()->isMuted(mSelectedAvatar); 426 enable_unmute = LLMuteList::getInstance()->isMuted(mSelectedAvatar);
428 enable_track = gAgent.isGodlike() || is_agent_mappable(mSelectedAvatar); 427 enable_track = gAgent.isGodlike() || is_agent_mappable(mSelectedAvatar);
429 enable_friend = !is_agent_friend(mSelectedAvatar);
430 enable_cam = mSelectedDistance >= 0 && mSelectedDistance <= gSavedSettings.getF32("NearMeRange"); 428 enable_cam = mSelectedDistance >= 0 && mSelectedDistance <= gSavedSettings.getF32("NearMeRange");
431 } 429 }
432 else 430 else
@@ -436,7 +434,6 @@ void PanelRadar::updateButtonStates()
436 enable_estate = false; 434 enable_estate = false;
437 enable_unmute = false; 435 enable_unmute = false;
438 enable_track = false; 436 enable_track = false;
439 enable_friend = false;
440 enable_cam = false; 437 enable_cam = false;
441 } 438 }
442 439
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index cd9b3be..ae7461c 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -232,6 +232,7 @@ BOOL LLPipeline::sPickAvatar = TRUE;
232BOOL LLPipeline::sDynamicLOD = TRUE; 232BOOL LLPipeline::sDynamicLOD = TRUE;
233BOOL LLPipeline::sShowHUDAttachments = TRUE; 233BOOL LLPipeline::sShowHUDAttachments = TRUE;
234BOOL LLPipeline::sRenderPhysicalBeacons = TRUE; 234BOOL LLPipeline::sRenderPhysicalBeacons = TRUE;
235BOOL LLPipeline::sRenderMOAPBeacons = FALSE;
235BOOL LLPipeline::sRenderScriptedBeacons = FALSE; 236BOOL LLPipeline::sRenderScriptedBeacons = FALSE;
236BOOL LLPipeline::sRenderScriptedTouchBeacons = TRUE; 237BOOL LLPipeline::sRenderScriptedTouchBeacons = TRUE;
237BOOL LLPipeline::sRenderParticleBeacons = FALSE; 238BOOL LLPipeline::sRenderParticleBeacons = FALSE;
@@ -2149,6 +2150,43 @@ void renderPhysicalBeacons(LLDrawable* drawablep)
2149 } 2150 }
2150} 2151}
2151 2152
2153void renderMOAPBeacons(LLDrawable* drawablep)
2154{
2155 LLViewerObject *vobj = drawablep->getVObj();
2156
2157 if(!vobj || vobj->isAvatar())
2158 return;
2159
2160 BOOL beacon=FALSE;
2161 U8 tecount=vobj->getNumTEs();
2162 for(int x=0;x<tecount;x++)
2163 {
2164 if(vobj->getTE(x)->hasMedia())
2165 {
2166 beacon=TRUE;
2167 break;
2168 }
2169 }
2170 if(beacon==TRUE)
2171 {
2172 if (gPipeline.sRenderBeacons)
2173 {
2174 gObjectList.addDebugBeacon(vobj->getPositionAgent(), "", LLColor4(0.f, 1.f, 0.f, 0.5f), LLColor4(1.f, 1.f, 1.f, 0.5f), gSavedSettings.getS32("DebugBeaconLineWidth"));
2175 }
2176
2177 if (gPipeline.sRenderHighlight)
2178 {
2179 S32 face_id;
2180 S32 count = drawablep->getNumFaces();
2181 for (face_id = 0; face_id < count; face_id++)
2182 {
2183 gPipeline.mHighlightFaces.push_back(drawablep->getFace(face_id) );
2184 }
2185 }
2186 }
2187}
2188
2189
2152void renderParticleBeacons(LLDrawable* drawablep) 2190void renderParticleBeacons(LLDrawable* drawablep)
2153{ 2191{
2154 // Look for attachments, objects, etc. 2192 // Look for attachments, objects, etc.
@@ -2231,18 +2269,12 @@ void LLPipeline::postSort(LLCamera& camera)
2231 const S32 bin_count = 1024*8; 2269 const S32 bin_count = 1024*8;
2232 2270
2233 static LLCullResult::drawinfo_list_t alpha_bins[bin_count]; 2271 static LLCullResult::drawinfo_list_t alpha_bins[bin_count];
2234 static U32 bin_size[bin_count];
2235 2272
2236 //clear one bin per frame to avoid memory bloat 2273 //clear one bin per frame to avoid memory bloat
2237 static S32 clear_idx = 0; 2274 static S32 clear_idx = 0;
2238 clear_idx = (1+clear_idx)%bin_count; 2275 clear_idx = (1+clear_idx)%bin_count;
2239 alpha_bins[clear_idx].clear(); 2276 alpha_bins[clear_idx].clear();
2240 2277
2241 for (U32 j = 0; j < bin_count; j++)
2242 {
2243 bin_size[j] = 0;
2244 }
2245
2246 //build render map 2278 //build render map
2247 for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i) 2279 for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
2248 { 2280 {
@@ -2329,6 +2361,11 @@ void LLPipeline::postSort(LLCamera& camera)
2329 forAllVisibleDrawables(renderPhysicalBeacons); 2361 forAllVisibleDrawables(renderPhysicalBeacons);
2330 } 2362 }
2331 2363
2364 if(sRenderMOAPBeacons)
2365 {
2366 forAllVisibleDrawables(renderMOAPBeacons);
2367 }
2368
2332 if (sRenderParticleBeacons) 2369 if (sRenderParticleBeacons)
2333 { 2370 {
2334 forAllVisibleDrawables(renderParticleBeacons); 2371 forAllVisibleDrawables(renderParticleBeacons);
@@ -4563,6 +4600,24 @@ BOOL LLPipeline::getRenderScriptedTouchBeacons(void*)
4563} 4600}
4564 4601
4565// static 4602// static
4603void LLPipeline::setRenderMOAPBeacons(BOOL val)
4604{
4605 sRenderMOAPBeacons = val;
4606}
4607
4608// static
4609void LLPipeline::toggleRenderMOAPBeacons(void*)
4610{
4611 sRenderMOAPBeacons = !sRenderMOAPBeacons;
4612}
4613
4614// static
4615BOOL LLPipeline::getRenderMOAPBeacons(void*)
4616{
4617 return sRenderMOAPBeacons;
4618}
4619
4620// static
4566void LLPipeline::setRenderPhysicalBeacons(BOOL val) 4621void LLPipeline::setRenderPhysicalBeacons(BOOL val)
4567{ 4622{
4568 sRenderPhysicalBeacons = val; 4623 sRenderPhysicalBeacons = val;
@@ -5895,8 +5950,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5895 5950
5896 stop_glerror(); 5951 stop_glerror();
5897 5952
5898 LLVector3 origin = camera.getOrigin();
5899
5900 glPushMatrix(); 5953 glPushMatrix();
5901 5954
5902 mat.set_scale(glh::vec3f(1,1,-1)); 5955 mat.set_scale(glh::vec3f(1,1,-1));
diff --git a/linden/indra/newview/pipeline.h b/linden/indra/newview/pipeline.h
index c5ab7ab..254b3c1 100644
--- a/linden/indra/newview/pipeline.h
+++ b/linden/indra/newview/pipeline.h
@@ -271,6 +271,10 @@ public:
271 static void toggleRenderPhysicalBeacons(void* data); 271 static void toggleRenderPhysicalBeacons(void* data);
272 static BOOL getRenderPhysicalBeacons(void* data); 272 static BOOL getRenderPhysicalBeacons(void* data);
273 273
274 static void setRenderMOAPBeacons(BOOL val);
275 static void toggleRenderMOAPBeacons(void * data);
276 static BOOL getRenderMOAPBeacons(void * data);
277
274 static void setRenderScriptedBeacons(BOOL val); 278 static void setRenderScriptedBeacons(BOOL val);
275 static void toggleRenderScriptedBeacons(void* data); 279 static void toggleRenderScriptedBeacons(void* data);
276 static BOOL getRenderScriptedBeacons(void* data); 280 static BOOL getRenderScriptedBeacons(void* data);
@@ -572,6 +576,7 @@ protected:
572 S32 mLightingDetail; 576 S32 mLightingDetail;
573 577
574 static BOOL sRenderPhysicalBeacons; 578 static BOOL sRenderPhysicalBeacons;
579 static BOOL sRenderMOAPBeacons;
575 static BOOL sRenderScriptedTouchBeacons; 580 static BOOL sRenderScriptedTouchBeacons;
576 static BOOL sRenderScriptedBeacons; 581 static BOOL sRenderScriptedBeacons;
577 static BOOL sRenderParticleBeacons; 582 static BOOL sRenderParticleBeacons;
diff --git a/linden/indra/newview/qtoolalign.cpp b/linden/indra/newview/qtoolalign.cpp
index 3fe31f7..b4944fe 100644
--- a/linden/indra/newview/qtoolalign.cpp
+++ b/linden/indra/newview/qtoolalign.cpp
@@ -36,7 +36,7 @@ const F32 MANIPULATOR_SELECT_SIZE = 20.0;
36 36
37 37
38QToolAlign::QToolAlign() 38QToolAlign::QToolAlign()
39: LLTool(std::string("Align")) 39: LLToolComposite(std::string("Align"))
40{ 40{
41} 41}
42 42
@@ -46,7 +46,6 @@ QToolAlign::~QToolAlign()
46} 46}
47 47
48 48
49
50BOOL QToolAlign::handleMouseDown(S32 x, S32 y, MASK mask) 49BOOL QToolAlign::handleMouseDown(S32 x, S32 y, MASK mask)
51{ 50{
52 if (mHighlightedAxis != -1) 51 if (mHighlightedAxis != -1)
@@ -62,6 +61,11 @@ BOOL QToolAlign::handleMouseDown(S32 x, S32 y, MASK mask)
62} 61}
63 62
64 63
64BOOL QToolAlign::handleDoubleClick(S32 x, S32 y, MASK mask)
65{
66 return TRUE;
67}
68
65 69
66void QToolAlign::pickCallback(const LLPickInfo& pick_info) 70void QToolAlign::pickCallback(const LLPickInfo& pick_info)
67{ 71{
@@ -95,7 +99,7 @@ void QToolAlign::pickCallback(const LLPickInfo& pick_info)
95 } 99 }
96 else 100 else
97 { 101 {
98 if (!(pick_info.mKeyMask == MASK_SHIFT)) 102 if (!(pick_info.mKeyMask & MASK_SHIFT))
99 { 103 {
100 LLSelectMgr::getInstance()->deselectAll(); 104 LLSelectMgr::getInstance()->deselectAll();
101 } 105 }
@@ -105,7 +109,6 @@ void QToolAlign::pickCallback(const LLPickInfo& pick_info)
105} 109}
106 110
107 111
108
109void QToolAlign::handleSelect() 112void QToolAlign::handleSelect()
110{ 113{
111 // no parts, please 114 // no parts, please
@@ -207,7 +210,6 @@ BOOL QToolAlign::handleHover(S32 x, S32 y, MASK mask)
207} 210}
208 211
209 212
210
211void setup_transforms_bbox(LLBBox bbox) 213void setup_transforms_bbox(LLBBox bbox)
212{ 214{
213 // translate to center 215 // translate to center
@@ -242,6 +244,7 @@ void render_bbox(LLBBox bbox)
242 gGL.popMatrix(); 244 gGL.popMatrix();
243} 245}
244 246
247
245void render_cone_bbox(LLBBox bbox) 248void render_cone_bbox(LLBBox bbox)
246{ 249{
247 glMatrixMode(GL_MODELVIEW); 250 glMatrixMode(GL_MODELVIEW);
@@ -256,7 +259,6 @@ void render_cone_bbox(LLBBox bbox)
256} 259}
257 260
258 261
259
260// the selection bbox isn't axis aligned, so we must construct one 262// the selection bbox isn't axis aligned, so we must construct one
261// should this be cached in the selection manager? yes. 263// should this be cached in the selection manager? yes.
262LLBBox get_selection_axis_aligned_bbox() 264LLBBox get_selection_axis_aligned_bbox()
@@ -288,7 +290,6 @@ LLBBox get_selection_axis_aligned_bbox()
288} 290}
289 291
290 292
291
292void QToolAlign::computeManipulatorSize() 293void QToolAlign::computeManipulatorSize()
293{ 294{
294 if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD) 295 if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD)
@@ -407,6 +408,7 @@ void QToolAlign::render()
407 } 408 }
408} 409}
409 410
411
410// only works for our specialized (AABB, position centered) bboxes 412// only works for our specialized (AABB, position centered) bboxes
411BOOL bbox_overlap(LLBBox bbox1, LLBBox bbox2) 413BOOL bbox_overlap(LLBBox bbox1, LLBBox bbox2)
412{ 414{
@@ -422,7 +424,6 @@ BOOL bbox_overlap(LLBBox bbox1, LLBBox bbox2)
422} 424}
423 425
424 426
425
426// used to sort bboxes before packing 427// used to sort bboxes before packing
427class BBoxCompare 428class BBoxCompare
428{ 429{
@@ -598,5 +599,3 @@ void QToolAlign::align()
598 599
599 LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION); 600 LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION);
600} 601}
601
602
diff --git a/linden/indra/newview/qtoolalign.h b/linden/indra/newview/qtoolalign.h
index b2c18b7..2d30b92 100644
--- a/linden/indra/newview/qtoolalign.h
+++ b/linden/indra/newview/qtoolalign.h
@@ -13,6 +13,7 @@
13#define Q_QTOOLALIGN_H 13#define Q_QTOOLALIGN_H
14 14
15#include "lltool.h" 15#include "lltool.h"
16#include "lltoolcomp.h"
16#include "llbbox.h" 17#include "llbbox.h"
17 18
18class LLViewerObject; 19class LLViewerObject;
@@ -20,7 +21,7 @@ class LLPickInfo;
20class LLToolSelectRect; 21class LLToolSelectRect;
21 22
22class QToolAlign 23class QToolAlign
23: public LLTool, public LLSingleton<QToolAlign> 24: public LLToolComposite, public LLSingleton<QToolAlign>
24{ 25{
25public: 26public:
26 QToolAlign(); 27 QToolAlign();
@@ -29,6 +30,7 @@ public:
29 virtual void handleSelect(); 30 virtual void handleSelect();
30 virtual void handleDeselect(); 31 virtual void handleDeselect();
31 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 32 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
33 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
32 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 34 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
33 virtual void render(); 35 virtual void render();
34 36
diff --git a/linden/indra/newview/rcmoapradar.cpp b/linden/indra/newview/rcmoapradar.cpp
new file mode 100644
index 0000000..f0593ef
--- /dev/null
+++ b/linden/indra/newview/rcmoapradar.cpp
@@ -0,0 +1,440 @@
1// MOAP Radar
2// Robin Cornelius
3
4
5#include "llviewerprecompiledheaders.h"
6
7#include "llavatarconstants.h"
8#include "llfloateravatarlist.h"
9
10#include "lluictrlfactory.h"
11#include "llviewerwindow.h"
12#include "llscrolllistctrl.h"
13#include "llradiogroup.h"
14#include "llviewercontrol.h"
15#include "llbutton.h"
16
17#include "llvoavatar.h"
18#include "llimview.h"
19#include "rcmoapradar.h"
20#include "llregionflags.h"
21#include "llfloaterreporter.h"
22#include "llagent.h"
23#include "llviewerregion.h"
24#include "lltracker.h"
25#include "llviewerstats.h"
26#include "llerror.h"
27#include "llchat.h"
28#include "llfloaterchat.h"
29#include "llviewermessage.h"
30#include "llweb.h"
31#include "llviewerobjectlist.h"
32#include "llmutelist.h"
33#include "llcallbacklist.h"
34#include "llmediaentry.h"
35
36#include <time.h>
37#include <string.h>
38
39#include <map>
40
41#include "llworld.h"
42
43#include "llsdutil.h"
44
45LLFloaterMOAPRadar* LLFloaterMOAPRadar::sInstance = NULL;
46
47LLFloaterMOAPRadar::LLFloaterMOAPRadar() : LLFloater(std::string("MOAPradar"))
48{
49 llassert_always(sInstance == NULL);
50 sInstance = this;
51 mUpdateRate = gSavedSettings.getU32("MOAPRadarUpdateRate") * 3 + 3;
52 mTrackingRunning=false;
53}
54
55LLFloaterMOAPRadar::~LLFloaterMOAPRadar()
56{
57 gIdleCallbacks.deleteFunction(LLFloaterMOAPRadar::callbackIdle);
58 sInstance = NULL;
59}
60
61//static
62void LLFloaterMOAPRadar::toggle(void*)
63{
64 if (sInstance)
65 {
66 if (sInstance->getVisible())
67 {
68 sInstance->close(false);
69 }
70 else
71 {
72 sInstance->open();
73 }
74 }
75 else
76 {
77 showInstance();
78 }
79}
80
81//static
82void LLFloaterMOAPRadar::showInstance()
83{
84 if (sInstance)
85 {
86 if (!sInstance->getVisible())
87 {
88 sInstance->open();
89 }
90 }
91 else
92 {
93 sInstance = new LLFloaterMOAPRadar();
94 LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_moap_radar.xml");
95 }
96}
97
98void LLFloaterMOAPRadar::draw()
99{
100 LLFloater::draw();
101}
102
103void LLFloaterMOAPRadar::onOpen()
104{
105 gSavedSettings.setBOOL("ShowMOAPRadar", TRUE);
106 sInstance->setVisible(TRUE);
107}
108
109void LLFloaterMOAPRadar::onClose(bool app_quitting)
110{
111 sInstance->setVisible(FALSE);
112 if (!app_quitting)
113 {
114 gSavedSettings.setBOOL("ShowMOAPRadar", FALSE);
115 }
116 if (!gSavedSettings.getBOOL("MOAPRadarKeepOpen") || app_quitting)
117 {
118 destroy();
119 }
120}
121
122
123BOOL LLFloaterMOAPRadar::postBuild()
124{
125
126 mMOAPList = getChild<LLScrollListCtrl>("moap_list");
127 mMOAPList->sortByColumn("distance", TRUE);
128
129 mTrackBtn = getChild<LLButton>("track_btn");
130 mTrackBtn->setLabel(LLStringExplicit("Track"));
131
132 childSetAction("open_btn", onClickOpen, this);
133 childSetAction("track_btn", onClickTrack, this);
134 childSetAction("copy_btn", onClickCopy, this);
135
136 mMOAPList->setCommitOnSelectionChange(TRUE);
137 childSetCommitCallback("moap_list", onSelectMOAP, this);
138
139 gIdleCallbacks.addFunction(LLFloaterMOAPRadar::callbackIdle);
140
141 return TRUE;
142}
143
144//static
145void LLFloaterMOAPRadar::callbackIdle(void *userdata) {
146 if (LLFloaterMOAPRadar::sInstance != NULL)
147 {
148 // Do not update at every frame: this would be insane !
149 if (gFrameCount % LLFloaterMOAPRadar::sInstance->mUpdateRate == 0)
150 {
151 LLFloaterMOAPRadar::sInstance->updateMOAPList();
152 }
153 }
154}
155
156
157void LLFloaterMOAPRadar::updateMOAPList()
158{
159 if (sInstance != this) return;
160
161 mMOAPList->deleteAllItems();
162
163 S32 obj_count=gObjectList.getNumObjects();
164
165 int count=0;
166
167 for(int objnum=0;objnum<obj_count;objnum++)
168 {
169 LLPointer<LLViewerObject> obj = gObjectList.getObject(objnum);
170
171 if(obj.isNull())
172 continue;
173
174 if(obj->isDead() || obj->isOrphaned())
175 continue;
176
177 if(obj->getMediaType() == LLViewerObject::MEDIA_TYPE_NONE)
178 continue;
179
180 LLSD element;
181
182 element["id"] = obj->getID();
183
184 for(int face=0;face<obj->getNumTEs();face++)
185 {
186 const LLTextureEntry * te=obj->getTE(face);
187 if(te==NULL)
188 continue;
189
190 if(te->hasMedia())
191 {
192 LLMediaEntry* media=te->getMediaData();
193
194 if(media==NULL)
195 continue;
196
197 LLSD media_details;
198 media->asLLSD(media_details);
199
200 element["columns"][LIST_URL]["column"] = "URL";
201 element["columns"][LIST_URL]["type"] = "text";
202 std::string URL=media->getCurrentURL();
203 if(URL=="")
204 URL="(Waiting....)";
205
206 element["columns"][LIST_URL]["value"] = URL;
207
208 if(mTrackingRunning && mTrackedID==obj->getID() && mTrackedFace==face)
209 {
210 element["columns"][LIST_URL]["font-style"] = "BOLD";
211 }
212 else
213 {
214 element["columns"][LIST_URL]["font-style"] = "NORMAL";
215 }
216
217 element["columns"][LIST_FACE]["column"] = "face";
218 element["columns"][LIST_FACE]["type"] = "text";
219 std::stringstream face_buf;
220 face_buf << face;
221 element["columns"][LIST_FACE]["value"] = face_buf.str();
222
223 LLVector3d offset = gAgent.getPositionGlobal()-obj->getPositionGlobal();
224 S32 dist= offset.length();
225
226 element["columns"][LIST_DISTANCE]["column"] = "distance";
227 element["columns"][LIST_DISTANCE]["type"] = "text";
228 std::stringstream dist_buf;
229 dist_buf << std::fixed << std::setprecision(2) << dist<<"m";
230 element["columns"][LIST_DISTANCE]["value"] = dist_buf.str();
231
232 if(dist<25)
233 element["columns"][LIST_DISTANCE]["color"] = LLColor4::green.getValue();
234 else if(dist<50)
235 element["columns"][LIST_DISTANCE]["color"] = LLColor4::blue1.getValue();
236 else if(dist<100)
237 element["columns"][LIST_DISTANCE]["color"] = LLColor4::black.getValue();
238 else if(dist<256)
239 element["columns"][LIST_DISTANCE]["color"] = LLColor4::yellow.getValue();
240 else
241 element["columns"][LIST_DISTANCE]["color"] = LLColor4::red.getValue();
242
243
244 element["columns"][LIST_POSITION]["column"] = "position";
245 element["columns"][LIST_POSITION]["type"] = "text";
246 element["columns"][LIST_POSITION]["value"] = "";
247
248 element["columns"][LIST_ALTITUDE]["column"] = "altitude";
249 element["columns"][LIST_ALTITUDE]["type"] = "text";
250 std::stringstream alt_buf;
251 alt_buf << std::fixed << std::setprecision(2) << obj->getPositionGlobal().mdV[2]<<"m";
252 element["columns"][LIST_ALTITUDE]["value"] = alt_buf.str();
253
254 element["columns"][LIST_POSITION]["column"]="position";
255 element["columns"][LIST_POSITION]["type"] = "text";
256 std::stringstream pos_buf;
257
258 S32 moap_x = (S32)offset.mdV[VX];
259 S32 moap_y = (S32)offset.mdV[VY];
260 if (moap_x >= -256 && moap_x <= 256 && moap_y >= -256 && moap_y <= 256)
261 {
262 pos_buf<< std::fixed << std::setprecision(2)<<obj->getPositionRegion().mV[VX]<<","<<obj->getPositionRegion().mV[VY];
263 }
264 else
265 {
266 if (moap_y < 0)
267 pos_buf<<"S";
268 else if (moap_y > 256)
269 pos_buf<<"N";
270
271 if (moap_x < 0)
272 pos_buf<<"W";
273 else if (moap_x > 256)
274 pos_buf<<"E";
275 }
276
277
278 element["columns"][LIST_POSITION]["value"] = pos_buf.str();
279
280 mMOAPList->addElement(element, ADD_BOTTOM);
281
282 if(mSelectedObjID==obj->getID() && mSelectedFace==face)
283 {
284 mMOAPList->selectNthItem(count);
285 }
286
287 count++;
288 }
289 }
290 }
291
292 updatetrackbtn();
293}
294
295// static
296void LLFloaterMOAPRadar::onClickOpen(void* userdata)
297{
298 LLFloaterMOAPRadar *self = (LLFloaterMOAPRadar*)userdata;
299
300 LLDynamicArray<LLUUID> ids = self->mMOAPList->getSelectedIDs();
301
302 if(ids.empty())
303 {
304 return;
305 }
306
307 LLUUID id=ids.front();
308
309 LLPointer<LLViewerObject> obj = gObjectList.findObject(id);
310 if(obj.notNull())
311 {
312
313 const LLTextureEntry * te=obj->getTE(self->mSelectedFace);
314 if(te==NULL)
315 return;
316
317 if(te->hasMedia())
318 {
319 LLMediaEntry* media=te->getMediaData();
320 if(media)
321 {
322 //gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(media->getCurrentURL()));
323 LLWeb::loadURL(media->getCurrentURL());
324 }
325 }
326 }
327
328}
329
330// static
331void LLFloaterMOAPRadar::onClickTrack(void* userdata)
332{
333 LLFloaterMOAPRadar *self = (LLFloaterMOAPRadar*)userdata;
334
335 LLDynamicArray<LLUUID> ids = self->mMOAPList->getSelectedIDs();
336
337 if(self->mTrackingRunning)
338 {
339 LLTracker::stopTracking(NULL);
340 self->mTrackingRunning=false;
341 }
342
343 if(ids.empty())
344 {
345 self->mTrackedID=LLUUID::null;
346 self->mTrackingRunning=false;
347 return;
348 }
349
350 LLUUID id=ids.front();
351
352 if(id==self->mTrackedID && self->mSelectedFace==self->mTrackedFace)
353 {
354 self->mTrackedID=LLUUID::null;
355 self->mTrackingRunning=false;
356 return;
357 }
358
359 self->mTrackedID=LLUUID::null;
360
361 LLPointer<LLViewerObject> obj = gObjectList.findObject(id);
362 if(obj.notNull())
363 {
364 LLTracker::trackLocation(obj->getPositionGlobal(),"MOAP Tracking","",LLTracker::LOCATION_ITEM);
365 self->mTrackingRunning=true;
366 self->mTrackedID=id;
367 self->mTrackedFace=self->mSelectedFace;
368 }
369}
370
371// static
372void LLFloaterMOAPRadar::onClickCopy(void* userdata)
373{
374 LLFloaterMOAPRadar *self = (LLFloaterMOAPRadar*)userdata;
375
376 LLDynamicArray<LLUUID> ids = self->mMOAPList->getSelectedIDs();
377
378 if(ids.empty())
379 {
380 LLTracker::stopTracking(NULL);
381 return;
382 }
383
384 LLUUID id=ids.front();
385
386 LLPointer<LLViewerObject> obj = gObjectList.findObject(id);
387
388 if(obj.notNull())
389 {
390
391 const LLTextureEntry * te=obj->getTE(self->mSelectedFace);
392 if(te==NULL)
393 return;
394
395 if(te->hasMedia())
396 {
397 LLMediaEntry* media=te->getMediaData();
398 if(media)
399 {
400 gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(media->getCurrentURL()));
401 }
402 }
403 }
404
405}
406
407//static
408void LLFloaterMOAPRadar::onSelectMOAP(LLUICtrl*, void* userdata)
409{
410 LLFloaterMOAPRadar *self = (LLFloaterMOAPRadar*)userdata;
411
412 LLScrollListItem *item = self->mMOAPList->getFirstSelected();
413 if (item)
414 {
415 self->mSelectedObjID = item->getUUID();
416 self->mSelectedFace = item->getColumn(LIST_FACE)->getValue().asInteger();
417 }
418
419 self->updatetrackbtn();
420}
421
422void LLFloaterMOAPRadar::updatetrackbtn()
423{
424 if( mTrackingRunning)
425 {
426 if( mTrackedID==mSelectedObjID && mTrackedFace==mSelectedFace)
427 {
428 mTrackBtn->setLabel(LLStringExplicit("Untrack"));
429 }
430 else
431 {
432 mTrackBtn->setLabel(LLStringExplicit("New Track"));
433 }
434 }
435 else
436 {
437 mTrackBtn->setLabel(LLStringExplicit("Track"));
438 }
439
440} \ No newline at end of file
diff --git a/linden/indra/newview/rcmoapradar.h b/linden/indra/newview/rcmoapradar.h
new file mode 100644
index 0000000..1d01546
--- /dev/null
+++ b/linden/indra/newview/rcmoapradar.h
@@ -0,0 +1,58 @@
1
2
3class LLFloaterMOAPRadar : public LLFloater
4{
5
6private:
7 LLFloaterMOAPRadar();
8public:
9 ~LLFloaterMOAPRadar();
10
11 enum AVATARS_COLUMN_ORDER
12 {
13 LIST_URL,
14 LIST_FACE,
15 LIST_DISTANCE,
16 LIST_POSITION,
17 LIST_ALTITUDE
18 };
19
20 /*virtual*/ void onClose(bool app_quitting);
21 /*virtual*/ void onOpen();
22 /*virtual*/ BOOL postBuild();
23 /*virtual*/ void draw();
24
25 static void toggle(void*);
26
27 static void showInstance();
28
29 static void callbackIdle(void *userdata);
30
31 void updateMOAPList();
32
33 static void onClickOpen(void* userdata);
34 static void onClickCopy(void* userdata);
35 static void onClickTrack(void* userdata);
36 static void onSelectMOAP(LLUICtrl*, void* userdata);
37
38
39private:
40 static LLFloaterMOAPRadar* sInstance;
41 LLScrollListCtrl* mMOAPList;
42 LLButton * mTrackBtn;
43
44 U32 mUpdateRate;
45
46 LLUUID mSelectedObjID;
47 U8 mSelectedFace;
48 bool mTrackingRunning;
49
50 LLUUID mTrackedID;
51 U8 mTrackedFace;
52
53 void updatetrackbtn();
54
55public:
56 static LLFloaterMOAPRadar* getInstance() { return sInstance; }
57
58}; \ No newline at end of file
diff --git a/linden/indra/newview/res/viewerRes.rc b/linden/indra/newview/res/viewerRes.rc
index 951d0cc..edeee92 100644
--- a/linden/indra/newview/res/viewerRes.rc
+++ b/linden/indra/newview/res/viewerRes.rc
@@ -156,11 +156,11 @@ BEGIN
156 BEGIN 156 BEGIN
157 VALUE "CompanyName", "Imprudence Viewer Project" 157 VALUE "CompanyName", "Imprudence Viewer Project"
158 VALUE "FileDescription", "Imprudence" 158 VALUE "FileDescription", "Imprudence"
159 VALUE "FileVersion", "1.4.0 beta 2" 159 VALUE "FileVersion", "1.4.0.3 exp 1"
160 VALUE "InternalName", "Imprudence" 160 VALUE "InternalName", "Imprudence"
161 VALUE "OriginalFilename", "imprudence.exe" 161 VALUE "OriginalFilename", "imprudence.exe"
162 VALUE "ProductName", "Imprudence" 162 VALUE "ProductName", "Imprudence"
163 VALUE "ProductVersion", "1.4.0 beta 2" 163 VALUE "ProductVersion", "1.4.0.3 exp 1"
164 END 164 END
165 END 165 END
166 BLOCK "VarFileInfo" 166 BLOCK "VarFileInfo"
diff --git a/linden/indra/newview/skins/default/textures/cakeisalie.png b/linden/indra/newview/skins/default/textures/cakeisalie.png
deleted file mode 100644
index bc8af84..0000000
--- a/linden/indra/newview/skins/default/textures/cakeisalie.png
+++ /dev/null
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/ceilingcat.png b/linden/indra/newview/skins/default/textures/ceilingcat.png
deleted file mode 100644
index 5cf5285..0000000
--- a/linden/indra/newview/skins/default/textures/ceilingcat.png
+++ /dev/null
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/easteregg.png b/linden/indra/newview/skins/default/textures/easteregg.png
deleted file mode 100644
index 75eaef7..0000000
--- a/linden/indra/newview/skins/default/textures/easteregg.png
+++ /dev/null
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/hugs.png b/linden/indra/newview/skins/default/textures/hugs.png
deleted file mode 100644
index d612793..0000000
--- a/linden/indra/newview/skins/default/textures/hugs.png
+++ /dev/null
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/nomnom.png b/linden/indra/newview/skins/default/textures/nomnom.png
deleted file mode 100644
index ffc70ef..0000000
--- a/linden/indra/newview/skins/default/textures/nomnom.png
+++ /dev/null
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/octopus.png b/linden/indra/newview/skins/default/textures/octopus.png
deleted file mode 100644
index 91765f9..0000000
--- a/linden/indra/newview/skins/default/textures/octopus.png
+++ /dev/null
Binary files differ
diff --git a/linden/indra/newview/skins/default/textures/zombiecat.png b/linden/indra/newview/skins/default/textures/zombiecat.png
deleted file mode 100644
index 93392c0..0000000
--- a/linden/indra/newview/skins/default/textures/zombiecat.png
+++ /dev/null
Binary files differ
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_about.xml b/linden/indra/newview/skins/default/xui/en-us/floater_about.xml
index 91a63eb..fa8251c 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_about.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_about.xml
@@ -35,17 +35,17 @@
35 max_length="65536" mouse_opaque="true" name="credits_editor" width="423" 35 max_length="65536" mouse_opaque="true" name="credits_editor" width="423"
36 word_wrap="true"> 36 word_wrap="true">
37 The Imprudence Viewer was rocked hard by: 37 The Imprudence Viewer was rocked hard by:
38 Jacek Antonelli, McCabe Maxsted, Armin Weatherwax, Elektra Hesse, CodeBastard Redgrave and Boroondas Gupte. 38 Armin Weatherwax, Boroondas Gupte, CodeBastard Redgrave, Elektra Hesse, Jacek Antonelli, McCabe Maxsted, and onefang rejected.
39 39
40 http://kokuaviewer.org/ 40 http://kokuaviewer.org/
41 41
42 Imprudence is so awesome thanks to contributions from many generous people: 42 Imprudence is so awesome thanks to contributions from many generous people:
43 43
44 For their patches and code contributions, we thank Admiral Admiral, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Ansariel Hiller, Archimedies Plutonian, Ardy Lay, Asuka Neely, Balp Allen, Carjay McGinnis, Chalice Yao, Dale Glass, Damian Delacrois, Danny Nolan, Eryn, Felix Duesenburg, Frederick Martian, Geneko Nemeth, Grandma Bates, Hazim Gazov, Henri Beauchamp, Hg Beeks, Hiroshi Kumaki, Kakurady Drakenar, Katharine Berry, KirstenLee Cinquetti, Kitty Barnett, Latif Khalifa, Lance Corrimal, Lilly Zenovka, Makomk Makosen, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Mimika Oh, Mm Alder, Nemurimasu Neiro, Nicholaz Beresford, Nicky Perian, Patrick Sapinski, Paul Churchill, Peter Lameth, Qarl Fizz, Revolution Smythe, Robin Cornelius, Seraph Linden, Shyotl Kuhr, Siana Gearz, SignpostMarv Martin, Stephen Zenith, TankMaster Finesmith, Thickbrick Sleaford, Thomas Shikami, Tom Meta, Tonya Souther, tx Oh, Vaalith Jinn, Vadim Bigbear, Vex Streeter, WhiteStar Magic, Zi Ree, and Zwagoth Klaar. 44 For their patches and code contributions, we thank Admiral Admiral, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Angus Boyd, Ansariel Hiller, Archimedies Plutonian, Ardy Lay, Asuka Neely, Balp Allen, Carjay McGinnis, Chalice Yao, Dale Glass, Damian Delacrois, Danny Nolan, Eryn, Felix Duesenburg, Frederick Martian, Geneko Nemeth, Grandma Bates, Hazim Gazov, Henri Beauchamp, Hg Beeks, Hiroshi Kumaki, Johnnie Carling, Lord Drakeo, Kakurady Drakenar, Katharine Berry, Kentron Katana, KirstenLee Cinquetti, Kitty Barnett, Latif Khalifa, Lance Corrimal, Lilly Zenovka, Makomk Makosen, Mana Janus, Matthew Dowd, Michelle2 Zenovka, Mimika Oh, Mm Alder, Nemurimasu Neiro, Nicholaz Beresford, Nicky Perian, Patrick Sapinski, Paul Churchill, Peter Lameth, Qarl Fizz, Revolution Smythe, Robin Cornelius, Seraph Linden, Shyotl Kuhr, Siana Gearz, SignpostMarv Martin, Stephen Zenith, TankMaster Finesmith, Thickbrick Sleaford, Thomas Shikami, Tom Meta, Tonya Souther, tx Oh, Vaalith Jinn, Vadim Bigbear, Vex Streeter, WhiteStar Magic, Zi Ree, and Zwagoth Klaar.
45 45
46 For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden. 46 For their WindLight presets, we thank Ana Lutetia, CodeBastard Redgrave, and Torley Linden.
47 47
48 Thanks also to the developer(s) of the Ascent Viewer, Astra Viewer, Cool VL Viewer, Dolphin Viewer, Emerald Viewer, FrozenGlobe Viewer, Hippo Viewer, Meerkat Viewer, Meta7 Viewer, Phoenix Viewer, Singularity Viewer and Snowglobe Viewer for viewer enhancements we have incorporated, as well as Kitty Barnett for RLVa. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible. 48 Thanks also to the developer(s) of the Ascent Viewer, Astra Viewer, Cool VL Viewer, Dolphin Viewer, Emerald Viewer, FrozenGlobe Viewer, Hippo Viewer, Meerkat Viewer, Meta7 Viewer, Phoenix Viewer, Singularity Viewer and Snowglobe Viewer for viewer enhancements we have incorporated, as well as Kitty Barnett for RLVa. Special thanks to the folks at Linden Lab for releasing the viewer source, without which this endeavor would have been impossible.
49 49
50 For a complete list of who did what, read the release notes! 50 For a complete list of who did what, read the release notes!
51 51
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml b/linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml
index e698878..2f9fc4d 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml
@@ -1,15 +1,16 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="false" 2<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="false"
3 width="250" height="225" 3 width="250" height="255"
4 name="beacons" title="Beacons" 4 name="beacons" title="Beacons"
5 rect_control="FloaterBeaconsRect" control_name="BeaconsEnabled"> 5 rect_control="FloaterBeaconsRect" control_name="BeaconsEnabled">
6 <panel bottom="10" follows="left|top|right|bottom" left="10" width="230" height="200" name="beacons_panel"> 6 <panel bottom="10" follows="left|top|right|bottom" left="10" width="230" height="240" name="beacons_panel">
7 <check_box bottom_delta="-33" follows="left|top" left="0" name="touch_only" label="Scripted Objects with Touch Only" control_name="scripttouchbeacon" /> 7 <check_box bottom_delta="-33" follows="left|top" left="0" name="touch_only" label="Scripted Objects with Touch Only" control_name="scripttouchbeacon" />
8 <check_box bottom_delta="-20" follows="left|top" left="0" name="scripted" label="Scripted Objects" control_name="scriptsbeacon" /> 8 <check_box bottom_delta="-20" follows="left|top" left="0" name="scripted" label="Scripted Objects" control_name="scriptsbeacon" />
9 <check_box bottom_delta="-20" follows="left|top" left="0" name="physical" label="Physical Objects" control_name="physicalbeacon" /> 9 <check_box bottom_delta="-20" follows="left|top" left="0" name="physical" label="Physical Objects" control_name="physicalbeacon" />
10 <check_box bottom_delta="-20" follows="left|top" left="0" name="sounds" label="Sound Sources" control_name="soundsbeacon" /> 10 <check_box bottom_delta="-20" follows="left|top" left="0" name="sounds" label="Sound Sources" control_name="soundsbeacon" />
11 <check_box bottom_delta="-20" follows="left|top" left="0" name="particles" label="Particle Sources" control_name="particlesbeacon" /> 11 <check_box bottom_delta="-20" follows="left|top" left="0" name="particles" label="Particle Sources" control_name="particlesbeacon" />
12 <check_box bottom_delta="-20" follows="left|top" left="0" name="highlights" label="Render Highlights" control_name="renderhighlights" /> 12 <check_box bottom_delta="-20" follows="left|top" left="0" name="highlights" label="Render Highlights" control_name="renderhighlights" />
13 <check_box bottom_delta="-20" follows="left|top" left="0" name="moap" label="MOAP Objects" control_name="moapbeacon" />
13 <check_box bottom_delta="-20" follows="left|top" left="0" name="beacons" label="Render Beacons" control_name="renderbeacons" /> 14 <check_box bottom_delta="-20" follows="left|top" left="0" name="beacons" label="Render Beacons" control_name="renderbeacons" />
14 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 15 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
15 bottom_delta="-30" drop_shadow_visible="true" enabled="true" follows="left|top" 16 bottom_delta="-30" drop_shadow_visible="true" enabled="true" follows="left|top"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml b/linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml
index 53dd217..5f9e745 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_build_options.xml
@@ -68,13 +68,34 @@
68 label="Values are percent" left_delta="-5" mouse_opaque="true" 68 label="Values are percent" left_delta="-5" mouse_opaque="true"
69 tool_tip="Default settings are Percentages and every axis set at 50" 69 tool_tip="Default settings are Percentages and every axis set at 50"
70 name="PivotPercToggle" radio_style="false" width="100" /> 70 name="PivotPercToggle" radio_style="false" width="100" />
71 71
72 <check_box bottom_delta="60" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 72 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
73 initial_value="true" label="Show selection outlines" left_delta="143" 73 bottom_delta="-50" drop_shadow_visible="true" enabled="true" follows="left|top" font="SansSerifSmall"
74 mouse_opaque="true" name="BuildPrefsRenderHighlight_toggle" 74 h_pad="0" halign="left" height="10" left="220" mouse_opaque="false"
75 name="text_box8" v_pad="0" width="150">Show during build:</text>
76 <view_border bevel_style="none" border_thickness="1" bottom_delta="-98" follows="top|left" height="90"
77 left="198" name="ShowBorder" width="135" />
78
79
80 <check_box bottom_delta="70" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
81 initial_value="true" label="Hidden selection" left_delta="0"
82 mouse_opaque="true" name="BuildPrefsRenderHidden_toggle"
75 radio_style="false" width="270"/> 83 radio_style="false" width="270"/>
76 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 84 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
77 label="Limit Select Distance" left_delta="0" mouse_opaque="true" 85 initial_value="true" label="Light radius" left_delta="0"
86 mouse_opaque="true" name="BuildPrefsRenderLightRadius_toggle"
87 radio_style="false" width="270"/>
88 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
89 initial_value="true" label="Selection beam" left_delta="0"
90 mouse_opaque="true" name="BuildPrefsShowSelectionBeam_toggle"
91 radio_style="false" width="270"/>
92 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
93 initial_value="true" label="Selection outlines" left_delta="0"
94 mouse_opaque="true" name="BuildPrefsRenderHighlight_toggle"
95 radio_style="false" width="270"/>
96
97 <check_box bottom_delta="198" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
98 label="Limit Select Distance" left_delta="148" mouse_opaque="true"
78 tooltip="" 99 tooltip=""
79 name="limit_select_dist_check" radio_style="false" width="270" /> 100 name="limit_select_dist_check" radio_style="false" width="270" />
80 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 101 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_moap_radar.xml b/linden/indra/newview/skins/default/xui/en-us/floater_moap_radar.xml
new file mode 100644
index 0000000..b9e3f99
--- /dev/null
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_moap_radar.xml
@@ -0,0 +1,54 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes"?>
2<floater name="MOAP" title="MOAP Radar"
3 can_resize="true" can_minimize="true" can_close="true" can_drag_on_left="false"
4 rect_control="FloaterRadarRect" min_width="700" min_height="150">
5
6 <scroll_list name="moap_list"
7 left="10" right="-10" top="-20" bottom="40" can_resize="true"
8 column_padding="0" follows="left|top|bottom|right"
9 draw_heading="true" multi_select="true" search_column="1"
10 tool_tip="MOAP List">
11 <column name="URL" label="URL" width="450" tool_tip="URL of MOAP"/>
12 <column name="face" label="Face" width="48" tool_tip="URL of MOAP"/>
13 <column name="distance" label="Dist." width="48" tool_tip="Distance from your avatar"/>
14 <column name="position" label="Pos." width="90" tool_tip="Position (X, Y) within this sim, or general direction (cardinal point) for outside sims"/>
15 <column name="altitude" label="Alt." width="48" tool_tip="Altitude"/>
16 </scroll_list>
17
18
19 <button
20 name="open_btn"
21 label="Open"
22 tool_tip="Open Current URL"
23 left="10"
24 bottom_delta="-30"
25 width="80"
26 height="20"
27 font="SansSerifSmall"
28 follows="bottom|left"
29 />
30 <button
31 name="track_btn"
32 label="(Un)Track"
33 tool_tip="Toggle tracking of this MOAPs position"
34 left_delta="90"
35 bottom_delta="0"
36 width="80"
37 height="20"
38 font="SansSerifSmall"
39 follows="bottom|left"
40 />
41 <button
42 name="copy_btn"
43 label="Get URL"
44 tool_tip="Copies URL to the clipboard"
45 left_delta="90"
46 bottom_delta="0"
47 width="80"
48 height="20"
49 font="SansSerifSmall"
50 follows="bottom|left"
51 />
52 <!-- upper middle row -->
53
54</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
index 3f476cf..2ed5120 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
@@ -69,20 +69,24 @@
69 69
70 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16" 70 <check_box bottom="-70" follows="left|top" font="SansSerifSmall" height="16"
71 initial_value="false" label="Position" left="4" mouse_opaque="true" 71 initial_value="false" label="Position" left="4" mouse_opaque="true"
72 name="radio position" radio_style="true" width="114" /> 72 name="radio position" radio_style="true" width="114"
73 tool_tip="Position selected prims (Ctrl-Shift-P)." />
73 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 74 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
74 initial_value="false" label="Rotate (Ctrl)" left="4" mouse_opaque="true" 75 initial_value="false" label="Rotate (Ctrl)" left="4" mouse_opaque="true"
75 name="radio rotate" radio_style="true" width="114" /> 76 name="radio rotate" radio_style="true" width="114"
77 tool_tip="Rotate selected prims (Ctrl)." />
76 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 78 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
77 initial_value="false" label="Stretch (Ctrl-Shift)" left="4" 79 initial_value="false" label="Stretch (Ctrl-Shift)" left="4"
78 mouse_opaque="true" name="radio stretch" radio_style="true" width="123" /> 80 mouse_opaque="true" name="radio stretch" radio_style="true" width="123"
81 tool_tip="Resize selected prims (Ctrl-Shift)." />
79 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 82 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
80 initial_value="false" label="Select faces to texture" left="4" mouse_opaque="true" 83 initial_value="false" label="Select faces to texture" left="4" mouse_opaque="true"
81 name="radio select face" radio_style="true" width="114" /> 84 name="radio select face" radio_style="true" width="114"
85 tool_tip="Select faces of prims to texture (Ctrl-Alt-F)." />
82 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 86 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
83 initial_value="false" label="Align (Shift to Pack)" left="4" mouse_opaque="true" 87 initial_value="false" label="Align (Shift to Pack)" left="4" mouse_opaque="true"
84 name="radio align" radio_style="true" width="114" 88 name="radio align" radio_style="true" width="114"
85 tool_tip="Align aligns all selected prims' edges along an axis, Pack moves all selected prims' edges so they're touching" /> 89 tool_tip="Align (Ctrl-Alt-M) aligns all selected prims edges along an axis. Pack (Ctrl-Alt-Shift-M) moves all selected prims edges so they're touching." />
86 <check_box bottom_delta="-19" control_name="EditLinkedParts" follows="left|top" 90 <check_box bottom_delta="-19" control_name="EditLinkedParts" follows="left|top"
87 font="SansSerifSmall" height="16" initial_value="false" 91 font="SansSerifSmall" height="16" initial_value="false"
88 label="Edit linked parts" left="4" mouse_opaque="true" 92 label="Edit linked parts" left="4" mouse_opaque="true"
@@ -1363,9 +1367,12 @@
1363 <string name="status_move"> 1367 <string name="status_move">
1364 Drag to Move, Shift-Drag to Copy 1368 Drag to Move, Shift-Drag to Copy
1365 </string> 1369 </string>
1366 <string name="status_align"> 1370 <string name="status_selectface">
1367 CTRL-A to align on an axis, CTRL-Shift-A to Pack 1371 Click to select a Face for texturing
1368 </string> 1372 </string>
1373 <string name="status_align">
1374 Click to Align, Shift-Click to Pack
1375 </string>
1369 <string name="status_modifyland"> 1376 <string name="status_modifyland">
1370 Click and Hold to Modify Land 1377 Click and Hold to Modify Land
1371 </string> 1378 </string>
@@ -1379,7 +1386,7 @@
1379 Click Inworld to Build 1386 Click Inworld to Build
1380 </string> 1387 </string>
1381 <string name="status_selectland"> 1388 <string name="status_selectland">
1382 Click and Drag to Select Land 1389 Click and Drag to select Land
1383 </string> 1390 </string>
1384 <string name="grid_screen_text"> 1391 <string name="grid_screen_text">
1385 Screen 1392 Screen
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml b/linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml
index 0cbd7c6..8295d3a 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_inventory.xml
@@ -166,17 +166,15 @@
166 <on_click filter="" function="Inventory.DoToSelected" userdata="copy_uuid" /> 166 <on_click filter="" function="Inventory.DoToSelected" userdata="copy_uuid" />
167 </menu_item_call> 167 </menu_item_call>
168 <menu_item_separator name="Copy Separator" /> 168 <menu_item_separator name="Copy Separator" />
169<!-- See IMP-961 http://redmine.kokuaviewer.org/issues/961 169 <menu_item_call bottom_delta="-18" height="18" label="Cut" left="0" mouse_opaque="true"
170 <menu_item_call bottom_delta="-18" height="18" label="Cut" left="0" mouse_opaque="true"
171 name="Cut" width="128"> 170 name="Cut" width="128">
172 <on_click filter="" function="Inventory.DoToSelected" userdata="cut" /> 171 <on_click filter="" function="Inventory.DoToSelected" userdata="cut" />
173 </menu_item_call> 172 </menu_item_call>
174--> 173 <menu_item_call bottom_delta="-18" height="18" label="Copy" left="0" mouse_opaque="true"
175 <menu_item_call bottom_delta="-18" height="18" label="Copy" left="0" mouse_opaque="true"
176 name="Copy" width="128"> 174 name="Copy" width="128">
177 <on_click filter="" function="Inventory.DoToSelected" userdata="copy" /> 175 <on_click filter="" function="Inventory.DoToSelected" userdata="copy" />
178 </menu_item_call> 176 </menu_item_call>
179 <menu_item_call bottom_delta="-18" height="18" label="Paste" left="0" mouse_opaque="true" 177 <menu_item_call bottom_delta="-18" height="18" label="Paste" left="0" mouse_opaque="true"
180 name="Paste" width="128"> 178 name="Paste" width="128">
181 <on_click filter="" function="Inventory.DoToSelected" userdata="paste" /> 179 <on_click filter="" function="Inventory.DoToSelected" userdata="paste" />
182 </menu_item_call> 180 </menu_item_call>
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_login.xml b/linden/indra/newview/skins/default/xui/en-us/menu_login.xml
index 4582f4e..aaae5b7 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_login.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_login.xml
@@ -23,15 +23,15 @@
23 <on_click function="ShowFloater" userdata="help f1" /> 23 <on_click function="ShowFloater" userdata="help f1" />
24 </menu_item_call> 24 </menu_item_call>
25 <menu_item_separator /> 25 <menu_item_separator />
26 <menu_item_call name="Imprudence Blog" 26 <menu_item_call name="Imprudence communication channels"
27 label="Imprudence Blog"> 27 label="Imprudence communication channels">
28 <on_click function="PromptShowURL" 28 <on_click function="PromptShowURL"
29 userdata="WebLaunchImprudenceBlog,http://imprudenceviewer.org/" /> 29 userdata="WebLaunchImprudenceComms,http://wiki.kokuaviewer.org/wiki/Communication_Channels" />
30 </menu_item_call> 30 </menu_item_call>
31 <menu_item_call name="Imprudence Forums" 31 <menu_item_call name="Imprudence bug reporting"
32 label="Imprudence Forums"> 32 label="Imprudence bug reporting">
33 <on_click function="PromptShowURL" 33 <on_click function="PromptShowURL"
34 userdata="WebLaunchImprudenceForums,http://imprudenceviewer.org/forums/" /> 34 userdata="WebLaunchImprudenceBugs,http://wiki.kokuaviewer.org/wiki/Reporting_a_bug" />
35 </menu_item_call> 35 </menu_item_call>
36 <menu_item_separator /> 36 <menu_item_separator />
37 <menu_item_call label="About Imprudence" name="About Imprudence"> 37 <menu_item_call label="About Imprudence" name="About Imprudence">
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
index efde449..46a2c81 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
@@ -385,6 +385,10 @@
385 <on_click function="ShowFloater" userdata="mini map" /> 385 <on_click function="ShowFloater" userdata="mini map" />
386 <on_check control="ShowMiniMap" /> 386 <on_check control="ShowMiniMap" />
387 </menu_item_check> 387 </menu_item_check>
388 <menu_item_check enabled="true" label="MOAP Radar" name="MOAPRadar" shortcut="">
389 <on_click function="View.ToggleMOAPList" userdata="moapradar" />
390 <on_check control="ShowMOAPRadar" />
391 </menu_item_check>
388 <menu_item_separator /> 392 <menu_item_separator />
389 <menu_item_check label="Animation Overrider" name="AO" 393 <menu_item_check label="Animation Overrider" name="AO"
390 shortcut="control|shift|O"> 394 shortcut="control|shift|O">
@@ -677,17 +681,17 @@
677 userdata="" /> 681 userdata="" />
678 <on_check control="RenderLightRadius" /> 682 <on_check control="RenderLightRadius" />
679 </menu_item_check> 683 </menu_item_check>
680 <menu_item_check label="Show Selection Outlines"
681 name="Show Selection Outlines">
682 <on_click function="Tools.ShowSelectionHighlights" userdata="" />
683 <on_check control="RenderHighlightSelections" />
684 </menu_item_check>
685 <menu_item_check name="Show Selection Beam" 684 <menu_item_check name="Show Selection Beam"
686 label="Show Selection Beam"> 685 label="Show Selection Beam">
687 <on_click function="ToggleControl" 686 <on_click function="ToggleControl"
688 userdata="ShowSelectionBeam" /> 687 userdata="ShowSelectionBeam" />
689 <on_check control="ShowSelectionBeam" /> 688 <on_check control="ShowSelectionBeam" />
690 </menu_item_check> 689 </menu_item_check>
690 <menu_item_check label="Show Selection Outlines"
691 name="Show Selection Outlines">
692 <on_click function="Tools.ShowSelectionHighlights" userdata="" />
693 <on_check control="RenderHighlightSelections" />
694 </menu_item_check>
691 </menu> 695 </menu>
692 <menu_item_separator /> 696 <menu_item_separator />
693 <menu_item_check name="Snap to Grid" enabled="false" 697 <menu_item_check name="Snap to Grid" enabled="false"
@@ -844,15 +848,15 @@
844 <on_click function="ShowFloater" userdata="help tutorial" /> 848 <on_click function="ShowFloater" userdata="help tutorial" />
845 </menu_item_call> 849 </menu_item_call>
846 <menu_item_separator /> 850 <menu_item_separator />
847 <menu_item_call name="Imprudence Blog" 851 <menu_item_call name="Imprudence communication channels"
848 label="Imprudence Blog"> 852 label="Imprudence communication channels">
849 <on_click function="PromptShowURL" 853 <on_click function="PromptShowURL"
850 userdata="WebLaunchImprudenceBlog,http://blog.kokuaviewer.org/" /> 854 userdata="WebLaunchImprudenceComms,http://wiki.kokuaviewer.org/wiki/Communication_Channels" />
851 </menu_item_call> 855 </menu_item_call>
852 <menu_item_call name="Imprudence Forums" 856 <menu_item_call name="Imprudence bug reporting"
853 label="Imprudence Forums"> 857 label="Imprudence bug reporting">
854 <on_click function="PromptShowURL" 858 <on_click function="PromptShowURL"
855 userdata="WebLaunchImprudenceForums,http://forums.kokuaviewer.org/" /> 859 userdata="WebLaunchImprudenceBugs,http://wiki.kokuaviewer.org/wiki/Reporting_a_bug" />
856 </menu_item_call> 860 </menu_item_call>
857 <menu_item_separator /> 861 <menu_item_separator />
858 <menu_item_call name="Scripting Portal" 862 <menu_item_call name="Scripting Portal"
@@ -1323,6 +1327,12 @@
1323 <on_check function="Advanced.CheckInfoDisplay" 1327 <on_check function="Advanced.CheckInfoDisplay"
1324 userdata="sculpt" /> 1328 userdata="sculpt" />
1325 </menu_item_check> 1329 </menu_item_check>
1330 <menu_item_check name="ShadowFrusta" label="Shadow Frusta">
1331 <on_click function="Advanced.ToggleInfoDisplay"
1332 userdata="shadow frusta" />
1333 <on_check function="Advanced.CheckInfoDisplay"
1334 userdata="shadow frusta" />
1335 </menu_item_check>
1326 <menu_item_check name="Vectorize Perf Test" 1336 <menu_item_check name="Vectorize Perf Test"
1327 label="Vectorize Perf Test"> 1337 label="Vectorize Perf Test">
1328 <on_click function="ToggleControl" 1338 <on_click function="ToggleControl"
@@ -1644,23 +1654,17 @@
1644 <menu_item_call name="Dump Inventory" label="Dump Inventory"> 1654 <menu_item_call name="Dump Inventory" label="Dump Inventory">
1645 <on_click function="Advanced.DumpInventory" userdata="" /> 1655 <on_click function="Advanced.DumpInventory" userdata="" />
1646 </menu_item_call> 1656 </menu_item_call>
1647 <menu_item_call name="Dump Focus Holder" 1657 <menu_item_call name="Dump Focus Holder" label="Dump Focus Holder">
1648 label="Dump Focus Holder"
1649 shortcut="control|alt|F">
1650 <on_click function="Advanced.DumpFocusHolder" userdata="" /> 1658 <on_click function="Advanced.DumpFocusHolder" userdata="" />
1651 </menu_item_call> 1659 </menu_item_call>
1652 <menu_item_call name="Print Selected Object Info" 1660 <menu_item_call name="Print Selected Object Info" label="Print Selected Object Info">
1653 label="Print Selected Object Info"
1654 shortcut="control|shift|P">
1655 <on_click function="Advanced.PrintSelectedObjectInfo" 1661 <on_click function="Advanced.PrintSelectedObjectInfo"
1656 userdata="" /> 1662 userdata="" />
1657 </menu_item_call> 1663 </menu_item_call>
1658 <menu_item_call name="Print Agent Info" 1664 <menu_item_call name="Print Agent Info" label="Print Agent Info">
1659 label="Print Agent Info" shortcut="shift|P">
1660 <on_click function="Advanced.PrintAgentInfo" userdata="" /> 1665 <on_click function="Advanced.PrintAgentInfo" userdata="" />
1661 </menu_item_call> 1666 </menu_item_call>
1662 <menu_item_call name="Memory Stats" label="Memory Stats" 1667 <menu_item_call name="Memory Stats" label="Memory Stats">
1663 shortcut="control|alt|shift|M">
1664 <on_click function="Advanced.PrintTextureMemoryStats" 1668 <on_click function="Advanced.PrintTextureMemoryStats"
1665 userdata="" /> 1669 userdata="" />
1666 </menu_item_call> 1670 </menu_item_call>
diff --git a/linden/indra/newview/skins/default/xui/en-us/notifications.xml b/linden/indra/newview/skins/default/xui/en-us/notifications.xml
index 033b01b..ae50e49 100644
--- a/linden/indra/newview/skins/default/xui/en-us/notifications.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/notifications.xml
@@ -7245,11 +7245,11 @@ Show Look At is a debug setting that displays where an avatar's head is looking.
7245 7245
7246<notification 7246<notification
7247 icon="alert.tga" 7247 icon="alert.tga"
7248 name="WebLaunchImprudenceBlog" 7248 name="WebLaunchImprudenceComms"
7249 type="alert"> 7249 type="alert">
7250Go to the Official Imprudence Blog, for the Latest News and Information. 7250Go to the Official Imprudence communications channels, to discuss the Imprudence Project.
7251 <usetemplate 7251 <usetemplate
7252 ignoretext="When launching web browser to view the blog" 7252 ignoretext="When launching web browser to view the communications channels"
7253 name="okcancelignore" 7253 name="okcancelignore"
7254 notext="Cancel" 7254 notext="Cancel"
7255 yestext="Go to page"/> 7255 yestext="Go to page"/>
@@ -7257,11 +7257,11 @@ Go to the Official Imprudence Blog, for the Latest News and Information.
7257 7257
7258<notification 7258<notification
7259 icon="alert.tga" 7259 icon="alert.tga"
7260 name="WebLaunchImprudenceForums" 7260 name="WebLaunchImprudenceBugs"
7261 type="alert"> 7261 type="alert">
7262Go to the Official Imprudence Forums to discuss the Imprudence Project. 7262Go to the Official Imprudence bug and feature trackers, to report bugs and request new features.
7263 <usetemplate 7263 <usetemplate
7264 ignoretext="When launching web browser to view the forums" 7264 ignoretext="When launching web browser to view the bug and feature trackers"
7265 name="okcancelignore" 7265 name="okcancelignore"
7266 notext="Cancel" 7266 notext="Cancel"
7267 yestext="Go to page"/> 7267 yestext="Go to page"/>
diff --git a/linden/indra/newview/skins/default/xui/zh/notifications.xml b/linden/indra/newview/skins/default/xui/zh/notifications.xml
index 1234e02..1b85998 100644
--- a/linden/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/linden/indra/newview/skins/default/xui/zh/notifications.xml
@@ -3647,24 +3647,6 @@ GLOW — 发光
3647 name="okignore" 3647 name="okignore"
3648 yestext="OK"/> 3648 yestext="OK"/>
3649</notification> 3649</notification>
3650
3651<notification name="WebLaunchImprudenceBlog">
3652前往 Imprudence 官方日志阅读最新的新闻和信息。
3653 <usetemplate
3654 ignoretext="打开网络浏览器阅读网络日志时"
3655 name="okcancelignore"
3656 notext="取消"
3657 yestext="打开网页"/>
3658</notification>
3659
3660<notification name="WebLaunchImprudenceForums">
3661前往 Imprudence 官方论坛讨论 Imprudence 工程。
3662 <usetemplate
3663 ignoretext="打开网络浏览器阅读论坛时"
3664 name="okcancelignore"
3665 notext="取消"
3666 yestext="打开网页"/>
3667</notification>
3668 3650
3669<notification 3651<notification
3670 icon="alert.tga" 3652 icon="alert.tga"
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index c13cf1a..01e422f 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -232,21 +232,15 @@ class WindowsManifest(ViewerManifest):
232 232
233 def construct(self): 233 def construct(self):
234 super(WindowsManifest, self).construct() 234 super(WindowsManifest, self).construct()
235 # the final exe is complicated because we're not sure where it's coming from, 235 # Come out, come out, where ever you are.
236 # nor do we have a fixed name for the executable 236 executable = self.find_existing_file('release/imprudence-bin.exe', 'releasesse2/imprudence-bin.exe', 'relwithdebinfo/imprudence-bin.exe', 'debug/imprudence-bin.exe', './imprudence-bin.exe')
237 # Actually, we know on both counts -- MC 237 nmake = False
238 if self.configuration().lower() == "release": 238 self.path(executable, dst=self.final_exe())
239 self.path(self.find_existing_file('release/imprudence-bin.exe'), dst=self.final_exe())
240 elif self.configuration().lower() == "releasesse2":
241 self.path(self.find_existing_file('releasesse2/imprudence-bin.exe'), dst=self.final_exe())
242 elif self.configuration().lower() == "relwithdebinfo":
243 self.path(self.find_existing_file('relwithdebinfo/imprudence-bin.exe'), dst=self.final_exe())
244 elif self.configuration().lower() == "debug":
245 self.path(self.find_existing_file('debug/imprudence-bin.exe'), dst=self.final_exe())
246 else:
247 self.path(self.find_existing_file('release/imprudence-bin.exe', 'releasesse2/imprudence-bin.exe', 'relwithdebinfo/imprudence-bin.exe', 'debug/imprudence-bin.exe'), dst=self.final_exe())
248 239
249 # copy over the the pdb file for the regular or SSE2 versions if we don't already have one copied 240 # copy over the the pdb file for the regular or SSE2 versions if we don't already have one copied
241 # Don't think this ever worked, the destination seems bogus.
242 # It's trying to copy a built file outside of the source tree, a file we have anyway.
243 # TODO - do we even need this?
250 symbol_ver = '.'.join(self.args['version']) 244 symbol_ver = '.'.join(self.args['version'])
251 symbol_file = 'imprudence-%s.%s.pdb' % (symbol_ver, self.args['configuration']) 245 symbol_file = 'imprudence-%s.%s.pdb' % (symbol_ver, self.args['configuration'])
252 symbol_path = '../../../../../pdb_files/%s' % (symbol_file) 246 symbol_path = '../../../../../pdb_files/%s' % (symbol_file)
@@ -255,26 +249,28 @@ class WindowsManifest(ViewerManifest):
255 else: 249 else:
256 #print "%s doesn't exist yet" % (os.getcwd() + symbol_path) 250 #print "%s doesn't exist yet" % (os.getcwd() + symbol_path)
257 try: 251 try:
258 self.path(self.find_existing_file('release/imprudence-bin.pdb'), dst="../%s" % (symbol_path)) 252 self.path(self.find_existing_file(executable.split('/', 1)[0] % '/imprudence-bin.pdb'), dst="../%s" % (symbol_path))
259 pass 253 pass
260 except: 254 except:
261 print "Can't save symbol file %s, skipping" % (symbol_path) 255 print "Can't save symbol file %s, skipping" % (symbol_path)
262 pass 256 pass
263 257
264 self.gather_documents() 258 self.gather_documents()
265 259
266 if self.prefix("../..", dst="doc"): 260 if self.prefix("../..", dst="doc"):
267 self.path("LICENSE-libraries.txt") 261 self.path("LICENSE-libraries.txt")
268 self.end_prefix("../..") 262 self.end_prefix("../..")
269 263
270
271 self.path("imprudence.url") 264 self.path("imprudence.url")
272 265
273 # Plugin host application 266 # Plugin host application
274 self.path(os.path.join(os.pardir, 267 try:
275 'llplugin', 'slplugin', self.args['configuration'], "SLPlugin.exe"), 268 self.path(os.path.join(os.pardir, 'llplugin', 'slplugin', self.args['configuration'], "SLPlugin.exe"), "SLPlugin.exe")
276 "SLPlugin.exe") 269 except:
277 270 # Probably an nmake build, which is not putting exe's into the configuration folders.
271 self.path(os.path.join(os.pardir, 'llplugin', 'slplugin', "SLPlugin.exe"), "SLPlugin.exe")
272 # Propogate our wild guess.
273 nmake = True
278 274
279 self.path("featuretable.txt") 275 self.path("featuretable.txt")
280 276
@@ -283,17 +279,17 @@ class WindowsManifest(ViewerManifest):
283 279
284 # For using FMOD for sound... DJS 280 # For using FMOD for sound... DJS
285 #self.path("fmod.dll") 281 #self.path("fmod.dll")
286 282
287 # For spellchecking 283 # For spellchecking
288 if self.prefix(src=self.args['configuration'], dst=""): 284 if self.prefix(self.args['configuration'], dst=""):
289 self.path("libhunspell.dll") 285 self.path("libhunspell.dll")
290 self.end_prefix() 286 self.end_prefix()
291 287
292 # Copy the llkdu DSO .config 288 # Copy the llkdu DSO .config
293 self.path("llkdu.dll.2.config") 289 self.path("llkdu.dll.2.config")
294 290
295 # Get llcommon and deps. 291 # Get llcommon and deps.
296 if self.prefix(src=self.args['configuration'], dst=""): 292 if self.prefix(self.args['configuration'], dst=""):
297 self.path('libapr-1.dll') 293 self.path('libapr-1.dll')
298 self.path('libaprutil-1.dll') 294 self.path('libaprutil-1.dll')
299 self.path('libapriconv-1.dll') 295 self.path('libapriconv-1.dll')
@@ -309,23 +305,28 @@ class WindowsManifest(ViewerManifest):
309 if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""): 305 if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
310 self.path("openal32.dll") 306 self.path("openal32.dll")
311 self.path("alut.dll") 307 self.path("alut.dll")
312 self.end_prefix() 308 self.end_prefix()
313 309
310 # TODO - Yes, I know, would be better if nmake builds put stuff in the right place, track that down and fix it later.
311 if nmake:
312 config = ''
313 else:
314 config = self.args['configuration']
314 # Media plugins - QuickTime 315 # Media plugins - QuickTime
315 if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"): 316 if self.prefix(src='../media_plugins/quicktime/%s' % config, dst="llplugin"):
316 self.path("media_plugin_quicktime.dll") 317 self.path("media_plugin_quicktime.dll")
317 self.end_prefix() 318 self.end_prefix()
318 319
319 # Media plugins - WebKit/Qt 320 # Media plugins - WebKit/Qt
320 if self.prefix(src='../media_plugins/webkit/%s' % self.args['configuration'], dst="llplugin"): 321 if self.prefix(src='../media_plugins/webkit/%s' % config, dst="llplugin"):
321 self.path("media_plugin_webkit.dll") 322 self.path("media_plugin_webkit.dll")
322 self.end_prefix() 323 self.end_prefix()
323 324
324 # Media plugins - GStreamer 325 # Media plugins - GStreamer
325 if self.prefix(src='../media_plugins/gstreamer010/%s' % self.args['configuration'], dst="llplugin"): 326 if self.prefix(src='../media_plugins/gstreamer010/%s' % config, dst="llplugin"):
326 self.path("media_plugin_gstreamer010.dll") 327 self.path("media_plugin_gstreamer010.dll")
327 self.end_prefix() 328 self.end_prefix()
328 329
329 # For WebKit/Qt plugin runtimes 330 # For WebKit/Qt plugin runtimes
330 if self.prefix(src="../../libraries/i686-win32/lib/release", dst="llplugin"): 331 if self.prefix(src="../../libraries/i686-win32/lib/release", dst="llplugin"):
331 self.path("libeay32.dll") 332 self.path("libeay32.dll")
@@ -476,13 +477,15 @@ class WindowsManifest(ViewerManifest):
476 sse_string = "-(SSE2-optimized)" 477 sse_string = "-(SSE2-optimized)"
477 478
478 version = '.'.join(self.args['version']) 479 version = '.'.join(self.args['version'])
479 base_filename = self.installer_prefix() + version + sse_string 480 version_number = version.split('-', 1)[0]
481 base_filename = self.installer_prefix() + version + "-Windows-x86" + sse_string
480 app_name = self.channel() 482 app_name = self.channel()
481 app_ver_name="%s %s" % (app_name, version) 483 app_ver_name="%s %s" % (app_name, version)
482 484
483 new_script = base_filename + ".iss" 485 new_script = base_filename + ".iss"
484 self.replace_in("installers/windows/imprudence_installer_template.iss", new_script, { 486 self.replace_in("installers/windows/imprudence_installer_template.iss", new_script, {
485 "%%VERSION%%":version, 487 "%%VERSION%%":version,
488 "%%VERSIONNUMBER%%":version_number,
486 "%%INSTALLERFILENAME%%":base_filename, 489 "%%INSTALLERFILENAME%%":base_filename,
487 "%%PACKAGEFILES%%":self.args['dest'], 490 "%%PACKAGEFILES%%":self.args['dest'],
488 "%%APPNAME%%":app_name, 491 "%%APPNAME%%":app_name,
@@ -1020,9 +1023,27 @@ class Linux_i686Manifest(LinuxManifest):
1020 #self.path("libgstvolume.so") 1023 #self.path("libgstvolume.so")
1021 #self.path("libgstvorbis.so") 1024 #self.path("libgstvorbis.so")
1022 #self.path("libgstwavparse.so") 1025 #self.path("libgstwavparse.so")
1023 1026
1024 #self.end_prefix("gstreamer-plugins") 1027 #self.end_prefix("gstreamer-plugins")
1025 1028
1029 # Wish I could kill it with fire. lol
1030 self.path("libboost_date_time-mt.so")
1031 self.path("libboost_date_time-mt.so.1.52.0")
1032 self.path("libboost_filesystem-mt.so")
1033 self.path("libboost_filesystem-mt.so.1.52.0")
1034 self.path("libboost_iostreams-mt.so")
1035 self.path("libboost_iostreams-mt.so.1.52.0")
1036 self.path("libboost_program_options-mt.so")
1037 self.path("libboost_program_options-mt.so.1.52.0")
1038 self.path("libboost_regex-mt.so")
1039 self.path("libboost_regex-mt.so.1.52.0")
1040 self.path("libboost_signals-mt.so")
1041 self.path("libboost_signals-mt.so.1.52.0")
1042 self.path("libboost_system-mt.so")
1043 self.path("libboost_system-mt.so.1.52.0")
1044 self.path("libboost_thread-mt.so")
1045 self.path("libboost_thread-mt.so.1.52.0")
1046
1026 self.end_prefix("lib") 1047 self.end_prefix("lib")
1027 1048
1028 # Vivox runtimes and libs 1049 # Vivox runtimes and libs
@@ -1123,6 +1144,23 @@ class Linux_x86_64Manifest(LinuxManifest):
1123 #self.path("libgsttag-0.10.so.0") 1144 #self.path("libgsttag-0.10.so.0")
1124 #self.path("libgstvideo-0.10.so.0") 1145 #self.path("libgstvideo-0.10.so.0")
1125 1146
1147 # Wish I could kill it with fire. lol
1148 self.path("libboost_date_time-mt.so")
1149 self.path("libboost_date_time-mt.so.1.52.0")
1150 self.path("libboost_filesystem-mt.so")
1151 self.path("libboost_filesystem-mt.so.1.52.0")
1152 self.path("libboost_iostreams-mt.so")
1153 self.path("libboost_iostreams-mt.so.1.52.0")
1154 self.path("libboost_program_options-mt.so")
1155 self.path("libboost_program_options-mt.so.1.52.0")
1156 self.path("libboost_regex-mt.so")
1157 self.path("libboost_regex-mt.so.1.52.0")
1158 self.path("libboost_signals-mt.so")
1159 self.path("libboost_signals-mt.so.1.52.0")
1160 self.path("libboost_system-mt.so")
1161 self.path("libboost_system-mt.so.1.52.0")
1162 self.path("libboost_thread-mt.so")
1163 self.path("libboost_thread-mt.so.1.52.0")
1126 1164
1127 self.end_prefix("lib64") 1165 self.end_prefix("lib64")
1128 1166
diff --git a/linden/indra/newview/viewerinfo.cpp b/linden/indra/newview/viewerinfo.cpp
index fc463c8..7237c16 100644
--- a/linden/indra/newview/viewerinfo.cpp
+++ b/linden/indra/newview/viewerinfo.cpp
@@ -30,13 +30,14 @@ namespace ViewerInfo
30 30
31 // These are intentionally defined here instead of in the header, 31 // These are intentionally defined here instead of in the header,
32 // because they should NOT be read directly. Use the functions. 32 // because they should NOT be read directly. Use the functions.
33 // NOTE: Some parts of the build system scan this file looking for version numbers and such, commenting out sections confuses that.
33 const std::string NAME = "Imprudence"; 34 const std::string NAME = "Imprudence";
34 const std::string VARNT = ""; 35 const std::string VARNT = "";
35 const S32 MAJOR = 1; 36 const S32 MAJOR = 1;
36 const S32 MINOR = 4; 37 const S32 MINOR = 4;
37 const S32 PATCH = 0; 38 const S32 PATCH = 0;
38 const S32 RLEAS = 3; // increment for each beta/RC/release 39 const S32 RLEAS = 3; // increment for each beta/RC/release
39 const std::string EXTRA = "beta 2"; 40 const std::string EXTRA = "exp 1";
40 41
41 // Mac OS X bundle identifier. Should match the one in Info.plist. 42 // Mac OS X bundle identifier. Should match the one in Info.plist.
42 const std::string BUNDLE_ID = "org.imprudenceviewer.viewer"; 43 const std::string BUNDLE_ID = "org.imprudenceviewer.viewer";
diff --git a/linden/indra/newview/wlfloatermanager.cpp b/linden/indra/newview/wlfloatermanager.cpp
index a1b1748..382244d 100644
--- a/linden/indra/newview/wlfloatermanager.cpp
+++ b/linden/indra/newview/wlfloatermanager.cpp
@@ -70,7 +70,7 @@
70#include "llviewerparcelmgr.h" 70#include "llviewerparcelmgr.h"
71#include "llparcel.h" 71#include "llparcel.h"
72#include "wlretrievesettings.h" 72#include "wlretrievesettings.h"
73#include "lightshare.h" 73#include "llettherebelight.h"
74#include "wlfloaterwindlightsend.h" 74#include "wlfloaterwindlightsend.h"
75 75
76#undef max 76#undef max
diff --git a/linden/indra/newview/wlretrievesettings.cpp b/linden/indra/newview/wlretrievesettings.cpp
index 0fcaa03..a8ed2b5 100644
--- a/linden/indra/newview/wlretrievesettings.cpp
+++ b/linden/indra/newview/wlretrievesettings.cpp
@@ -67,7 +67,7 @@
67#include "hippolimits.h" 67#include "hippolimits.h"
68#include "wlfloaterwindlightsend.h" 68#include "wlfloaterwindlightsend.h"
69#include "llviewerregion.h" 69#include "llviewerregion.h"
70#include "lightshare.h" 70#include "llettherebelight.h"
71 71
72#include "linden_common.h" 72#include "linden_common.h"
73#include "llviewercontrol.h" 73#include "llviewercontrol.h"
diff --git a/linden/indra/test_apps/llplugintest/CMakeLists.txt b/linden/indra/test_apps/llplugintest/CMakeLists.txt
index a6cb740..91ba2db 100644
--- a/linden/indra/test_apps/llplugintest/CMakeLists.txt
+++ b/linden/indra/test_apps/llplugintest/CMakeLists.txt
@@ -311,7 +311,7 @@ endif (DARWIN OR LINUX)
311if (DARWIN) 311if (DARWIN)
312 # path inside the app bundle where we'll need to copy plugins and other related files 312 # path inside the app bundle where we'll need to copy plugins and other related files
313 set(PLUGINS_DESTINATION_DIR 313 set(PLUGINS_DESTINATION_DIR
314 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llmediaplugintest.app/Contents/Resources 314 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llmediaplugintest.app/Contents/Resources
315 ) 315 )
316 316
317 # create the Contents/Resources directory 317 # create the Contents/Resources directory
@@ -326,7 +326,7 @@ if (DARWIN)
326 ) 326 )
327else (DARWIN) 327else (DARWIN)
328 set(PLUGINS_DESTINATION_DIR 328 set(PLUGINS_DESTINATION_DIR
329 ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/ 329 ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/
330 ) 330 )
331endif (DARWIN) 331endif (DARWIN)
332 332
diff --git a/linden/install.xml b/linden/install.xml
index 3e5810a..dff0768 100755
--- a/linden/install.xml
+++ b/linden/install.xml
@@ -195,16 +195,16 @@
195 <key>linux</key> 195 <key>linux</key>
196 <map> 196 <map>
197 <key>md5sum</key> 197 <key>md5sum</key>
198 <string>4db3d74e40d149eeec06f4d97a609bb1</string> 198 <string>146ed8a8c2ef8ab3f0a6c4f214fc5c22</string>
199 <key>url</key> 199 <key>url</key>
200 <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100624.tar.bz2</uri> 200 <uri>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/Linux/installer/boost-1.52.0-linux-20121218.tar.bz2</uri>
201 </map> 201 </map>
202 <key>linux64</key> 202 <key>linux64</key>
203 <map> 203 <map>
204 <key>md5sum</key> 204 <key>md5sum</key>
205 <string>ebfaa439a8a78db7d99a26a73a70994a</string> 205 <string>b9dbe1ab34187a9a6f53fd89f88060d2</string>
206 <key>url</key> 206 <key>url</key>
207 <uri>http://imprudenceviewer.org/download/libs/boost-1.39.0-linux64-20100901.tar.bz2</uri> 207 <uri>https://bitbucket.org/kokua/3p-boost-64/downloads/boost-1.52.0-linux64-20130107.tar.bz2</uri>
208 </map> 208 </map>
209 <key>windows</key> 209 <key>windows</key>
210 <map> 210 <map>
diff --git a/linden/scripts/install.py b/linden/scripts/install.py
index a7c0a48..1e2bccb 100755
--- a/linden/scripts/install.py
+++ b/linden/scripts/install.py
@@ -565,6 +565,7 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
565 tar.extractall(path=install_dir) 565 tar.extractall(path=install_dir)
566 except AttributeError: 566 except AttributeError:
567 _extractall(tar, path=install_dir) 567 _extractall(tar, path=install_dir)
568
568 symlinks = [] 569 symlinks = []
569 if _get_platform() == 'linux' or _get_platform() == 'linux64': 570 if _get_platform() == 'linux' or _get_platform() == 'linux64':
570 first = 1 571 first = 1
@@ -591,6 +592,46 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
591 os.symlink(target, link_name) 592 os.symlink(target, link_name)
592 symlinks += [LINK] 593 symlinks += [LINK]
593 print " %s --> %s" % (LINK, target) 594 print " %s --> %s" % (LINK, target)
595
596 # Reroute autobuilds
597 auto_name = install_dir + "/include"
598 if os.path.exists(auto_name):
599 print "Moving autobuilt include files to legacy locations."
600 for entry in os.listdir(auto_name):
601 os.rename(auto_name + "/" + entry, install_dir + "/libraries/include/" + entry)
602 os.rmdir(auto_name)
603
604 auto_name = install_dir + "/lib"
605 dest_name = ''
606 if _get_platform() == 'darwin':
607 dest_name = 'universal-darwin/'
608 if _get_platform() == 'linux64':
609 dest_name = 'x86_64-linux/'
610 if _get_platform() == 'linux':
611 dest_name = 'i686-linux/'
612 if _get_platform() == 'windows':
613 dest_name = 'i686-win32/'
614 if os.path.exists(auto_name):
615 print "Moving autobuilt lib files to legacy locations."
616 for entry in os.listdir(auto_name):
617 if os.path.isdir(auto_name + "/" + entry):
618 path = install_dir + "/libraries/" + dest_name + "lib_" + entry
619 if entry == 'release':
620 # Linux is special, coz it's got server code.
621 if _get_platform() == 'linux' or _get_platform() == 'linux64':
622 path = install_dir + "/libraries/" + dest_name + "lib_" + entry + "_client"
623 # Windows is also special.
624 if _get_platform() == 'windows':
625 path = install_dir + "/libraries/" + dest_name + "lib/" + entry
626 if not os.path.exists(path):
627 os.makedirs(path)
628 for filename in os.listdir(auto_name + "/" + entry):
629 os.rename(auto_name + "/" + entry + "/" + filename, path + "/" + filename)
630 os.rmdir(auto_name + "/" + entry)
631 else:
632 os.rename(auto_name + "/" + entry, install_dir + "/libraries/" + dest_name + "lib/" + entry)
633 os.rmdir(auto_name)
634
594 if ifile.pkgname in self._installed: 635 if ifile.pkgname in self._installed:
595 self._installed[ifile.pkgname].add_files( 636 self._installed[ifile.pkgname].add_files(
596 ifile.url, 637 ifile.url,
@@ -830,10 +871,10 @@ def _default_installable_cache():
830 """In general, the installable files do not change much, so find a 871 """In general, the installable files do not change much, so find a
831 host/user specific location to cache files.""" 872 host/user specific location to cache files."""
832 user = _getuser() 873 user = _getuser()
833 cache_dir = "/var/tmp/%s/install.cache" % user 874 if sys.platform != 'cygwin' and _get_platform() == 'windows':
834 if _get_platform() == 'windows': 875 cache_dir = os.path.join(tempfile.gettempdir(), 'install.cache.%s' % user)
835 cache_dir = os.path.join(tempfile.gettempdir(), \ 876 else:
836 'install.cache.%s' % user) 877 cache_dir = "/var/tmp/%s/install.cache" % user
837 return cache_dir 878 return cache_dir
838 879
839def parse_args(): 880def parse_args():
diff --git a/linden/scripts/linux/0-patch-SL-source b/linden/scripts/linux/0-patch-SL-source
index 4885d5d..ce0dabe 100755
--- a/linden/scripts/linux/0-patch-SL-source
+++ b/linden/scripts/linux/0-patch-SL-source
@@ -22,7 +22,7 @@ if [ "$PATCHES" != "" ] ; then
22 elif echo $i | grep ".bz2" &>/dev/null ; then 22 elif echo $i | grep ".bz2" &>/dev/null ; then
23 bzcat $i | patch -p1 -s 23 bzcat $i | patch -p1 -s
24 elif echo $i | grep ".zip" &>/dev/null ; then 24 elif echo $i | grep ".zip" &>/dev/null ; then
25 unzip -o $i >/dev/null 25 unzip -o $i >/dev/null
26 else 26 else
27 patch -p1 -s <$i 27 patch -p1 -s <$i
28 fi 28 fi
diff --git a/linden/scripts/linux/1-get-libraries-from-SL b/linden/scripts/linux/1-get-libraries-from-SL
index 9ba61f4..99a4367 100755
--- a/linden/scripts/linux/1-get-libraries-from-SL
+++ b/linden/scripts/linux/1-get-libraries-from-SL
@@ -53,7 +53,7 @@ source config-SL-source
53cd $PATH_TO_SOURCES/indra 53cd $PATH_TO_SOURCES/indra
54 54
55# Do a clean build 55# Do a clean build
56./develop.py clean 56#./develop.py $os_extra clean
57 57
58# Force the vectorization use if we chose so. 58# Force the vectorization use if we chose so.
59if [ "$FORCE_VECTORIZE" == "yes" ] ; then 59if [ "$FORCE_VECTORIZE" == "yes" ] ; then
@@ -65,7 +65,8 @@ else
65 FATAL_WARNINGS="" 65 FATAL_WARNINGS=""
66fi 66fi
67# Configure the sources and download the LL provided libraries: 67# Configure the sources and download the LL provided libraries:
68./develop.py --type=Release configure "$FATAL_WARNINGS" \ 68./develop.py $os_extra --type=$TYPE configure "$FATAL_WARNINGS" \
69 -DCMAKE_C_FLAGS:STRING="-O2 $TUNE_FLAGS" -DCMAKE_CXX_FLAGS:STRING="-O2 $TUNE_FLAGS" \ 69 -DCMAKE_C_FLAGS:STRING="$TUNE_FLAGS" -DCMAKE_CXX_FLAGS:STRING="$TUNE_FLAGS" \
70 -DCMAKE_C_FLAGS_RELEASE:STRING="-O2 $TUNE_FLAGS" -DCMAKE_CXX_FLAGS_RELEASE:STRING="-O2 $TUNE_FLAGS" \ 70 -DCMAKE_C_FLAGS_DEBUG:STRING="-g $TUNE_FLAGS" -DCMAKE_CXX_FLAGS_DEBUG:STRING="-g $TUNE_FLAGS" \
71 -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="-g -O2 $TUNE_FLAGS" -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="-g -O2 $TUNE_FLAGS" 71 -DCMAKE_C_FLAGS_RELEASE:STRING="$TUNE_FLAGS" -DCMAKE_CXX_FLAGS_RELEASE:STRING="$TUNE_FLAGS" \
72 -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="-g $TUNE_FLAGS" -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="-g $TUNE_FLAGS" -DPACKAGE:BOOL=ON
diff --git a/linden/scripts/linux/3-compile-SL-source b/linden/scripts/linux/3-compile-SL-source
index 34395bb..4ac80a7 100755
--- a/linden/scripts/linux/3-compile-SL-source
+++ b/linden/scripts/linux/3-compile-SL-source
@@ -54,10 +54,7 @@ source config-SL-source
54function compile() { 54function compile() {
55 cd $PATH_TO_SOURCES/indra 55 cd $PATH_TO_SOURCES/indra
56 echo "Compiling the client into $TEMP_DIR..." 56 echo "Compiling the client into $TEMP_DIR..."
57 nice -n 19 ionice -c 3 ./develop.py --type=Release build 57 nice -n 19 $ionice ./develop.py $os_extra --type=$TYPE build
58# if (($? == 0)) ; then
59# mv -f $PATH_TO_SOURCES/indra/viewer-linux-i686*/newview/SecondLife*.tar.bz2 $HOME/
60# fi
61} 58}
62 59
63########### end of functions ########### 60########### end of functions ###########
@@ -66,14 +63,7 @@ if [ "$TEMP_DIR" == "" ] ; then
66 export TEMP_DIR="/usr/tmp/$USER" 63 export TEMP_DIR="/usr/tmp/$USER"
67fi 64fi
68 65
69# Check to see if we simply want to retry a compilation:
70if [ "$1" == "--retry" ] ; then
71 compile
72 exit $?
73fi
74
75# Use the parameter (if any) as the path to the archives: 66# Use the parameter (if any) as the path to the archives:
76
77PATH_TO_ARCHIVES=`pwd` 67PATH_TO_ARCHIVES=`pwd`
78if [ "$1" != "" ] && [ "$1" != "--prep" ] ; then 68if [ "$1" != "" ] && [ "$1" != "--prep" ] ; then
79 if [ -d $1 ] ; then 69 if [ -d $1 ] ; then
@@ -83,19 +73,4 @@ if [ "$1" != "" ] && [ "$1" != "--prep" ] ; then
83fi 73fi
84 74
85cd $PATH_TO_SOURCES/indra 75cd $PATH_TO_SOURCES/indra
86
87# Do a clean build
88#./develop.py clean
89
90# Force the vectorization use if we chose so.
91if [ "$FORCE_VECTORIZE" == "yes" ] ; then
92 TUNE_FLAGS="$TUNE_FLAGS -DLL_VECTORIZE=1"
93fi
94if [ "$ALLOW_WARNINGS" == "yes" ] ; then
95 FATAL_WARNINGS="-DGCC_DISABLE_FATAL_WARNINGS:BOOL=TRUE"
96else
97 FATAL_WARNINGS=""
98fi
99
100time compile 76time compile
101
diff --git a/linden/scripts/linux/4-package-viewer b/linden/scripts/linux/4-package-viewer
index b2bff7f..a1a74f2 100755
--- a/linden/scripts/linux/4-package-viewer
+++ b/linden/scripts/linux/4-package-viewer
@@ -1,5 +1,12 @@
1#!/bin/bash 1#!/bin/bash
2 2
3cd ../../indra/viewer-linux-* 3source config-SL-source
4make package
5 4
5if [ "$OSTYPE" == "cygwin" ] ; then
6 # Assumes version has been passed in from outside, coz Windows insists on adding crap to python output.
7 cd ../../indra/build-nmake/
8 iscc newview/${TYPE}/package/${version}-Windows-x86.iss
9else
10 cd ../../indra/viewer-linux-*
11 make package
12fi
diff --git a/linden/scripts/linux/config-SL-source b/linden/scripts/linux/config-SL-source
index 174d7d4..f60fd92 100644
--- a/linden/scripts/linux/config-SL-source
+++ b/linden/scripts/linux/config-SL-source
@@ -9,6 +9,9 @@
9# accordingly, so that you (should) end up with a properly packaged client. 9# accordingly, so that you (should) end up with a properly packaged client.
10 10
11PWD=`pwd` 11PWD=`pwd`
12os_extra=''
13ionice='ionice -c 3'
14
12 15
13# Where the sources of the client will be held (defaults to "./linden"): 16# Where the sources of the client will be held (defaults to "./linden"):
14PATH_TO_SOURCES="$PWD/../.." 17PATH_TO_SOURCES="$PWD/../.."
@@ -18,6 +21,8 @@ PATH_TO_PATCHES="$PWD/../../patches"
18TEMP_DIR="/tmp/SL-$USER" 21TEMP_DIR="/tmp/SL-$USER"
19mkdir -p $TEMP_DIR 22mkdir -p $TEMP_DIR
20 23
24TYPE="RelWithDebInfo"
25
21USE_SYSTEM_GTK="no" 26USE_SYSTEM_GTK="no"
22USE_SYSTEM_SDL="no" 27USE_SYSTEM_SDL="no"
23USE_SYSTEM_SSL="no" 28USE_SYSTEM_SSL="no"
@@ -53,7 +58,7 @@ USE_SYSTEM_BOOST="no"
53# You may add tune flags here, to optimize the code for your processor. 58# You may add tune flags here, to optimize the code for your processor.
54# Example, for an Athlon XP: 59# Example, for an Athlon XP:
55# TUNE_FLAGS="-march=athlon-xp" 60# TUNE_FLAGS="-march=athlon-xp"
56TUNE_FLAGS="-fomit-frame-pointer -frename-registers -ftree-vectorize -fweb -fexpensive-optimizations -msse -mfpmath=sse" 61TUNE_FLAGS="-O2 -fomit-frame-pointer -frename-registers -ftree-vectorize -fweb -fexpensive-optimizations -msse -mfpmath=sse"
57# Set this to "yes" to force vectorization use in the viewer code (only for 62# Set this to "yes" to force vectorization use in the viewer code (only for
58# processors with SSE or Altivec units, and only if you did enable them via 63# processors with SSE or Altivec units, and only if you did enable them via
59# the TUNE_FLAGS. 64# the TUNE_FLAGS.
@@ -61,3 +66,18 @@ FORCE_VECTORIZE="yes"
61 66
62# When using gcc v4.3 or later, you might have to set this to yes... 67# When using gcc v4.3 or later, you might have to set this to yes...
63ALLOW_WARNINGS="yes" 68ALLOW_WARNINGS="yes"
69
70
71# Change it all for cygwin.
72if [ "$OSTYPE" == "cygwin" ] ; then
73 os_extra='-G nmake'
74 ionice=''
75 USE_SYSTEM_LIBSTDC="no"
76 TUNE_FLAGS="/EHsc /GR /Zm1000 /DWIN32 /D_WINDOWS "
77 FORCE_VECTORIZE="no"
78 ALLOW_WARNINGS="no"
79fi
80
81
82# Work around python problems.
83export PYTHONUNBUFFERED='True'
diff --git a/linden/scripts/viewer_info.py b/linden/scripts/viewer_info.py
index 53ea432..bd0f436 100755
--- a/linden/scripts/viewer_info.py
+++ b/linden/scripts/viewer_info.py
@@ -54,10 +54,11 @@ class ViewerInfo:
54 self.major = re.search('MAJOR\s*=\s*(\d+)', data).group(1) 54 self.major = re.search('MAJOR\s*=\s*(\d+)', data).group(1)
55 self.minor = re.search('MINOR\s*=\s*(\d+)', data).group(1) 55 self.minor = re.search('MINOR\s*=\s*(\d+)', data).group(1)
56 self.patch = re.search('PATCH\s*=\s*(\d+)', data).group(1) 56 self.patch = re.search('PATCH\s*=\s*(\d+)', data).group(1)
57 self.release = re.search('RLEAS\s*=\s*(\d+)', data).group(1)
57 self.extra = re.search('EXTRA\s*=\s*"([^"]*)"', data).group(1) 58 self.extra = re.search('EXTRA\s*=\s*"([^"]*)"', data).group(1)
58 self.bundle_id = re.search('BUNDLE_ID\s*=\s*"([^"]*)"', data).group(1) 59 self.bundle_id = re.search('BUNDLE_ID\s*=\s*"([^"]*)"', data).group(1)
59 60
60 self.version = "%s.%s.%s"%(self.major, self.minor, self.patch) 61 self.version = "%s.%s.%s.%s"%(self.major, self.minor, self.patch, self.release)
61 if len(self.extra) > 0: 62 if len(self.extra) > 0:
62 # Replace spaces and some puncuation with '-' in extra 63 # Replace spaces and some puncuation with '-' in extra
63 extra = re.sub('[- \t:;,!+/\\"\'`]+', '-', self.extra) 64 extra = re.sub('[- \t:;,!+/\\"\'`]+', '-', self.extra)